Architectures Logicielles Et Mat Rielles Dunod

Architectures Logicielles et Mat´rielles e

P. Amblard, J.-C. Fernandez, F. Lagnier, F. Maraninchi, P. Sicard, Ph. Waille

2

IV

IV

Table des mati`res e
Introduction 1 Qu’est-ce qu’un ordinateur ? 1. Notion d’information . . . . . . . . . . . 2. L’ordinateur : une machine qui ex´cute . e 3. O` sont le mat´riel et le logiciel ? . . . . u e 4. Fonctionnalit´s des ordinateurs . . . . . e 5. Plan du livre . . . . . . . . . . . . . . . 1 5 . 5 . 9 . 14 . 17 . 20

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

I

Outils de base de l’algorithmique logicielle et mat´rielle e
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

23
25 26 28 31 38 46 49 49 51 58 64 65 66 67 75 76 82 90 91 95 96

2 Alg`bre de Boole et fonctions bool´ennes e e 1. Alg`bre de Boole . . . . . . . . . . . . . . . . . . . . . . e 2. Fonctions bool´ennes . . . . . . . . . . . . . . . . . . . . e 3. Repr´sentation des fonctions bool´ennes . . . . . . . . . e e 4. Manipulation de repr´sentations de fonctions bool´ennes e e 5. Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . 3 Repr´sentation des grandeurs e 1. Notion de codage d’informations . . . . 2. Les naturels . . . . . . . . . . . . . . . . 3. Les relatifs . . . . . . . . . . . . . . . . 4. Lien entre l’arithm´tique et les bool´ens e e 5. Les caract`res . . . . . . . . . . . . . . . e 6. Les nombres r´els, la virgule flottante . e 7. Exercices . . . . . . . . . . . . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

4 Repr´sentation des traitements et des donn´es : langage d’actions e e 1. Un langage d’actions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2. Repr´sentation des donn´es en m´moire . . . . . . . . . . . . . . . . . e e e 3. Traduction des affectations g´n´rales en acc`s au tableau MEM . . . . e e e 4. Utilisation des pointeurs et gestion dynamique de la m´moire . . . . . e 5. Piles, files et traitements associ´s . . . . . . . . . . . . . . . . . . . . . e 6. Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

5 Repr´sentation des traitements et des donn´es : e e machines s´quentielles e 101 1. Machines s´quentielles simples . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 e 2. Machines s´quentielles avec actions . . . . . . . . . . . . . . . . . . . . . . . . 109 e

VI

Table des mati`res e

6 Temps, donn´es temporelles et synchronisation e 1. Interface entre un dispositif informatique et un environnement physique 2. Signaux logiques et repr´sentation par des chronogrammes . . . . . . . . e 3. Probl`mes de synchronisation . . . . . . . . . . . . . . . . . . . . . . . . e 4. Un exemple : la machine ` caf´ . . . . . . . . . . . . . . . . . . . . . . . a e

. . . .

. . . .

. . . .

121 122 126 127 133

II

Techniques de l’algorithmique mat´rielle e
l’´lectron aux dispositifs logiques e Ph´nom`nes ` l’´chelle atomique . . e e a e Ph´nom`nes ` l’´chelle ´lectrique . . e e a e e Ph´nom`nes ` l’´chelle logique . . . e e a e Circuits logiques . . . . . . . . . . . Fabrication des dispositifs . . . . . . Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

135
. . . . . . 137 137 140 143 148 156 162 165 166 173 178 186 188 191 192 203 207 210 215 216 222 233 240

7 De 1. 2. 3. 4. 5. 6.

8 Circuits combinatoires 1. Notion de circuit combinatoire . . . . . . 2. Assemblage de blocs de base... . . . . . . 3. Algorithmique cˆbl´e : conception logique a e 4. Etude de cas . . . . . . . . . . . . . . . . 5. Exercices . . . . . . . . . . . . . . . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

9 El´ments de m´morisation e e 1. Points de m´morisation de bits : bascules et registres . . . . . . . e 2. La m´moire : organisation matricielle des points de m´morisation e e 3. R´alisation des m´moires statiques . . . . . . . . . . . . . . . . . e e 4. Optimisations et techniques particuli`res . . . . . . . . . . . . . . e 10 Circuits s´quentiels e 1. Notion de circuit s´quentiel . . . . . . . . . . . . . . . . . . e 2. Synth`se des automates d´crits par leur graphe . . . . . . . e e 3. Synth`se des circuits s´quentiels par flots de donn´es . . . e e e 4. Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 Conception de circuits s´quentiels par e contrˆle et des op´rations o e 1. Principe g´n´ral . . . . . . . . . . . . e e 2. Notion de partie op´rative type . . . . e 3. Partie contrˆle . . . . . . . . . . . . . o 4. Etudes de cas . . . . . . . . . . . . . . 5. Exercices . . . . . . . . . . . . . . . . s´paration du e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

243 244 245 249 253 263

III

Techniques de l’algorithmique logicielle
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

267
. . . . . 269 270 296 302 302 308

12 Le langage machine et le langage d’assemblage 1. Le langage machine . . . . . . . . . . . . . . . . . . . . . 2. Le langage d’assemblage . . . . . . . . . . . . . . . . . . 3. Traduction du langage d’assemblage en langage machine 4. Un exemple de programme . . . . . . . . . . . . . . . . 5. Exercices . . . . . . . . . . . . . . . . . . . . . . . . . .

Table des mati`res e

VII

13 Traduction des langages ` structure de blocs en langage d’assemblage a 1. Cas des programmes ` un seul bloc . . . . . . . . . . . . . . . . . . . . . . . a 2. Cas des programmes ` plusieurs blocs . . . . . . . . . . . . . . . . . . . . . a 3. Traduction en langage d’assemblage : solutions globales . . . . . . . . . . . 4. Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . .

313 314 319 334 343

IV

A la charni`re du logiciel et du mat´riel... e e
machine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

349
. . . . . . 351 352 355 356 360 364 367

14 Le processeur : l’interpr`te cˆbl´ du langage e a e 1. Les principes de r´alisation . . . . . . . . . . e 2. Exemple : une machine ` 5 instructions . . . a 3. Une r´alisation du processeur . . . . . . . . . e 4. Critique et am´lioration de la solution . . . . e 5. Extensions du processeur . . . . . . . . . . . 6. Exercices . . . . . . . . . . . . . . . . . . . .

V

Architecture d’un syst`me mat´riel e e et logiciel simple

375
377 381 381 385 389 395 397 397 399 400 402 408 409 415 417 418 419 423 432

Un syst`me mat´riel et logiciel simple e e 15 Relations entre un processeur et de la m´moire e 1. Le bus m´moire . . . . . . . . . . . . . . . . . . . e 2. Utilisation de plusieurs circuits de m´moire . . . e 3. Acc`s ` des donn´es de tailles diff´rentes . . . . . e a e e 4. Exercices . . . . . . . . . . . . . . . . . . . . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

16 Circuits d’entr´es/sorties e 1. Notion d’entr´es/sorties . . . . . . . . . . . . . . . . . e 2. Synchronisation entre le processeur et un p´riph´rique e e 3. Connexion d’organes p´riph´riques . . . . . . . . . . . e e 4. Programmation d’une sortie . . . . . . . . . . . . . . . 5. Programmation d’une entr´e . . . . . . . . . . . . . . e 6. Optimisation des entr´es/sorties group´es . . . . . . . e e 7. Exercices . . . . . . . . . . . . . . . . . . . . . . . . . 17 Pilotes de p´riph´riques e e 1. Structure d’un pilote de p´riph´rique e e 2. Pilote pour un clavier . . . . . . . . 3. Pilote pour un disque . . . . . . . . 4. Pour aller plus loin... . . . . . . . . . 18 Vie 1. 2. 3.

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

des programmes 435 Interpr´tation et compilation . . . . . . . . . . . . . . . . . . . . . . . . . . . 436 e Compilation s´par´e et code translatable . . . . . . . . . . . . . . . . . . . . . 442 e e Format des fichiers objets translatables et ´dition de liens . . . . . . . . . . . 454 e 463 465 466 470 476

19 Syst`me de gestion de fichiers e 1. Situation du syst`me de gestion de fichiers . . . . . . . . . . e 2. Structure des donn´es et influence sur l’implantation . . . . e 3. Implantation dispers´e sur un disque . . . . . . . . . . . . . e 4. Noms externes et autres informations attach´es aux fichiers e

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

VIII

Table des mati`res e

5.

Etude de quelques fonctions du syst`me de gestion de fichiers . . . . . . . . . 477 e 483 484 485 495 501

20 D´marrage du syst`me, langage de commandes et interpr`te e e e 1. D´marrage du syst`me . . . . . . . . . . . . . . . . . . . . . . . . e e 2. M´canisme de base : le chargeur/lanceur . . . . . . . . . . . . . . e 3. Programmation de l’interpr`te de commandes . . . . . . . . . . . e 4. Fonctions ´volu´es des interpr`tes de commandes . . . . . . . . . e e e

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

VI

Architecture des syst`mes mat´riels e e et logiciels complexes
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

503
. . . . 505 505 507 508 510 511 511 515 521 528 530 531 531 536 539 546 550 551 552 559 565 570 571 577

21 Motivations pour une plus grande complexit´ e 1. Qu’appelle-t-on syst`me complexe ? . . . . . . . . . . . . . . e 2. Scrutation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3. M´canisme d’interruption : d´finition et types d’utilisations e e 4. Plan de la suite . . . . . . . . . . . . . . . . . . . . . . . . . 22 Le m´canisme d’interruption e 1. Architecture d’un processeur pour la multiprogrammation . 2. Introduction d’un m´canisme de scrutation ´l´mentaire . . . e ee 3. Un exemple d´taill´ d’utilisation : mise ` jour de la pendule e e a 4. Notion de concurrence et d’atomicit´ des op´rations . . . . e e 5. Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 Partage de temps et processus 1. Principe et d´finitions . . . . . . . . . . . . . e 2. Structures de donn´es associ´es aux processus e e 3. Organisation du traitant de commutation . . 4. Cr´ation et destruction de processus . . . . . e 5. Exercices . . . . . . . . . . . . . . . . . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

24 G´n´ralisation du m´canisme d’interruption et applications e e e 1. Classification des diff´rentes sources d’interruption . . . . . . . e 2. Protection entre processus, notion de superviseur . . . . . . . . 3. Entr´es/sorties g´r´es par interruption . . . . . . . . . . . . . . e ee 4. Pour aller plus loin . . . . . . . . . . . . . . . . . . . . . . . . . Index Bibliographie

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

Introduction
Ce qu’on trouvera dans ce livre
Ce livre suit d’assez pr`s l’enseignement dispens´ en Licence d’informatique e e a ` l’Universit´ Joseph Fourier de Grenoble. L’enseignement a le mˆme titre : e e Architectures Logicielles et Mat´rielles. Il est dispens´ en environ 150 heures e e de cours, Travaux Dirig´s et Travaux Pratiques. e L’objectif est d’expliquer ` de futurs sp´cialistes d’informatique le fonctiona e nement de l’ordinateur. Pour cela nous faisons un certain nombre de choix, nous prenons parti. Pour comprendre le fonctionnement, il faut se placer du point de vue du concepteur d’ordinateur. Le lecteur trouvera donc dans ce livre une d´marche e de conception de machines. Il ne s’agit pourtant pas de lui faire croire au r´alisme de cette conception. e En effet la v´ritable conception d’une machine, c’est-`-dire de son e a mat´riel — du microprocesseur ` la m´moire, en passant par la carte grae a e phique — et de son logiciel — du syst`me d’exploitation aux compilateurs — e repr´sente des centaines de milliers d’heures de travail de sp´cialistes. Nous ne e e d´crivons qu’une partie du travail, en choisissant les points qui nous semblent e les plus significatifs dans cette conception. D’autre part nous insistons sur les liaisons entre diff´rents aspects de la conception. En particulier, l’une des id´es e e fortes de ce livre est l’´troite compl´mentarit´ des aspects logiciels et mat´riels e e e e des ordinateurs. L’id´e centrale, et le chapitre central de ce livre, montrent e donc comment du mat´riel ex´cute du logiciel. e e Le contenu de ce livre ne devrait pas se p´rimer, sauf si des principes e vraiment nouveaux apparaissent en informatique et se g´n´ralisent. e e

Ce qu’on ne trouvera pas dans ce livre
En revanche ce livre ne d´crit pas les aspects les plus avanc´s utilis´s dans e e e les machines actuelles. Ces aspects font l’objet d’enseignements sp´cifiques de e syst`mes d’exploitation, de compilation ou d’architectures des machines, dans e lesquels, en g´n´ral, on ne se pr´occupe que d’un aspect. Ce livre constitue e e e un pr´requis pour de tels enseignements car il montre les relations entre les 3 e domaines.

2

Introduction

Parmi les th`mes tr`s int´ressants que nous avons d´lib´rement ´cart´s (et e e e e e e e r´serv´s pour le tome 2 !) figurent : e e – L’´tude fine des fonctionnalit´s d’un syst`me d’exploitation particulier. e e e Beaucoup de nos r´f´rences sont inspir´es d’unix1 . ee e – L’´tude de la hi´rarchie m´moire (cache et m´moire virtuelle), que nous e e e e passons totalement sous silence. – L’´tude d´taill´e d’un langage d’assemblage d’un processeur donn´. Beaue e e e 2 coup de nos r´f´rences sont inspir´es du sparc ou du Motorola 680003 . ee e – L’´tude des techniques de conception de circuits micro-´lectroniques. Par e e exemple nous ne parlons ni de consommation, ni de circuits asynchrones. – L’´tude des techniques d’optimisation des performances des procese seurs. Nous ne d´veloppons pas les techniques de pipeline, ni celles de e r´ordonnancement dynamique du flot d’ex´cution des instructions. e e – Les entr´es/sorties tr`s particuli`res que constituent les acc`s d’un ordinae e e e teur ` un r´seau, ce qui demanderait un d´veloppement sp´cifique. a e e e

Comment lire ce livre ?
M´thode de travail e On peut lire ce livre comme un roman, de la premi`re ` la derni`re page. e a e On peut ´galement le lire avec une salle de Travaux Pratiques ` port´e de e a e la main, pour essayer toutes les techniques ´voqu´es, les comparer, les analyser e e en d´tail, etc. e On peut essayer de r´soudre tous les exercices et envoyer les solutions aux e auteurs, qui se feront un plaisir de les corriger : Paul.Amblard@imag.fr Jean-Claude.Fernandez@imag.fr Fabienne.Lagnier@imag.fr Florence.Maraninchi@imag.fr Pascal.Sicard@imag.fr Philippe.Waille@imag.fr On peut enfin essayer de trouver des erreurs, de fond et de forme, et on y parviendra certainement. Th`mes e On peut privil´gier une approche centr´e sur les langages de programmae e tion, leur traduction et la fa¸on dont ils sont ex´cut´s. Sur la figure 0.1 cela c e e correspond aux fl`ches en traits gras. e
marque d´pos´e, et dans la suite de l’ouvrage nous ne pr´ciserons plus que les noms de e e e syst`mes et de machines sont, ´videmment, d´pos´s. e e e e 2 marque d´pos´e e e 3 marque d´pos´e e e
1

Introduction

3

2 : Alg`bre de Boole e 7 : Electronique

1 : L’ORDINATEUR 6 : Aspects temporels 3 : Repr´sentation e des grandeurs 8 : Circuits combinatoires 10 11 : Circuits s´quentiels e 14 : LE PROCESSEUR

4 5 : Repr´sentation e des traitements et donn´es e 12 13 : Langages machine et d’assemblage

9 : El´ments de e m´morisation e

15 : Liaisons m´moire e processeur

16 17 : Mat´riel et e logiciel d’entr´es / sorties e

18 : Vie des programmes

19 : Gestion de fichiers 21 ` 24 :Syst`me complexe a e Interruptions Processus 20 : Interpr`te e de commandes

Fig. 0.1 – Relations de d´pendance des principales id´es utilis´es dans les 24 chapitres. e e e La zone gris´e correspond plutˆt au monde du logiciel, la zone blanche au e o mat´riel. e

4

Introduction

On peut privil´gier une approche de conception des circuits digitaux et e d’architecture de machine. Sur la figure 0.1 cela correspond aux fl`ches en e traits larges et hachur´s. e On peut privil´gier une approche centr´e sur l’architecture de haut niveau e e et les syst`mes d’exploitation. Sur la figure 0.1 cela correspond aux fl`ches en e e traits pointill´s. e Il n’en reste pas moins que les auteurs ont cherch´ ` mettre l’accent sur la ea globalit´ et la compl´mentarit´ des 3 approches. e e e Index Les mots en italique apparaissent souvent en index. Dans l’index, les num´ros de page en gras indiquent les occurrences de d´finition des mots. e e Les autres num´ros indiquent des occurrences d’utilisation des mots, parfois e ant´rieures ` leur d´finition, parfois post´rieures. e a e e

Remerciements
Les id´es, principes, techniques, outils, m´thodes, pr´sent´s dans ce livre e e e e ne sont pas les r´sultat de nos d´couvertes. Nous avons re¸u des enseignee e c ments, puis nous avons lu, essay´, enseign´. Sans ceux qui nous ont pr´c´d´s e e e e e ce livre n’existerait pas. Sans celles et ceux qui ont enseign´ avec nous le moe dule Architectures Logicielles et Mat´rielles au fil des ann´es il serait sans e e doute plus pauvre. En particulier Catherine, Danielle, Jo¨lle, Jean-Louis et e Jean-Paul reconnaˆ ıtront certaines de leurs bonnes influences. Les mauvaises viennent d’ailleurs !

Chapitre 1 Qu’est-ce qu’un ordinateur ?
Un ordinateur est une machine, presque toujours ´lectronique, qui e ex´cute des programmes. Ces programmes traitent des donn´es. Une machine e e ´lectronique est un objet. Par opposition, les programmes et les donn´es sont e e des informations. Cette opposition est celle qui existe entre mat´riel et logie ciel. L’ensemble du livre est consacr´ ` montrer de fa¸on d´taill´e comment ces ea c e e deux univers se rencontrent pour former l’architecture de l’ordinateur. Dans ce premier chapitre, nous faisons un tr`s rapide survol permettant de situer les e notions avant de les d´crire de fa¸on d´taill´e. e c e e Le paragraphe 1. d´crit ce qu’est une information et sa repr´sentation. e e Cela nous permet de parler de programmes. Puis nous d´crivons une e machine ` ex´cuter les programmes et nous insistons sur la notion a e d’ex´cution dans le paragraphe 2. Cela nous permet au paragraphe 3. de e montrer les diff´rents mat´riels et logiciels pr´sents dans l’ordinateur. e e e Nous ´voquons enfin les usages de l’ordinateur au paragraphe 4. e

1.

Notion d’information

Une information est une entit´ abstraite, li´e ` la notion de connaissance. e e a Nous nous int´ressons naturellement aux informations d’un point de vue teche nique en informatique, non d’un point de vue journalistique. Nous donnons diff´rentes facettes de l’information et s´parons l’´tude des informations de e e e celle des objets.

1.1

Quelques aspects d’une information

Nous avons besoin pour cerner la notion d’information de donner l’origine possible d’une information et de montrer la n´cessit´ de ses repr´sentations e e e pour pouvoir envisager les manipulations d’informations dans les ordinateurs.

6

Qu’est-ce qu’un ordinateur ?

1.1.1

Origine d’une information

Une information peut ˆtre en relation avec une grandeur physique, l’orie gine ´tant par exemple m´canique (forme, dimensions, emplacements d’objets, e e intensit´ d’une force), ´lectromagn´tique (amplitude, fr´quence ou phase d’un e e e e signal ´lectrique, d’une onde ´lectromagn´tique), ´lectrochimique (PH d’un e e e e liquide, potentiel ´lectrochimique d’une cellule nerveuse). e 1.1.2 Nom, valeur et combinaison d’informations

Une information a un nom : “la temp´rature mesur´e au sommet de la Tour e e Eiffel”, “le caract`re tap´ au clavier”, “le montant de mon compte en banque”. e e Une information a une valeur ` un certain moment : 37 degr´s, ’A’, 5 000 F. a e La plus petite information possible est une r´ponse par oui ou par non (on e parle de r´ponse bool´enne) : le nombre est pair ou impair, le caract`re est une e e e lettre ou pas une lettre, le point de l’´cran est allum´ ou ´teint, la lettre est e e e une majuscule ou non, la touche de la souris est enfonc´e ou non. Une telle e petite information constitue un bit. L’ensemble des valeurs possibles peut ˆtre fini (comme pour les caract`res), e e ou potentiellement infini (comme pour mon compte en banque !). Un ensemble infini de valeurs peut pr´senter des variations continues, c’est-`-dire e a qu’entre deux valeurs possibles il y a une valeur possible. C’est le cas pour la temp´rature. Les variations sont discr`tes dans le cas contraire. Le solde de e e mon compte en banque peut ˆtre de 123,45 F ou de 123,46 F, mais pas d’une e valeur entre les deux, car la banque arrondit les sommes au centime le plus proche. Diff´rentes informations peuvent se combiner soit dans l’espace (les mone tants des comptes en banque de diff´rents clients) soit dans le temps (l’histoe rique des variations de mon compte). Les combinaisons dans l’espace contiennent un nombre fini d’´l´ments. En ee revanche un syst`me informatique traite des informations qui peuvent varier e un nombre non born´ de fois au fil du temps. Il suffit de maintenir le syst`me e e en ´tat de marche. e 1.1.3 Repr´sentation et codage e

Une information a une repr´sentation sous forme de grandeur(s) phye sique(s) associ´e ` une convention, ou code, d’interpr´tation. Si une information e a e est repr´sent´e dans un code inconnu, elle n’est pas compr´hensible. e e e La grandeur physique peut ˆtre la position d’une aiguille sur un appareil e de mesure. On passe parfois par une repr´sentation interm´diaire sous forme e e de suite de lettres et de chiffres, repr´sent´s ` leur tour par une grandeur e e a physique (traces sur un papier par exemple). Pour l’aiguille sur un cadran on parle de repr´sentation analogique ; si l’interm´diaire des chiffres est mis en jeu e e on parle de repr´sentation num´rique ou digitale. Cette diff´rence se retrouve e e e

1. Notion d’information

7

entre les disques anciens et les disques compacts. Il est parfois n´cessaire de e r´aliser par un dispositif ´lectronique une conversion entre ces deux types de e e repr´sentation. e Un chiffre binaire, 0 ou 1, suffit ` repr´senter un bit. Un vecteur de bits a e constitue un mot. Les mots de 8 bits sont des octets. Une mˆme information peut ˆtre repr´sent´e dans l’ordinateur de fa¸ons e e e e c diverses : le caract`re frapp´ au clavier est d’abord connu comme un couple e e de coordonn´es d’une touche au clavier (la touche en deuxi`me colonne de la e e troisi`me ligne), puis par une s´quence de variations de potentiel sur une ligne e e ´lectrique liant le clavier et l’ordinateur (combinaison temporelle), puis par un e vecteur de chiffres binaires dont les composantes sont les unes ` cˆt´ des autres a oe en m´moire (combinaison spatiale), puis par une repr´sentation sous forme de e e matrice de points allum´s/´teints sur l’´cran. e e e Pour les informations structur´es complexes (en raison des combinaisons) e le codage constitue un langage. Les programmes sont ´crits dans des langages e de programmation, les figures sont d´crites dans des langages de description e de figures, etc. Dans le langage courant on assimile souvent l’information, sa valeur, sa repr´sentation. e

1.2

Utilisation des informations dans l’ordinateur

Dans les ordinateurs les informations sont m´moris´es, transmises et e e trait´es. Nous retrouvons cette triple fonction dans le paragraphe 3.1.3 En e informatique l’association du nom d’une information et de la repr´sentation e de la valeur constitue une variable. 1.2.1 Stockage (ou m´morisation) des informations e

On peut copier, c’est-`-dire cr´er un nouvel exemplaire de l’information a e en lui associant un nouveau repr´sentant physique. Mais c’est toujours la e mˆme information : elle est simplement mat´rialis´e plusieurs fois. On peut e e e aussi d´truire un exemplaire de l’information : elle disparaˆ avec son dernier e ıtra repr´sentant. Une information est stock´e dans une m´moire si on ne veut pas e e e qu’elle disparaisse. 1.2.2 Transmission des informations

Les informations trait´es dans l’ordinateur peuvent provenir de disposie tifs mat´riels (capteur de temp´rature par exemple). Elles peuvent provenir e e d’un utilisateur via un clavier, une souris, . . .Une information sortante, sous la forme d’une tension sur un fil ´lectrique, peut influencer un mat´riel par e e l’interm´diaire d’un actionneur, comme un d´clencheur d’alarme. Diff´rents e e e syst`mes d’interface permettent ` l’ordinateur de communiquer avec le monde e a ext´rieur. e

8

Qu’est-ce qu’un ordinateur ?

Les informations peuvent ˆtre transmises d’un point ` un autre. Des liaie a sons par fils ´lectriques ou par ondes ´lectro-magn´tiques (radio, infra-rouge, e e e visible, . . .) nous sont famili`res. A l’int´rieur d’un ordinateur la distance est e e parfois de moins d’un micron (10−6 m). Quand une fus´e transmet vers la Terre e des images de l’espace, la distance est de plusieurs millions de kilom`tres. Les e r´seaux permettent les transmissions entre ordinateurs. e Il arrive que le codage de l’information comporte une certaine redondance. Cela peut permettre, si l’on garde l’information en exc`s, de d´tecter des ere e reurs de transmission, ou, si le d´bit d’information est une priorit´, de come e presser la repr´sentation avant de la transmettre. e 1.2.3 Traitement des informations : donn´es, programmes e

On peut r´aliser des op´rations de combinaison d’informations pour g´n´rer e e e e de nouvelles informations. Dans le cas des ordinateurs, il s’agit tr`s souvent e d’op´rations arithm´tiques de calcul et de comparaison. Etymologiquement e e l’ordinateur met de l’ordre. Il existe des informations qui d´crivent ces traitements appliqu´s ` d’autres e e a informations : “Diviser la distance parcourue par le temps de trajet. Le r´sultat e est la vitesse” ; “Comparer deux caract`res et d´terminer le premier dans e e l’ordre alphab´tique” ; “Convertir une information repr´sent´e selon le code e e e 1 pour la repr´senter selon le code 2”. Des enchaˆ e ınements de tels ordres constituent des programmes. Les autres informations sont nomm´es donn´es. Les e e ordres ´l´mentaires sont des instructions. Une instruction indique un chanee gement d’´tat dans l’ordinateur. L’´tat de la machine avant l’instruction est e e diff´rent de son ´tat apr`s. e e e Attention, les instructions peuvent ˆtre consid´r´es comme des donn´es ` un e ee e a certain moment. Par exemple quand le programmeur imprime son programme, les instructions du programme d’impression traitent le programme comme un texte ordinaire ; de mˆme le compilateur traite le programme ` compiler comme e a une donn´e. e On dit parfois que l’informatique concerne le traitement de l’information, mais il serait plus exact de parler du traitement d’une repr´sentation de l’ine formation. Cette repr´sentation peut ˆtre finie (dans l’espace) ou infinie (dans e e le temps).

1.3

Information par rapport ` objet, a logiciel par rapport ` mat´riel a e

Enfon¸ons quelques portes ouvertes pour distinguer la notion d’information c de celle d’objet. La distinction est de mˆme nature que celle qui distingue le e logiciel du mat´riel. e Un objet peut ˆtre dupliqu´. Cela donne deux objets. Si la repr´sentation e e e d’une information est dupliqu´e il n’y a toujours qu’une information. Mais e

2. L’ordinateur : une machine qui ex´cute e

9

il y a probablement deux supports physiques. Les informations peuvent ˆtre e m´moris´es, ´videmment pas les objets. e e e Une information peut voyager par t´l´phone ou par courrier ´lectronique. ee e Un objet ne le peut pas. Produire un objet suppose de la mati`re premi`re. La production d’objet e e est une activit´ ´conomique du secteur secondaire. Produire une information ee demande de la mati`re grise. La production d’information est une activit´ du e e secteur tertiaire. Lors de la r´alisation d’un objet, des d´fauts de fabrication peuvent ape e paraˆ ıtre. Une information peut ˆtre consid´r´e comme vraie ou fausse, mais e ee elle n’a pas de d´faut de fabrication. e Un objet peut tomber en panne, se d´grader au fil du temps. Une infore mation peut ˆtre accessible ou non, dans un code compr´hensible ou non. Le e e support de la repr´sentation d’une information peut s’abˆ e ımer, la repr´sentation e peut disparaˆ ıtre.

1.4

Objet et description d’objet

Attention ` ne pas confondre l’objet mat´riel et sa description ; la descripa e tion de l’objet est une information. Ainsi la description d’un ordinateur n’a pas de d´fauts de fabrication, ne peut tomber en panne, est reproductible, voyage e sur un fil. Par contre l’ordinateur lui-mˆme est un objet compos´ de fils, de silicium, e e de tˆlerie, de ventilateurs. Sa description est une information cod´e graphio e quement dans un sch´ma ou textuellement par un ensemble d’´quations ou de e e formules. Il existe des langages de description de mat´riel informatique. e Pour obtenir l’objet il faut savoir r´aliser la description. Le r´sultat de la e e fabrication de l’objet ordinateur doit ˆtre test´. On doit v´rifier que l’objet est e e e conforme a sa description du point de vue du fonctionnement. Ce test vise la ` d´couverte de d´fauts de fabrication. Apr`s un temps de bon fonctionnement, e e e on peut refaire un test pour d´couvrir ou localiser des pannes. Les d´fauts de e e conception sont d’une autre nature : ils concernent une diff´rence entre la dese cription de l’ordinateur et l’intention du concepteur. On peut les assimiler aux bogues des programmes. Les programmes n’ont pas de d´fauts de fabrication. e Ils peuvent comporter des fautes de typographie, de syntaxe ou des erreurs de conception.

2.

L’ordinateur : une machine qui ex´cute e

L’ordinateur est un objet. Il ex´cute des informations (les programmes) e a ` propos d’autres informations (les donn´es). Un ordinateur correspond ` un e a certain moule, un mod`le de calcul. e

10

Qu’est-ce qu’un ordinateur ?

Horloge

Initialisation Acc`s m´moire e e

Mot de m bits Adresses 0 1 2 3 Programme Donn´es e 2n − 1

Compteur 1 1 1 0 ... 0 Programme 0 0 1 0 ... 0 Registre Instruction 1 0 1 0 ... 1 0 0 1 1 ... 1 Registres de calcul

0 1 0 0 1 ... 0 Lecture/Ecriture 0 1 0 1 0 ... 1 bus donn´es e m bus adresses n 1 1 1 1 0 ... 0 1 1 1 0 0 ... 1

Unit´ de calcul e Processeur

M´moire centrale e

Fig. 1.1 – Architecture simplifi´e d’une machine de Von Neumann e

2.1

Mod`le de calcul, machine de Turing e

Un mod`le de calcul comporte un ensemble de transformations applicables ` e a un ensemble de donn´es. Il comporte aussi l’ensemble des r`gles de composition e e de ces transformations. Prenons un exemple en g´om´trie o` calculer signifie e e u dessiner : le calcul par la r`gle et le T glissant. En g´om´trie plane, en n’utilisant e e e que la r`gle et le T glissant, il est possible de calculer la parall`le ` une droite e e a passant par un point donn´, la perpendiculaire ` une droite passant par un e a point, l’orthocentre d’un triangle, etc. L’utilisation de la r`gle et du T glissant e constitue un mod`le de calcul. e Si l’on ajoute le compas, on obtient un autre mod`le de calcul, plus puissant, e c’est-`-dire permettant de construire d’autres figures. a En informatique, la machine abstraite de Turing est un mod`le de cale cul. Le math´maticien britannique Turing [Gir95, Tur54, Las98] a d´fini une e e classe de fonctions calculables en composant (´ventuellement r´cursivement) e e des fonctions ´l´mentaires. Il a d´fini un mod`le abstrait de machine et montr´ ee e e e que cette machine pouvait effectivement calculer la classe de fonctions d´finie. e Ce mod`le est un maximum, on ne connaˆ pas de mod`le plus puissant. Cette e ıt e machine est toutefois tr`s rudimentaire, sa programmation est donc ardue. Obe tenir un r´sultat suppose de nombreuses op´rations ´l´mentaires. La machine e e ee de Turing suppose l’existence d’un dispositif de m´morisation de dimension e infinie. Ce n’est donc pas un mod`le r´aliste. e e

2. L’ordinateur : une machine qui ex´cute e

11

2.2

L’architecture de Von Neumann

Les travaux r´alis´s autour du math´maticien hongrois Von Neue e e mann [BGN63] constituent le fondement de l’architecture des ordinateurs actuels. Du point de vue th´orique, on a pu d´montrer que le mod`le concret de e e e Von Neumann poss`de les propri´t´s de la machine abstraite de Turing. e ee Il y a quelques mod`les de calcul en informatique qui ne sont pas de ce e type : par exemple le calcul par r´seaux de neurones formels. e Pratiquement tous les mod`les informatiques de traitement se retrouvent e dans la cat´gorie g´n´rale des automates, ou syst`mes s´quentiels. e e e e e Les principes de la machine de Von Neumann, que nous allons d´crire, sont e encore en oeuvre dans la quasi totalit´ des ordinateurs contemporains. Il y e a eu, naturellement, de nombreuses am´liorations. Une machine de Von Neue mann (voir Figure 1.1) stocke des repr´sentations des informations digitales, e en binaire. Elle comporte deux ´l´ments : une m´moire et une unit´ centrale. ee e e On parle plus facilement aujourd’hui de processeur plutˆt que d’unit´ ceno e trale. Habituellement les machines parall`les ` plusieurs processeurs ne sont e a pas consid´r´es comme des machines de Von Neumann. ee 2.2.1 La m´moire centrale e

Les informations sont cod´es sous forme num´rique. Les instructions, les e e caract`res, les couleurs, etc., sont repr´sent´s par des suites de chiffres bie e e naires. Les informations sont stock´es dans une m´moire dans des emplacee e ments num´rot´s nomm´s mots. Le num´ro d’un emplacement est son adresse. e e e e Le maintien de la correspondance entre le nom de l’information et l’adresse du mot m´moire o` est rang´e une de ses repr´sentations est une tˆche difficile et e u e e a une pr´occupation permanente en informatique. e Une ´criture dans la m´moire associe une valeur ` une adresse (on parle e e a aussi d’affectation). Apr`s une ´criture, on peut ex´cuter une ou plusieurs e e e lectures de la mˆme information. La lecture fournit la valeur associ´e ` cette e e a adresse. La m´moire est ` affectations multiples : on peut ´crire successivement e a e plusieurs valeurs dans un mot. Chaque ´criture associe une nouvelle valeur e a ` l’adresse. Elle induit un changement de l’´tat de la machine, en d´truisant e e l’association pr´c´dente. Elle n’est pas r´versible : il n’est pas possible d’annuler e e e la nouvelle association pour acc´der ` nouveau ` l’ancien contenu. e a a La m´moire contient des donn´es et des programmes constitu´s de suite e e e d’instructions. Le codage de l’information est tel que rien ne permet de reconnaˆ ıtre une repr´sentation de donn´e et une repr´sentation d’instruction. e e e Cette distinction n’aurait pas de sens puisqu’un programme peut mˆme cr´er e e des donn´es qui sont en fait des instructions. Cette possibilit´ est ce qui donne e e toute sa sp´cificit´ aux ordinateurs. Cela oppose le mod`le de type Von Neue e e mann ` celui dit de Harvard ou de Manchester dans lequel il existe deux a m´moires respectivement d´di´es aux donn´es et aux instructions. e e e e

12

Qu’est-ce qu’un ordinateur ?

2.2.2

Le processeur

Le processeur ex´cute les instructions. Les instructions sont g´n´ralement e e e ex´cut´es dans l’ordre o` elles sont ´crites dans la m´moire, mais certaines e e u e e instructions peuvent introduire des ruptures de cette s´quentialit´. La r`gle e e e g´n´rale est donc la correspondance entre l’ordre de rangement en m´moire et e e e l’ordre d’ex´cution. e L’instruction en cours d’ex´cution est rep´r´e par son adresse. Cette adresse e ee est stock´e dans une partie du processeur appel´ pointeur d’instruction, compe e teur ordinal ou compteur programme. Le processeur est dot´ au minimum de deux ´l´ments de m´morisation e ee e particuliers appel´s des registres : le compteur ordinal d´j` cit´ et le registre e ea e d’instruction dans lequel le processeur stocke une copie de l’instruction en cours d’ex´cution. e Le processeur ex´cute cycliquement la tˆche suivante dite d’interpr´tation e a e des instructions ou d’ex´cution des instructions : e – Lecture de l’instruction ` ex´cuter : le processeur transmet ` la m´moire a e a e l’adresse de l’instruction ` lire, autrement dit le contenu du compteur ordia nal, et d´clenche une op´ration de lecture. Il re¸oit en retour une copie de e e c l’instruction qu’il stocke dans son registre d’instruction. – D´codage : le processeur examine le contenu du registre d’instruction et e d´termine l’op´ration ` effectuer. Si le contenu du registre ne correspond e e a pas ` une instruction valide, c’est une erreur. En effet, en fonctionnement a normal, le compteur programme pointe sur un mot m´moire contenant une e instruction. Le d´codage est le moyen de v´rifier qu’une information est e e bien une instruction. – Ex´cution : le processeur effectue l’op´ration d´crite par l’instruction. Cette e e e ex´cution met souvent en jeu une unit´ de calcul ou Unit´ Arithm´tique et e e e e Logique. Cet op´rateur effectue des calculs sur les donn´es stock´es dans e e e des registres de calcul ou accumulateurs. – S´lection de l’instruction suivante : le processeur calcule l’adresse de l’inse truction suivante. Cela se fait le plus souvent en ajoutant 1 au compteur ordinal. Une instruction de saut ou branchement force une rupture de l’ordre implicite d’ex´cution des instructions d´fini par leur position dans la m´moire. e e e Son ex´cution consiste ` stocker dans le registre compteur ordinal une autre e a adresse que celle obtenue implicitement par incr´mentation de ce dernier. En e utilisant des branchements, on peut faire en sorte que l’ex´cution globale du e programme comporte plusieurs ex´cutions d’une mˆme instruction. Le texte e e d’un programme est donc une repr´sentation finie d’un comportement qui dure e ´ventuellement ind´finiment. C’est l’essence mˆme de la programmation. Un e e e algorithme est un texte de taille finie.

2. L’ordinateur : une machine qui ex´cute e

13

Ecran Clavier M´moire e centrale Fils sp´cialis´s e e Coupleur de clavier Coupleur d’´cran e

Disque

Processeur

Coupleur de disque

Bus donn´es e Bus adresses Fig. 1.2 – Architecture mat´rielle simplifi´e d’un ordinateur e e

2.2.3

Liaisons entre le processeur et la m´moire e

Le processeur dialogue avec la m´moire via trois sortes de fils ´lectriques e e group´s en paquets nomm´s bus : 1) le bus d’adresse transmet du procese e seur vers la m´moire l’information adresse. 2) le bus de donn´es transporte e e le contenu de l’emplacement m´moire auquel on acc`de. Le terme de bus de e e valeur aurait ´t´ plus explicite : le processeur peut interpr´ter la valeur qui ee e transite sur ce bus comme une donn´e ou comme une instruction. 3) des sie gnaux compl´mentaires pr´cisent ` quel instant a lieu l’acc`s (Acc`s m´moire) e e a e e e et dans quel sens (Lecture/Ecriture). La figure 1.2 montre une telle organisation. 2.2.4 Langages du processeur : langage machine et langage d’assemblage

Pour ˆtre interpr´t´es par le processeur, les instructions d’un programme e ee doivent ˆtre repr´sent´es selon un certain code et stock´es dans la m´moire e e e e e centrale dans un format appel´ langage machine. Le langage machine d´crit e e l’ensemble des instructions comprises par le processeur et la convention de codage pour que celles-ci soient ex´cutables. On parle de jeu ou de r´pertoire e e d’instructions. Le codage d’une instruction est un vecteur de 0 et de 1. Donnons quelques exemples de ce que peuvent ˆtre les instructions : “Ajoue ter 258 et le nombre contenu en m´moire ` l’adresse 315 puis ranger le r´sultat e a e a ` l’adresse 527”, “Si le nombre rang´ en m´moire ` l’adresse 124 est posie e a tif, alors sauter ` l’ex´cution de l’instruction ` l’adresse 471, sinon continuer a e a en s´quence, c’est-`-dire passer ` l’instruction suivante dans la m´moire”. e a a e Diff´rents sous-vecteurs, ou champs, repr´sentent alors la valeur imm´diate e e e de l’op´rande 258, ou bien l’adresse directe 315, ou encore le code op´ration e e addition. Un programme ´crit en langage machine a l’apparence d’une suite de e

14

Qu’est-ce qu’un ordinateur ?

chiffres binaires peu ´vocatrice pour un programmeur humain. C’est poure quoi on utilise un langage dit d’assemblage, dans lequel on d´crit exactement e les mˆmes instructions, mais sous une forme textuelle plus facile ` manipuler e a que des paquets de 0 et de 1. Le programe ´crit en langage d’assemblage doit n´cessairement ˆtre traduit e e e en langage machine pour ˆtre ex´cut´. Le programme qui effectue cette trae e e duction est l’assembleur. Un abus de langage fr´quent confond le langage et le e traducteur. On emploie l’expression impropre de programmation en assembleur pour programmation en langage d’assemblage. On parle de code source ` propos d’un programme ´crit dans le langage a e d’assemblage et de format objet ou de format ex´cutable ` propos du r´sultat e a e de la traduction. Le r´sultat de la traduction est une donn´e qui peut ˆtre en m´moire, en e e e e cours d’ex´cution ou non. Il passe de l’´tat de donn´e ` celui de programme en e e e a cours d’ex´cution au moment du lancement. Le lancement est une op´ration e e sp´ciale qui change le statut du programme. Elle consiste ` affecter au compe a teur ordinal du processeur l’adresse de la premi`re instruction du programme e a e ` ex´cuter. Chaque processeur a son propre langage machine. Un programme en langage machine ´crit pour le processeur X ne peut pas, en g´n´ral, s’ex´cuter sur e e e e un processeur Y. Dans le cas contraire X et Y sont dits compatibles. Il existe des machines ` jeu d’instructions complexe Complex Instruction a Set Computer ou plus restreint Reduced Instruction Set Computer.

3.

O` sont le mat´riel et le logiciel ? u e

Dans une machine informatique se trouvent du mat´riel et des logiciels. Une e fonction r´alis´e par du logiciel sur une certaine machine peut ˆtre r´alis´e par e e e e e du mat´riel sur une autre. C’est le cas pour certains calculs ou transcodages e complexes, par exemple le calcul sur des r´els repr´sent´s dans le codage virgule e e e flottante. La mise en oeuvre d’un algorithme par un programme est classique. Sa mise en oeuvre par du mat´riel, par des techniques d’algorithmique cˆbl´e, e a e est moins connue car moins facile ` exp´rimenter sur un simple ordinateur a e personnel.

3.1

Mat´riel e

Le mat´riel est pourtant plus directement accessible ` la vue. Nous allons e a l’examiner selon trois crit`res : son aspect, sa technologie et sa fonction. e 3.1.1 Aspect du mat´riel e

Une premi`re approche du mat´riel consiste ` le consid´rer selon son aspect. e e a e Un ordinateur peut ressembler ` une caisse surmont´e d’un ´cran. N’oublions a e e

3. O` sont le mat´riel et le logiciel ? u e

15

pas qu’un ordinateur peut parfois ˆtre une armoire, ou une carte imprim´e, e e voire simplement une puce ou circuit comme sur votre carte bancaire. L’´cran e n’est pas n´cessaire ` l’ordinateur. Ce n’est qu’un moyen de communiquer entre e a la machine et l’ˆtre humain. e 3.1.2 Technologie du mat´riel e

Une deuxi`me classification d’´l´ments mat´riels se base sur les ph´nom`nes e ee e e e mis en oeuvre. Certains syst`mes sont purement ´lectriques ou ´lectroniques. Ces syst`mes e e e e sont organis´s selon une hi´rarchie correspondant ` la technologie de r´alisation e e a e utilis´e : dans les caisses, il y a des cartes imprim´es, sur lesquelles sont soud´s e e e des boˆ ıtiers. Dans les boˆ ıtiers il y a des (le plus souvent une seule) puces comprenant des transistors, r´sistances et condensateurs. e Pour l’acquisition de donn´es externes, on utilise souvent des syst`mes e e m´caniques ou ´lectrom´caniques. Les claviers et souris sont de ce type. On a e e e plus g´n´ralement des capteurs de pression, d’acc´l´ration, etc., et des actione e ee neurs de mouvements divers. L’ensemble peut constituer un robot. Diff´rents e capteurs ou actionneurs peuvent se trouver sous forme de puce ou de composants s´par´s. Les microsyst`mes r´unissent sur une seule puce capteurs, actione e e e neurs et l’´lectronique de traitement. Des syst`mes ´lectrom´caniques sont utie e e e lis´s notamment pour la lecture ou l’enregistrement sur supports magn´tiques e e ou optiques. Certains syst`mes sont ´lectro-optiques comme les ´crans, les diodes e e e ´lectroluminescentes, les cam´ras ou appareils photo num´riques, les lecteurs e e e de code-barre, les scanners, etc. Les ordinateurs pneumatiques, o` la pression dans des tubes tient lieu de u courant ´lectrique, sont assez rares. e 3.1.3 Fonctions du mat´riel e

La troisi`me fa¸on de caract´riser le mat´riel est de le faire d’apr`s sa fonce c e e e tion. Les ´l´ments mat´riels ont diff´rents types de fonctions : de m´morisation, ee e e e de traitement et de communication. La m´morisation stocke des informations dans la machine. Le coˆt et la e u dur´e du stockage et des op´rations de copie d´pendent fortement du mode de e e e repr´sentation physique. e Si une information ´tait repr´sent´e par un champ de menhirs, le stockage e e e prendrait de la place, la duplication serait difficile (sauf pour Ob´lix). La dur´e e e de stockage serait en revanche de plusieurs si`cles. e Dans l’ordinateur, l’information est repr´sent´e par des signaux ´lectriques e e e de faible puissance. La copie est rapide et de faible coˆt ´nerg´tique. La dur´e u e e e de vie d´pend ´ventuellement d’une source d’alimentation ´lectrique. e e e On distingue classiquement la m´moire principale et la m´moire secondaire. e e La m´moire principale est directement accessible dans l’ordinateur. Elle come

16

Qu’est-ce qu’un ordinateur ?

porte une partie de m´moire vive et une partie de m´moire morte. Quand on e e coupe l’alimentation ´lectrique, la m´moire morte ne perd pas les informations e e qui y sont inscrites. La m´moire morte ne peut pas ˆtre facilement modifi´e. e e e La m´moire secondaire contient des informations moins directement accessibles e par le processeur. Il faut passer par une interface. Ainsi les disques souples ou durs sont des m´moires secondaires. Elles sont g´n´ralement permanentes : e e e l’information y reste en l’absence d’alimentation ´lectrique. La carte perfor´e e e a longtemps constitu´ un support de stockage en informatique. Son avantage e est de pouvoir ˆtre lue directement par l’utilisateur humain. e Une m´morisation a lieu aussi dans le processeur qui garde temporairement e des copies de certaines informations dans ses registres. La fonction de traitement est assur´e par le processeur. Il peut lire ou ´crire e e le contenu de la m´moire principale. Il peut ensuite, comme on l’a vu, ex´cuter e e les instructions lues. D’autres circuits ont des fonctions de communication entre le processeur et la m´moire ou entre le processeur et le monde ext´rieur. Ces circuits d’ine e terfa¸age et de communication sont des coupleurs. Les communications avec c le monde ext´rieur se font ` travers des p´riph´riques comme les claviers, soue a e e ris, lecteur/graveur/enregistreurs de disques. D’autres types de coupleurs permettent de connecter l’ordinateur ` d’autres ordinateurs via un r´seau. Dans a e les applications industrielles o` une chaˆ de production est pilot´e par ordiu ıne e nateur il serait incongru de consid´rer la chaˆ comme un p´riph´rique ! Du e ıne e e point de vue du programmeur c’est pourtant le cas.

3.2

Les programmes et les donn´es e

Les programmes et les donn´es peuvent ˆtre enregistr´s sur des supports e e e magn´tiques ou en m´moire vive ou morte. Ils peuvent ˆtre pr´sents (en pare e e e tie) dans le processeur : ` un instant donn´ l’instruction en cours d’ex´cution a e e est dans dans le registre d’instruction du processeur. Cette information est dupliqu´e, on ne l’enl`ve pas de la m´moire pour l’ex´cuter. Les programmes e e e e peuvent ˆtre affich´s ` l’´cran ou ´crits sur une feuille de papier. e e a e e Sur un mˆme disque optique ou magn´tique, ou dans une m´moire, on e e e peut trouver le texte source d’un programme et le format objet correspondant. Quand on ach`te un logiciel on n’ach`te g´n´ralement que le code objet. e e e e L’´diteur se prot`ge ainsi contre la possibilit´ pour le client de modifier le logie e e ciel. On ach`te aussi le plus souvent des donn´es : dictionnaire du v´rificateur e e e orthographique, images des jeux, etc.

3.3

La vie du mat´riel et des programmes e

Le mat´riel a une vie tr`s simple : avant la mise sous tension, il ne fait e e rien. Certaines informations sont stock´es en m´moire morte ou en m´moire e e e secondaire. Aucun traitement n’a lieu ; ` la mise sous tension, il se produit une a

4. Fonctionnalit´s des ordinateurs e

17

r´initialisation automatique (reset), qui fait d´marrer le syst`me mat´riel dans e e e e son ´tat initial, et donc lance l’ex´cution du logiciel. Une r´initialisation peut e e e avoir lieu ` n’importe quel instant sur commande de l’utilisateur. a Tout ordinateur (sauf de tr`s rares exceptions) est rythm´ par un sie e gnal p´riodique nomm´ l’horloge. Ce signal cadence les changements d’´tats e e e dans l’ordinateur. Un ordinateur dont la fr´quence d’horloge est de 250 Mhz e (M´gahertz) change d’´tat avec une p´riode de 4 ns (nanosecondes, c’est-`-dire e e e a 4.10−9 secondes). L’existence de cette horloge permet de g´rer une pendule qui e donne l’heure ` l’utilisateur et date ses fichiers. La pr´cision n’a pas besoin a e d’ˆtre ` la nanoseconde pr`s ´videmment. En revanche elle doit permettre de e a e e changer de si`cle ! e La vie des programmes est plus agit´e ! Certains programmes sont inse crits en m´moire morte en usine, par le constructeur de l’ordinateur. Pour e la construction de petits ordinateurs sp´cialis´s, la technologie d’inscription e e des m´moires mortes est accessible assez facilement. Certains programmes e comme les noyaux de syst`mes d’exploitation ou les jeux sur cartouche, sont e g´n´ralement sur un tel support. e e Certains programmes se trouvent en m´moire vive. Ils n’y apparaissent pas e par g´n´ration spontan´e. Ils sont le r´sultat d’un cycle : ´dition, sauvegarde, e e e e e traduction ´ventuelle, chargement (d’un support secondaire vers la m´moire e e vive). Ces ´tapes sont g´n´ralement suivies d’un lancement. e e e L’ordinateur comporte les outils logiciels n´cessaire ` ces actions : ´diteur e a e de texte, gestion de fichiers, traducteur, chargeur, lanceur sont pilot´s par un e utilisateur humain par l’interm´diaire d’un enchaˆ e ıneur de travaux : l’interpr`te e de commandes. Dans les vieilles machines on pouvait entrer des programmes en m´moire et e forcer le compteur programme directement en binaire, avec des interrupteurs a ` deux positions. Il n’y avait plus qu’` appuyer sur un bouton pour lancer a l’ex´cution. C’´tait le bon temps ! e e

4.

Fonctionnalit´s des ordinateurs e

Cette partie d´crit diff´rents usages de l’ordinateur. Cela nous permet ene e suite de distinguer l’ordinateur de diff´rentes machines programmables qui ne e sont pas des ordinateurs.

4.1

Les usages de l’ordinateur

Distinguons deux usages bien diff´rents des ordinateurs. e 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, du syst`me de r´servation de la compagnie a´rienne, de la station de travail en bue e e

18

Qu’est-ce qu’un ordinateur ?

reau d’´tude de m´canique, du contrˆleur de programmation du magn´toscope, e e o e ou de la calculette programmable. D’autres ordinateurs n’ont pas encore atteint ce stade. Pour l’instant ils ne servent qu’` des informaticiens pour ´crire des programmes. Ils ne servent a e encore qu’` la mise au point d’une certaine destination finale. Souvent un a mˆme ordinateur peut servir ` d´velopper des jeux, un traitement de texte ou e a e une calculette par simulation. Certains ordinateurs peuvent ˆtre utilis´s des deux mani`res : les programe e e meurs de la compagnie a´rienne changent les programmes sur la machine sans e interrompre les r´servations, ce qui n’est pas forc´ment simple. e e Sur certains ordinateurs il est possible d’utiliser des logiciels dits de Conception Assist´e par Ordinateur (CAO) pour concevoir des voitures, des moteurs e ou les puces qui seront ` la base d’un futur ordinateur. a 4.1.1 Fonctionnalit´s des ordinateurs pour non programmeurs e

Remarquons que ces machines sont souvent qualifi´es de programmables, e comme c’est le cas pour les magn´toscopes. e Dans une telle machine il faut pouvoir introduire des informations et lancer des ex´cutions. Si l’on regarde de plus pr`s, il faut pouvoir introduire des e e donn´es (les textes du traitement de texte, les op´randes de la calculette non e e programmable) et des programmes dans le langage de la machine programmable visible. Par exemple pour le magn´toscope : enregistrer la chaˆ x, de e ıne h1 ` h2 heures, pendant N jours, tous les M jours. Le processeur n’ex´cute pas a e directement ce type de programmes qui ne sont pas ´crits en langage machine. e Le programme en langage machine qui est ex´cut´ consid`re enregistrer, x, h1, e e e h2, N et M comme des donn´es. Ces programmations sont interpr´t´es par un e ee programme en langage machine qui est fourni avec la machine. Ce programme est totalement invisible pour l’utilisateur. Par ailleurs il faut pouvoir lancer un tel programme en langage machine qui prend ces param`tres (enregistrer, h1,..) et s’ex´cute en tenant compte de e e leurs valeurs. Cette double fonctionnalit´ permettant une phase de programmation et une e phase d’ex´cution n’est pas facile ` comprendre pour les utilisateurs non ine a formaticiens. L’informaticien qui devra un jour ´crire un mode d’emploi d’une e telle machine doit s’en souvenir. Dans de telles machines l’utilisateur peut parfois installer des programmes nouveaux qu’il se procure : jeux, nouvelle version de traitement de texte, etc. Ils sont d´j` en langage machine ; il faut pouvoir m´moriser ces programmes ea e sur un disque et les lancer. On est tr`s proche alors d’un ordinateur. e 4.1.2 Fonctionnalit´s des ordinateurs pour programmeurs e

Dans ces machines il faut pouvoir ´crire des programmes et les traduire e en langage machine puis les charger et les lancer. La traduction d’un pro-

4. Fonctionnalit´s des ordinateurs e

19

gramme ´crit dans un langage de haut niveau en un texte en langage mae chine est une compilation. Il y a donc des programmes qui permettent d’´crire, e sauver, traduire, lancer des programmes. Sur les ordinateurs utilis´s pour e le d´veloppement de programmes, les programmes peuvent, comme sur le e magn´toscope, ˆtre interpr´t´s. e e ee Sur les ordinateurs compliqu´s o` plusieurs programmeurs travaillent en e u mˆme temps chacun veut quand mˆme avoir l’impression d’avoir un ordinateur e e pour lui tout seul. C’est le cas de l’ordinateur de la compagnie a´rienne qui e g`re les places, permet la mise au point de programmes, etc. e L’ensemble des outils permettant l’´dition, la sauvegarde et le lancement e de programmes pour un ou plusieurs utilisateurs constitue un syst`me d’exe ploitation. Un syst`me d’exploitation comporte 2 parties : e – Une partie basse fortement d´pendante des caract´ristiques du mat´riel e e e comme le type de processeur ou les types de p´riph´riques connect´s (souris e e e a ` 1, 2 ou 3 boutons, claviers azerty ou qwerty, lecteurs de disquettes avec une vitesse de rotation plus ou moins grande). Des biblioth`ques de proe grammes de gestion des p´riph´riques, nomm´es les pilotes de p´riph´riques, e e e e e sont toujours livr´es avec l’ordinateur ou avec le p´riph´rique. L’installae e e tion de ces pilotes (drivers en anglais) cause bien des soucis aux utilisateurs novices. Cette partie basse comporte aussi les outils permettant de g´rer e plusieurs utilisateurs simultan´s de l’ordinateur. e – Une partie haute utilisant les primitives de la pr´c´dente pour offrir des e e services de plus haut niveau. Par exemple : apr`s une ´dition de texte, on le e e sauvegarde en utilisant le programme de gestion de fichiers. Ce gestionnaire v´rifie si le fichier existe d´j`, si sa date enregistr´e est bien ant´rieure, etc. e ea e e Mais la prise en compte de la vitesse de rotation du disque n’est pas du mˆme niveau. Le syst`me de gestion de fichiers suppose ces aspects plus bas e e d´j` r´solus. De mˆme l’envoi d’un courriel (ou m´l) utilise des parties de ea e e e programmes qui ne d´pendent pas du nombre de boutons de la souris. e

4.2

Tout ce qui est programmable est-il un ordinateur ?

On rencontre de nombreux appareils ´lectrom´nagers dot´s d’un s´quenceur e e e e ou programmateur. Ce dernier leur permet d’enchaˆ ıner automatiquement certaines actions, selon un ordre immuable fig´ lors de la construction de la mae chine (l’utilisateur a parfois le choix entre plusieurs s´quences pr´d´finies). e e e C’est le cas des machines ` laver. a Une machine ` laver a un comportement cyclique complexe, avec a r´troaction de l’environnement. Un moteur qui tourne d´clenche ou non des e e actions selon la programmation manifest´e par la position de certains points de e contacts ´lectriques ; les actions continuent ou s’arrˆtent selon le temps ´coul´, e e e e les informations provenant du d´tecteur de temp´rature, le niveau d’eau, etc. e e Les actions correspondant aux contacts sont faites dans l’ordre o` les contacts u sont touch´s par un contacteur ´lectrique. e e

20

Qu’est-ce qu’un ordinateur ?

On pourrait imaginer un comportement plus complexe dans lequel une action est ou n’est pas faite selon le r´sultat de l’action pr´c´dente. Imaginons e e e un d´tecteur d’opacit´ de l’eau de rin¸age : si l’eau est trop opaque, un rin¸age e e c c suppl´mentaire a lieu. e Le mat´riel informatique a un tel comportement. Le processeur peut e ˆtre assimil´ ` un moteur qui tourne. Le compteur programme, qui ´volue e e a e p´riodiquement, ´voque ce comportement : il passe devant des contacts, il e e pointe successivement sur des instructions, et effectue les actions correspondantes. Si les contacts disent de s’arrˆter ou d’aller plus loin d`s que l’action e e est termin´e, cela se produit. Les intructions peuvent ˆtre conditionnelles. Elles e e peuvent comporter des ruptures de s´quence. Dans ce cas les instructions ne e sont plus ex´cut´es dans l’ordre o` elles sont ´crites. e e u e L’informatique est toutefois plus complexe qu’une simple machine ` laa ver car un programme peut avoir comme r´sultat de cr´er et d’´crire dans la e e e m´moire un programme et de lui passer la main, c’est-`-dire de le lancer. Les e a machines ` laver n’en sont pas capables. a

5.

Plan du livre

Le livre comporte six parties. La premi`re partie donne des fondements pour toute l’informatique, logie cielle et mat´rielle. Les outils math´matiques ne sont pas pr´sent´s ici pour e e e e eux-mˆmes mais pour ˆtre utilis´s dans la suite. Les mots binaire, information, e e e bit, automate, bool´en, repr´sentation, ´tat, langage seront alors familiers. e e e La deuxi`me partie donne les techniques propres au mat´riel. Nous y e e d´crivons toutes les ´tapes qui permettent de repr´senter et traiter les vece e e teurs de 0 et de 1 sur du mat´riel. Les mots puce, syst`me s´quentiel, m´moire, e e e e circuit, transistor ne poseront plus de probl`me. e La troisi`me partie donne les techniques propres au logiciel. Apr`s cette e e partie, on sait tout sur langage, langage d’assemblage, langage machine, saut, branchement, registre. La quatri`me partie est centrale. On y explique comment le processeur e ex´cute les instructions. Ceci est fait de fa¸on d´taill´e, en s’appuyant sur les e c e e connaissances acquises dans les trois premi`res parties. Apr`s cette partie on e e a compris comment du mat´riel peut traiter du logiciel. e La cinqui`me partie donne tous les ´l´ments pour construire un ordinateur e ee au sens o` nous venons de le d´finir. Cela suppose des ajouts de mat´riel autour u e e du processeur et de la m´moire et l’introduction de programmes constituant le e syst`me d’exploitation. Apr`s ce chapitre, on sait, de fa¸on d´taill´e, comment e e c e e marche l’ordinateur et comment on le con¸oit. On pourrait donc s’arrˆter l`. c e a La sixi`me partie est n´cessaire pour le professionnel de l’informatique. e e On montre comment peut ˆtre mis en place le syst`me qui permet d’accepter e e plusieurs utilisateurs effectuant plusieurs tˆches simultan´ment, ou tout au a e

5. Plan du livre

21

moins avec l’apparence de la simultan´it´. e e

22

Qu’est-ce qu’un ordinateur ?

Premi`re partie e Outils de base de l’algorithmique logicielle et mat´rielle e

Chapitre 2 Alg`bre de Boole et fonctions e bool´ennes e
George Boole, math´maticien anglais, a utilis´ pour la premi`re fois en e e e 1850 une alg`bre ` 2 ´l´ments pour l’´tude de la logique math´matique. Il a e a ee e e d´fini une alg`bre permettant de mod´liser les raisonnements sur les proposie e e tions vraies ou fausses. Etudi´e apr`s Boole par de nombreux math´maticiens, e e e l’Alg`bre de Boole a trouv´ par la suite de nombreux champs d’application : e e r´seaux de commutation, th´orie des probabilit´s, recherche op´rationnelle e e e e (´tude des alternatives). e Les premi`res applications dans le domaine des calculateurs apparaissent e avec les relais pneumatiques (ouverts ou ferm´s). Aujourd’hui, les ordinateurs e sont compos´s de transistors ´lectroniques fonctionnant sur 2 modes : bloqu´ ou e e e passant (Cf. Chapitres 7 et 8). Ils utilisent une arithm´tique binaire (Cf. Chae pitre 3). L’alg`bre de Boole constitue un des principaux fondements th´oriques e e pour leur conception et leur utilisation. Les circuits sont des impl´mentations e mat´rielles de fonctions bool´ennes. e e Les fonctions bool´ennes peuvent ˆtre repr´sent´es et manipul´es sous e e e e e diff´rentes formes. Ces repr´sentations ont des int´rˆts variant suivant de nome e ee breux crit`res. Selon la technologie de circuit cible, certaines repr´sentations e e sont plus ad´quates pour arriver ` une impl´mentation optimis´e. Une e a e e repr´sentation peut bien convenir ` certains types de fonctions et devenir tr`s e a e complexe, voire impossible ` utiliser pour d’autres. Enfin, selon l’outil de CAO a (Conception assist´e par ordinateur) utilis´, certaines formes sont accept´es e e e (car bien adapt´es ` une repr´sentation sur machine) ou non. e a e Le paragraphe 1. pr´sente les principales d´finitions concernant cette e e alg`bre et les fonctions bool´ennes. Les diff´rents moyens de repr´senter e e e e ces fonctions bool´ennes sont ´num´r´s dans le paragraphe 2. Le parae e e e graphe 3. d´crit les diff´rentes manipulations que l’on peut effectuer sur e e ces repr´sentations afin d’obtenir des formes permettant par la suite une e impl´mentation physique ` moindre coˆt. e a u

26

Alg`bre de Boole et fonctions bool´ennes e e

1.
1.1

Alg`bre de Boole e
Op´rations e

Soit l’ensemble B = {0, 1}. On d´finit une relation d’ordre total sur cet e ensemble en posant : 0 ≤ 1. A partir de cette relation d’ordre, on d´finit les e op´rations suivantes sur les ´l´ments de B : e ee Addition : x + y = max(x, y) Multiplication : x.y = min(x, y) Compl´mentation : x = 0 si x = 1 et x = 1 si x = 0 e ¯ ¯ On utilise les termes de somme, produit et compl´ment pour les r´sultats e e de l’addition, de la multiplication et de la compl´mentation. Le r´sultat de e e ces op´rations est d´taill´ dans la table suivante : e e e a 0 1 0 1 b 0 0 1 1 a+b 0 1 1 1 a.b 0 0 0 1 a ¯ 1 0 -

1.2

D´finition e

Soit A un ensemble non vide comportant deux ´l´ments particuliers not´s ee e 0 et 1. On d´finit sur l’ensemble A deux op´rations binaires not´es + et . et e e e une op´ration unaire not´e ¯. e e (A, 0, 1, +, ., ¯) est une alg`bre de Boole s’il respecte les axiomes suivants : e 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 fa¸on ´quivalente (a.b).c ou c e a.b.c ; de mˆme : a + (b + c) ou a + b + c. e

2. 0 est ´l´ment neutre pour l’addition et 1 est ´l´ment neutre pour la ee ee multiplication. ∀a ∈ A : 0 + a = a ∀a ∈ A : a.1 = a 3. L’addition et la multiplication sont distributives l’une par rapport ` a l’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 consacr´ la priorit´ de la multiplication sur e e l’addition comme dans la notation alg´brique usuelle. Par souci de sime plification d’´criture, on notera de fa¸on ´quivalente : (a.b) + c ou a.b + c. e c e

1. Alg`bre de Boole e

27

4. Pour tout ´lement, la somme d’un ´l´ment et de son compl´mentaire est e ee e ´gale ` 1 et le produit d’un ´l´ment et de son compl´mentaire est ´gal ` e a ee e e a 0 : ∀a ∈ A : a + a = 1 et ∀a ∈ A : a.¯ = 0. ¯ a

1.3

Exemples d’Alg`bres de Boole e

L’alg`bre de Boole la plus simple est d´finie sur l’ensemble ` deux ´l´ments : e e a ee B = {0, 1}. Pour l’´tude des raisonnements sur les propositions logiques, e il existe des synonymes pour les noms des ´l´ments de cet ensemble et des ee op´rations ; on parle alors de faux et vrai (au lieu de 0 et 1) et des op´rateurs et e e et ou (au lieu de la multiplication et de l’addition). Les d´finitions et les proe pri´t´s math´matiques restent identiques. Ces termes sont utilis´s aussi dans ee e e l’´tude des circuits logiques. e L’ensemble des parties d’un ensemble E (not´ P(E)) muni des op´rations e e d’intersection ensembliste (correspondant ` .), d’union ensembliste (correspona dant ` +) et de compl´mentaire ensembliste dans E (correspondant ` ¯) forme a e a une alg`bre de Boole. L’ensemble vide correspond ` 0 et l’ensemble E ` 1. e a a L’ensemble des nuplets de bool´ens muni des op´rations d’addition, de mule e tiplication et de compl´mentation ´tendues aux vecteurs forme une alg`bre de e e e Boole. (0, 0, . . . , 0) correspond ` 0 et (1, 1, . . . , 1) ` 1. a a (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 th´or`mes e e

Th´or`me de dualit´ : Si (A, 0, 1, +, ., ¯ ) est une alg`bre de Boole alors e e e e (A, 1, 0, ., +, ¯) est aussi une alg`bre de Boole. e Ainsi les axiomes et r`gles de simplification peuvent se pr´senter sous deux e e formes duales, l’une se d´duisant de l’autre en rempla¸ant les + par des . et e c les 1 par des 0 et inversement. R`gles e de simplification
duale

bool´enne e

:

¯ a=a a+1=1 a+a=a a + a.b = a a + a.b = a + b ¯ a.b + a.b = b ¯ a.b + a.c + b.c = a.b + a.c ¯ ¯

←→ duale ←→ duale ←→ duale ←→ duale ←→ duale ←→ duale ←→

¯ a=a a.0 = 0 a.a = a a.(a + b) = a a.(¯ + b) = a.b a (a + b).(¯ + b) = b a (a + b).(¯ + c).(b + c) = (a + b).(¯ + c) a a

28

Alg`bre de Boole et fonctions bool´ennes e e

x1 0 0 0 0

x2 0 0 1 1

x3 0 1 0 1

y 1 1 0 0

x1 1 1 1 1

x2 0 0 1 1

x3 0 1 0 1

y 1 1 0 1

Fig. 2.1 – Table de v´rit´ de la fonction : y = f (x1 , x2 , x3 ) e e

R`gles de De Morgan e
duale a.b = a + ¯ ←→ a + b = a.¯ ¯ b ¯b

On peut g´n´raliser ` n variables : e e a x1 .x2 . . . . .xn = x1 + x2 + . . . + xn ←→ x1 + x2 + . . . + xn = x1 .¯2 . . . . .¯n ¯ ¯ ¯ ¯ x x
duale

2.
2.1
2.1.1

Fonctions bool´ennes e
Fonctions bool´ennes simples e
D´finitions e

On appelle fonction bool´enne simple une application de {0, 1}n dans e {0, 1} : (x1 , x2 , ..., xn ) −→ f (x1 , x2 , ..., xn ) (x1 , x2 , ..., xn ) est appel´e variable bool´enne g´n´rale. f est appel´e fonction e e e e e a ` n variables. Une valeur donn´e de (x1 , x2 , ..., xn ) est appel´e point de la e e fonction. La fa¸on la plus simple de d´finir une fonction est de donner la liste de c e ses valeurs en chaque point. On peut le faire sous la forme d’un tableau que l’on appelle aussi table de v´rit´. La figure 2.1 donne la table de v´rit´ d’une e e e e fonction ` 3 variables. a L’ensemble des points de la fonction forme le domaine de la fonction. On dit qu’une fonction couvre tous les points pour lesquelles elle vaut 1 (sousensemble du domaine pour lequel la fonction vaut 1). La fonction f d´finie par e la 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 bool´enne peut servir ` repr´senter un ensemble : e a e la fonction vaut 1 en chacun des points appartenant ` l’ensemble. On parle de a fonction caract´ristique. e
f

2.1.2

Les fonctions ` 2 variables a

Les fonctions ` deux variables sont d´finies sur les 4 points a e (0, 0), (0, 1), (1, 0), (1, 1). En chacun de ces 4 points une certaine fonction peut prendre une des deux valeurs 0 ou 1. Il y a donc 24 = 16 fonctions possibles.

2. Fonctions bool´ennes e

29

x1 0 0 1 1 x1 0 0 1 1 x2 0 1 0 1

x2 0 1 0 1 f8 1 0 0 0

f0 0 0 0 0 f9 1 0 0 1

f1 0 0 0 1 f10 1 0 1 0

f2 0 0 1 0

f3 0 0 1 1 f11 1 0 1 1

f4 0 1 0 0 f12 1 1 0 0

f5 0 1 0 1 f13 1 1 0 1

f6 0 1 1 0 f14 1 1 1 0

f7 0 1 1 1 f15 1 1 1 1

Fig. 2.2 – Les tables de v´rit´ des 16 fonctions ` deux variables e e a

Les tables de v´rit´ des 16 fonctions ` deux variables sont list´es dans la fie e a e gure 2.2. f1 et f7 correspondent respectivement ` la multiplication et l’addition a alg´briques vues auparavant. e 2.1.3 Duale d’une fonction

On appelle duale d’une fonction f la fonction not´e f ∗ telle que : f ∗ (X) = e ¯ On dit qu’une fonction est autoduale si f ∗ (X) = f (X), ∀X. f (X).

2.2

Fonctions bool´ennes g´n´rales e e e

On appelle fonction bool´enne g´n´rale une application F de {0, 1}n dans e e e m {0, 1} : F (x1 , x2 , . . . , xn ) −→ (f1 (x1 , x2 , ..., xn ), f2 (x1 , x2 , ..., xn ), . . . , fm (x1 , x2 , ..., xn )). Une fonction bool´enne g´n´rale est un m-uplet de fonctions simples : e e e F = (f1 , f2 , . . . , fm ).

2.3

Relations d’ordre

L’ordre d´fini sur B est ´tendu aux variables g´n´rales et aux fonctions e e e e bool´ennes. e La relation d’ordre partiel sur les variables bool´ennes g´n´rales est d´finie e e e e par : (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 bool´ennes simples est d´finie e e comme suit. La fonction f est inf´rieure ` la fonction g si et seulement si pour e a tout point P : f (P ) ≤ g(P ) ; c’est-`-dire si tous les points couverts par f sont a couverts par g.
Remarque : Si f et g sont respectivement les fonctions carat´ristiques des e ensembles A et B, f ≤ g signifie que A est inclus dans B.

30

Alg`bre de Boole et fonctions bool´ennes e e

La relation d’ordre partiel sur les fonctions bool´ennes g´n´rales est d´finie e e e e comme suit. La fonction g´n´rale F = (f1 , f2 , . . . , fm ) est inf´rieure ` la fonce e e a tion G = (g1 , g2 , . . . , gm ) si pour tout i dans 1..m, on a fi ≤ gi .

2.4

Fonctions phi-bool´ennes e

Une fonction bool´enne partielle est une fonction bool´enne dont la valeur e e n’est pas d´finie en chaque point. Dans la pratique les fonctions partielles e sont utilis´es pour d´finir des fonctions dont la valeur en certains points est e e indiff´rente ou dont la valeur des entr´es en certains points est impossible. e e On peut coder une fonction partielle f par une fonction totale dont le codomaine est compl´t´ par une valeur appel´e Φ. La valeur Φ est associ´e ee e e aux points non d´termin´s de f . Une telle fonction est dite phi-bool´enne. e e e D´finition On appelle fonction phi-bool´enne une application f de {0, 1}n e e dans {0, 1, Φ} : (x1 , x2 , ..., xn ) −→ f (x1 , x2 , ..., xn ).
Remarque : Le choix de la lettre Φ vient de sa forme qui peut ˆtre vue e comme la superposition d’un 1 et d’un 0.
f

Exemple E2.1 : Une fonction phi-bool´enne e Soit la fonction ` 4 variables f (x1 , x2 , x3 , x4 ) qui vaut 1 si l’entier compris entre a 0 et 9, cod´ en binaire sur 4 bits correspondant aux valeurs de x1 , x2 , x3 , x4 , est e pair et 0 sinon. Cette fonction est partielle puisque sa valeur est indiff´rente e pour les points correspondant ` des valeurs comprises entre 10 et 15. On a peut la coder en fonction phi-bool´enne en associant la valeur Φ ` chacun des e a points (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-bool´enne Soit f une fonction phi-bool´enne. e e La borne sup´rieure de f est obtenue en rempla¸ant tous les Φ par des 1. Elle e c est not´e SUP(f). La borne inf´rieure de f est obtenue en rempla¸ant tous les e e c Φ par des 0. Elle est not´e INF(f). Si nous ´tendons la relation d’ordre donn´e e e e sur B sur {0, 1, Φ} en posant 0 ≤ Φ ≤ 1, nous avons : INF(f) ≤ f ≤ SUP(f). Le tableau ci-dessous donne les bornes sup´rieure et inf´rieure d’une fonction e e phi-bool´enne : e x1 x2 f INF(f) SUP(f) 0 0 Φ 0 1 1 0 1 1 1 0 1 Φ 0 1 1 1 0 0 0

3. Repr´sentation des fonctions bool´ennes e e

31

3.

Repr´sentation des fonctions bool´ennes e e

Comme nous l’avons vu pr´c´demment la fa¸on la plus simple de repr´senter e e c e une fonction est de donner la liste de ses valeurs. Cette repr´sentation, dite e en extension, n’est malheureusement plus possible d`s que le nombre de vae riables augmente. En effet une fonction ` n variables comporte 2n valeurs. a De nombreux types de repr´sentation plus compactes, dites en compr´hension e e existent. Leur utilisation varie principalement suivant leur degr´ de complexit´ e e et de facilit´ de manipulation ` des fins d’impl´mentation mat´rielle (Cf. Chae a e e pitre 8). Nous donnons dans cette partie trois types de repr´sentations, tr`s utie e lis´es aujourd’hui : les expressions alg´briques, les tableaux de Karnaugh et les e e BDD. Outre les repr´sentations des fonctions simples nous montrons comment e repr´senter une fonction g´n´rale ` l’aide de la repr´sentation des m fonctions e e e a e simples qui la composent.

3.1
3.1.1

Expressions alg´briques e
D´finitions e

Expression bool´enne alg´brique : Toute fonction bool´enne peut ˆtre e e e e repr´sent´e par une expression alg´brique construite ` partir des noms des e e e a variables simples de la fonction, des constantes 0 et 1, et des op´rations de e l’alg`bre de Boole. Par exemple, f (x1 , x2 ) = x1 .(x2 + x1 .x2 ) ou g(x1 , x2 ) = e ¯ 1.(0 + x1 .x2 ). ¯ Cette repr´sentation n’est pas unique. Par exemple, x1 .(x2 + x1 .x2 ) + x2 et e ¯ ¯ x1 + x2 sont deux expressions alg´briques d’une mˆme fonction. ¯ e e Litt´ral : On appelle litt´ral l’occurrence d’une variable ou de son e e compl´ment dans une expression alg´brique. Les litt´raux apparaissant dans e e e l’expression de la fonction f d´finie ci-dessus sont : x1 , x2 , x2 . e ¯ Monˆme : On appele monˆme un produit de p litt´raux distincts. Par o o e exemple, x1 .x2 .x3 . Un monˆme est dit canonique pour une fonction s’il contient ¯ o toutes les variables de la fonction. Chaque ligne de la table de v´rit´ correse e pond ` un monˆme canonique. On note dans le monˆme x si la variable x vaut a o o ¯ 0, x si elle vaut 1. Dans la table 2.1 la deuxi`me ligne correspond au monˆme e o canonique x1 .x2 .x3 . ¯ ¯ Forme polynˆmiale : On dit qu’une expression est sous forme polynˆmiale o o si elle est ´crite sous forme de somme de monˆmes. Par exemple, f (x1 , x2 ) = e o x1 + x1 .x2 . ¯

32

Alg`bre de Boole et fonctions bool´ennes e e

3.1.2

Th´or`me de Shannon e e

Soit f (x1 , x2 , ..., xn ) une fonction simple de B n dans B : ∀i ∈ 1..n f (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 appel´s cofacteurs positif et n´gatif de f par rapport ` la variable xi . Ils sont e e a not´s respectivement fxi et fxi . e La d´composition de Shannon sur la variable xi s’´crit : f = xi .fxi + xi .fxi . e e Cette d´composition est unique. e Il existe la forme duale du th´or`me de Shannon : e e 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 th´or`me de Shannon sur toutes les vae e riables de la fonction, on obtient une forme polynˆmiale compos´e de tous les o e monˆmes canoniques affect´s de coefficients correspondant aux valeurs de la o e fonction. Par exemple, pour une fonction ` deux variables on obtient : a 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 appel´e premi`re forme de Lagrange. Toute fonction e e poss`de une et une seule forme de ce type. C’est une expression canonique. e On simplifie en g´n´ral cette forme en supprimant tous les monˆmes dont le e e o coefficient est 0 et en enlevant les coefficients ` 1. a Exemple E2.2 : Premi`re forme de Lagrange d’une fonction e x1 x2 Soit h une fonction ` deux variables d´finie par la a e 0 0 table ci-contre. Son expression alg´brique sous la e 0 1 premi`re forme de Lagrange est : e h(x1 , x2 ) = x1 .x2 .1 + x1 .x2 .1 + x1 .x2 .0 + x1 .x2 .0 = ¯ ¯ ¯ ¯ 1 0 x1 .x2 + x1 .x2 qui se simplifie en x1 . ¯ ¯ ¯ ¯ 1 1

y 1 1 0 0

En utilisant la forme duale du th´or`me de Shannon, on obtient la deuxi`me e e e forme de Lagrange, un produit de sommes appel´es monales. e 3.1.4 Expressions polynˆmiales des fonctions ` 2 variables o a

La figure 2.3 donne l’expression polynˆmiale des 16 fonctions de deux vao riables bool´ennes. e En logique, la somme est aussi appel´e disjonction alors que dans le domaine e des circuits, c’est l’op´ration ou exclusif qui est appel´e disjonction. e e

3. Repr´sentation des fonctions bool´ennes e e

33

Fonctions Expressions f0 0 f1 x1 .x2 f2 x1 .x2 ¯ f3 x1 f4 x1 .x2 ¯ f5 x2 f6 x1 .x2 + x1 .x2 ¯ ¯ f7 x1 + x2 f8 x1 + x2 f9 x1 .x2 + x1 .x2 ¯ ¯ f10 x2 ¯ f11 x1 + x2 ¯ f12 x1 ¯ f13 x1 + x2 ¯ f14 x1 .x2 f15 1

Noms usuels et, and, produit

ou exclusif ou, or, somme ni, non ou, nor conjonction compl´ment de x2 e compl´ment de x1 e implication exclusion, non et, nand tautologie

Fig. 2.3 – Expression polynˆmiale des fonctions ` deux variables o a

3.2

Tableaux de Karnaugh

3.2.1

D´finition e

Un tableau de Karnaugh est une repr´sentation particuli`re de la table de e e v´rit´ permettant de manipuler facilement (` la main) les diff´rentes formes e e a e alg´briques polynˆmiales d’une fonction ; nous le d´finissons ici et verrons au e o e paragraphe 4. comment l’utiliser. Un tableau de Karnaugh se pr´sente comme une table ` plusieurs entr´es, e a e chaque variable de la fonction apparaissant sur une des entr´es. Par exemple, e la figure 2.7 repr´sente un tableau de Karnaugh pour une fonction ` 3 variables e a et la figure 2.5 le tableau de Karnaugh d’une fonction ` 4 variables. a Dans un tableau de Karnaugh, une seule variable change de valeur entre deux cases voisines verticalement ou horizontalement (on parle de cases adjacentes). Dans l’exemple de la figure 2.5, entre les cases de la deuxi`me et la e troisi`me colonne seule la variable a change. Le tableau peut ˆtre vu comme un e e hypercube o` chaque sommet correspond ` un point de la fonction. Deux somu a mets sont adjacents s’il existe dans l’hypercube une arˆte entre eux (Cf. Figure e 2.4).

34

Alg`bre de Boole et fonctions bool´ennes e e

c (0,0,1) (1,0,1) (0,0,0) (1,0,0) a (a) (1,1,0) (b) (1,1,1) (0,1,0) b (0,1,1) 0 1 00 * O 01 O 11 10 O

Fig. 2.4 – a) Repr´sentation sur un hypercube ` 3 dimensions d’une fonction ` trois e a a variables a, b et c. b) Pr´sentation du tableau de Karnaugh associ´ ; les cases e e marqu´es d’un O sont adjacentes ` la case marqu´e d’une ´toile. e a e e

ab cd

00 0 1 0 0

01 0 1 0 0

11 1 0 0 1

10 1 0 0 1 ¯ a.d

00 01 11 a.¯.d ¯c 10

Fig. 2.5 – Un tableau de Karnaugh ` 4 variables a

3.2.2

Obtention d’une somme de monˆmes ` partir d’un tableau o a de Karnaugh

En dimension 2, les colonnes et lignes d’un tableau de Karnaugh sont agenc´es de telle fa¸on qu’un monˆme de la fonction corresponde ` un rectangle e c o a de 2n cases adjacentes portant la valeur 1. Un tel regroupement de cases correspond ` la simplification d’une somme de monˆmes en un seul monˆme. Les a o o cases de la premi`re ligne (resp. colonne) sont adjacentes ` celle de la derni`re. e a e Ainsi les 4 cases des coins d’un tableau de Karnaugh ` 4 variables peuvent a aussi former un monˆme. Une fois les regroupements effectu´s l’obtention des o e variables du monˆme se fait ais´ment. Ce sont celles qui ne changent pas de o e valeur entre les diff´rentes cases correspondant au monˆme. e o Sur l’exemple de la figure 2.5, le monˆme correspondant au regroupement o ¯ de 4 cases est a.d puisque a poss`de la valeur 1 pour ces 4 cases et d poss`de e e la valeur 0 pour ces 4 cases. Il correspond ` la simplification suivante ` partir a a ¯ ¯ des 4 monˆmes canoniques : a.b.¯.d + a.¯ c.d + a.b.c.d + a.¯ d = a.b.d.(c + c) + o c ¯ b.¯ ¯ b.c. ¯ ¯

3. Repr´sentation des fonctions bool´ennes e e

35

ab 00 cd

01 0 1 1 1
e=0

11 0 0 0 0

10 1 0 0 0

ab 00 cd

01 0 1 0 0
e=1

11 0 1 1 0

10 1 1 1 0

00 01 11 10

0 1 1 1

00 01 11 10

0 1 0 0

Fig. 2.6 – Un tableau de Karnaugh ` 5 variables a

¯ ¯ ¯ a.¯ d.(c + c) = a.b.d + a.¯ d = a.d.(b + ¯ = a.d. b. ¯ ¯ b. ¯ b) Ce type de repr´sentation est bien adapt´ aux fonctions de 2 ` 5 variables. e e a Les fonctions ` 5 variables peuvent ˆtre repr´sent´es sur deux tableaux de a e e e Karnaugh ` 4 variables (l’un pour une des variables ` 0, l’autre pour cette a a mˆme variable ` 1). Deux cases situ´es ` la mˆme place sur les 2 tableaux sont e a e a e adjacentes. Sur la figure 2.6, les 2 regroupements gris´s sont un seul monˆme : e o a.¯.d. Il correspond ` la simplification ` partir des 4 monˆmes canoniques ¯c a a o suivants : a.¯ c.d.¯+ a.b.¯.d.¯+ a.¯ c.d.e+ a.b.¯.d.e = a.¯.d.¯.(b+ ¯ a.¯.d.e.(b+ ¯ b.¯ e ¯ c e ¯ b.¯ ¯ c ¯c e b)+ ¯ c ¯ = a.¯.d.¯ + a.¯.d.e = a.¯.d.(e + e) = a.¯.d. b) ¯ c e ¯ c ¯c ¯ ¯c L’expression polynˆmiale de la fonction d´finie par les tableaux de Karo e naugh de la figure 2.6 est a.¯.d + a.c.¯ + a.d.e + a.¯ c.d. ¯c ¯ e b.¯ ¯ On peut proc´der de la mˆme mani`re pour des fonctions ` 6 variables en e e e a dessinant 4 tableaux ` 4 variables, au-del` cela devient inextricable. a a 3.2.3 Obtention d’un produit de monaux

On peut obtenir facilement une forme compos´e des monaux d’une fonction e (forme duale) ` partir de son tableau de Karnaugh. Pour cela on regroupe les a cases adjacentes comportant des 0. Les variables du monal sont celles qui ne changent pas mais sont donn´es sous forme compl´ment´e par rapport ` leur e e e a valeur. L’expression alg´brique sous forme produit de monaux de la fonction f e d´finie par le tableau de Karnaugh de la figure 2.7 est : f (a, b, c) = (a+¯)(¯ c). e c b+¯

3.3

Graphes de d´cision binaire e

Les graphes de d´cision binaire (en anglais Binary Decision Diagram : e BDD) ont ´t´ introduits par Akers et Bryant dans les ann´es 80 ([Bry86]). ee e Ils sont utilis´s dans les outils de C.A.O. de synth`se logique depuis une die e

36

Alg`bre de Boole et fonctions bool´ennes e e

c

ab

00 1 0

01 1 0

11 1 0

10 1 1 ¯+c b ¯

0 a+c ¯ 1

Fig. 2.7 – Monaux sur un tableau de Karnaugh f xi 0 fxi 1 fxi

Fig. 2.8 – La d´composition de Shannon repr´sent´e par un arbre binaire e e e

zaine d’ann´es. Ils permettent de repr´senter et de manipuler des fonctions e e bool´ennes de grande taille. e Nous allons d´finir tout d’abord les arbres de Shannon, un BDD ´tant e e un graphe acyclique orient´ ayant les mˆmes chemins que l’arbre de Shane e non associ´ mais dans lequel il n’y a pas de redondances. Tout l’int´rˆt des e ee BDD est que l’on sait les construire, ` coˆt algorithmique int´ressant, ` partir a u e a d’une autre repr´sentation (par exemple, une forme alg´brique) sans avoir ` e e a construire l’arbre de Shannon (Cf. Paragraphe 4.3). 3.3.1 Arbre de Shannon

On peut repr´senter la d´composition de Shannon par un arbre binaire o` e e u la racine est ´tiquet´e par la variable de d´composition, le fils droit par le e e e cofacteur positif et le fils gauche par le cofacteur n´gatif (Cf. Figure 2.8). e Si l’on it`re la d´composition de Shannon avec cette repr´sentation sur les e e e deux cofacteurs, pour toutes les variables de f , on obtient un arbre binaire, appel´ arbre de Shannon, dont les feuilles sont les constantes 0 et 1 et les e noeuds sont ´tiquet´s par les variables de la fonction (Cf. Figure 2.9-a sans e e tenir compte des parties gris´es). e Un tel arbre est une repr´sentation ´quivalente ` la table de v´rit´ de la e e a e e fonction. Les valeurs de la fonction se trouvent sur les feuilles de l’arbre. Pour une valeur donn´e de la fonction, la valeur de chaque variable est donn´e par e e l’´tiquette de l’arc emprunt´ pour aller de la racine ` la feuille correspondante. e e a Sur l’exemple de la figure 2.9-a, la fonction f a comme premi`re forme de e Lagrange : f (a, b, c) = a.¯ c + a.b.¯ + a.¯ c + a.b.¯ + a.b.c. ¯ b.¯ ¯ c b.¯ c Une fois fix´ un ordre total sur les variables, ´tant donn´ l’unicit´ de la e e e e d´composition de Shannon, la repr´sentation sous forme d’arbre de Shannon e e

3. Repr´sentation des fonctions bool´ennes e e

37

f a a

f

b

b

b

b

c

c

c

c

c

c

1

0

1

0

1

0

1

1

1

0

1

1

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

est unique.

3.3.2

Redondance dans les arbres de Shannon

On d´finit la taille d’un arbre de Shannon par le nombre de ses noeuds. e Un arbre de Shannon est de taille 2n − 1, n ´tant le nombre de variables de la e fonction repr´sent´e. e e Il existe dans cette repr´sentation des redondances. Par exemple, certains e sous-arbres sont identiques. La figure 2.9-b montre la mise en commun de trois sous-arbres identiques (ceux qui sont en gris´s sur la partie a de la figure). e En consid´rant les feuilles comme des sous-arbres ´l´mentaires, le graphe e ee ne poss`de plus qu’un seul noeud ` 1 et un seul noeud ` 0. Pour l’exemple de e a a la figure 2.9 on obtient le graphe de la figure 2.10-a. On peut ´galement ´liminer les noeuds tels que tous les arcs sortants ont la e e mˆme cible. Sur l’exemple pr´c´dent, on supprime ainsi deux noeuds (Cf. Fie e e gure 2.10-b). Le graphe sans redondance est appel´ graphe de d´cision binaire r´duit. e e e Dans le cas o` il poss`de le mˆme ordre de d´composition des variables sur u e e e tous ses chemins, on parle de ROBDD (en anglais Reduced Ordered BDD). Un ROBDD est encore canonique. La taille effective du ROBDD d´pend de l’ordre e choisi pour les variables. Un probl`me est de trouver un ordre optimal. e D’autres m´thodes de simplification de BDD consistent ` ajouter des infore a mations suppl´mentaires sur les arcs, on parle alors de BDD typ´s. Le lecteur e e pourra trouver des informations d´taill´es sur ces m´thodes dans [Bry86]. e e e

38

Alg`bre de Boole et fonctions bool´ennes e e

f a a

f a

f

b

b

b

b

b

c

c

c

c

c

1 (a)

0

1

0 (b)

1

0

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

4.

Manipulation de repr´sentations e de fonctions bool´ennes e

Un circuit est en g´n´ral sp´cifi´ par une fonction bool´enne. Nous vere e e e e rons dans le chapitre 8 comment peut ˆtre r´alis´ le processus de synth`se e e e e d’une fonction bool´enne vers une technologie cible. Selon les outils, la forme e de d´part de la fonction dans ce processus influe ´norm´ment sur la forme e e e du circuit r´sultant et en particulier sur ses performances en terme de rapie dit´ de calcul, surface en millim`tres carr´s, consommation ´lectrique, etc. Ces e e e e crit`res de performance peuvent ˆtre traduits de fa¸on plus ou moins pr´cise en e e c e crit`res simples d’optimisation sur les formes des fonctions bool´ennes. Nous e e justifierons ces crit`res au chapitre 8. e Nous indiquons dans ce paragraphe quelques formes particuli`res et e quelques m´thodes pour manipuler l’expression d’une fonction bool´enne ` e e a des fins d’optimisation en vue d’une impl´mentation physique. e Les premi`res m´thodes bas´es sur les tableaux de Karnaugh ont vu le e e e jour dans les ann´es 50 [Kar53]. Elles permettent d’obtenir une forme poe lynˆmiale minimis´e de fa¸on manuelle. Des algorithmes permettant de trouver o e c une forme polynˆmiale minimale ont ensuite ´t´ d´velopp´ dans les ann´es 60 o ee e e e et 70 [Kun65, Kun67]. Devant l’augmentation de la complexit´ des fonctions et e des formes n´cessaires pour une impl´mentation dans des technologies de plus e e en plus vari´es, des m´thodes bas´es sur des repr´sentations plus compactes, e e e e en particulier graphe de d´cision binaire, ont vu le jour depuis. e

4. Manipulation de repr´sentations de fonctions bool´ennes e e

39

4.1

Formes particuli`res pour l’expression d’une e fonction bool´enne e

La plupart des technologies cibles actuelles (Cf. Chapitre 8) n´cessitent des e d´compositions des fonctions en expressions d’une forme particuli`re. e e Pour certaines cibles technologiques une forme non polynˆmiale, appel´e o e forme factoris´e, peut ˆtre n´cessaire. Le crit`re de minimisation est le nombre e e e e de litt´raux apparaissant dans l’expression de la fonction. Par exemple, la e forme alg´brique de la fonction : f (a, b, c, d) = a.(¯ c + d)) + a.b poss`de e ¯ b.(¯ e 6 litt´raux. Des m´thodes ont ´t´ mises au point permettant d’automatiser e e ee la recherche de formes factoris´es ` nombre de litt´raux minimal. Le lecteur e a e pourra trouver des d´tails sur ces m´thodes dans [BRWSV87]. Il est ` noter que e e a ces m´thodes sont aujourd’hui souvent employ´es sur des formes en ROBDDs. e e On peut vouloir aboutir ` une repr´sentation de forme quelconque mais ` a e a nombre de variables limit´, par exemple, un ensemble de fonctions d’au plus e 8 variables. On peut souhaiter une forme polynˆmiale ` nombres de monˆmes o a o et de variables limit´s, par exemple, un ensemble de fonctions d’au plus 10 e monˆmes poss´dant chacun au plus 6 variables. Il peut aussi ˆtre n´cessaire de o e e e repr´senter les fonctions avec un ensemble de formes fix´es. Ce sont en g´n´ral e e e e des formes de petite taille (nombre de variables inf´rieur ` 6) avec des formes e a polynˆmiales ou factoris´es fix´es strictement. On parle alors de biblioth`que. o e e e On devra par exemple aboutir ` un ensemble de fonctions poss´dant une des a e formes suivantes : a + b, a.¯ a.b, a.b + a.c ou a.¯ + a.b. ¯ b, ¯ ¯b Le probl`me est donc dans tous les cas de partir d’une fonction bool´enne e e et d’aboutir ` un ensemble de fonctions respectant la ou les formes impos´es a e par la technologie cible. Des algorithmes propres ` chaque technologie ont ´t´ a ee d´velopp´s. e e Les crit`res d’optimisation sont alors le nombre de fonctions (qui est li´ ` la e ea surface du circuit r´sultant) et le nombre d’´tages de sous-fonctions imbriqu´es e e e (qui est li´ au temps de calcul du circuit). Le nombre d’´tages maximal est e e appel´ chemin critique. e Exemple E2.3 Soit la fonction f d´finie par l’expression alg´brique : e e f (a, b, c, d) = a.b.c + a.¯ c + c.d + c.d. Regardons les solutions auxquelles on ¯ b.¯ ¯¯ peut aboutir avec des formes cibles diff´rentes. e Si l’on veut aboutir ` des fonctions poss´dant au plus trois variables : a e ¯ avec SF = a.b.c + a.¯ c. Le nombre de litt´raux f (a, b, c, d) = SF + c.d + c.d ¯ ¯ b.¯ e est 11. Le nombre de fonctions imbriqu´es maximal est ´gal ` 2 : (f, SF ). Une e e a nouvelle fonction appel´e sous-fonction SF a ´t´ introduite pour parvenir ` e ee a un ensemble de fonctions respectant le crit`re. e Si l’on veut aboutir ` des fonctions poss´dant au plus deux monˆmes de a e o trois variables : f (a, b, c, d) = SF1 + SF2 avec SF1 = a.b.c + a.¯ c et SF2 = ¯ b.¯ c.d + c.d. Deux sous fonctions ont ´t´ introduites. Le nombre de litt´raux est ¯¯ ee e 12 . Le chemin critique est ´gal aussi ` 2. e a

40

Alg`bre de Boole et fonctions bool´ennes e e

Si l’on veut aboutir ` des fonctions de la forme a + b ou a.¯ ou a.b ou a ¯b ¯ + a.b : f (a, b, c, d) = SF1 + SF2 avec SF1 = a.SF3 + a.SF4 et a.b + a.c ou a.b ¯ ¯ ¯ SF2 = c.d + c.d. De plus SF3 = b.c et SF4 = ¯ c. Le nombre de litt´raux est ¯¯ b.¯ e 14. Le chemin critique est ´gal ici ` 3 (f, SF1 , SF3 ). e a

4.2

Obtention d’une forme polynˆmiale o

De nombreuses technologies de r´alisation des circuits n´cessitent une forme e e polynˆmiale. Le crit`re d’optimisation est alors le nombre de monˆmes apo e o paraissant dans la forme polynˆmiale puis le nombre de variables dans ces o monˆmes. Un certain nombre de techniques de simplification respectant ce o crit`re ont ´t´ mises au point et int´gr´es dans les outils modernes de CAO. e ee e e Nous montrons ici comment obtenir une forme polynˆmiale r´duite ` partir o e a d’un tableau de Karnaugh. Cette m´thode peut ˆtre pratiqu´e ` la main pour e e e a des fonctions ayant moins de 6 variables. 4.2.1 D´finitions e

Monˆme premier : un monˆme m est dit premier pour une fonction f si o o l’on a : m ≤ f et s’il n’existe pas m = m tel que m ≤ m et m ≤ f . Base : on appelle base d’une fonction bool´enne une forme polynˆmiale de la e o fonction compos´e uniquement de monˆmes premiers. On appelle base compl`te e o e la base compos´e de tous les monˆmes premiers de la fonction. e o Base irr´dondante : une base est dite irr´dondante si, d`s que l’on ˆte e e e o l’un des monˆmes qui la composent, on n’a plus une base de la fonction. Une o fonction bool´enne peut avoir plusieurs bases irr´dondantes. e e Le but de la minimisation est donc d’obtenir une base irr´dondante e poss´dant le minimum de monˆmes. e o 4.2.2 Obtention d’une forme polynˆmiale minimale ` partir d’un o a tableau de Karnaugh

On peut obtenir de fa¸on tr`s visuelle les monˆmes premiers sur un tableau c e o de Karnaugh ` 2 dimensions en cherchant les pav´s de cases adjacentes valant a e 1, les plus grands possible. Exemple E2.4 La fonction repr´sent´e sur la figure 2.11 poss`de 5 e e e ¯ ¯ d, M 4 = a.¯.d, ¯ monˆmes premiers : M 1 = b.¯, M 2 = b.c.d, M 3 = a.b. o c ¯ ¯c ¯ ¯ Elle poss`de 2 bases irr´dondantes : M 1 + M 2 + M 4 + M 5 M 5 = a.b.c. ¯ e e et M 1 + M 2 + M 3. L’expression minimale (en nombre de monˆmes) de la o fonction est : f = b.¯ + ¯ c b.c.d + a.¯ d ¯ b. ¯

4. Manipulation de repr´sentations de fonctions bool´ennes e e

41

ab 00 cd

01 1 1 0 0

11 1 1 0 0

10 0 0 1 0

00 01 11 10

1 0 1 1

Fig. 2.11 – La base compl`te d’une fonction bool´enne e e

4.2.3

Probl`me de la minimisation polynˆmiale e o

Le nombre de monˆmes premiers et de bases irr´dondantes d’une fonction o e peut ˆtre tr`s grand et une solution tr`s longue ` trouver. Le probl`me de la e e e a e d´termination d’une base irr´dondante minimale est un probl`me NP-complet. e e e La m´thode consiste ` trouver la base compl`te puis ` extraire toutes les bases e a e a irr´dondantes par essais successifs de suppression de chaque monˆme. Devant e o l’accroissement de la taille des fonctions ` manipuler, les outils de CAO sont a pourvus de minimiseurs qui sont bas´s sur des algorithmes ` base d’heuristiques e a diverses. Cas des fonctions phi-bool´ennes : Les monˆmes premiers d’une fonction e o phi-bool´enne sont ceux de sa borne sup´rieure. Une base d’une fonction phie e bool´enne est une somme de monˆmes premiers telle que tous les points de e o la borne inf´rieure sont couverts par au moins un de ses monˆmes premiers. e o La m´thode pour trouver une forme minimale d’une fonction phi-bool´enne e e consiste ` trouver tous les monˆmes premiers de la borne sup´rieure puis ` a o e a trouver toutes les bases irr´dondantes par rapport ` sa borne inf´rieure. e a e Une fonction phi-bool´enne est une fonction totale codant une fonction e partielle et telle que chacun des Φ correspond ` une valeur indiff´rente. On peut a e par cons´quent associer ` ce Φ la valeur 1 ou bien la valeur 0. Pratiquement, e a on va remplacer certains Φ par des 0 et d’autres par des 1 de fa¸on ` obtenir c a un minimum de monˆmes. o Exemple E2.5 Le monˆme repr´sent´ sur le tableau de Karnaugh de la o e e figure 2.12-a n’est pas premier pour f car il est plus petit que a.c qui est un monˆme de la borne sup´rieure. Les deux monˆmes a.c et b.¯.d de la figure o e o c 2.12-c suffisent pour couvrir les points de la borne inf´rieure. e

42

Alg`bre de Boole et fonctions bool´ennes e e

ab cd

00 01 Φ 0 0 0 Φ 1 0 0 (a)

11 10 0 1 1 1 0 0 Φ 1

ab cd

00 01 1 0 0 0 1 1 0 0 (b)

11 10 0 1 1 1 0 0 1 1

ab cd

00 01 Φ 0 0 0 Φ 1 0 0 (c)

11 10 0 1 1 1 0 0 Φ 1

00 01 11 10

00 01 11 10

00 01 11 10

Fig. 2.12 – a) Une fonction Phi-Bool´enne f . b) La base compl`te de la borne sup´rieure e e e de f . c) La seule base irr´dondante de f . e

Cas des fonctions g´n´rales : Dans le cas d’une fonction g´n´rale F = e e e e n t (f1 , f2 , . . . , ft ) de B dans B , le crit`re de minimisation est le nombre de e monˆmes de l’ensemble des t fonctions simples qui composent la fonction o g´n´rale. e e Un monˆme g´n´ral M est un couple (m, (v1 , . . . , vt )) o` m est un monˆme o e e u o d’une des fonctions fi (i = 1, . . . , t) et (v1 , . . . , vt ) est un vecteur bool´en. Il e d´finit la fonction g´n´rale : (v1 .m, . . . , vt .m). Par exemple, le monˆme g´n´ral e e e o e e associ´ ` un monˆme m ne figurant que dans l’expression de la fonction f2 e a o est : (m, (0, 1, 0, . . . , 0)) ; le monˆme g´n´ral associ´ au monˆme p figurant dans o e e e o l’expression de chacune des fonctions fi (i = 1, . . . , t) est : (p, (1, 1, . . . , 1)). Soient M et M deux monˆmes g´n´raux : M = (m, (v1 , v2 , . . . , vt )) et o e e M = (m , (v1 , v2 , . . . , vt )). On d´finit un ordre sur les monˆmes g´n´raux : M ≤ M ⇔ (m ≤ m ) et e o e e (v1 , v2 , . . . , vt ) ≤ (v1 , v2 , . . . , vt ). De la mˆme fa¸on que pour une fonction simple, on d´finit les monˆmes e c e o g´n´raux premiers. Un monˆme g´n´ral M est dit premier pour une fonction e e o e e g´n´rale F si l’on a : M ≤ F et s’il n’existe pas M = M tel que M ≤ M et e e M ≤ F. La m´thode de minimisation en utilisant des tableaux de Karnaugh consiste e a ` prendre tous les regroupements de cases maximaux sur plusieurs tableaux ` a la fois. Un regroupement de plusieurs cases dans un des tableaux de Karnaugh peut ne pas ˆtre maximal dans ce tableau mais correspondre ` un monˆme e a o premier g´n´ral parce qu’il apparaˆ dans plusieurs tableaux ` la fois. e e ıt a Pour obtenir tous ces monˆmes premiers g´n´raux on cherche d’abord tous o e e les monˆmes premiers de chaque fonction composant la fonction g´n´rale. On o e e fait ensuite tous les produits possibles de ces monˆmes entre eux, le produit o de deux monˆmes g´n´raux ´tant d´fini par : M.M = (m.m , (v1 + v1 , v2 + o e e e e

4. Manipulation de repr´sentations de fonctions bool´ennes e e

43

ab 00 cd

01 0 1 1 1
f1

11 0 0 0 0

10 1 0 0 0

ab 00 cd

01 0 1 0 0
f2

11 0 1 1 0

10 1 1 1 0

00 01 11 10

0 1 1 1

00 01 11 10

0 1 0 0

Fig. 2.13 – Les bases compl`tes des fonctions f1 et f2 e M4
ab 00 cd

01 0 1 1 1
f1

11 0 0 0 0

10 M6 1 0 0 0 M3 M7

ab 00 cd

01 0 1 0 0
f2

11 0 1 1 0

10 1 1 1 0 M5

00
M1

0 1 1 1

00 01 11 10

0 1 0 0

01 11 10 M2

Fig. 2.14 – La base compl`te de la fonction g´n´rale F = (f1 , f2 ) e e e

v2 , . . . , vt + vt )). Enfin, on ne garde que les monˆmes les plus grands. o Exemple E2.6 Sur la figure 2.13 sont repr´sent´es les deux bases compl`tes e e e des fonctions f1 et f2 . Ces deux bases sont irr´dondantes. e Sur la figure 2.14 est repr´sent´e la base compl`te de la fonction g´n´rale e e e e e F = (f1 , f2 ). Les monˆmes gris´s sont des monˆmes g´n´raux premiers obtenus o e o e e par produits des monˆmes : (a.¯ c.d, (1, 0)) et (a.¯ c, (0, 1)) pour (a.¯ c.d, (1, 1)) o b.¯ ¯ b.¯ b.¯ ¯ et (¯.d, (1, 0)) et (¯.d, (0, 1)) pour (¯.¯.d, (1, 1)). a c ac Dans cet exemple, le monˆme g´n´ral M 7 = (¯.¯.d, (1, 1)) est premier car il o e e ac n’existe pas de monˆme plus grand que a.¯.d ` la fois dans f1 et f2 . Le monˆme o ¯c a o g´n´ral M 5 = (a.d, (0, 1)) est premier car dans f2 , il n’existe pas de monˆme e e o plus grand que (a.d) et (a.d) n’est pas un monˆme de f1 . La fonction g´n´rale o e e F = (f1 , f2 ) poss`de 7 monˆmes premiers g´n´raux M 1 = (¯.d, (1, 0)), M 2 = e o e e a (¯.c, (1, 0)), M 3 = (¯.d, (0, 1)), M 4 = (a.¯ c, (0, 1)), M 5 = (a.d, (0, 1)), M 6 = a c b.¯ (a.¯ c.d, (1, 1)), M 7 = (¯.¯.d, (1, 1)). Les deux bases irr´dondantes g´n´rales de b.¯ ¯ ac e e e

44

Alg`bre de Boole et fonctions bool´ennes e e

ab 00 cd

01 0 1 1 1
f1

11 0 0 0 0

10 1 0 0 0

ab 00 cd

01 0 1 0 0
f2

11 0 1 1 0

10 1 1 1 0

00 01 11 10

0 1 1 1

00 01 11 10

0 1 0 0

Fig. 2.15 – La base irr´dondante minimale de la fonction g´n´rale F e e e

F sont : M 1 + M 2 + M 3 + M 5 + M 6 et M 2 + M 5 + M 6 + M 7 et les 4 monˆmes o de la base irr´dondante minimale : M 6, M 7, M 5 et M 2. e

4.3

Obtention de BDDs r´duits ordonn´s e e

L’utilisation des BDDs est aujourd’hui largement r´pandue car c’est une e repr´sentation tr`s compacte et particuli`rement adapt´e ` l’obtention de e e e e a formes factoris´es et ` la d´composition en sous-fonctions. e a e Nous donnons ici les principes de base pour construire un BDD r´duit ore donn´ ` partir d’une expression bool´enne alg´brique. Le lecteur pourra trouver ea e e la justification et des d´tails d’impl´mentation logicielle de cette construction e e dans [KB90]. Nous avons vu qu’un BDD est un graphe de Shannon dans lequel il n’y a pas de redondances. Il s’agit de construire le BDD sans construire l’arbre de Shannon complet. Pour cela, on construit r´cursivement le BDD en ´vitant de e e fabriquer un sous-arbre d´j` construit. ea Soit un ordre donn´ sur les variables de la fonction. On effectue ` chaque e a ´tape de la r´cursion la d´composition de Shannon suivant la variable coue e e rante et l’on construit le BDD ` partir des BDDs des cofacteurs positif et a n´gatif de f. Pour fixer les id´es, nous donnons figure 2.16 un algorithme de e e sp´cification fonctionnelle de la construction d’un BDD ` partir d’une exprese a sion alg´brique bool´enne. Lors de la mise en oeuvre de cet algorithme, il faut e e ´viter de construire deux fois le mˆme objet. e e La fonction RepCanonique fabrique un nouveau BDD ` partir d’une variable a et de deux BDDs diff´rents, si le BDD ` construire n’existe pas, dans le cas e a contraire elle donne le graphe correspondant au BDD qui existait d´j`. Pour ea la mettre en oeuvre, il faut d´finir une table avec adressage dispers´ (hashcode e e en anglais), la fonction de dispersion portant sur la variable et les pointeurs des BDD fils. La comparaison de deux BDDs consiste en la comparaison des pointeurs associ´s aux racines des graphes. e

4. Manipulation de repr´sentations de fonctions bool´ennes e e

45

Notations /1\ : /0\ : /G, r,

: le BDD repr´sentant la valeur 1 e le BDD repr´sentant la valeur 0 e D\ : un arbre binaire de racine r, de fils gauche G et de fils droit D

Fonction principale : LeBdd (e : une expression alg´brique) −→ un BDD e { e ´tant une expression bool´enne, LeBdd(e) est le BDD associ´ ` e. } e e ea LeBdd (1) = /1\ LeBdd (0) = /0\ LeBdd (e1 op e2) = TBop (LeBdd(e1), LeBdd(e2)) LeBdd (op e) = TUop (LeBdd(e)) Fonctions interm´diaires e TBop (b1, b2 : deux BDD) −→ un BDD { b1 et b2 sont deux BDD. Il existe une fonction TBop par op´rateur bie naire trait´ : elle fabrique le BDD r´sultat de l’application de l’op´rateur e e e en question aux deux BDD b1 et b2. } TUop (b : un BDD) −→ un BDD { b est un BDD. Il existe une fonction TUop par op´rateur unaire pris e en compte : elle produit le BDD r´sultat de l’application de l’op´rateur e e au BDD b } RepCanonique (x une variable ; b1,b2 : deux BDD) −→ un BDD { RepCanonique(x, b, b) = b. x ´tant une variable, b1 et b2 deux BDDs e diff´rents, RepCanonique(x, b1, b2) est le BDD de racine x, de fils e gauche b1 et de fils droit b2. Ce BDD n’est construit que s’il n’existe pas dans l’ensemble des BDD d´j` construits } ea Exemple pour l’op´rateur OR e { On applique les r`gles de simplification triviales associ´es ` l’op´rateur e e a e or : vrai or e = vrai, faux or e = e, e or e = e } TBor (1,b) = /1\ TBor (0,b) =b TBor (b, 1) = /1\ TBor (b, 0) = b TBor (b, b) = b TBor (b1, b2) = selon b1, b2 { b1 = b2 } /Ax, x, A¯\ = b1 et /Bx, x, B¯\ = b2 : x x RepCanonique (x, TBor(Ax, Bx), TBor(A¯, B¯)) x x /Ax, x, A¯\ = b1 et /By, y, B¯\ = b2 : x y si x < y alors RepCanonique (x, TBor(Ax, b2), TBor(A¯, b2)) < x sinon RepCanonique (y, TBor(b1, By), TBor(b1, B¯)) y

Fig. 2.16 – Construction d’un BDD ` partir d’une expression alg´brique bool´enne a e e

46

Alg`bre de Boole et fonctions bool´ennes e e

5.

Exercices

E2.7 : Proposition logique Un ´tudiant dit : je vais faire du ski s’il fait beau ou s’il ne fait pas beau et e que je n’ai pas d’examen ` r´viser. Cet ´tudiant est-il s´rieux ? sportif ? Pour a e e e r´pondre donner une forme plus simple de cette proposition logique. e E2.8 : Expression bool´enne alg´brique de la majorit´ e e e Trois personnes doivent voter bleu ou rouge. D´montrer en passant par les e expressions bool´ennes alg´briques correspondantes que si la majorit´ est pour e e e le bleu alors, s’ils changent tous d’avis, la majorit´ sera pour le rouge. e E2.9 : De Morgan D´montrer les formules de De Morgan ` partir des tables de v´rit´ des fonctions e a e e somme, produit et compl´ment. e E2.10 : R`gles de simplification bool´enne e e D´montrer les r`gles de simplification suivantes ` partir des axiomes de e e a l’alg`bre de Boole. e a + a.b = a a + a.b = a + b ¯ a.b + a.b = b ¯ a.b + a.c + b.c = a.b + a.c ¯ ¯

E2.11 : Expression bool´enne e Donner une expression bool´enne de la fonction f (a, b, c) qui vaut 1 si et seulee ment si la majorit´ de ses trois variables vaut 1. e E2.12 : Ou exclusif D´montrer que l’op´rateur ou-exclusif (not´ ⊕) d´fini par x1 ⊕ x2 = x1 .x2 + e e e e ¯ x1 .x2 est associatif. ¯ E2.13 : Th´or`me de Shannon e e D´montrer la premi`re forme du th´or`me de Shannon. e e e e E2.14 : Formes de Lagrange Obtenir la deuxi`me forme de Lagrange de la fonction f (x1 , x2 ) = x1 .x2 + x1 .x2 e ¯ ¯ ¯ a ` partir de la deuxi`me forme du th´or`me de Shannon. e e e E2.15 : Poids d’un vecteur bool´en e On appelle poids d’un vecteur bool´en le nombre de 1 de ce vecteur. le vecteur e (0, 1, 1, 0) a un poids de 2. Donner des expressions bool´ennes des fonctions e simples p2 , p1 et p0 qui correspondent au codage en base 2 du poids d’un vecteur de 4 variables bool´ennes x1 , x2 , x3 , x4 . e

5. Exercices

47

a f e d Fig. 2.17 – Repr´sentation du chiffre 3 sur un afficheur 7 segments e g b c

E2.16 : Tableau ` 4 variables a Donner une base irr´dondante minimale de la fonction f (a, b, c, d) = a.¯ c + e ¯ b.¯ a.¯ d + a.b.d + b.¯.d + a.b.c + a.¯.d + a.c.d . b. ¯ ¯ c ¯ c ¯ ¯ E2.17 : Tableau ` 5 variables a Donner une base irr´dondante minimale de la fonction f (a, b, c, d, e) = a.¯ + e b ¯ ¯ e + a.b.d.e + a.¯.d.¯. b.c.e + a.b.d.¯ ¯ ¯ c e E2.18 : Afficheur 7 segments Soit un afficheur ` cristaux liquides comportant 7 segments, comme il y en a a sur la plupart des calculettes. On veut r´aliser les 7 fonctions bool´ennes (a, b, c, d, e, f , g) ` 4 variables e e a (e4 , e3 , e2 , e1 ) qui correspondent aux 7 segments (Cf. Figure 2.17). La fonction bool´enne vaudra 1 si le segment doit ˆtre allum´ pour la repr´sentation du e e e e chiffre d´cimal donn´ en binaire par (e4 , e3 , e2 , e1 ). Par exemple le chiffre 3 e e (e3 e2 e1 e0 = 0011) en entr´e donne a = b = c = g = d = 1. e Ces 7 fonctions sont phi-bool´ennes car on ne veut repr´senter que les e e chiffres d´cimaux (0...9). Sur 4 bits on a aussi les entr´es de 10 ` 15 qui e e a correspondent donc ` des points ` Φ pour les 7 fonctions. Attention le 6 et a a le 9 pouvant avoir diff´rentes repr´sentations sur l’afficheur, nous choisirons ici e e de repr´senter le 6 avec le segment a allum´ et le 9 avec le segment d allum´. e e e Donner les tableaux de Karnaugh de ces 7 fonctions. Donner une base irr´dondante minmale g´n´rale de la fonction g´n´rale F = (a, b, c, d, e, f, g). e e e e e Donner les ROBDDs de a, b et c avec diff´rents ordres sur les variables. e

48

Alg`bre de Boole et fonctions bool´ennes e e

Chapitre 3 Repr´sentation des grandeurs e
Dans le chapitre 1 nous avons vu que l’ordinateur ne traite pas v´ritablement l’information mais ses repr´sentations. La repr´sentation de e e e l’information se fait ` travers un code. Pour des raisons technologiques qui a apparaissent dans le chapitre 7 la repr´sentation de toute information est un e vecteur de bool´ens, ou bits. Les bits sont identifi´s individuellement, le plus e e souvent par un simple num´ro. On parle de repr´sentation digitale de l’infore e mation. Physiquement un bool´en, ou bit, est l’´tat d’un fil ´lectrique. L’ordie e e nateur ´tant aliment´ par un g´n´rateur continu, la tension basse (la masse) e e e e repr´sente le 0 (ou Faux), la tension haute (l’alimentation) repr´sente le 1 (ou e e Vrai). Il existe cependant de nombreuses applications o` des appareils de meu sure donnent des tensions ´lectriques proportionnelles ` la grandeur mesur´e. e a e On parle dans ce cas de repr´sentation analogique de l’information. Pour ˆtre e e trait´es par un ordinateur standard (on dit num´rique, ou digital, par oppoe e sition ` analogique) ces tensions sont converties par des circuits sp´cifiques a e (Convertisseurs Analogiques Num´riques, ou, a contrario, Num´riques Analoe e giques). Dans ce chapitre, nous donnons dans le paragraphe 1. les ´l´ments de ee ce que signifie un codage par des bool´ens. Nous ´tudions ensuite les e e repr´sentations des nombres, et, ce qui va avec, les techniques de calcul e sur ces repr´sentations. Nous distinguons la repr´sentation des naturels e e (au paragraphe 2.), et celle des entiers relatifs (au paragraphe 3.). La repr´sentation de nombres r´els est bri`vement ´voqu´e dans le parae e e e e graphe 6., celle des caract`res dans le paragraphe 5. La notion de taille e de la repr´sentation est pr´sente en permanence. e e

1.
1.1

Notion de codage d’informations
Codage binaire

A un instant donn´ N fils ´lectriques sont chacun ` 0 ou ` 1. Il est n´cessaire e e a a e d’identifier chacun des fils par un num´ro, par exemple entre 0 et N − 1. L’ene

50

Repr´sentation des grandeurs e

semble des N fils peut se trouver dans une des 2N configurations possibles. Les N fils peuvent repr´senter 2N informations diff´rentes. On parle aussi des 2N e e valeurs possibles d’une information. Il y a l` une diff´rence entre le vocabulaire a e courant et un vocabulaire technique. Pour ´valuer le nombre de valeurs diff´rentes repr´sentables sur N bits, il e e e est commode d’avoir en tˆte les valeurs des petites puissances de 2 et les ordres e de grandeurs des grandes : 20 = 1 ; 21 = 2. Les puissances suivantes sont 4, 8, 16, 32, 64, 128, 28 = 256 et 210 = 1024. Comme 1000 est proche de 1024, il est facile de compl´ter la suite : 210 ≈ 103 , 220 ≈ 106 , 230 ≈ 109 , e 240 ≈ 1012 . Les pr´fixes d’unit´s correspondants sont kilo, m´ga, giga, t´ra. Un kiloe e e e bit correspond donc ` 1024 bits et non ` 1000 bits. a a Rep´rer un ´l´ment parmi un ensemble de 256 ´l´ments suppose de le loe ee ee caliser par un num´ro cod´ sur 8 bits. Dans certains contextes ce num´ro est e e e appel´ une adresse. Rep´rer un ´l´ment parmi un ensemble de 4 giga-´l´ments e e ee ee suppose de le localiser par un num´ro cod´ sur 32 bits. e e La notation de logarithme ` base 2 est parfois utilis´e : si 2N = M, log2 M = a e N ; ainsi pour repr´senter P valeurs diff´rentes il faut au moins R bits, o` e e u R est l’entier imm´diatement sup´rieur au logarithme ` base 2 de P . Ainsi e e a log2 2048 = 11 et pour repr´senter 2050 valeurs diff´rentes il faut 12 bits. e e La correspondance entre la repr´sentation par un vecteur de bool´ens et la e e valeur se fait par une convention, un code. L’ensemble des valeurs codables est caract´ristique du domaine (nombres, couleurs...) Par exemple, si une gamme e de temp´rature va de - 10 ` + 40 degr´s, et si la temp´rature est cod´e sur e a e e e 9 9 bits, la pr´cision peut ˆtre de l’ordre du dizi`me de degr´ (2 = 512 codes e e e e possibles pour 50 degr´s). Si la temp´rature est cod´e sur 12 bits la pr´cision e e e e 12 est de l’ordre du centi`me (2 = 4096 codes possibles pour 50 degr´s). e e

1.2

Un exemple : le codage des couleurs

On trouve dans la documentation du micro-ordinateur Commodore 64 le tableau de la figure 3.1 indiquant le code sur 4 bits b3 b2 b1 b0 des 16 couleurs affichables par cette machine. On trouve dans la documentation de microordinateurs PC (carte CGA) le tableau de la figure 3.2, donnant un autre codage. La question Comment est repr´sent´ rouge ?, ou Que repr´sente 0 0 1 0 ? e e e n’a de sens que si le code est pr´cis´. De mˆme, la conversion d’un code ` e e e a l’autre n’a un sens que pour les couleurs qui sont repr´sent´es dans les deux e e codes (brun, bleu pˆle, ...). a Les deux couleurs noir et cyan ont le mˆme codage dans les deux codes, e ce qui est fortuit. Dans le deuxi`me code, chaque bit a une interpr´tation. Le e e bit 3 correspond ` la pr´sence d’une composante pˆle, le bit 2 ` la pr´sence a e a a e d’une composante rouge, le bit 1 au vert et le bit 0 au bleu. On trouve souvent le sigle RGB (Red, Green, Blue) dans ce contexte. Une telle interpr´tation e

2. Les naturels

51

b3 b2 b1 b0 0000 0001 0010 0011 0100

noir blanc rouge cyan violet

b3 b2 b1 b0 0101 0110 0111 1000 1001

vert bleu jaune orange brun

b3 b2 b1 b0 1010 1011 1100 1101 1110 1111

rose gris fonc´ e gris moyen vert pˆle a bleu pˆle a gris pˆle a

Fig. 3.1 – Codage des couleurs du Commodore 64

b3 b2 b1 b0 0000 0001 0010 0011 0100

noir bleu vert cyan rouge

b3 b2 b1 b0 0101 0110 0111 1000 1001

violet brun gris noir pˆle a bleu pˆle a

b3 b2 b1 b0 1010 1011 1100 1101 1110 1111

vert pˆle a cobalt rose mauve jaune 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 utilis´ dans certaines applications mat´rielles ou e e logicielles : le codage appel´ 1 parmi n. Pour ce code, on utilise autant de bits e que d’informations ` coder. Pour reprendre l’exemple des couleurs, chacune a serait cod´e sur b15 ,.. b0 , et chaque bit correspondrait alors ` une couleur. e a

2.
2.1
2.1.1

Les naturels
Repr´sentation des entiers naturels e
Num´ration de position e

Les entiers naturels peuvent ˆtre ´crits de diff´rentes fa¸ons (voir par e e e c exemple [Ifr94]). Le syst`me des Romains est encore pr´sent dans certaines e e notations, les dates des livres par exemple. La meilleure repr´sentation est la num´ration de position dans une base e e choisie. En base 10, ou syst`me d´cimal, on choisit 10 symboles diff´rents, les e e e 10 chiffres d´cimaux 0, 1, . . . , 9. Ils repr´sentent les valeurs des 10 premiers e e naturels. Les naturels suivants s’´crivent avec plusieurs chiffres : un chiffre des e unit´s, un chiffre des dizaines, des centaines, des milliers, etc. e Si un naturel X s’´crit en base β sur N chiffres xN −1 xN −2 ... x1 x0 , la e correspondance entre la valeur du naturel X et celles des chiffres est donn´e e

52

Repr´sentation des grandeurs e

par l’´quation : e
N −1 N −1

X=
i=0

β × valeur(xi )

i

ou, pour simplifier : X =
i=0

β i xi

La correspondance est telle que l’´criture d’un naturel dans une base donn´e e e est unique. Dans la suite nous ne pr´cisons plus que c’est toujours la vae leur du chiffre (et non le chiffre lui-mˆme) qui intervient dans les expressions e arithm´tiques. En base β, sur N chiffres, tous les naturels compris au sens large e entre 0 et β N − 1 sont repr´sentables. Les nombres plus grands peuvent ˆtre e e repr´sent´s par leur reste modulo β N . C’est ce qui se produit sur les compteurs e e kilom´triques des voitures : si le compteur a 5 chiffres, quand on a parcouru e 100 012 kilom`tres, le compteur marque 00 012. Une situation analogue a lieu e pour les angles o` on ne donne que le repr´sentant dans l’intervalle [0, 2.π[. En u e informatique on rencontre le terme de chiffre de poids faible, pour le chiffre des unit´s et, si un naturel est ´crit sur 7 chiffres, celui de chiffre de poids le plus e e fort pour le chiffre des millions. L’usage dans la vie courante est de ne pas ´crire e les 0 en poids forts. A certains endroits, pour des raisons mat´rielles, c’est une e obligation. Le compteur kilom´trique des voitures par exemple. En informae tique, on les ´crit tr`s souvent. Les machines ont un format pour repr´senter e e e les nombres, c’est-`-dire un nombre de chiffres pr´-´tabli. Quand ce nombre de a ee chiffres est mal choisi, comme par exemple repr´senter une date avec seulement e deux chiffres d´cimaux pour l’ann´e, les cons´quences sont ennuyeuses. Dans e e e les documents ´crits o` il y a risque d’ambigu¨ e, on ´crit la base en indice. La e u ıt´ e base elle-mˆme est alors ´crite en base d´cimale (ou base 10). Par exemple, le e e e nombre qui s’´crit 147 en base 10 s’´crit 1042 en base 5 : e e 14710 = 100100112 = 1739 = 9316 = 10425 = 121103 Il existe une autre repr´sentation conventionnelle : le d´cimal cod´ en bie e e naire (DCB) dans laquelle chaque chiffre d´cimal est ´crit en binaire sur 4 bits. e e On a alors 14710 = 0001 0100 0111dcb .

Technique de conversion Pour montrer la technique de conversion d’une base ` une autre, prenons deux exemples. a – Passage de la base 10 ` la base 5. a 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 des unit´s est 2, celui de rang sup´rieur est 4, etc. 14710 = 10425 , c’est-`-dire : e e a 3 2 1 0 14710 = 1 × 5 + 0 × 5 + 4 × 5 + 2 × 5 .

2. Les naturels

53

– Passage de la base 2 ` la base 10. a 7 100100112 = 1 × 2 + 1 × 24 + 1 × 21 + 1 × 20 100100112 = 1 × 12810 + 1 × 1610 + 1 × 2 + 1 = 14710 2.1.2 Repr´sentations binaire, hexad´cimale e e

Ce principe de la num´ration de position peut s’appliquer avec une base e enti`re quelconque sup´rieure ou ´gale ` 2. Si la base est 2 on parle de e e e a num´ration binaire, pour la base 8 de num´ration octale, pour la base 16 e e d’hexad´cimal. En base 2, sur N chiffres, tous les naturels compris au sens e large entre 0 et 2N − 1 sont repr´sentables. On pourrait parler de chiffre des e deuzaines, des quatraines, ou des seizaines mais ces mots ne sont pas dans le lexique courant. L’int´rˆt de la base 2 est que les deux chiffres 0 et 1 peuvent ee facilement ˆtre repr´sent´s par les deux bool´ens 0 et 1, ou par les ´tats bas e e e e e et haut d’un fil ´lectrique. Ce codage des nombres est le seul utilis´ dans les e e ordinateurs. Nous emploierons les termes de chiffres binaires ou de bits indistinctement. Les 16 chiffres hexad´cimaux sont 0, 1, . . . , 8, 9, A, B, C, D, E, F e repr´sentant les valeurs des naturels de 0 ` 15. On a ´videmment e a e valeur(A) = 10, . . ., valeur(F ) = 15. On peut ais´ment convertir un nombre ´crit en base 16 vers la base 2 e e et r´ciproquement. Il suffit pour cela de convertir par tranches de 4 chiffres e binaires, ou d’un chiffre hexad´cimal. Ainsi dans l’exemple suivant figurent e les deux ´critures l’une en dessous de l’autre : e 3 4 7 B 8 0011 0100 0111 1011 1000 En effet le chiffre hexad´cimal B repr´sente le naturel 1110 , qui en binaire e e s’´crit 1011, et 347B816 = 001101000111101110002 . e On remarque l` une analogie avec le passage de l’´criture d´cimale ` a e e a l’´criture en langue naturelle. Ici figurent l’´criture d’un nombre en base e e d´cimale et son ´criture en fran¸ais (les espaces ne sont pas significatifs) : e e c 104 730 105 cent quatre millions sept cent trente mille cent cinq

2.2

Op´rations sur les vecteurs bool´ens repr´sentant e e e les naturels

Etant donn´s deux naturels A et B, repr´sent´s respectivement par M et e e e N bits, on cherche ` trouver un proc´d´ de calcul, ou de fabrication, des bits a e e repr´sentant A + B, A − B, A × B, . . . (une approche tr`s compl`te se trouve e e e dans [Mul89]).

54

Repr´sentation des grandeurs e

Nous devons nous pr´occuper du nombre de bits n´cessaires pour e e repr´senter le r´sultat du calcul. Pour la somme c’est max(M, N ) + 1, pour e e le produit M + N . Pour simplifier ce probl`me, nous supposerons, sauf mene tion contraire, que les deux nombres sont cod´s sur N bits, et que N est une e puissance de 2. Si ce n’est pas le cas, il est toujours possible de compl´ter A e p ou B en poids forts. Si A et B sont cod´s sur 2 bits, A + B est cod´ sur 2p + 1 e e p+1 bits et A × B est cod´ sur 2 e bits. La somme de deux nombres cod´s sur N e chiffres est repr´sentable sur N + 1 chiffres. Le chiffre de poids fort de cette e somme est ´gal ` 0 ou 1. Ceci est valable dans toutes les bases. e a 2.2.1 Extension et r´duction de format e

Si un naturel est cod´ sur N bits et qu’il faille le coder sur M bits, avec e M > N , il suffit d’ajouter des 0 en poids forts. A l’inverse, si la repr´sentation e de C a k bits ` 0 en poids forts, C peut ˆtre repr´sent´ sur k bits de moins. a e e e Par exemple 000011002 = 11002 . 2.2.2 Addition

A et B ´tant repr´sent´s sur N bits, aN −1 , . . . , a0 , et bN −1 , . . . , b0 , la somme e e e S de A et B s’´crit sur N + 1 bits sN , . . . , s0 e Deux questions se posent : comment obtenir les si ` partir des ai et des bi , a et peut-on repr´senter S sur N bits ? e Pour obtenir les chiffres de la somme, examinons bri`vement le proc´d´ e e e pour la base 10 que l’on apprend ` l’´cole : les ai et bi sont compris entre 0 a e et 9. La base est 10. On applique un proc´d´ it´ratif, en commen¸ant par les e e e c poids faibles, et en propageant une retenue d’´tage (ou tranche) de 1 chiffre e en ´tage de 1 chiffre vers les poids forts. e A chaque ´tage i le calcul du report 1 sortant repsi de l’´tage est fonction e e des chiffres ai et bi de A et B ` cet ´tage et du report entrant dans cet ´tage a e e repei . Le report entrant dans l’´tage 0 est ´videmment nul. Le report sortant e e de l’´tage j, repsj est le report entrant de l’´tage j+1 repe(j+1) . e e repsi = 1 si ai + bi + repei ≥ 10 et repsi = 0 si ai + bi + repei < 10 le chiffre si de la somme ` l’´tage i est la somme modulo 10 de ai , bi et repei , a e c’est-`-dire : a si = ai + bi + repei − 10 si repsi = 1 et si = ai + bi + repei si repsi = 0
Nous emploierons le terme de report pour l’addition et, plus loin, celui d’emprunt pour la soustraction. La langue courante utilise le terme de retenue dans les deux cas.
1

2. Les naturels

55

ai 0 0 0 0 1 1 1 1

bi 0 0 1 1 0 0 1 1

repei 0 1 0 1 0 1 0 1

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

Fig. 3.4 – Table d’addition
aN−1 aj+1 aj a1 a0

bN−1

bj+1

bj

b1

b0

0 rep e0
sj s1 s0

repe(j+1) = rep sj rep
s(N−1)

sN−1

sj+1

Fig. 3.3 – Sch´ma de principe d’un additionneur e

En binaire le proc´d´ est identique mais les ai et bi valent 0 ou 1. Les deux e e fonctions de calcul du report et du chiffre de somme sont d´finies pour des e triplets de nombres 0 ou 1. La fonction report sortant d’un ´tage d’addition binaire est la fonction e majorit´. On la note maj. maj(x, y, z) vaut 1 si et seulement si x + y + z ≥ 2. e La fonction calculant le chiffre de somme est la somme modulo 2 de 3 entiers. 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 ´tage sont donn´es par la figure 3.4. e e Pour l’addition de deux nombres ` N bits, les formules sont donn´es par a e les ´quations suivantes qui utilisent les reports interm´diaires ri o` ri+1 est la e e u retenue sortante de l’´tage num´ro i : e e s0 = ⊕(a0 , b0 , 0) si = ⊕(ai , bi , ri ) r1 = maj (a0 , b0 , 0) ri+1 = maj(ai , bi , ri ) ∀i. 1 ≤ i ≤ N − 1

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

56

Repr´sentation des grandeurs e

Dans ce cas sN s’appelle souvent La retenue. Si on cherche ` repr´senter la a e somme S sur N bits, ce n’est possible que si sN vaut 0. Si sN vaut 1, la somme est trop grande et ne peut ˆtre repr´sent´e sur N bits. e e e
Remarque : Dans les processeurs, apr`s une addition, ce bit de retenue e est disponible dans le mot d’´tat sous le nom de bit indicateur C (en anglais e report se dit Carry). Il vaut 1 si la somme de deux naturels cod´s sur N bits e n’est pas repr´sentable sur N bits. On utilisera ce bit dans la programmation e en langage machine au chapitre 12.

2.2.3

Multiplication et division enti`re par une puissance de 2 e

On sait multiplier par 10 un nombre ´crit en base 10 en ajoutant un 0 en e poids faible de sa repr´sentation. Il en est de mˆme en base 2. Et si l’on ajoute e e deux 0 en poids faible de l’´criture binaire, on obtient l’´criture binaire du e e nombre multipli´ par 4. Le produit d’un nombre sur N bits par 2k s’´crit sur e e N + k bits, les k bits de poids faibles ´tant ` 0. e a On sait obtenir la repr´sentation d´cimale du quotient entier par 10 d’un e e naturel en ˆtant le chiffre des unit´s de sa repr´sentation d´cimale. De mˆme o e e e e pour la base 2, si l’on supprime 3 chiffres en poids faible, on obtient l’´criture e du quotient entier par 8. Le quotient entier d’un nombre sur N bits par 2k s’´crit sur N − k bits. e On sait obtenir la repr´sentation d´cimale du reste modulo 10 en ne gardant e e que le chiffre des unit´s de la repr´sentation d´cimale. De mˆme pour la base 2, e e e e si l’on garde les 4 chiffres en poids faible, on obtient l’´criture du reste modulo e 16. Le reste modulo 2k d’un nombre s’´crit sur k bits. e Le tableau suivant illustre diff´rentes multiplications et divisions enti`res. e e Tous les nombres y sont ´crits en binaire sur 6 bits. Il y a donc parfois des e z´ros en poids forts. e
Ecriture de N en d´cimal e 5 13 29 28 35 Ecriture de N en binaire 000101 001101 011101 011100 100011 Ecriture de N × 2 en binaire 001010 011010 111010 111000 impossible Ecriture de N/4 en binaire 000001 000011 000111 000111 001000 Ecriture de N mod 8 en binaire 000101 000101 000101 000100 000011

2.2.4

Multiplication g´n´rale e e

Si deux naturels A et B sont cod´s sur N bits, leur produit est cod´ sur e e 2 × N bits. Si N vaut 1, le produit de A et B est facile ` calculer. Sinon, a comme dans l’exercice E3.14 on d´compose A et B en parties faible et forte. e

2. Les naturels

57

Le produit P est la somme des 4 produits partiels : P 1 = Afort × Bfort × 2N/2 × 2N/2 P 2 = Afort × Bfaible × 2N/2 P 3 = Afaible × Bfort × 2N/2 P 4 = Afaible × Bfaible Remarquons qu’effectuer l’addition de P 1 et P 4 est tr`s facile. L’un des deux e nombres n’a que des 0 l` o` l’autre a des chiffres significatifs. a u Une autre expression du produit reprend simplement l’´criture binaire : e 3 2 1 0 puisque 1410 = 1 × 2 + 1 × 2 + 0 × 2 + 1 × 2 , on a aussi 1410 × 13 = 1 × 23 × 13 + 1 × 22 × 13 + 0 × 21 × 13 + 1 × 20 × 13. On a vu que le calcul du produit de 13 par une puissance de 2 revient ` ´crire 1101 suivi du bon nombre ae de 0. La multiplication se r´duit alors ` une suite d’additions et de d´calages. e a e

2.2.5

Soustraction

La diff´rence D = A − B de deux naturels A et B n’est d´finie que si A > B. e e
Remarque : Un probl`me est celui de la d´tection des cas valides et ine e valides. En informatique comparer deux nombres n´cessite de calculer leur e diff´rence. On ne peut donc pas raisonnablement comparer deux nombres e avant de calculer leur diff´rence si elle existe. Dans un syst`me informatique, e e on calcule toujours ce que l’on croit ˆtre la diff´rence, puis on se pr´occupe e e e de savoir si la diff´rence est repr´sentable ou non. Si oui, elle est le r´sultat e e e obtenu.

Comme pour l’addition, l’op´ration se fait tranche par tranche, en come men¸ant par les poids faibles et avec propagation d’un bit d’emprunt vers les c poids forts. Le calcul fait apparaˆ le bit d’emprunt ` l’´tage de poids plus ıtre a e fort. On peut produire une table de soustraction en base 2, analogue ` la table a d’addition du paragraphe 2.2.2, tenant compte du bit d’emprunt entrant ee et faisant apparaˆ le bit d’emprunt sortant es et le bit de r´sultat di (Cf. Fiıtre e gure 3.5-(a)). On a le r´sultat suivant : Si A et B sont cod´s sur N bits la diff´rence est e e e un naturel (c’est-`-dire A ≥ B) si et seulement si l’emprunt sortant de l’´tage a e de rang N − 1 est nul. Reprenons la table d’addition du paragraphe 2.2.2, en rempla¸ant c syst´matiquement les bits de reports entrants et sortants par leur e compl´mentaire bool´en. De mˆme rempla¸ons le bit de l’op´rande B par son e e e c e compl´mentaire. On retrouve la table de la soustraction (Cf. Figure 3.5-(b)). e Si l’on applique l’algorithme d’addition avec A et le compl´mentaire de B e et si l’on prend soin de compl´menter en entr´e et en sortie tous les bits de e e report, on obtient l’algorithme de soustraction de A − B.

58

Repr´sentation des grandeurs e

(a)

ai 0 0 0 0 1 1 1 1

bi 0 0 1 1 0 0 1 1

ee 0 1 0 1 0 1 0 1

es 0 1 1 1 0 0 0 1

di 0 1 1 0 1 0 0 1

(b)

ai 0 0 0 0 1 1 1 1 ai

bi 1 1 0 0 1 1 0 0 bi

re 1 0 1 0 1 0 1 0 ee

rs 0 1 1 1 0 0 0 1 es

si 0 1 1 0 1 0 0 1 di

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

On peut aussi utiliser les expressions pour chaque ´tage : e es = 1 si ai < bi + ee c’est-`-dire si ai − (bi + ee ) < 0 a es = 0 si ai ≥ bi + ee di = ai − (bi + ee ) si es = 0 di = 2 + ai − (bi + ee ) si es = 1
Remarque : Dans les processeurs, apr`s une soustraction, le e compl´mentaire du bit d’emprunt sortant est disponible dans le mot d’´tat e e sous le nom de bit indicateur C. Il vaut 0 si la diff´rence de deux naturels e cod´s sur N bits est positive, donc repr´sentable sur N bits. e e

3.
3.1

Les relatifs
Repr´sentation des entiers relatifs e

Pour repr´senter des entiers relatifs par un vecteur de N bool´ens, la e e premi`re id´e qui vient ` l’esprit est de repr´senter la valeur absolue sur N − 1 e e a e bits et de r´server un bit pour le signe. Cette id´e simple est correcte. On e e parle de repr´sentation en signe et valeur absolue. Une autre repr´sentation e e est habituellement utilis´e. Elle pr´sente des similitudes avec la repr´sentation e e e d’un angle quelconque par un nombre r´el dans l’intervalle [− π, + π[. Nous ale lons la d´crire d’abord de fa¸on tr`s intuitive. Pour cela nous consid´rons des e c e e nombres sur 4 chiffres. Le mˆme raisonnement vaut pour toute autre taille. e Quand on ach`te une voiture neuve, le compteur kilom´trique indique 0000. e e Il indique ensuite 0001, puis 0002. Les voitures ` compteur binaire feraient a apparaˆ 0001 puis 0010. Imaginons que le compteur d´compte lorsque l’on ıtre e roule en marche arri`re. Avec une voiture neuve, il afficherait successivement e 9999, puis 9998. Un compteur binaire montrerait 1111, puis 1110. On d´cide de repr´senter -1 par 1111, puis -2 par 1110, comme sur le compe e teur kilom´trique. Reste ` fixer une convention. En effet si l’on roule quinze e a

3. Les relatifs

59

kilom`tres en marche arri`re le compteur affiche aussi 0001, et l’on risque de e e croire que l’on a parcouru 1 kilom`tre en marche avant ! La convention habie tuelle est la suivante : les relatifs strictement positifs vont de 0001 ` 0111 (soit a de 1 ` 7) ; les relatifs strictement n´gatifs vont de 1111 ` 1000 (soit de -1 ` a e a a -8) ; 0 reste cod´ 0000. e La convention est choisie pour que le bit de poids fort de la repr´sentation e soit un bit de signe. Il vaut 1 pour les nombres strictement n´gatifs. Sur N e bits les nombres repr´sentables sont ceux de l’intervalle [−2N −1 , 2N −1 − 1]. e Ce syst`me s’appelle codage en compl´ment ` 2 (parfois compl´ment ` 2N e e a e a puisqu’il y a N bits). Au passage remarquons que l’intervalle des nombres repr´sentables n’est pas sym´trique par rapport ` 0. C’est obligatoire. Avec e e a une base paire, on repr´sente un nombre pair de nombres. Il ne peut y en avoir e autant de strictement positifs que de strictement n´gatifs, sauf si 0 a deux e repr´sentations. e De fa¸on moins intuitive, si un relatif Y s’´crit en compl´ment ` 2 sur N c e e a chiffres binaires : yN −1 , yN −2 , . . . , y1 , y0 , la correspondance entre la valeur du relatif Y et celles des chiffres est donn´e par l’´quation : e e
N −2

Y = (−2 ou, ce qui est ´quivalent, par : e

N −1

× yN −1 ) +
i=0

2i × yi

N −1

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

2i × yi

La correspondance est telle que l’´criture est unique comme pour le cas des e naturels dans une base donn´e. e Remarquons que si l’on consid`re les deux vecteurs binaires repr´sentant e e un relatif et son oppos´, et si l’on interpr`te ces deux vecteurs comme les e e repr´sentations en binaire de deux naturels, la somme de ces deux naturels e est 2N . C’est l’origine du nom compl´ment ` 2N . Ainsi, sur 4 bits, 0101 code e a 5. En compl´ment ` 2, sur 4 bits -5 est repr´sent´ par 1011. En base 2, 1011 e a e e repr´sente le naturel 11, et 11 + 5 = 16. e Conversion Une difficult´ notable vient d’apparaˆ e ıtre, la mˆme que pour les e couleurs en d´but de chapitre. La question Que repr´sente 100011 ? ou Come e ment est repr´sent´ l’entier K ? n’a pas de sens. Il faut ` chaque fois pr´ciser e e a e dans quelle convention, binaire pur ou compl´ment ` 2. Comme pour les coue a leurs, on peut avoir besoin de convertir d’une convention ` l’autre les nombres a qui sont repr´sentables dans les deux (comme le brun et le bleu pˆle, pour e a les couleurs). Pour les nombres sur N bits ce sont les nombres de l’intervalle [0, 2N −1 − 1]. Ils ont la mˆme repr´sentation dans les deux codes (comme le e e cyan et le noir qui ont le mˆme code dans l’exemple des couleurs). e

60

Repr´sentation des grandeurs e

3.2
3.2.1

Op´rations sur les vecteurs bool´ens repr´sentant e e e les relatifs
Extension et r´duction de format e

Si un relatif Y est cod´ sur N bits, il suffit de reporter le bit de signe de Y e en poids forts M − N fois pour obtenir son codage M bits (avec M > N ). Si les k bits de plus forts poids de la repr´sentation de C sont identiques, e C peut ˆtre repr´sent´ sur k − 1 bits de moins. On ne perd pas le bit de signe. e e e Par exemple : 11111010c2 = 1010c2 . 3.2.2 Addition

Soient A et B repr´sent´s en compl´ment ` 2 par aN −1 , aN −2 , . . . , a1 , a0 e e e a et bN −1 , bN −2 , . . . , b1 , b0 . On a :
N −2 N −2

A = (−2

N −1

) × aN −1 +
i=0

2 × ai ,

i

B = (−2

N −1

) × bN −1 +
i=0

2i × bi

Comme pour les naturels, d´terminons si la somme peut ˆtre repr´sentable e e e sur N bits et comment les bits de la somme peuvent ˆtre exprim´s. On pose : e e
N −2 N −2

α=
i=0

2 × ai ,

i

β=
i=0

2i × bi ,

γ = (α + β) modulo 2N −1

avec : α ∈ [0, 2N −1 − 1], On a ´videmment : e A = −2N −1 × aN −1 + α et, de mˆme, e B = −2N −1 × bN −1 + β. Soit re d´fini par : e α + β = re × 2N −1 + γ. re vaut donc 1 ou 0. C’est le report sortant du calcul de α + β. γ est la somme α + β priv´e de son bit de poids fort re . e Soit S la somme de A et de B. S = −2N −1 × (aN −1 + bN −1 ) + (α + β) = −2N −1 × (aN −1 + bN −1 − re ) + γ β ∈ [0, 2N −1 − 1], γ ∈ [0, 2N −1 − 1].

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

3. Les relatifs

61

Nombre de bits n´cessaires pour repr´senter S La premi`re question e e e est : S est-il repr´sentable sur N bits en compl´ment ` 2 ? C’est-`-dire a-t-on e e a a −2N −1 ≤ S ≤ 2N −1 − 1 ? Examinons les deux cas o` la r´ponse est non. u e 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 in´galit´ ne peut ˆtre v´rifi´e avec certie e e e e tude que si aN −1 + bN −1 − re − 1 ≥ 1 c’est-`-dire si aN −1 + bN −1 − re − 1 = 1. a Ce qui ne se produit que si aN −1 = bN −1 = 1 et re = 0. Si l’on pose rs = maj(aN −1 , bN −1 , re ), on a dans ce cas rs = 1 = re . Deuxi`me cas : S > 2N −1 − 1 e −2N −1 × (aN −1 + bN −1 − re ) + γ −2N −1 × (aN −1 + bN −1 − re ) + γ −2N −1 × (aN −1 + bN −1 − re + 1) 2N −1 × (aN −1 + bN −1 − re + 1) > 2N −1 − 1 ≥ 2N −1 ≥ −γ ≤γ

Cette in´galit´ ne peut ˆtre v´rifi´e avec certitude que si e e e e e aN −1 + bN −1 − re + 1 ≤ 0 c’est-`-dire si aN −1 + bN −1 − re + 1 = 0 a 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-`-dire pour a aN −1 aN −1 aN −1 aN −1 = bN −1 = 0, re = bN −1 = 1, re = 1, bN −1 = 0, = 0, bN −1 = 1, =0 =1 re quelconque re quelconque

la somme S de A et B est repr´sentable sur N bits en compl´ment ` 2. On a e e a alors rs = re . Le tableau suivant r´capitule les diff´rents cas. e e
aN −1 1 0 0 1 1 0 bN −1 1 0 0 1 0 1 re 0 1 0 1 x x rs 1 0 0 1 x x Interpr´tation e Premier cas : S < −2N −1 Deuxi`me cas : S > 2N −1 − 1 e Somme repr´sentable e Somme repr´sentable e Somme repr´sentable e Somme repr´sentable e aN −1 + bN −1 − re 2 -1 0 1 x x

62

Repr´sentation des grandeurs e

Notons s = ⊕(aN −1 , bN −1 , re ). Deux expressions bool´ennes d´crivent la e e valeur du bit de d´bordement V apr`s une addition : e e V = aN −1 .bN −1 .s + aN −1 .bN −1 .s V = rs ou exclusif re La premi`re apparaˆ souvent dans les documents des constructeurs de procese ıt seurs. L’exercice E3.9 propose de montrer l’´quivalence des deux expressions. e L’interpr´tation est facile : aN −1 ´tant interpr´t´ comme le bit de signe d’un e e ee op´rande, bN −1 comme l’autre et s comme le bit de signe du r´sultat calcul´ e e e par le processeur, le cas aN −1 = 1, bN −1 = 1, s = 0 signifierait que la somme de deux n´gatifs est positive. Cela se produit si re = 0. e Calcul des bits de S On se pose une deuxi`me question : comment calculer e la repr´sentation en compl´ment ` 2 de S, si elle existe, c’est-`-dire comment e e a a trouver le vecteur sN −1 , sN −2 , . . . , s1 , s0 tel que
i=N −2

S = −2 On sait que S=

N −1

× sN −1 +
i=0

2i × si

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

avec γ ∈ [0, 2N −1 − 1]

En identifiant bit ` bit les deux ´critures, on voit que pour i ∈ [0, N − 2], a e 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 repr´sentable sur e N 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 ´tage e d’addition binaire normale des vecteurs ai et bi . Ce qui signifie que les chiffres binaires de l’´criture de S s’obtiennent de la mˆme fa¸on que les chiffres binaires e e c de la somme des deux naturels repr´sent´s en binaire pur par les ai et les bi . e e C’est l` tout l’int´rˆt du codage en compl´ment ` 2. a ee e a
Remarque : Cette propri´t´ est d’une port´e pratique consid´rable. ee e e Elle signifie que le mˆme m´canisme d’addition peut ajouter deux vecteurs bie e naires sans avoir ` tenir compte de l’interpr´tation, binaire pur ou compl´ment a e e a ` 2, qui est faite des op´randes et du r´sultat. Les chiffres binaires du r´sultat, e e e si celui-ci est repr´sentable, sont identiques quelle que soit l’interpr´tation. e e On retrouvera cette propri´t´ dans le chapitre 12 o` l’on verra que la mˆme ee u e instruction du langage machine convient pour l’addition, ind´pendamment du e code choisi, et dans le chapitre 8 o` l’on verra que le mˆme circuit combinatoire u e additionneur convient pour l’addition ind´pendamment du code choisi. e

Mais, attention, l’information disant si le r´sultat est repr´sentable ou non e e n’est pas la mˆme. En binaire pur le r´sultat de l’addition est repr´sentable e e e si et seulement si rs = 0. En compl´ment ` 2 le r´sultat de l’addition est e a e repr´sentable si et seulement si rs = re . e L’exercice corrig´ E3.6 donne des exemples qui concr´tisent ces ´quations. e e e

3. Les relatifs

63

Ecriture de l’oppos´ Soit A un relatif repr´sent´ sur N bits en compl´ment e e e e a ` 2 par aN −1 aN −2 , . . . , a1 a0 . On a :
N −1

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

N

2i × ai

Compl´mentons chaque bit de A (en rempla¸ant ai par 1 − ai ), le r´sultat est e c e un nombre A d´fini par : e
N −1

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

N

2i × (1 − ai )

Si l’on ajoute A et A modulo 2N on obtient −1. A + A = −1, c’est-`-dire a A = −A − 1, c’est-`-dire −A = A + 1 (toutes ces ´galit´s sont modulo 2N ). a e e Cela donne le proc´d´ technique pour obtenir la repr´sentation de l’oppos´ e e e e de A : on forme le compl´mentaire bit ` bit A de A et on lui ajoute 1. Comme e a l’op´ration est modulo 2N , on ne tient pas compte d’´ventuels reports. Un e e autre proc´d´ consiste ` recopier tous les bits en commen¸ant par les poids e e a c faibles jusqu’au premier 1 inclus puis ` inverser les suivants. a Attention toutefois car, sur N bits, l’oppos´ de −2N −1 n’est pas e repr´sentable. e 3.2.3 Soustraction

Puisque l’addition est connue, ainsi que le passage ` l’oppos´, la soustraca e tion ne pose pas de probl`mes : il suffit de se souvenir que A − B = A + −(B). e Comme pour l’addition, les constructeurs de processeurs donnent l’expression bool´enne du bit V de d´bordement apr`s une soustraction : e e e 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 cod´ en compl´ment ` 2 se fait, comme pour e e a un naturel, en ajoutant un 0 en poids faible. Diviser par 2 consiste, comme pour les naturels, ` d´caler tous les chiffres a e d’une position vers les poids faibles, mais c’est la partie enti`re du quotient e qui est obtenue. La diff´rence notable est que si l’on travaille sur un nombre de bits fix´, ce e e d´calage doit se faire en maintenant le bit de poids fort, le bit de signe. e Cela explique pourquoi dans les jeux d’instructions des processeurs il y a toujours deux types de d´calages vers les poids faibles, l’un nomm´ logique, e e dans lequel un 0 est ins´r´ en poids fort, l’autre nomm´ arithm´tique o` le bit ee e e u de signe est maintenu.

64

Repr´sentation des grandeurs e

La division par 2 des entiers relatifs, qui revient ` diviser par 2 la valeur a absolue de l’entier en conservant son signe, n´cessite quelques pr´cautions pour e e les entiers n´gatifs impairs. e Le d´calage arithm´tique ne tient en effet aucun compte de la valeur du bit e e de poids faible. Or changer de 0 ` 1 le bit de poids faible d’un entier pair a pour a effet d’en augmenter la valeur absolue s’il est positif ou nul, et au contraire de la diminuer s’il est n´gatif. e Pour en tenir compte, il faut au pr´alable ajouter 1 aux seuls entiers n´gatifs e e avant d’effectuer le d´calage vers les poids faibles. Si l’entier est pair, ceci ne e modifie que le bit de poids faible qui est ensuite ignor´ lors du d´calage. e e Si l’entier est impair, cette op´ration le ram`ne ` l’entier pair de valeur e e a absolue imm´diatement inf´rieure. Ainsi, pour l’entier -7, on appliquera en e e fait le d´calage sur l’entier -6. e
Ecriture de N en d´cimal e 13 29 -6 -7 -21 Ecriture de N en compl´ment ` 2 e a 001101 011101 111010 111001 101011 Ecriture de N × 2 en compl´ment ` 2 e a 011010 impossible 110100 110010 impossible Ecriture de N/4 en compl´ment ` 2 e a 000011 000111 111101 111110 110110

4.

Lien entre l’arithm´tique et les bool´ens e e

Le fait que les chiffres binaires 0 et 1 se repr´sentent par les bool´ens 0 et e e 1 am`ne souvent ` faire des amalgames de types. Ainsi on assimile parfois a e a et 1 − a (en traitant le bool´en a comme un entier). En d´duire l’existence e e d’une soustraction bool´enne est une grosse erreur. e Les vecteurs bool´ens peuvent repr´senter des nombres, on vient de le voir. e e On a vu dans le chapitre 2 que les op´rations bool´ennes existent aussi sur les e e vecteurs : l’addition bool´enne, nomm´e aussi OU bit ` bit, la multiplication e e a bool´enne, nomm´e aussi ET bit ` bit et la compl´mentation. e e a e Que signifieraient ces op´rations appliqu´es ` des vecteurs repr´sentant des e e a e entiers ? Elles gardent leurs propri´t´s alg´briques, mais sont peu int´ressantes ee e e arithm´tiquement. L’addition bool´enne ne correspond pas ` l’addition des e e a naturels ou des relatifs repr´sent´s par les deux vecteurs. De mˆme pour la e e e multiplication. 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 op´ration int´ressante pour l’arithm´tique est la troncature : pour e e e tronquer un naturel A, repr´sent´ sur N bits, ` P bits (avec P < N ), il suffit e e a de calculer le ET entre A et un vecteur ayant des 0 en poids forts et P 1 en poids faibles : 0 . . . 01 . . . 1. Ce vecteur repr´sente le naturel 2P − 1. e

5. Les caract`res e

65

On a donc A ET (2P − 1) = A modulo 2P . Si un naturel X est cod´ sur n bits, on peut le d´composer en deux e e naturels p et q, respectivement cod´s sur k et n − k bits. Si p est la partie e poids fort et q la partie poids faible, selon le tableau : n−1 p k bits on a les relations suivantes : X = p × 2n−k + q, n−k n−k−1 q n − k bits q = X modulo 2n−k , p = X div 2n−k 0

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

5.

Les caract`res e

Les caract`res alphab´tiques, num´riques, typographiques (parenth`se, vire e e e gule, etc.) et certains caract`res non imprimables (fin de ligne, fin de fichier, e etc.) sont habituellement repr´sent´s sur 7 bits selon un code normalis´ nomm´ e e e e code ASCII pour American Standard Code for Information Interchange (Cf. Figure 3.6). Le code ASCII est tel que : l’entier repr´sentant un chiffre vaut la valeur e du chiffre plus 48 ; les entiers correspondant aux codes de deux lettres sont ordonn´s comme les deux lettres dans l’alphabet si les deux lettres sont toutes e les deux en majuscules ou en minuscules ; la diff´rence entre le code d’une e majuscule et de la minuscule correspondante est 32, c’est-`-dire une puissance a de 2. Sur une machine unix la commande man ascii fournit en hexad´cimal e le tableau des codes correspondant aux caract`res. Comme on le voit sur la e figure 3.6, 2316 est le code hexad´cimal de # et 2016 celui de l’espace ; del, de e code 7F16 , est le caract`re d’effacement. Les codes inf´rieurs ` 1F repr´sentent e e a e des caract`res non affichables. e Ce code ne permet pas de repr´senter les lettres accompagn´es de diacrie e tiques (accents, c´dille, tr´ma, tilde, petit rond, etc.) dans les langues qui les e e utilisent (c’est-`-dire presque toutes les langues europ´ennes !). Des extensions a e a ` 8 bits, puis ` 16 sont propos´es (UNICODE), mais les standards sont diffia e ciles ` ´tablir. Le probl`me de pouvoir coder en binaire l’ensemble de toutes ae e les formes ´crites des principales langues ´crites du monde n’est pas encore e e totalement r´solu. Cela pose de nombreux probl`mes lors des transmissions de e e fichiers contenant des textes.

66

Repr´sentation des grandeurs e

20 28 30 38 40 48 50 58 60 68 70 78

( 0 8 @ H P X ‘ h p x

21 29 31 39 41 49 51 59 61 69 71 79

! ) 1 9 A I Q Y a i q y

22 2A 32 3A 42 4A 52 5A 62 6A 72 7A

” * 2 : B J R Z b j r z

23 2B 33 3B 43 4B 53 5B 63 6B 73 7B

# + 3 ; C K S [ c k s {

24 2C 34 3C 44 4C 54 5C 64 6C 74 7C

$ , 4 < D L T \ d l t |

25 2D 35 3D 45 4D 55 5D 65 6D 75 7D

% 5 = E M U ] e m u }

26 2E 36 3E 46 4E 56 5E 66 6E 76 7E

& . 6 > F N V ˆ f n v ˜

27 2F 37 3F 47 4F 57 5F 67 6F 77 7F

’ / 7 ? G O W g o w del

Fig. 3.6 – Code ASCII

6.

Les nombres r´els, la virgule flottante e

Les nombres rationnels sont g´n´ralement repr´sent´s par un couple d’ene e e e tiers. Mais ils sont peu utilis´s en tant que tels dans les ordinateurs ` bas e a niveau. Seuls les langages ´volu´s les manipulent et le soin de r´aliser les e e e op´rations est alors ` la charge du compilateur ou de l’interpr´teur. Les e a e nombres r´els sont repr´sent´s et manipul´s ` bas niveau dans la plupart des e e e e a ordinateurs contemporains. Il existe des circuits de calcul sur des r´els et, par e voie de cons´quence, des instructions dans le langage machine qui manipulent e des r´els. Ces r´els sont-ils des irrationnels ? Evidemment non. Des r´els non e e e rationnels ont n´cessairement une suite infinie non p´riodique de d´cimales. Les e e e repr´senter en base 2 ne change rien : ils ont une suite infinie non p´riodique e e de duomales. On repr´sente en machine un ensemble fini de r´els, en fait des rationnels, e e selon une technique tr`s proche de la repr´sentation dite scientifique des cale e culettes. Au lieu de repr´senter −123, 5 par −1.235 × 102 , on le repr´sente e e 6 par −1, 1110111 × 2 (car 12310 = 11110112 ). −1, 1110111 re¸oit le nom de c mantisse et 6 celui d’exposant. La repr´sentation en d´cimal en notation scientifique a toujours un chiffre e e (un seul) avant la virgule, chiffre qui n’est 0 que pour la repr´sentation de 0. La e mˆme propri´t´ vaut pour le binaire et le seul chiffre possible avant la virgule e ee ´tant 1, il n’est pas n´cessaire de le repr´senter explicitement. On parle de 1 e e e cach´, et c’est ce qui explique la composante (1+fr) dans le tableau ci-dessous. e Le nombre de chiffres de la mantisse fixe la pr´cision repr´sentable. L’exere e cice E3.15 sensibilise ` la pr´cision dans une repr´sentation bas´e sur le mˆme a e e e e principe que la virgule flottante. La norme I.E.E.E. 754 fixe les formats possibles de la mantisse, de l’exposant, du signe. Selon cette norme, il existe 3 formats de repr´sentation : e les r´els sont cod´s sur 32, 64 ou 128 bits. Dans chaque cas la repr´sentation e e e

7. Exercices

67

Taille totale Taille de S 0≤s≤1 Taille de E 0 ≤ e ≤ 28,11,15 Taille de F 0 ≤ f ≤ 223,52,112 Valeur de la partie fractionnaire fr Valeur normale de e Valeur de X cas normal e = 0, f = 0 Valeur de X si e = 0 X = 0 si de plus f = 0 Cas particuliers : e =

32 bits 1 bit 8 bits 23 bits fr = f × 2−24 0 < e < 255 (−1)s × 2e−127 ×(1 + fr) (−1)s × 2−126 ×(0 + fr) 255

64 bits 1 bit 11 bits 52 bits fr = f × 2−53 0 < e < 2047 (−1)s × 2e−1023 ×(1 + fr) (−1)s × 2−1022 ×(0 + fr) 2047

128 bits 1 bit 15 bits 112 bits fr = f × 2−113 0 < e < 32767 (−1)s × 2e−16383 ×(1 + fr) (−1)s × 2−16382 ×(0 + fr) 32767

Fig. 3.7 – Repr´sentation des r´els e e

comporte 3 champs nomm´s S (signe), E (exposant) et F (mantisse, ou plutˆt e o partie fractionnaire). Nommons s, e, f le naturel repr´sent´ par le champ de e e bits 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 la valeur du r´el X repr´sent´ selon la taille. Les cas particuliers correspondent e e e aux cas infinis.

7.

Exercices

E3.1 : Expression bool´enne d’une propri´t´ arithm´tique e e e e Consid´rons un naturel A cod´ sur N bits. Donner l’expression bool´enne e e e caract´risant les bits de A pour que 10 × A soit aussi codable sur N bits. e E3.2 : Reste modulo 2N − 1 Retrouver dans ses cahiers d’´cole ´l´mentaire la technique de la preuve par e ee 9. Se rem´morer comment l’on obtient le reste modulo 9 d’un naturel ` partir e a de son ´criture en base 10 (` chaque fois qu’il y a au moins 2 chiffres on les e a ajoute). Ecrire un nombre en octal. Appliquer la technique pr´c´dente sur les e e chiffres octaux. V´rifier que l’on obtient le reste modulo 7. Calculer de mˆme e e le reste modulo 15 d’un naturel ` partir de son ´criture hexad´cimale. a e e E3.3 : Manipulation du compl´ment ` 2 e a Ecrire sur 4 bits les relatifs de -8 ` +7. Ecrire sur 5 bits les relatifs de -16 ` a a +15. Se persuader que la d´finition intuitive, celle du compteur de voiture, et e les deux ´quations donnant la correspondance entre valeur et ´criture donnent e e

68

Repr´sentation des grandeurs e

bien les mˆmes r´sultats. Se persuader de l’unicit´ de l’´criture. Rep´rer -8 e e e e e (sur 4 bits), et -16 (sur 5) comme un cas particulier dont l’oppos´ n’est pas e repr´sentable. e E3.4 : Ecriture des nombres ` virgule a Se persuader que l’´criture 0,011 (en base 2), peut valablement repr´senter e e le nombre 0,375 (en d´cimal), c’est-`-dire 1/4 + 1/8. Les nombres ` virgule e a a repr´sentables en base 2 et les nombres repr´sentables en base 10 ne sont pas e e les mˆmes. Dans quel sens est l’inclusion, pourquoi ? e E3.5 : Comparaison d’entiers Pour comparer deux entiers une solution est de calculer leur diff´rence. Mais e ce n’est pas n´cessaire. La comparaison ayant pour but de dire si les deux e entiers sont ´gaux, et, sinon, quel est le plus grand, trouver des algorithmes de e comparaisons de deux entiers ` partir de leurs repr´sentations binaires sur N a e bits : – dans le cas o` les deux nombres sont naturels, u – dans le cas o` les deux sont sign´s (et repr´sent´s en compl´ment ` 2), u e e e e a – dans le cas o` un nombre est sign´ et l’autre non. u e On pourra compl´ter cet exercice apr`s l’´tude des circuits combinatoires. e e e E3.6 : Additions en binaire pur et en compl´ment ` 2 e a Dans le tableau 3.8, on montre des r´sultats d’addition. La table se pr´sente e e comme une table d’addition, lignes et colonnes. Elle est donc sym´trique. e Chaque information num´rique est repr´sent´e de 4 fa¸ons : un vecteur de e e e c 4 bits, ´crits en petits chiffres ; un naturel compris entre 0 et 15 (son ´criture e e en binaire est le vecteur de 4 bits) ; un entier relatif entre -8 et +7 (son ´criture e en compl´ment ` 2 est le vecteur de 4 bits). e a Dans chaque case du tableau figurent ces 3 repr´sentations, la valeur du e report sortant r3 provenant de l’addition restreinte aux 3 premiers bits, la valeur du report sortant r4 provenant de l’addition sur 4 bits. Les r´sultats e corrects sont encadr´s. Les r´sultats incorrects ne le sont pas. e e L’objet de l’exercice est de retrouver, d’apr`s ce tableau, les modes de calcul e des indicateurs C et V pr´cisant respectivement si le r´sultat est correct ou e e non en binaire (pour C) et en compl´ment ` 2 (pour V). On peut faire le mˆme e a e travail pour la soustraction. La table n’est pas sym´trique dans ce cas. e E3.7 : Signification et test des indicateurs Quels sont les entiers codables sur 32 bits en compl´ment ` 2 et dont la valeur e a absolue est aussi codable sur 32 bits en compl´ment ` 2 ? e a Pour r´soudre la suite de cet exercice, il faut connaˆ la programmation e ıtre en langage d’assemblage. Dans le programme suivant en langage d’assemblage, il manque un mn´monique d’instruction de branchement conditionnel, il a ´t´ remplac´ par e ee e

7. Exercices

69

(0011)

(0100)

(0101)

(1011)

(1100)

(1101)

3b +3c2
(0011) (0110)

4b +4c2
(0111)

5b +5c2
(1000)

11b −5c2
(1110)

12b −4c2
(1111)

13b −3c2
(0000)

3b +3c2

6b 7b 8b 14b 15b 0b +6c2 +7c2 −8c2 −2c2 −1c2 0c2 r 3 = 0 r 3 = 0 r3 = 1 r3 = 0 r3 = 0 r3 = 1 r 4 = 0 r 4 = 0 r4 = 0 r4 = 0 r4 = 0 r4 = 1
(0111) (1000) (1001) (1111) (0000) (0001)

(0100)

4b +4c2

7b 8b 9b 15b 0b 1b −8c2 −7c2 +7c2 −1c2 0c2 +1c2 r 3 = 0 r 3 = 1 r3 = 1 r3 = 0 r3 = 1 r3 = 1 r 4 = 0 r 4 = 0 r4 = 0 r4 = 0 r4 = 1 r4 = 1
(1000) (1001) (1010) (0000) (0001) (0010)

(0101)

5b +5c2

8b 9b 10b 0b 1b 2b −8c2 −7c2 −6c2 0c2 +1c2 +2c2 r 3 = 1 r 3 = 1 r3 = 1 r3 = 1 r3 = 1 r3 = 1 r 4 = 0 r 4 = 0 r4 = 0 r4 = 1 r4 = 1 r4 = 1
(1110) (1111) (0000) (0110) (0111) (1000)

(1011)

11b −5c2

14b 15b 0b 6b 7b 8b −2c2 −1c2 0c2 +6c2 +7c2 −8c2 r 3 = 0 r 3 = 0 r3 = 1 r3 = 0 r3 = 0 r3 = 1 r 4 = 0 r 4 = 0 r4 = 1 r4 = 1 r4 = 1 r4 = 1
(1111) (0000) (0001) (0111) (1000) (1001)

(1100)

12b −4c2

15b 0b 1b 7b 8b 9b −1c2 0c2 +1c2 −8c2 −7c2 +7c2 r 3 = 0 r 3 = 1 r3 = 1 r3 = 0 r3 = 1 r3 = 1 r 4 = 0 r 4 = 1 r4 = 1 r4 = 1 r4 = 1 r4 = 1
(0000) (0001) (0010) (1000) (1001) (1010)

(1101)

13b −3c2

0b 1b 2b 8b 9b 10b 0c2 +1c2 +2c2 −8c2 −7c2 −6c2 r 3 = 1 r 3 = 1 r3 = 1 r3 = 1 r3 = 1 r3 = 1 r 4 = 1 r 4 = 1 r4 = 1 r4 = 1 r4 = 1 r4 = 1
Fig. 3.8 – Table d’addition

70

Repr´sentation des grandeurs e

bxx. A l’´tat initial, le registre i0 contient une valeur enti`re x. A l’´tat fie e e nal, le registre i2 contient 1 si la valeur absolue de x est codable sur 32 bits en compl´ment ` 2, et alors i3 contient cette valeur absolue ; le registre i2 e a contient 0 si cette valeur absolue n’est pas codable ; dans ce cas la valeur de i3 n’est pas pertinente.
cmp bge subcc bxx mov ba mov mov ba mov i0, 0 pos 0, i0, i3 spe 1, i2 fin 1, i2 i0, i3 fin 0, i2 ! si i0 ≥ 0 ! i3 prend pour valeur (-i0) ! OK prend pour valeur vrai

neg :

pos :

! si pos. la valeur absolue est le nombre ! OK prend pour valeur faux ! etat final ´

spe : fin :

Pourrait-on remplacer le bge de la deuxi`me ligne par un bpos ? Par quel e mn´monique faut-il remplacer bxx ? e E3.8 : Arithm´tique satur´e e e En arithm´tique satur´e, il n’y a ni retenue, ni d´bordement. Quand le r´sultat e e e e est trop grand, il est remplac´ par le plus grand nombre repr´sentable dans le e e syst`me de num´ration utilis´. Quand le r´sultat est trop petit, il est remplac´ e e e e e par le plus petit nombre repr´sentable dans le syst`me de num´ration utilis´. e e e e Ainsi sur 8 bits, avec des exemples ´crits en d´cimal : e e – En binaire pur : 20010 +SatBinpur 8010 = 25510 au lieu de 28010 8010 −SatBinpur 20010 = 010 au lieu de −12010 – En compl´ment ` 2 : 10010 +SatCompl2 8010 = 12710 au lieu de 18010 e a −8010 −SatCompl2 10010 = −12810 au lieu de −18010 Question 1 : Pour r´soudre cette question, il faut connaˆ la programmation e ıtre en langage d’assemblage. On suppose que A et B sont deux entiers, cod´s sur 32 bits (attention les e exemples sont sur 8 bits). Ils sont rang´s dans des registres 32 bits d’un procese seur ne disposant pas des op´rations en format satur´. Comme les op´rations e e e en arithm´tique satur´e n’existent pas, il convient de les remplacer par un petit e e programme qui produise le r´sultat voulu. Ecrire les instructions qui effectuent e la soustraction satur´e en binaire pur de A et B et range le r´sultat dans un e e registre. Ecrire les instructions qui effectuent l’addition satur´e en compl´ment ` 2 e e a de A et B et range le r´sultat dans un registre. e Question 2 : On peut revenir sur cet exercice apr`s le chapitre sur les e circuits combinatoires. Donner la description d´taill´e d’une Unit´ Arithm´tique qui effectue sur e e e e deux entiers A et B : l’addition et la soustraction (A + B ou A − B), en binaire

7. Exercices

71

pur et en compl´ment ` deux, en arithm´tique normale et en arithm´tique e a e e satur´e, selon 3 bits de commande. e
Remarque : Les op´rations en arithm´tique satur´e font partir de l’exe e e tension MMX du jeu d’instruction des processeurs pentium de intel. Elles servent notamment en repr´sentation des images. Si un octet repr´sente le e e niveau de gris d’un pixel, par exemple 0 pour noir et 255 pour blanc, on peut ´claircir un pixel en augmentant sa luminosit´ 2 , mais il ne faut pas aller e e au-del` de 255. a

E3.9 : Expression du bit de d´bordement e Soit 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 ´quations bool´ennes : e e s = a ⊕ b ⊕ re (on note parfois s = ⊕(a, b, re )) rs = maj (a, b, re ) On connaˆ deux expressions d´crivant la valeur du bit de d´bordement V apr`s ıt e e e une addition : V = a.b.s + a.b.s et V = rs ⊕ re Montrer que les deux expressions sont ´quivalentes. Le bit V pour la soustrace tion est donn´ par : e V = aN −1 .bN −1 .s + aN −1 .bN −1 .s Montrer que l` aussi V = rs ⊕ re . a E3.10 : Relation entre binaire pur et compl´ment ` 2 e a Soit un vecteur de bits yN −1 yN −2 , . . . , y1 y0 . Soit Yb le naturel repr´sent´ par e e ce vecteur pour l’interpr´tation binaire pur. Soit Yc2 le relatif repr´sent´ par ce e e e vecteur pour l’interpr´tation compl´ment ` 2. Donner des relations entre Yb , e e a Yc2 et yN −1 . E3.11 : Repr´sentation de la somme de deux entiers relatifs e Montrer que, si l’addition de deux nombres relatifs cod´s en compl´ment ` e e a deux d´borde, alors la retenue C est l’inverse du bit de signe : V =⇒ C = (N ) e La figure 3.9 donne quelques ´l´ments de r´ponse. On y repr´sente les 8 cas ee e e possibles de valeurs pour le bit poids fort dans une addition en compl´ment e a ` deux. Trouver des entiers cod´s sur 4 bits dans [−8, 7] pour chacun des cas. e Retrouver chacun des cas dans le tableau 3.8. Faire le mˆme travail pour la e soustraction.

72

Repr´sentation des grandeurs e

aP signe A 0 0 0 0 1 1 1 1

bP signe B 0 0 1 1 0 0 1 1

re

0 1 0 1 0 1 0 1

rs = maj(aP , bP , re ) indic. C 0 0 0 1 0 1 1 1

sP = ⊕(aP , bP , re ) indic. N 0 1 1 0 1 0 0 1

V = r e ⊕ rs indic. V 0 1 0 0 0 0 1 0

Fig. 3.9 – Repr´sentation de la somme de deux entiers relatifs. e

E3.12 : R´cup´ration du r´sultat d’une addition qui d´borde (cas e e e e des entiers positifs) On consid`re deux entiers positifs A et B, et l’entier U = A + B. On suppose e que A et B sont repr´sent´s en binaire pur sur 32 bits, respectivement dans e e les registres %l0 et %l1 du sparc. On effectue l’addition grˆce ` l’instruction a a ADDcc %l0, %l1, %l2. A et B, entiers positifs, ´tant suppos´s repr´sent´s sur 32 bits, sont donc e e e e 32 dans l’intervalle [0, 2 − 1]. Lorsque U est repr´sentable en binaire pur sur 32 e bits (c’est-`-dire lorsque U ≤ 232 − 1), on obtient sa repr´sentation dans le a e registre %l2 ` l’issue de l’instruction d’addition. a Lorsque U n’est pas repr´sentable en binaire pur sur 32 bits (c’est-`-dire e a 32 U > 2 −1), on dit que l’addition d´borde. Mais dans ce cas U est repr´sentable e e sur 64 bits (33 suffiraient). Ecrire un programme en langage d’assemblage qui donne toujours la somme U dans deux registres %l3, %l2. On peut ´videmment faire l’exercice analogue pour la diff´rence. e e E3.13 : R´cup´ration du r´sultat d’une addition qui d´borde (cas e e e e des entiers relatifs) On reprend l’exercice pr´c´dent, dans le cas de la repr´sentation en compl´ment e e e e a ` 2. On consid`re deux entiers relatifs A et B, et l’entier U = A+B. On suppose e que A et B sont repr´sent´s en compl´ment ` deux sur 32 bits, respectivement e e e a dans les registres %l0 et %l1 du sparc. On effectue l’addition grˆce ` l’insa a truction ADDcc %l0, %l1, %l2. A et B, entiers relatifs, ´tant suppos´s repr´sent´s sur 32 bits, sont donc e e e e 31 31 dans l’intervalle [−2 , 2 − 1] Lorsque U est repr´sentable en C2 sur 32 bits e (c’est-`-dire −231 ≤ U ≤ 231 − 1), on obtient sa repr´sentation dans le registre a e %l2 ` l’issue de l’instruction d’addition. a Lorsque U n’est pas repr´sentable en C2 sur 32 bits (c’est-`-dire U < e a
”Plus blanc que blanc, c’est quoi comme couleur ?” demandait Coluche dans un de ses textes !
2

7. Exercices

73

−231 ou U > 231 − 1), on dit que l’addition d´borde. Mais dans ce cas U e est repr´sentable sur 64 bits (33 suffiraient). Ecrire un programme en langage e d’assemblage qui donne toujours la somme U dans deux registres %l3, %l2. On peut ´videmment faire l’exercice analogue pour la diff´rence. e e E3.14 : Description r´cursive de l’addition de 2 naturels e D´crire l’addition de deux naturels comme une op´ration r´cursive sur la taille e e e des 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 ` a calculer, elle est repr´sentable sur 2 bits. Si N est une puissance de 2 sup´rieure e e a ` 1, N/2 est entier ; on peut couper A et B en deux parties Af ort Af aible et Bf ort Bf aible , chacune sur N/2 bits ; on a alors A = Af ort × 2N/2 + Af aible . Calculons un report interm´diaire rinter : e rinter = 1 si Af aible + Bf aible ≥ 2N/2 rinter = 0 si Af aible + Bf aible < 2N/2 On a alors, pour les poids faibles : Sf aible = Af aible + Bf aible si rinter = 0 Sf aible = Af aible + Bf aible − 2N/2 si rinter = 1 et, pour les poids forts : SN = 1 si Af ort + Bf ort + rinter ≥ 2N/2 SN = 0 si Af ort + Bf ort + rinter < 2N/2 Sf ort = Af ort + Bf ort + rinter si SN = 0 Sf ort = Af ort + Bf ort + rinter − 2N/2 si SN = 1

E3.15 : Pr´cision en repr´sentation flottante e e Les pi`ces de monnaies courantes en France sont 5, 10, 20 et 50 centimes et 1, e 2, 5, 10, 20 Francs. On repr´sente ces pi`ces par un code binaire. e e La premi`re partie du code est l’analogue d’une mantisse de 3 bits m2 , m1 , e m0 . Elle prend les valeurs 001, 010 ou 101 pour repr´senter 1, 2 ou 5 (centimes, e dizaine de centimes, francs ou dizaine de francs). La deuxi`me partie du code est l’exposant de 10 affectant les centimes (00 e pour les centimes, 01 pour les dizaine de centimes, 10 pour les Francs et 11 pour les dizaines de Francs). L’exposant est cod´ sur 2 bits e1 , e0 . e Les codes des diff´rentes pi`ces sont donc donn´s par le tableau de la fie e e gure 3.10. Il serait possible de compl´ter ce code pour repr´senter des sommes d’argent e e utilisant 2 pi`ces. On a alors des sommes de 3, 4, 6 ou 7 unit´s. On obtiendrait e e une table d’addition pour cette repr´sentation : e 01001 + 10101 = 11101(20 centimes + 50 centimes = 70 centimes).

74

Repr´sentation des grandeurs e

m2 m1 m0 101 001 010 101 001

e1 0 0 0 0 1

e0 0 1 1 1 0

pi`ce e 5 centimes 10 centimes 20 centimes 50 centimes 1 Franc

m2 m1 m0 010 101 001 010

e1 1 1 1 1

e0 0 0 1 1

pi`ce e 2 Francs 5 Francs 10 Francs 20 Francs

Fig. 3.10 – Codage des valeurs de pi`ces de monnaie fran¸aise. e c

Etudier la technique d’addition dans cette repr´sentation, en particulier le cas e o` 50 centimes + 50 centimes font 1 Franc et autres cas semblables. u Toutefois, on a aussi : 00111 + 01001 = 00111(10 Francs + 20 centimes = 10 Francs) car cette repr´sentation ne comporte pas assez de chiffres significatifs pour e distinguer 10 et 10,2. Etudier les possibilit´s offertes par un allongement de la mantisse sur e 6 bits par exemple. Etudier la technique d’addition nouvelle. Etudier les repr´sentations de sommes d’argent utilisant 3, 4, ou N pi`ces. e e Dans la repr´sentation en virgule flottante classique, la mantisse a 24 e chiffres. Cela permet de ne n´gliger les centimes que pour des sommes e sup´rieures ` 224 centimes. C’est suffisant pour la comptabilit´ domestique, e a e mais insuffisant pour une comptabilit´ d’entreprise par exemple. e

Chapitre 4 Repr´sentation des traitements e et des donn´es : langage e d’actions
La programmation des dispositifs informatiques s’appuie sur un ensemble de mod`les math´matiques simples, qui permettent de repr´senter formellee e e ment les donn´es et les traitements qui leur sont appliqu´s. Les langages dits e e de haut niveau qu’on utilise pour ´crire des programmes (Pascal, Ada, C, e ...) sont des mod`les de traitements et de donn´es. Le langage machine d’un e e processeur particulier, ou un langage d’assemblage d´fini pour ce processeur, e sont ´galement des mod`les de traitements, qualifi´s de mod`les de bas nie e e e veau. Cette notion de niveau correspond au niveau d’abstraction auquel on se place pour ´crire des programmes : les mod`les de bas niveau sont proches e e de la machine, alors que les mod`les de haut niveau permettent de s’en abse traire ; d’ailleurs les programmes ´crits en langage de haut niveau peuvent ˆtre e e rendus ind´pendants de la machine sur laquelle on les ex´cute. La d´finition e e e rigoureuse de la s´mantique de ces mod`les, ` tous les ´tages, est indispensable e e a e pour assurer la correction des diverses transformations n´cessaires pour passer e d’une repr´sentation de traitement dans un langage de haut niveau ` un objet e a ex´cutable par une machine. e Ceci est valable en ce qui concerne le logiciel — les ´tapes de la compilation e d’un langage de haut niveau vers un langage machine particulier (Cf. Chapitres 12, 13, 18) — aussi bien que pour le mat´riel — les ´tapes de la traduce e tion d’un langage de description de circuits vers une r´alisation ` l’aide d’une e a technologie particuli`re (Cf. Chapitres 8, 11 et 10). e Les objectifs de ce chapitre et du suivant sont : a) d´finir les langages et e les mod`les math´matiques utilis´s ; b) donner les ´l´ments n´cessaires ` la e e e ee e a compr´hension de l’utilisation de ces objets math´matiques pour repr´senter e e e des traitements informatiques ; c) donner la premi`re ´tape de traduction des e e mod`les de haut niveau vers des mod`les de plus bas niveau. L’´tape suivante e e e est la traduction en langage d’assemblage (Cf. Chapitre 13).

76

Repr´sentation des traitements et des donn´es... e e

Le paragraphe 1. pr´sente un petit langage d’actions (structures e de donn´es et structures de contrˆle). Le paragraphe 2. ´tudie la e o e repr´sentation en m´moire des types de base et des structures de e e donn´es ; nous introduisons le tableau MEM qui mod´lise la m´moire e e e d’un ordinateur. Le paragraphe 3. montre comment transformer syst´matiquement les affectations du langage d’actions en acc`s au tae e bleau MEM. Le paragraphe 4. illustre sur un exemple de construction de s´quence chaˆn´e le probl`me de l’allocation dynamique de m´moire e ı e e e n´cessaire ` la manipulation des structures de donn´es r´cursives comme e a e e les s´quences chaˆn´es et les arbres. Le dernier paragraphe s’int´resse ` la e ı e e a fois aux traitements et aux donn´es : la section 5. introduit les structures e de piles et de files, en ´tudiant ` la fois la repr´sentation en m´moire et e a e e les algorithmes associ´s. e

1.

Un langage d’actions

Le langage d’actions que nous d´crivons bri`vement ci-dessous est tir´ e e e de [SFLM93]. Nous supposons connues les notions de variable dans un langage de programmation imp´ratif, de type des donn´es. e e

1.1

Lexique : nommage des types et variables

Un algorithme commence toujours par un lexique, qui nomme en particulier les types et les variables utilis´s : e
entier18 : le type entier dans [−218−1 , 218−1 − 1] a, b, c : des entier18

1.2
1.2.1

Types de base et types construits
Types de base

La repr´sentation des types de base entier naturel, entier relatif, r´el et e e caract`re par des vecteurs de bool´ens a ´t´ vue au chapitre 3. On se donne e e ee une notation de ces types de base : entier, caract`re, r´el, bool´en. Pour les e e e entiers on s’autorise une sp´cification d’intervalle ; on ´crira par exemple : e e entier dans [0..255]. 1.2.2 Construction de types, structures de donn´es usuelles e

Nous ´tudions ici les structures de donn´es offertes par les constructeurs de e e types usuels des langages de programmation (n-uplets, tableaux, pointeurs). Pour d´crire un type construit et le nommer, on ´crit : e e
T : le type ...

o` les pointill´s doivent ˆtre compl´t´s par une expression de type, utilisant u e e ee l’un des constructeurs d´crits ci-dessous. e

1. Un langage d’actions

77

N-uplets Le constructeur de type n-uplet permet de grouper des informations de types diff´rents et de les manipuler comme un tout. On notera ces e groupements 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 d´signent les champs de la structure. T1 et T2 sont e des types quelconques d´finis par ailleurs. Etant donn´ un objet S de type e e Structure12, on acc`de aux informations ´l´mentaires du n-uplet par l’op´ration e ee e de s´lection des champs, not´e . ; on ´crit ainsi S.x, S.y. e e e Le constructeur n-uplet correspond aux struct des langages C et C++, aux record des langages Pascal et Ada.

Tableaux Le constructeur de type tableau permet de grouper des informations de mˆme type et d’y acc´der par un indice. On note les tableaux par des e e crochets :
Elem : le type ... Tab : le type tableau sur [...] de Elem

En g´n´ral [...] doit ˆtre compl´t´ par la notation d’un type intervalle. En e e e ee Pascal ou Ada, ces intervalles peuvent eux-mˆmes ˆtre d´finis d’apr`s des types e e e e ´num´r´s g´n´raux. En C les tableaux sont toujours d´finis sur un intervalle de e ee e e e la forme [0..N], o` N est un entier strictement positif. Pour la suite de l’expos´, u e nous nous restreignons ` des intervalles d’entiers. On ´crira par exemple : a e
Tab : le type tableau sur [42..56] d’entiers T : un Tab { T est une variable de type Tab }

L’acc`s aux ´l´ments du tableau est not´ par des crochets : T[42], T[43], e ee e ou encore T[a+b], si a et b sont des noms de variables de type entier, dont les valeurs sont telles que a+b appartient ` l’intervalle [42..56]. On peut aussi a utiliser une notation indic´e : T42 , Ta+b . e L’acc`s aux ´l´ments par un indice permet de parcourir tous les ´l´ments e ee ee d’un tableau dans une boucle. En anticipant sur la notation des traitements (paragraphes 1.4 et 1.5), on ´crit typiquement : e
Tab : le type tableau sur [42..56] d’entiers T : un Tab i parcourant [42..56] T[i] ←− 2 * i

Pointeurs La notion de pointeur des langages de programmation comme Pascal, C, Ada, etc. est intimement li´e ` celle d’adresse. Nous revenons sur e a ce constructeur de type dans le paragraphe 2. Le mot pointeur est un constructeur de type. Etant donn´ un type T, on e appelle pointeur de T le type des adresses m´moire d’objets de type T. e

78

Repr´sentation des traitements et des donn´es... e e

L’op´ration de d´r´f´ren¸age s’applique ` un objet de type pointeur de T e e ee c a et son r´sultat est un objet de type T. On la note de mani`re postfix´e par e e e une fl`che verticale vers le haut : p↑ est l’objet dont l’adresse est p. On ´crit e e par exemple :
T : un type ; adT : le type pointeur de T ; t1 : un T ; pt : une adT t1 ←− pt↑

Les variables de type pointeur peuvent avoir une valeur particuli`re not´e e e NIL, qui signifie pointeur sur rien (Cf. Paragraphe 2.4.3).

1.3

Op´rateurs de base et expressions e

Les expressions du langage sont form´es ` partir de noms de variables e a d´clar´es dans le lexique, de constantes des types de base, d’op´rateurs e e e pr´d´finis et d’appels de fonctions. e e 1.3.1 Expression conditionnelle et op´rateurs bool´ens e e

Une expression conditionnelle a la forme suivante : si C alors E1 sinon E2, o` C est une expression de type bool´en et E1, E2 deux expressions de mˆme u e e type, quelconque. Noter que les 2 expressions ci-dessous sont ´quivalentes, bien e que diff´remment factoris´es : e e
(si C1 alors E1 sinon E2) + (si C1 alors E3 sinon E4) si C1 alors E1+E3 sinon E2+E4

Pour les bool´ens, on consid`re les op´rateurs de base et, ou, non, ouexcl, e e e etc. h´rit´s de l’alg`bre de Boole (Cf. Chapitre 2). On y ajoute les op´rateurs e e e e bool´ens dits s´quentiels (ou non stricts) etpuis, oualors (en Ada : andthen, e e orelse). La s´mantique de ces op´rateurs peut ˆtre d´crite par une transformation e e e e en expression conditionnelle :
expr1 etpuis expr2 { est identique ` : } si expr1 alors expr2 sinon faux a expr1 oualors expr2 { est identique ` : } si expr1 alors vrai sinon expr2 a

1.3.2

Op´rateurs sur les nombres et les caract`res e e

Op´rations arithm´tiques : On utilisera toutes les op´rations e e e arithm´tiques usuelles : addition, multiplication, division, soustraction, e etc., sur les types num´riques introduits ici, c’est-`-dire le type entier et le e a type r´el. e Pour les entiers strictement positifs on consid`re ´galement le reste et le e e quotient de la division enti`re, en ´vitant les probl`mes de d´finition dus au e e e e signe des op´randes : e
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’op´ration reste est souvent appel´e modulo. e e

1. Un langage d’actions

79

Op´rations sur les caract`res : On peut introduire sur le type de base e e caract`re des fonctions comme : e
EstLettre ?, EstMajuscule ?, EstChiffre ?, ... : un caract`re −→ un bool´en e e MajusculeDe, MinusculeDe : un caract`re −→ un caract`re e e

Les premi`res permettent de d´terminer ` quel sous-ensemble de caract`res ape e a e partient un caract`re donn´. Les deuxi`mes sont des fonctions de conversions. e e e Par exemple : MajusculeDe (’a’) = ’A’. Notons que, grˆce aux propri´t´s du code ASCII (Cf. Chapitre 3), toutes a ee ces fonctions peuvent ˆtre cod´es en op´rations arithm´tiques ou bool´ennes e e e e e simples sur la repr´sentation en binaire des caract`res. Par exemple, pour pase e ser des majuscules aux minuscules il suffit d’inverser un bit, puisque l’´cart e entre 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 de modifier la valeur d’une variable. On la note par une fl`che orient´e ` gauche : e e a
X ←− expr T[3+z].u ←− expr

La partie gauche d’une affectation doit pouvoir d´signer un emplacement e m´moire (nous y revenons dans le paragraphe 3.) ; la partie droite est une e expression, dont le type doit ˆtre compatible avec le type de la partie gauche. e Les langages de programmation proposent des notions de compatibilit´ de e types plus ou moins riches, des v´rifications statiques associ´es, ainsi que des e e conversions dynamiques implicites. Nous nous contenterons ici d’exiger que les types des parties gauche et droite soient identiques. Toutefois on peut avoir besoin d’´crire x ←− y, o` x est un r´el et y un ene u e tier. Le codage binaire des entiers ´tant fort diff´rent de celui des r´els (Cf. Chae e e pitre 3), la repr´sentation en m´moire de la variable y est n´cessairement e e e diff´rente de celle de x. e Pour mettre en ´vidence la conversion que cache ainsi l’affectation, e nous utiliserons des fonctions de conversion de type (ou de changement de repr´sentation m´moire) explicites : e e
EntierVersR´el : un entier −→ un r´el e e { EntierVersR´el (a) est le r´el de valeur a } e e 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 chapitre 13. Nous verrons en particulier que la traduction en langage d’assemblage de la fonction Naturel31VersEntier32 est un programme vide ! Au chapitre 3, paragraphe 3.1, nous signalions d´j` ce cas. ea

80

Repr´sentation des traitements et des donn´es... e e

1.5

Structures conditionnelles et it´ratives e

On se donne les constructions si ... alors ... sinon et si ... alors ... usuelles dans tous les langages de programmation imp´ratifs. Notons que l’on peut ici e omettre la partie sinon, alors que c’est impossible pour une expression conditionnelle, qui doit avoir une valeur dans tous les cas. Autrement dit, ne rien faire est une action particuli`re. e Noter que les 3 actions suivantes sont ´quivalentes : e
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 d´crire une e analyse par cas exhaustive et sans duplication de cas, pour les valeurs d’une ou plusieurs expressions de type quelconque. Dans l’exemple qui suit, A1, A2 et A3 repr´sentent des actions quelconques. e
X : un entier Y : un caract`re e selon X, Y X ≥ 0 et Y = ’a’ : A1 X ≥ 0 et Y = ’a’ : A2 X < 0 : A3

Cette structure g´n´rale doit souvent ˆtre cod´e par une s´rie d’expressions e e e e e conditionnelles si ... alors ... sinon enchaˆ ees, comme en Pascal, en C, ... Les ın´ structures case et switch de ces langages ne permettent en effet que des conditions de la forme expr = constante, pour des types dont les constantes ont une notation dans le langage, c’est-`-dire les entiers, caract`res, types a e ´num´r´s. La structure selon ` conditions quelconques existe en Lisp (cond), e ee a mais sa s´mantique est s´quentielle et les diff´rentes conditions ne sont pas e e e n´cessairement exhaustives. e Nous utilisons par ailleurs 3 structures it´ratives : parcourant (qui correse pond au for de Pascal, C, Ada, ...), tantque (qui correspond au while de Pascal, C et Ada), r´p´ter ... jusqu’` (qui correspond au do ... while de C, e e a au repeat ... until de Pascal, au loop ... while de Ada). La s´mantique de ces constructions est pr´cis´e par leur traduction en mae e e chines s´quentielles ` actions (ou organigrammes) au chapitre 5. e a On peut d´j` ramener la structure parcourant ` une structure tantque : ea a
i parcourant [a .. b] : A { Est ´quivalent ` : } e a i : un entier sur [a .. b+1] i ←− a tantque i ≤ b : A ; i ←− i + 1

1. Un langage d’actions

81

1.6

Fonctions et actions param´tr´es e e

Pour d´finir une fonction on ´crira : e e
ExpressionCompliqu´e (a, b : deux entiers) −→ un entier e { a et b sont les noms des param`tres, de type entier, de la fonction nomm´e e e ExpressionCompliqu´e. Le r´sultat est de type entier ´galement } e e e lexique local : x : un entier { Pour des calculs interm´diaires } e algorithme x ←− (a+b)*2 { Description du r´sultat de la fonction : } e ExpressionCompliqu´e (a,b) : x + x*x e

Pour d´finir une action on ´crira : e e
CalculerExpressionCompliqu´e : une action e (les donn´es a, b : deux entiers ; e { param`tres dont la valeur est utilis´e par l’action } e e le r´sultat r : un entier) { param`tre dont la valeur est modifi´e par l’action } e e e lexique local : x : un entier { Pour des calculs interm´diaires } e algorithme x ←− (a+b)*2 ; r ←− x + x*x

Un contexte d’utilisation de la fonction ExpressionCompliqu´e et de l’action e CalculerExpressionCompliqu´e est d´crit ci-dessous : e e
u, v, w, w1, w2 : des entiers w ←− ExpressionCompliqu´e (u, v) + ExpressionCompliqu´e (2*u, v−1) e e CalculerExpressionCompliqu´e (u, v, w1) ; e CalculerExpressionCompliqu´e (2*u, v−1, w2) ; e w ←− w1+w2

Les noms qui apparaissent dans la liste de param`tres de la d´finition d’une e e action ou fonction sont appel´s param`tres formels. Les expressions qui appae e raissent entre parenth`ses dans les appels de fonctions ou actions sont appel´s e e param`tres effectifs ou arguments. Les param`tres effectifs donn´es sont des e e e expressions quelconques du type d´fini par le param`tre formel correspondant. e e Les param`tres effectifs r´sultats sont des expressions qui pourraient figurer en e e partie gauche d’affectation, c’est-`-dire qui d´signent un emplacement m´moire a e e (Cf. Paragraphe 2.2.1 du chapitre 13 pour comprendre cette contrainte). Les noms d´finis dans le lexique local ont une port´e r´duite au corps de e e e l’action ou fonction : cela signifie qu’ils ne sont pas utilisables ailleurs dans le texte d’un programme. D’autre part deux variables locales de deux actions ou fonctions diff´rentes peuvent porter le mˆme nom. e e

82

Repr´sentation des traitements et des donn´es... e e

1.7

Entr´es/Sorties e

On utilisera les actions Lire et Ecrire, pour tout type de donn´es, et avec un e nombre quelconque de param`tres. e Les param`tres de Lire sont des r´sultats, ceux de Ecrire sont des donn´es. e e e Une utilisation typique est d´crite ci-dessous : e
lexique : x, y : des entiers Ecrire (”Donnez deux entiers : ”) ; Lire (x, y) Ecrire (”Somme des deux entiers : ”, x+y)

2.

Repr´sentation des donn´es en m´moire e e e

Nous avons vu au chapitre 3 les principes de codage des types de base en binaire. Ce paragraphe traite de deux aspects : 1) la repr´sentation binaire des e valeurs des variables d’un langage de programmation (types simples, tableaux, structures, etc.), ` partir du codage binaire des types de base ; 2) l’installation a des variables d’un programme en m´moire. e Les choix de repr´sentation des types structur´s sont en g´n´ral guid´s e e e e e par une notion de coˆt (simplicit´, complexit´ en m´moire ou en temps) des u e e e op´rations de base ` r´aliser sur les objets du type consid´r´. e a e ee

2.1

Une mod´lisation de la m´moire : le tableau MEM e e

Nous introduisons le tableau MEM, comme abstraction de la m´moire d’un e ordinateur. C’est un tableau ` une seule dimension, indic´ par les naturels d’un a e intervalle [0..tmem-1], et dont les ´l´ments repr´sentent les unit´s adressables ee e e de la m´moire d’une machine. e L’unit´ adressable est un vecteur de bool´ens. Dans une machine r´elle c’est e e e presque toujours sup´rieur au bit ; certaines machines ont propos´ des unit´s e e e adressables de 9 bits. Dans la suite de cet ouvrage nous nous int´ressons — e sauf mention contraire — au cas des octets, c’est-`-dire aux unit´s adressables a e de 8 bits. C’est une taille commode pour la repr´sentation du type caract`re e e en m´moire. tmem repr´sente donc la taille de la m´moire en octets. e e e La notion d’unit´ adressable, sup´rieure au bit, est une mani`re d’exprie e e mer que, dans une machine r´elle, des contraintes de r´alisation mat´rielle e e e empˆchent d’acc´der efficacement ` chaque bit de la m´moire individuellement e e a e (Cf. Chapitres 9 et 15).

2.2
2.2.1

Repr´sentation en m´moire des types de base e e
Repr´sentation en m´moire des bool´ens e e e

L’id´al pour la repr´sentation en m´moire d’une information de type e e e bool´en serait d’utiliser 1 bit ; mais il est irr´aliste, pour des raisons mat´rielles, e e e d’acc´der ` un bit individuel dans la m´moire. On choisit donc la plus petite e a e

2. Repr´sentation des donn´es en m´moire e e e

83

taille possible : une unit´ adressable (voir toutefois le paragraphe 2.4.2 pour e le cas particulier des tableaux de bool´ens, o` l’on peut esp´rer gagner de la e u e place). Il faut convenir d’un codage des deux constantes vrai, faux parmi les 2k configurations d’une unit´ adressable de k bits. e Rien n’empˆche, a priori, de choisir, vrai = 4210 et faux = 7710 (sur un octet e par exemple). Le choix du bon codage d´pend essentiellement de la r´alisation e e des op´rations dans lesquelles intervient un op´rande ou un r´sultat de type e e e bool´en. Il faut penser aux op´rations internes du type bool´en (conjonction, e e e disjonction, ...) et ` la fabrication de valeurs bool´ennes par comparaison de a e deux entiers par exemple (qui apparaˆ bien sˆr dans si X < Y alors ... mais ıt u aussi dans des expressions de la forme : B ←− (X < Y)). Pour vrai = 4210 et faux = 7710 , il est difficile de d´crire la conjonction de e deux bool´ens a et b plus simplement que par : e si a=42 alors si b = 42 alors 42 sinon 77 sinon 77. Dans le langage C, le choix est le suivant : 0 repr´sente faux, toute autre e valeur repr´sente vrai ; une conjonction peut alors ˆtre r´alis´e ` l’aide de e e e e a l’op´rateur et logique disponible sur tous les processeurs. e 2.2.2 Repr´sentation en m´moire des entiers e e

Nous avons suppos´ l’existence d’un type de base entier. Les types de e donn´es qui permettent de d´finir des entiers dans les langages de programe e mation usuels correspondent le plus souvent ` des entiers born´s, c’est-`-dire ` a e a a des intervalles d’entiers. En C, par exemple, on d´clare des entiers en pr´cisant e e leur taille et en d´cidant si ce sont des entiers naturels ou relatifs. e Il existe des langages, comme scheme [Aa91], dans lesquels les traitements d’entiers sont dits ` pr´cision infinie. C’est un abus de langage pour expria e mer que la taille des entiers manipulables n’est pas statiquement born´e : la e simple addition de deux entiers peut provoquer l’allocation d’une zone m´moire e suppl´mentaire n´cessaire ` la repr´sentation du r´sultat. Le terme infini est e e a e e abusif puisque, mˆme si l’on consacre toute la m´moire de la machine ` la e e a repr´sentation d’un seul entier, l’intervalle des valeurs repr´sentables n’en est e e pas moins born´. e 2.2.3 Probl`me de la taille des entiers e

Si le type entier du langage de haut niveau que l’on consid`re d´signe un e e intervalle d’entiers suffisamment petit, les valeurs de ce type peuvent ˆtre e repr´sent´es en m´moire dans une seule unit´ adressable. Par exemple, un e e e e octet suffit pour repr´senter en compl´ment ` deux les entiers de l’intervalle e e a [−28−1 , 28−1 −1] ou, en binaire pur, les entiers de l’intervalle [0, 28 −1] (Cf. Chapitre 3). Si le type entier d´signe un intervalle plus grand, il devient n´cessaire d’utie e liser plusieurs unit´s adressables pour la repr´sentation d’une seule valeur de e e type entier. On utilise dans ce cas des unit´s adressables contigu¨s, et l’on e e

84

Repr´sentation des traitements et des donn´es... e e

consid`re un nombre entier d’unit´s adressables. Pour repr´senter les entiers e e e 18−1 18−1 de l’intervalle [−2 ,2 − 1], qui n´cessitent 18 bits, on utilisera donc 3 e octets. Nous avons vu au chapitre 3, paragraphes 2. et 3., comment ´tendre la e repr´sentation binaire d’un entier ` un plus grand nombre de bits. e a Notation Nous noterons taille(T) le nombre d’unit´s adressables n´cessaires e e a ` la repr´sentation en m´moire d’un objet de type T. Ainsi, par exemple, e e taille(entier dans [−218−1 , 218−1 − 1]) = 3, si l’unit´ adressable est l’octet. e 2.2.4 Repr´sentation en m´moire des entiers qui ne tiennent pas e e dans une unit´ adressable e

Consid´rons par exemple un entier x quelconque de l’intervalle e 32−1 32−1 [−2 ,2 − 1]. Notons x31 ....x0 le codage en compl´ment ` deux de x, e a qui n´cessite bien 32 bits, donc 4 octets. La suite de 32 bits x31 ....x0 doit e ˆtre d´coup´e en 4 portions de 8 bits, ´videmment contigus, ce qui donne : e e e e t4 = x31 ...x24 , t3 = x23 ...x16 , t2 = x15 ...x8 , t1 = x7 ...x0 . Notons qu’une de ces tranches, prise isol´ment, n’a pas n´cessairement de sens par rapport ` la vae e a leur de l’entier x. Par exemple, seul le bit de poids fort de la tranche t4 porte l’information sur le signe de x, en cas de codage en compl´ment ` 2. e a Pour repr´senter x en m´moire, on utilise 4 unit´s adressables contigu¨s, e e e e c’est-`-dire 4 cases cons´cutives du tableau MEM : MEM[a], MEM[a+1], a e MEM[a+2] et MEM[a+3]. Un choix subsiste sur le placement des 4 tranches t1 , t2 , t3 et t4 dans les cases MEM[a], MEM[a+1], MEM[a+2] et MEM[a+3]. Comme on respecte l’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 dans MEM[a+3] ; ce placement est appel´ petit boutiste : les poids faibles de x e apparaissent en premier, dans l’ordre des adresses. – t1 dans MEM[a+3], t2 dans MEM[a+2], t3 dans MEM[a+1] et t4 dans MEM[a] ; ce placement est appel´ gros boutiste : les poids forts de x ape paraissent en premier, dans l’ordre des adresses.
Remarque : L’existence de ces deux conventions diff´rentes est une cause e importante de non compatibilit´ entre syst`mes informatiques, d`s qu’il faut e e e transf´rer des fichiers. Dans le domaine des r´seaux, il existe un standard, c’est e e le choix gros boutiste. Sur les machines qui font le choix inverse, les donn´es e doivent ˆtre transform´es avant d’ˆtre transmises. Voir aussi l’exercice E4.1. e e e

2.3

Les acc`s au tableau MEM e

Nous venons de voir que des variables de types simples comme les entiers peuvent n´cessiter plusieurs unit´s adressables. Nous nous int´ressons donc au e e e probl`me de l’acc`s simultan´ ` plusieurs unit´s adressables contigu¨s. e e ea e e

2. Repr´sentation des donn´es en m´moire e e e

85

La situation d´crite ci-dessous n’est pas la plus g´n´rale que l’on pourrait e e e imaginer. Elle est guid´e par les contraintes mat´rielles de liaison entre le e e processeur et la m´moire, que nous ´tudierons au chapitre 15. e e Tout d’abord, nous ne nous int´ressons qu’au cas de blocs d’unit´s adrese e sables en nombre ´gal ` une puissance de 2 (pour ne pas perdre d’espace e a d’adressage, Cf. Chapitre 15). D’autre part, sur la plupart des machines, les acc`s ne sont permis que lorsque l’adresse est un multiple de la taille du transe fert (les autres acc`s ne sont pas n´cessairement impl´ment´s parce qu’ils sont e e e e moins efficaces). Cette restriction est connue sous le nom de contrainte d’alignement m´moire. e Les contraintes mat´rielles d’acc`s ` la m´moire ont ´galement pour e e a e e cons´quence que les acc`s simultan´s ` un nombre quelconque d’unit´s adrese e e a e sables ne peuvent pas constituer des op´rations ´l´mentaires dans une machine e ee (un processeur) usuel. Les affectations de m´moire pr´sent´es ci-dessous, ine e e dic´es par le nombre d’unit´s ` transf´rer, sont en petit nombre, fix´. e e a e e Nous noterons ←− k une affectation de taille k, c’est-`-dire un transfert a simultan´ de k unit´s adressables. Nous consid´rons par la suite les affectae e e tions :
x ←− 1 MEM[a] { L’unit´ adressable d’indice a dans le tableau MEM est copi´e dans la variable e e x (suppos´e de taille ad´quate) } e e x ←− 2 MEM[a] { Valide si a est multiple de 2. Les deux unit´s adressables d’indices a et a+1 e sont copi´es dans la variable x (suppos´e de taille ad´quate). } e e e x ←− 4 MEM[a] { Valide si a est multiple de 4. Les quatre unit´s adressables d’indices a, a+1, e a+2 et a+3 sont copi´es dans la variable x (suppos´e de taille ad´quate). } e e e

Il existe en g´n´ral une op´ration ´l´mentaire de transfert de 4 octets dans e e e ee les machines dites 32 bits, une op´ration de transfert de 8 octets dans les e machines 64 bits, ...

2.4
2.4.1

Repr´sentation en m´moire des types construits e e
Repr´sentation en m´moire des n-uplets e e

Les n-uplets, de mˆme que les entiers suffisamment grands, demandent plue sieurs unit´s adressables. On utilise lorsque c’est possible des unit´s contigu¨s. e e e Consid´rons les d´finitions de type : e e
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 unit´s adressables cons´cutives, e e d’adresses a, a + 1, ... a + 5. Le champ x commence ` l’adresse a, et le champ a y ` l’adresse a + 4. a

86

Repr´sentation des traitements et des donn´es... e e

En suivant le mˆme raisonnement que pr´c´demment, une valeur de e e e type Structure21 semble pouvoir occuper 6 unit´s adressables cons´cutives, e e d’adresses a, a + 1, ... a + 5. Le champ x commence ` l’adresse a, et le champ a y ` l’adresse a + 2. Toutefois le champ y est de taille 4 si l’unit´ adressable a e est l’octet. Si l’on veut pouvoir acc´der ` ce champ globalement (un seul acc`s e a e m´moire), son adresse doit ˆtre un multiple de 4. De mˆme le champ x est de e e e taille 2, donc son adresse doit ˆtre paire. e Ces contraintes d’alignement en m´moire empˆchent de placer un objet de e e type Structure21 ` une adresse quelconque. De plus, pour satisfaire la contrainte a d’alignement pour le champ y, on doit m´nager un espace entre le champ x et e le champ y. Nous donnons au paragraphe 2.4.2 une solution de repr´sentation en e m´moire qui ´vite de perdre trop de place dans le cas d’un tableau de struce e tures.
La directive d’alignement .align usuelle dans les langages d’assemblage est introduite au chapitre 12 et son utilisation dans la traduction des langages de haut niveau en langage d’assemblage est ´tudi´e au chapitre 13. e e

Remarque : Certaines machines (pentium MMX, sparc VIS) proposent des instructions sp´cifiques et un codage efficace pour une structure partie culi`re qui permet de d´crire une couleur : elle comporte 4 champs r, g, b, l e e pour les proportions de rouge, vert (green) et bleu, et la luminosit´. e

2.4.2

Repr´sentation en m´moire des tableaux e e

Comme mentionn´ plus haut, un tableau permet de grouper des informae tions de mˆme type et d’y acc´der par un indice. e e Placer les ´l´ments du tableau dans des unit´s adressables cons´cutives ee e e permet d’exprimer simplement l’adresse d’un ´l´ment du tableau en fonction ee de son indice et de l’adresse de d´but du tableau. Le fait que l’adresse d’un e ´l´ment soit ainsi calculable conduit ` un codage simple des boucles d’acc`s ee a e au tableau (Cf. le paragraphe sur l’optimisation des parcours de tableaux cidessous). Tableaux ` une dimension Consid´rons le type Tab : a e
Tab : le type tableau sur [42..56] d’entiers dans [−232−1 , 232−1 − 1]

Une valeur T de ce type n´cessite 4 × (56 − 42 + 1) unit´s adressables. 4 est e e le nombre d’unit´s n´cessaires pour un ´l´ment, et (56 − 42 + 1) est le nombre e e ee d’´l´ments du tableau. Si a est l’adresse de la premi`re unit´ adressable utilis´e ee e e e pour T, l’´l´ment T[i] occupe les unit´s d’adresses a + d + 0, a + d + 1, a + d + 2 ee e et a + d + 3, o` d = (i − 42) × 4. u Dans le cas particulier o` l’intervalle des indices du tableau commence ` 0, u a par exemple T : un tableau sur [0..N-1] de T’, la formule qui donne l’adresse de T[i] en fonction de l’adresse a de d´but de T est plus simple : d = i × taille (T’). e La prise en compte des contraintes d’alignement peut imposer de m´nager e des espaces perdus entre les ´l´ments du tableau. Si le type T’ des ´l´ments ee ee

2. Repr´sentation des donn´es en m´moire e e e

87

est tel que deux objets de type T’ peuvent toujours ˆtre plac´s cˆte ` cˆte e e o a o en m´moire, il n’y a pas de place perdue. C’est le cas par exemple pour e T’ : le type < c1, c2, c3 : des caract`res >. e En revanche, si T’ est le type Structure12 ´tudi´ au paragraphe pr´c´dent, e e e e on doit m´nager un espace de deux octets entre deux ´l´ments, de mani`re ` e ee e a satisfaire la contrainte d’alignement sur des adresses multiples de 4 du champ x. On peut conserver la formule qui donne l’adresse T[i] en fonction de l’adresse a de d´but de T, ` condition de red´finir la notion de taille n´cessaire ` la e a e e a repr´sentation d’un type. Par exemple, taille align (Structure12) = 8, et non 6. e
Remarque : cette fonction correspond ` la macro-notation sizeof du lana gage C, applicable ` un nom de type ou ` une expression typ´e. a a e

Cas particulier des tableaux de bool´ens Nous avons vu plus haut qu’un e bool´en seul occupe un octet. Lorsqu’on consid`re un tableau de bool´ens, e e e il devient int´ressant d’essayer de gagner de la place en choisissant une e repr´sentation plus compacte. Consid´rons le tableau T d´fini par : e e e
T : un tableau sur [0, N−1] de bool´ens e

Les ´l´ments de T peuvent ˆtre plac´s en m´moire ` partir d’une adresse a, ` ee e e e a a raison d’un ´l´ment par bit. Le tableau complet occupe alors N/8 octets au ee lieu de N . La position de l’´l´ment de rang i est d´termin´e par : le num´ro ee e e e de l’octet dans lequel il se trouve ; le num´ro de bit dans l’octet. On obtient e ces deux informations en prenant respectivement le quotient et le reste de la division enti`re de i par 8. e

Cas particulier des tableaux de structures Soit le tableau T d´fini par : e
TabStruct : le type tableau sur [0..N-1] de Structure21 T : un TabStruct

La repr´sentation m´moire propos´e ci-dessus pour T perd 2 octets pour e e e chaque ´l´ment, c’est-`-dire 2 × (N − 1). Si la taille m´moire est un crit`re ee a e e important, on peut envisager une repr´sentation m´moire tir´e de la transfore e e 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 ´vidente entre les objets de type TabStruct et e ceux de type StructTab. Les ´l´ments du champ tx, de taille 2, peuvent ˆtre ee e plac´s cˆte ` cˆte sans perte de place ; de mˆme les ´l´ments du champ ty. On e o a o e ee perd ´ventuellement deux octets entre le tableau tx et le tableau ty, mais c’est e tr`s inf´rieur ` 2 × (N − 1). e e a

88

Repr´sentation des traitements et des donn´es... e e

Parcours de tableaux et optimisation Nous traitons ici un exemple classique qui permet de comprendre le codage optimis´ des parcours de e tableaux en langage d’assemblage, comme on l’observe dans la plupart des compilateurs. Consid´rons l’algorithme suivant : e
Lexique N : l’entier ... ; i : un entier dans [0..N] T : un tableau sur [0..N−1] d’entiers dans [−232−1 , 232−1 − 1] algorithme i ←− 0 tant que i < N T[i] ←− 2*i + 1 i ←− i+1

La premi`re transformation consiste ` faire apparaˆ le tableau MEM qui e a ıtre mod´lise la m´moire, et l’installation des ´l´ments de T en m´moire. On note e e ee e aT l’adresse de d´but de T en m´moire. On obtient : e e
lexique : E : l’entier taille align(entier dans [−232−1 , 232−1 − 1]) algorithme : i ←− 0 tant que i < N MEM [aT + E * i] ←− 2*i + 1 i ←− i+1

La deuxi`me transformation consiste ` ajouter une variable redondante Ad e a pour repr´senter l’adresse de l’´l´ment courant en m´moire. Cette variable est e ee e li´e ` l’indice i du tableau par la propri´t´ Ad = aT + E * i que l’on installe e a ee avant la boucle, et que l’on maintient en modifiant Ad lors de toute modification de i. On obtient :
i ←− 0 ; Ad ←− aT + E * i tant que i < N { Invariant : Ad =aT + E * i } MEM [Ad] ←− 2*i + 1 i ←− i+1 ; Ad ←− Ad + E Remarque : La propri´t´ qui lie Ad est i est un invariant de programme. ee Pour un expos´ complet sur la notion d’invariant, voir par exemple [BB83]. e

Cette transformation, qui consiste ` factoriser le calcul de l’adresse dans a le tableau MEM et ` ´viter les multiplications, est une technique usuelle en a e compilation et optimisation des programmes (voir par exemple [CGV80]).

Tableaux ` plusieurs dimensions Nous consid´rons ici le cas des tableaux a e a ` 2 dimensions. Le cas des tableaux ` k dimensions s’en d´duit avec quelques a e pr´cautions (exercice E4.6). e Consid´rons le type Tab : e
N, M : des entiers > 0 Tab : le type tableau sur [0..M-1, 0..N-1] de T’

2. Repr´sentation des donn´es en m´moire e e e

89

MEM

MEM

T 0 0 1 2=M-1 1 2 3=N-1

a

T[0,0] T[0,1] T[0,2] T[0,3] T[1,0] T[1,1] ........

a

T[0,0] T[1,0] T[2,0] T[0,1] T[1,1] T[2,1] ........

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[2,0] T[2,1] T[2,2] T[1,3]

(a)

(b)

(c)

Fig. 4.1 – Repr´sentation en m´moire des tableaux ` deux dimensions e e a

T : un Tab

e La repr´sentation de T en m´moire n´cessite N × M × taille align(T’) unit´s e e e adressables. La figure 4.1 illustre les choix de placement des ´l´ments de T dans le ee tableau MEM, dans le cas o` N = 4 et M = 3. Noter que la repr´sentation de u e T sous forme de matrice (a), et le choix de la dimension qu’on appelle ligne sont conventionnels ; nous convenons ici que dans l’expression T[i,j], i repr´sente un e num´ro de ligne et j un num´ro de colonne. e e Dans le cas (b), on range les ´l´ments de T ligne par ligne, et l’adresse de ee u l’´l´ment T[i,j] s’exprime par la formule : a + (i × N + j) × taille align (T’), o` ee a est l’adresse de d´but du tableau. e Dans le cas (c), on range les ´l´ments colonne par colonne, et l’adresse de ee l’´l´ment T[i,j] s’exprime par la formule : a + (j × M + i) × taille align (T’). ee Noter la sym´trie des deux formules. e
Remarque : Nous r´servons le terme de tableau ` deux dimensions aux e a structures implant´es de mani`re contigu¨. En Java, on appelle tableau ` deux e e e a dimensions une structure de donn´es plus compliqu´e qui consiste en un tae e bleau ` une dimension de pointeurs sur des tableaux ` une dimension. Dans a a ce cas les lignes (ou colonnes) ne sont plus n´cessairement contigu¨s. e e

2.4.3

Repr´sentation en m´moire des pointeurs e e
{ compatible avec tous les pointeurs de T }

NIL : un pointeur T : un type

90

Repr´sentation des traitements et des donn´es... e e

adT : le type pointeur de T t1 : un T ; pt : une adT t1 ←− 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 major´e par la taille de la e m´moire disponible de la machine. e Nous avons vu dans ce qui pr´c`de que, lorsque les valeurs des objets e e (structur´s ou non) n´cessitent plusieurs unit´s d’acc`s, celles-ci sont contigu¨s. e e e e e Ainsi, pour rep´rer de mani`re non ambigu¨ une valeur en m´moire, il suffit e e e e de connaˆ : 1) l’adresse de la premi`re unit´ d’acc`s o` elle est stock´e ; 2) ıtre e e e u e le nombre d’unit´s d’acc`s utilis´es, qui peut se d´duire de son type. e e e e Nous avons vu (paragraphe 1.2.2) que pointeur de T est le type des adresses m´moire d’objets de type T. Le type pointeur de T sp´cifie donc l’informae e tion de taille, n´cessaire par exemple ` la traduction des affectations comme e a t1 ←− pt↑. On dit que pt pointe sur un objet qui occupe dans le tableau MEM, taille(T) unit´s adressables d’adresses a + 0, ... a + taille(T) − 1. e La constante NIL est de type pointeur, compatible avec tous les types pointeur de T, quel que soit T. Elle repr´sente le pointeur sur rien, et doit ˆtre e e cod´e par une valeur qui n’appartient pas ` l’ensemble de valeurs que peuvent e a prendre les autres pointeurs. Avec la vision abstraite de la m´moire que nous e avons adopt´e jusque l`, il suffit de choisir NIL : l’entier tmem, si MEM est e a d´fini sur l’intervalle [0..tmem-1]. Dans la r´alit´, la plupart des compilateurs e e e choisissent de coder NIL par l’entier 0 qui est facile ` tester (par convention 0 a n’est alors pas une adresse valide).

3.

Traduction des affectations g´n´rales en e e acc`s au tableau MEM e

Consid´rons un type T et deux variables de type T nomm´es x et y, inse e tall´es dans le tableau MEM ` des adresses ax et ay. Dans la d´finition du e a e langage d’actions utilis´, nous avons exig´ que l’affectation porte sur des obe e jets de mˆme type. L’affectation se traduit donc toujours par une simple recopie e du contenu d’une zone de m´moire vers une autre (pour les affectations des e langages moins contraignants, qui cachent des conversions, nous verrons au chapitre 13, paragraphe 1.2, comment coder les fonctions de conversion introduites au paragraphe 1.4 ci-dessus). On s’int´resse ici ` la traduction de l’action e a x ←− y en n’utilisant plus que les acc`s de taille fix´e au tableau MEM d´crits e e e au paragraphe 2.3. Lorsqu’une affectation porte sur des objets dont le type n´cessite un grand e nombre d’unit´s adressables, on ne peut pas la traduire par l’utilisation d’une e affectation indic´e par la taille, suppos´e ˆtre une op´ration de base dans les e e e e machines. Il faut alors traduire l’affectation par une boucle ou une s´quence e

4. Utilisation des pointeurs et gestion dynamique de la m´moire e

91

d’affectations.

3.1

Affectation de structures

On peut envisager essentiellement deux m´thodes : la m´thode structurelle, e e dans laquelle on traduit une affectation de structures par la s´quence des afe fectations champ par champ ; la m´thode aveugle, dans laquelle on a oubli´ le e e type, et o` l’on traduit une affectation de structures par le bon nombre d’acc`s u e au tableau MEM, de la taille la plus grande possible.

3.2

Affectation de tableaux

Consid´rons le programme suivant : e
Elem : un type T : le type tableau sur [a...b] de Elem t1, t2 : des T ; t1 ←− t2 { est ´quivalent ` : } e a i parcourant a...b t1[i] ←− t2[i]

Si Elem est lui-mˆme structur´, il faut continuer le raisonnement pour reme e placer t1[i] ←− t2[i] par une s´quence ou une boucle d’affectations plus e ´l´mentaires. ee

4.

Utilisation des pointeurs et gestion dynamique de la m´moire e

Quand on utilise des pointeurs, par exemple pour d´crire la construction e d’une s´quence chaˆ ee d’entiers dont le nombre d’´l´ments n’est connu qu’` e ın´ ee a l’ex´cution, la m´moire contient des donn´es qui ne correspondent pas direce e e tement ` des noms de variables d´finis par le programmeur. Ces donn´es sont a e e accessibles via des variables de type pointeur, dont les valeurs sont des adresses dans le tableau MEM. Nous donnons figures 4.2 et 4.3 un exemple typique de construction d’une structure de donn´es r´cursive. e e Pour permettre la cr´ation et la destruction de cellules lors de la construce tion de la s´quence, on utilise les actions Allouer et Lib´rer, qui se comportent e e comme des requˆtes ` un dispositif capable de distribuer de la m´moire : Allouer e a e permet de r´server une zone de m´moire contigu¨, en en pr´cisant la taille ; e e e e Lib´rer d´clare que la zone ne sera plus utilis´e ; des requˆtes d’allocation suce e e e cessives, sans lib´ration, obtiennent des adresses de zones m´moire disjointes. e e La mani`re la plus simple de voir les choses est de consid´rer que, dans un e e programme qui utilise des pointeurs, tout se passe comme si le programmeur

92

Repr´sentation des traitements et des donn´es... e e

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 Cellule inf, sup : des entiers ; LaS´quence : un pCellule e ConstruireS´quenceChaˆ ee : une action e ın´ (les donn´es i,j : deux entiers ; le r´sultat p : un pCellule) e e { ´tat final : p est l’adresse d’une premi`re cellule qui contient l’information e e i. Celle cellule pointe sur une cellule qui contient l’information i+1. Ainsi de suite jusqu’` une cellule qui contient j. Cette derni`re cellule ne pointe a e sur rien (suiv = NIL). } lexique pcour, pprec, fictif : des pCellule ; k : un entier algorithme Allouer (fictif, taille (pCellule)) si fictif = NIL alors Ecrire (”Allocation impossible”) sinon pprec ←− fictif ; fictif↑.suiv ←− NIL k ←− i ; pcour ←− fictif tantque pcour = NIL et k ≤ j : Allouer (pcour, taille (pCellule)) si pcour = NIL alors Ecrire (”Allocation impossible”) sinon pcour↑.x ←− k ; pcour↑.suiv ←− NIL pprec↑.suiv ←− pcour pprec ←− pcour ; k ←− k+1 p ←− fictif↑.suiv Lib´rer (fictif, taille (pCellule)) e algorithme du programme principal : Ecrire (”Donnez deux entiers : ”) ; Lire (inf, sup) ; ConstruireS´quenceChaˆ ee (inf, sup, LaS´quence) e ın´ e

Fig. 4.2 – Algorithme de construction d’une s´quence chaˆ ee e ın´ fictif LaS´quence e inf Fig. 4.3 – Une s´quence chaˆ ee e ın´ sup

4. Utilisation des pointeurs et gestion dynamique de la m´moire e

93

avait explicitement d´clar´ un grand tableau d’octets, et fourni des actions e e Allouer et Lib´rer capables de g´rer l’occupation de ce tableau. C’est d’ailleurs le e e cas dans certaines applications o` la gestion de la m´moire doit ˆtre optimis´e. u e e e Les environnements de programmation et les langages usuels offrent toutefois des actions Allouer et Lib´rer, que l’on peut utiliser si l’on ne se pr´occupe e e pas particuli`rement de l’efficacit´ des allocations. En C sous syst`me unix, e e e les fonctions malloc et free sont fournies dans une biblioth`que standard. e Dans ce cas il n’est pas n´cessaire que le programmeur d´clare explicitement e e un tableau. Pour comprendre exactement comment fonctionne ce dispositif d’allocation m´moire dite dynamique, il faut comprendre toutes les phases de traduction des e langages de haut niveau en langage machine (Cf. Chapitres 12 et 13) ainsi que les ´tapes de la vie d’un programme, de l’´criture du texte jusqu’` l’installation e e a du programme en langage machine dans la m´moire vive d’une machine, pour e ex´cution par le processeur (Cf. Chapitres 18 et 20). e Toutefois, du point de vue du programmeur qui utilise des pointeurs comme dans l’exemple de la figure 4.2, tout se passe comme si une partie du tableau MEM ´tait r´serv´e pour les allocations et lib´rations de zones m´moire ase e e e e soci´es ` des pointeurs. Ce n’est bien sˆr qu’une partie de la m´moire. En e a u e effet, nous verrons dans la suite de cet ouvrage que, lors de l’ex´cution d’un e programme utilisateur, la m´moire vive de la machine est occup´e par de e e nombreuses informations autres que les objets du programme proprement dit. D’autre part, mˆme si l’on ne consid`re que la m´moire n´cessaire aux donn´es e e e e e du programme utilisateur, il faut distinguer deux zones n´cessairement dise jointes : – une zone dans laquelle l’outil d’installation du programme en m´moire (le e chargeur, Cf. Chapitre 20) place les variables du lexique global. Elles restent au mˆme endroit pendant toute la dur´e de vie du programme, et elles sont e e toujours plac´es de la mˆme mani`re les unes par rapport aux autres, d’une e e e ex´cution ` une autre. Nous verrons au chapitre 13 comment le compilateur e a pr´pare ce placement en m´moire vive, en pr´calculant les d´placements des e e e e diff´rentes variables par rapport ` une adresse de base qui ne sera connue e a que lors du chargement. Ce pr´calcul est qualifi´ d’allocation statique, parce e e qu’il est ind´pendant des ex´cutions ; seule l’adresse de base d´pend de e e e l’ex´cution. e – une zone dans laquelle les allocations et lib´rations ` la demande du proe a gramme sont effectu´es. Cette zone contient les zones de m´moires allou´es, e e e ainsi que les informations n´cessaires ` sa gestion : zones encore disponibles, e a zones occup´es. Cette zone est appel´e le tas. e e

4.1

Sp´cification des actions Allouer et Lib´rer e e

Les actions Allouer et Lib´rer peuvent donc ˆtre sp´cifi´es et comprises e e e e en consid´rant qu’une partie de la m´moire est r´serv´e ` cet usage. Nous e e e e a

94

Repr´sentation des traitements et des donn´es... e e

consid´rons ici que le tableau MEM est partitionn´ en deux : une premi`re e e e portion P 1, qui va de l’indice 0 ` l’indice T , dans laquelle on trouve en para ticulier les variables du lexique global ; une deuxi`me portion P 2 qui va de e l’indice T + 1 ` l’indice du dernier ´l´ment tmem−1, dans laquelle on trouve a ee les blocs allou´s dynamiquement et les informations de gestion du tas. e
Allouer : une action (le r´sultat : un pointeur ; la donn´e : un entier > 0) e e { Allouer (p, n) r´serve dans la zone de m´moire comprise entre les indices e e T +1 et tmem−1 une zone contigu¨ de n ´l´ments, d´marrant sur une fronti`re e ee e e multiple de n. p est l’adresse de la premi`re unit´ adressable de cette zone e e r´serv´e. Si l’espace disponible est d´j` enti`rement occup´, la valeur finale e e ea e e p = NIL exprime l’impossibilit´ d’allouer. e C’est une action g´n´rique, qui convient pour tout type de pointeur. } e e Lib´rer : une action (la donn´e : un pointeur ; la donn´e : un entier > 0) e e e { Lib´rer (p, n) restitue la zone de m´moire situ´e entre les adresses p incluse e e e et p+n exclue. }

4.2

R´alisation des actions Allouer et Lib´rer e e

Les deux actions Allouer et Lib´rer g`rent la zone de m´moire P 2 comprise e e e entre les indices T +1 et tmem−1. Elles doivent tenir ` jour un ´tat de l’occupaa e tion des ´l´ments de cette zone : lesquels sont libres, lesquels sont occup´s, etc. ee e Ces informations sur l’´tat de la zone de m´moire sont de nouvelles variables, e e qui peuvent ˆtre rang´es dans la mˆme zone. e e e L’algorithme de l’action Allouer paraˆ simple : il semble suffire de distribuer ıt les portions de la zone de m´moire ` g´rer de mani`re s´quentielle, dans l’ordre e a e e e des demandes. Mais c’est raisonner sans tenir compte de l’action Lib´rer, qui e peut cr´er des trous, r´utilisables par des appels ult´rieurs de l’action Allouer. e e e L’algorithme se complique. Diff´rentes politiques d’allocation de la m´moire e e apparaissent, selon que l’on pr´f`re utiliser pour une nouvelle allocation : le ee premier trou de taille suffisante (dans un certain ordre d’exploration de la zone m´moire qui d´pend de l’algorithme ; l’id´e de prendre le premier acc´l`re e e e ee la recherche) ; le trou dont la taille est la plus proche de la taille demand´e e (provoque une tendance ` l’´miettement) ; le trou dont la taille est la plus a e ´loign´e de la taille demand´e... e e e Il existe une litt´rature prolifique sur les diverses mani`res de g´rer ainsi e e e une zone de m´moire o` les demandes et restitutions se font dans un ordre e u quelconque. Le lecteur consultera par exemple [Kra85]. Le probl`me g´n´ral de la gestion d’un espace m´moire pour l’installation e e e e dispers´e de blocs est pr´sent dans toutes les couches de l’architecture logie e cielle d’un ordinateur. Nous le reverrons au chapitre 19 ` propos d’installation a des fichiers sur un disque, puis au chapitre 20 ` propos d’installation d’un a programme en m´moire vive et de d´marrage du syst`me. e e e

5. Piles, files et traitements associ´s e

95

5.

Piles, files et traitements associ´s e

Les piles et les files sont des structures de donn´es tr`s utilis´es dans tous e e e les domaines de l’informatique. Nous pr´cisons ci-dessous les op´rations utie e lis´es dans cet ouvrage. Dans certains chapitres nous serons amen´s ` pr´ciser e e a e comment sont implant´s les types Pile et File, et comment sont programm´es e e les op´rations de manipulation de ces types. e Dans une pile, les ´l´ments sont extraits dans l’ordre inverse de leur ordre ee d’insertion (en anglais last in, first out, ou LIFO). Dans une file, les ´l´ments ee sont extraits dans l’ordre de leur insertion (en anglais first in, first out, ou FIFO). Voir par exemple [BB88] pour une sp´cification formelle des structures e de pile et de file et une ´tude de la programmation de ces structures (par des e tableaux, des s´quences chaˆ ees, ...). e ın´ Nous consid´rons ici des piles et des files de taille ´ventuellement born´e, e e e d’o` la notion de pile (ou de file) pleine. Une pile ou une file peut ´galement u e ˆtre vide. Ajouter un ´l´ment ` une pile ou file n’est possible que si elle n’est e ee a pas pleine ; ˆter un ´l´ment n’est possible que si elle n’est pas vide. o ee

5.1

Sp´cification d’une pile e

Elem : un type PileElem : un type { sans pr´juger de la repr´sentation des piles par des structures e e de donn´es particuli`res } e e TailleMax : un entier > 0 Initialiser : une action (le r´sultat P : une PileElem) e { ´tat final : P est la pile vide } e Empiler : une action (la donn´e-r´sultat P : une PileElem ; la donn´e x : un Elem ; e e e le r´sultat ok : un bool´en) e e { ´tat initial : Notons k le nombre d’´l´ments pr´sents dans la pile ; si la pile e ee e est vide : k = 0 ; si la pile est pleine : k = TailleMax . Notons P=α1 ...αk le contenu de la pile. ´tat final : Si k = TailleMax, P = α1 ...αk et ok=faux sinon, ok=vrai et P = e α1 ...αk x } D´piler : une action (la donn´e-r´sultat P : une PileElem ; le r´sultat x : un Elem ; e e e e le r´sultat ok : un bool´en) e e { ´tat initial : Notons k le nombre d’´l´ments et P=α1 ...αk le contenu de la e ee pile, lorsque k = 0. ´tat final : si k=0, alors ok=faux et x est non sp´cifi´ sinon ok=vrai, x=αk et e e e P = α1 ...αk−1 }

Lorsque la pile est de taille suffisante pour l’utilisation qui en est faite, ou lorsque qu’on ne veut pas s’int´resser au probl`me du d´bordement (c’est-`e e e a dire une tentative d’insertion lorsque la pile est pleine), on utilisera une action

96

Repr´sentation des traitements et des donn´es... e e

Empiler sans param`tre r´sultat bool´en. Dans ce cas, l’´tat final d’une pile qui e e e e ´tait pleine lors de l’empilement d’un ´l´ment, est non sp´cifi´. e ee e e De mˆme, si l’on ne s’int´resse pas au probl`me d’acc`s ` la pile vide, ou si e e e e a l’on sait que l’action D´piler n’est jamais appel´e avec une pile vide, on peut e e utiliser une action D´piler sans param`tre r´sultat bool´en. e e e e

5.2

Sp´cification d’une file e

Elem : un type FileElem : un type TailleMax : un entier > 0 Initialiser : une action (le r´sultat F : une FileElem) e { ´tat final : F est la file vide } e Entrer : une action (la donn´e-r´sultat F : une FileElem ; la donn´e x : un Elem ; e e e le r´sultat ok : un bool´en) e e { ´tat initial : Notons F=α1 ...αk le contenu de la file ; si la file est vide : e k = 0 ; si la file est pleine : k = TailleMax ´tat final : Si k = TailleMax, F = α1 ...αk et ok=faux sinon, ok=vrai et F = e α1 ...αk x } Sortir : une action (la donn´e-r´sultat F : une FileElem ; le r´sultat x : un Elem ; e e e le r´sultat ok : un bool´en) e e { ´tat initial : Notons F=α1 ...αk le contenu de la file. e ´tat final : si k=0, alors ok=faux et x est non sp´cifi´ sinon ok=vrai, x=α1 et e e e F = α2 ...αk }

Sous les mˆmes hypoth`ses que pour la pile, on s’autorise les actions Entrer e e et Sortir sans param`tres r´sultats bool´ens. e e e

6.

Exercices

E4.1 : Codage des entiers : petit bout ou gros bout Consid´rons deux chaˆ e ınes de caract`res dont on veut r´aliser la comparaie e son lexicographique (autrement dit d´terminer laquelle vient en premier dans e l’ordre alphab´tique). Ces chaˆ e ınes sont repr´sent´es en m´moire de mani`re e e e e contigu¨, chaque caract`re occupe un octet et il n’y a pas de place perdue. e e Pour acc´l´rer la comparaison, on utilise des op´rations de comparaison d’enee e tiers cod´s en binaire pur sur 32 bits, c’est-`-dire qu’on compare les caract`res e a e 4 par 4. Le choix de repr´sentation en m´moire des entiers (petit bout ou gros e e bout, Cf. Paragraphe 2.2.4) a-t-il une influence sur la correction du r´sultat ? e E4.2 : Repr´sentation m´moire des ensembles et codage des e e

6. Exercices

97

op´rations ensemblistes e Les vecteurs bool´ens peuvent repr´senter des ensembles, ou, plus exactement, e e un vecteur bool´en de N bits peut repr´senter une partie d’un ensemble ` N e e a ´l´ments : le bit de rang x est ` 1 si et seulement si l’´l´ment x appartient ` ee a ee a l’ensemble. (Cf. Paragraphe 4. du chapitre 3). On consid`re les types : e
Elem : le type entier dans [0..31] ; EnsElem : le type ensemble d’Elems E1, E2 : des EnsElem

98

Repr´sentation des traitements et des donn´es... e e

Proposer une repr´sentation m´moire des objets de type EnsElem. Combien e e d’octets sont-ils n´cessaires ? Exprimer en termes d’op´rations bool´ennes (et, e e e ou, non, ...) sur la repr´sentation m´moire de deux ensembles E1 et E2, les e e op´rations suivantes : e
E1 ∪ E2 ; E1 ∩ E2 ; E1 \ E2 E1 ←− 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 bool´nnes compos´es e e Proposer une transformation de si C1 et (C2 ou non C3) alors A1 sinon A2 qui n’utilise plus d’op´rateurs bool´en et, ou, non. e e E4.4 : Parcours de tableaux de structures On consid`re l’algorithme suivant : e
lexique Entier32s : le type entier sur [−232−1 , 232−1 − 1] T : un tableau sur [0 .. N-1] de < a : un Entier32s, b : un caract`re > e algorithme i parcourant 0 .. N-1 T[i].a ←− i * 2 ; T[i].b ←− ’a’

R´´crire cet algorithme en faisant apparaˆ le tableau MEM et l’installation ee ıtre des ´l´ments de T dans MEM, ` partir d’une adresse γ. ee a E4.5 : Choix de repr´sentation d’un tableau ` deux dimensions e a On consid`re trois tableaux d’entiers non sign´s, de dimension 2, carr´s, e e e nomm´s T, S et U, d´finis sur [0..N-1] x [0..N-1]. e e On veut remplir U d’apr`s la formule : U [i,j] = T[i, j] + 232 × S [j, i]. Si les e tableaux T et S ont des ´l´ments de 32 bits, U a donc des ´l´ments de 64 bits. ee ee Choisir une repr´sentation en m´moire des trois tableaux qui facilite le e e parcours de remplissage selon la formule ci-dessus. E4.6 : Repr´sentation en m´moire d’un tableau ` k dimensions e e a On consid`re le type suivant : e
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 repr´sentation en m´moire des objets de type Tab et donner la fore e mule qui exprime l’adresse de d´but de l’´l´ment T[i0 , i1 , ..., ik−1 ] en fonction e ee de l’adresse de d´but de T et des dimensions N0 , N1 , ..., Nk−1 . e E4.7 : Transformation d’algorithme d’acc`s ` un tableau de struce a tures Reprendre le d´veloppement du paragraphe sur l’optimisation des parcours de e tableaux (Cf. Paragraphe 2.4.2) dans le cas o` un tableau de structures est u repr´sent´ en m´moire par une structure de tableaux. e e e

6. Exercices

99

E4.8 : Parcours de matrice carr´e et comparaison double longueur e en compl´ment ` deux e a Consid´rons une constante enti`re positive N (pas trop grande) et une matrice e e carr´e ` N lignes et N colonnes : e a
N : un entier > 0 Matrice : un tableau sur [0..N-1, 0..N-1] d’entiers

On d´sire v´rifier si la propri´t´ suivante est vraie : e e ee
Pour tout i dans [1, N-1], Pour tout j dans [0, i-1] Mij < Mji

Le but de l’exercice est d’´crire un programme pour parcourir la matrice et e d´terminer si la propri´t´ est v´rifi´e. On ne demande pas de programmer e ee e e l’acquisition des ´l´ments de la matrice. ee Questions : Q1 Choisir une valeur pour la constante N (non triviale, c’est-`-dire a diff´rente de 0, 1, 2, mais de nature ` faciliter la programmation de l’ale a gorithme de parcours. Songer en particulier ` ´viter les multiplications ae g´n´rales). e e Q2 Proposer une repr´sentation m´moire du tableau, en supposant que les e e ´l´ments de la matrice sont des entiers relatifs cod´s en compl´ment ` ee e e a deux sur 64 bits. Q3 Donner l’algorithme demand´ en notation algorithmique, en faisant ape paraˆ le tableau MEM et le calcul des adresses des ´l´ments. ıtre ee Cet exercice se poursuit par la programmation en assembleur sparc, exercice E13.10 du chapitre 12. E4.9 : Programmation d’une file et d’une pile R´aliser les actions de manipulation des piles et files d´crites au paragraphe 5. : e e – En rangeant les ´l´ments dans un tableau, c’est-`-dire en consid´rant le ee a e type : PileElem : un tableau sur 1 .. TailleMax d’Elem – En rangeant les ´l´ments dans une s´quence chaˆ ee ee e ın´ Etudier les alternatives : pour le tableau, progression de la pile par adresses croissantes ou d´croissantes et pointeur de pile indiquant la premi`re case vide e e ou la derni`re case pleine ; pour la s´quence chaˆ ee, insertion en d´but ou en e e ın´ e fin.

100

Repr´sentation des traitements et des donn´es... e e

Chapitre 5 Repr´sentation des traitements e et des donn´es : e machines s´quentielles e
Nous pr´sentons ici le mod`le math´matique des machines s´quentielles e e e e de Moore et de Mealy. Ces mod`les peuvent ˆtre utilis´s pour repr´senter les e e e e traitements, aussi bien dans un contexte mat´riel que dans un contexte logiciel e (o` elles rejoignent la repr´sentation classique par organigrammes). u e Dans toute la suite de l’ouvrage, on utilisera indiff´remment les termes de e machine s´quentielle, machine ` ´tats finie, automate d’´tats fini, automate. e ae e Nous d´finissons les machines s´quentielles simples au paragraphe 1., e e puis les machines s´quentielles avec actions au paragraphe 2. Pour le e logiciel, nous montrons comment traduire le langage d’actions simple en machines s´quentielles avec actions au paragraphe 2.2. Pour le mat´riel, e e l’utilisation des machines s´quentielles apparaˆ aux chapitres 10 et 11. e ıt

1.
1.1

Machines s´quentielles simples e
D´finitions math´matiques et propri´t´s e e e e

D´finition 5.1 : machine de Moore, machine de Mealy e Une machine de Moore est un sextuplet (Q, q0 , E, S, T, f ) o` : u – Q est l’ensemble des ´tats ; q0 ∈ Q est l’´tat initial e e – E (resp. S) est l’alphabet (ou vocabulaire) d’entr´e (resp. de sortie) e – T ⊆ Q×E×Q est l’ensemble des transitions ; on note (q, e, q ) une transition de q ` q et on dit que l’´l´ment e de l’alphabet des entr´es est l’´tiquette a ee e e de la transition. – f : Q −→ S est la fonction qui fait correspondre un ´l´ment de l’alphabet ee de sortie ` chaque ´tat. a e Une machine de Mealy est un quintuplet (Q, q0 , E, S, T ) o` : u

102

Repr´sentation des traitements et des donn´es... e e

– Q est l’ensemble des ´tats ; q0 ∈ Q est l’´tat initial e e – E (resp. S) est l’alphabet d’entr´e (resp. de sortie) e – T ⊆ Q × E × S × Q est l’ensemble des transitions, ´tiquet´es par des e e couples constitu´s d’un ´l´ment de l’alphabet des entr´es et d’un ´l´ment e ee e ee de l’alphabet des sorties. 2 La figure 5.1 illustre la repr´sentation conventionnelle des automates : un e cercle pour un ´tat, une fl`che ´tiquet´e pour une transition. e e e e 1.1.1 Fonctionnement s´quentiel e

Le fonctionnement s´quentiel des machines de Moore ou de Mealy est d´fini e e en observant quelle s´quence de sorties est produite par la machine, lorsqu’elle e r´agit ` une s´quence d’entr´es donn´e. e a e e e Consid´rons donc une s´quence d’entr´es : c’est une suite d’´l´ments de e e e ee ee l’alphabet d’entr´es, c’est-`-dire une fonction de N dans E, dont les ´l´ments e a seront not´s de mani`re indic´e. On notera Se = e0 , e1 , ..., en , .... e e e Pour d´finir la r´action de la machine de Moore (Q, q0 , E, S, T, f ) ` la e e a s´quence d’entr´es Se , on d´finit la s´quence q0 , q1 , ... des ´tats rencontr´s : e e e e e e ∀n ≥ 0, (qn , en , qn+1 ) ∈ T Une transition (q, e, q ) exprime que, si la machine est dans l’´tat q, et qu’elle e re¸oit l’entr´e e, alors elle passe dans l’´tat q . La s´quence de sorties Ss = c e e e s0 , s1 , ... est ensuite d´finie par l’interm´diaire de la s´quence d’´tats : e e e e ∀n ∈ N, sn = f (qn ) Pour d´finir la r´action de la machine de Mealy (Q, q0 , E, S, T ) ` la s´quence e e a e d’entr´es Se , on ´crit directement : e e q 0 = q0 1.1.2 ∀n ≥ 0, (qn , en , sn , qn+1 ) ∈ T

D´terminisme et r´activit´ e e e

On s’int´resse aux propri´t´s de d´terminisme et r´activit´ des machines e ee e e e s´quentielles de Moore ou de Mealy, qui sont indispensables si l’on utilise les e machines comme mod`le de traitements, c’est-`-dire comme des programmes e a (Cf. Paragraphes 1.3 et 2.). On trouvera parfois dans la litt´rature le terme e d’automate complet, au lieu de r´actif (voir par exemple [Ben91]). Intuitivee ment, une machine est d´terministe (resp. r´active) si et seulement si, quel e e que soit son ´tat, et quelle que soit la configuration de ses entr´es, elle peut e e ex´cuter au plus une (resp. au moins une) transition. Une machine ` la fois e a d´terministe et r´active peut donc ex´cuter exactement une transition, pour e e e chaque ´tat et chaque entr´e. e e

1. Machines s´quentielles simples e

103

D´finition 5.2 : d´terminisme e e On dira qu’une machine de Mealy (Q, q0 , E, S, T ) est d´terministe si et seulee ment si :  ∃q1 ∈ Q, e1 ∈ E, s1 ∈ S, (q, e1 , s1 , q1 ) ∈ T  ∀q ∈ Q, ∧ =⇒ e1 = e2  ∃q2 ∈ Q, e2 ∈ E, s2 ∈ S, (q, e2 , s2 , q2 ) ∈ T De mˆme, on dira qu’une machine de Moore (Q, q0 , E, S, T, f ) est d´terministe e e si et seulement si :  ∃q1 ∈ Q, e1 ∈ E(q, e1 , q1 ) ∈ T  ∀q ∈ Q, ∧ =⇒ e1 = e2  ∃q2 ∈ Q, e2 ∈ E(q, e2 , q2 ) ∈ T 2

D´finition 5.3 : r´activit´ e e e Une machine de Mealy (Q, q0 , E, S, T ) est dite r´active si et seulement si : e ∀q ∈ Q, {e ∈ E | ∃q1 ∈ Q, s ∈ S, (q, e, s, q1 ) ∈ T } = E De mˆme, une machine de Moore (Q, q0 , E, S, T, f ) est dire r´active si et seulee e ment si : ∀q ∈ Q, {e ∈ E | ∃q1 ∈ Q, (q, e, q1 ) ∈ T } = E 2 Notons que lorsque la machine est d´terministe, il existe une unique e s´quence de sorties correspondant ` une s´quence d’entr´es. Lorsque la machine e a e e est r´active, la s´quence de sorties est aussi longue que la s´quence d’entr´es. e e e e 1.1.3 Fonctions de transition et de sortie

Pour des machines d´terministes, la relation de transition T ⊆ Q × E × Q e (Moore) ou T ⊆ Q × E × S × Q (Mealy) est souvent exprim´e comme une e fonction. On d´finit ainsi la fonction de transition g : Q×E −→ Q pour les machines e de Moore ; g associe ` chaque couple (´tat, entr´e) l’´tat de destination ; si la a e e e machine est r´active, cette fonction est totale. De la mˆme mani`re, on d´finit e e e e pour les machines de Mealy une fonction de transition g : Q × E −→ Q × S qui associe ` chaque couple (´tat, entr´e) l’´tat de destination et la sortie ´mise a e e e e par la transition. On trouve parfois ´galement une d´finition en deux fonctions, e e dites de transition et de sortie : g : Q × E −→ Q et s : Q × E −→ S.

104

Repr´sentation des traitements et des donn´es... e e

1.1.4

Equivalence des mod`les de Moore et de Mealy e

Pour toute machine M de Mealy (resp. de Moore), il existe et on peut construire une machine M de Moore (resp. de Mealy) telle que M et M produisent la mˆme s´quence de sorties pour une s´quence d’entr´es donn´e. e e e e e Nous donnons ici seulement l’intuition de la transformation, pour montrer que les deux mod`les sont ´quivalents. e e Pour transformer une machine de Moore en machine de Mealy, il suffit de d´placer les sorties des ´tats sur les transitions qui y m`nent. Pour transformer e e e une machine de Mealy en machine de Moore, il suffit de d´placer les sorties e associ´es ` une transition vers l’´tat but de la transition. Si plusieurs transie a e tions, portant des sorties diff´rentes, m`nent au mˆme ´tat, celui-ci doit ˆtre e e e e e ´clat´ en autant d’´tats distincts. e e e Dans la suite de cet ouvrage, nous utiliserons l’un ou l’autre des mod`les e de Moore ou de Mealy, mais sans avoir besoin de transformer l’un en l’autre.

1.2

Application ` la reconnaissance des a langages r´guliers e

L’une des caract´risations de la classe des langages r´guliers (on dit aussi e e langage rationnel) ´nonce que ces langages sont exactement les langages ree connaissables par des machines ` ´tats finies (Cf. par exemple [Ben91]). ae Les reconnaisseurs de langages r´guliers sont des machines de Moore qui e produisent une unique sortie bool´enne. Dans un ´tat E, cette sortie est vrai e e si et seulement si les s´quences d’entr´es qui permettent d’atteindre E depuis e e l’´tat initial constituent des phrases correctes du langage ` reconnaˆ e a ıtre. L’usage a consacr´ une notation particuli`re de ces machines de Moore, dans laquelle e e on omet la notation de la sortie : il suffit de distinguer, par exemple par des triangles, les ´tats pour lesquels elle vaut vrai. Dans la litt´rature on trouvera e e souvent le terme d’´tat final, ou de satisfaction. Notons que, si l’´tat initial est e e ´galement final, la phrase vide appartient au langage. e Les machines de Moore qui expriment la reconnaissance de langages r´guliers ne sont pas n´cessairement r´actives : ` partir d’un ´tat donn´, il e e e a e e peut ne pas exister de transition ex´cutable, pour un ´l´ment particulier de e ee la s´quence, et la machine peut donc se bloquer. Dans ce cas toutefois, la e s´quence d’entr´es ne permettra jamais d’atteindre un ´tat de satisfaction. On e e e interpr`te donc les blocages de la machine comme un r´sultat n´gatif. e e e Elles ne sont pas non plus n´cessairement d´terministes ; mais pour tout e e langage r´gulier il existe une machine s´quentielle d´terministe qui le ree e e connaˆ Il existe mˆme un algorithme de transformation d’un reconnaisseur ıt. e non d´terministe en reconnaisseur d´terministe du mˆme langage. e e e Il existe une infinit´ de machines de Moore ` ´tats finals pour reconnaˆ e ae ıtre un langage r´gulier donn´. Il en existe toujours une ` un nombre minimal e e a d’´tats. e

1. Machines s´quentielles simples e

105

c 1 a a 3 (a) b b 4 2

c 1 a a 3

c 2 b b c a, b, c (b) 5 4

c

a,b a,b,c

Fig. 5.1 – Reconnaissance du langage r´gulier a∗ b + c∗ . (a) Machine de Moore ` ´tats e ae finals, 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ˆ le langage d´crit par ıt e l’expression r´guli`re a∗ b + c∗ . L’automate donn´ est minimal. L’´tat 1 est e e e e initial. Les ´tats 1, 2 et 4 sont finals. L’´tat final 2 correspond aux phrases e e constitu´es uniquement de lettres c (au moins une) ; l’´tat final 4 correspond e e a ` la phrase r´duite ` la lettre b et aux phrases de la forme aa∗ b (un nombre e a non nul de lettres a, puis une lettre b). Notons que dans les phrases ca, bb ou encore ac, la premi`re lettre permet d’ex´cuter une transition issue de e e l’´tat initial, ensuite de quoi l’automate est bloqu´. Aucune de ces phrases e e n’appartient au langage consid´r´. ee

1.3

Application ` la description de syst`mes r´actifs a e e

Nous d´taillons dans ce paragraphe un exemple de syst`me r´actif : une e e e machine ` caf´. Cet exemple est repris au chapitre 10 o` nous montrons a e u comment r´aliser le contrˆleur de la machine avec un circuit s´quentiel. On e o e donne d’autres exemples de syst`mes r´actifs dans le paragraphe 2.1.1 et l’exere e cice E10.6 du chapitre 10. Exemple E5.2 : Machine ` caf´ a e On consid`re une machine automatique de distribution de caf´, qui accepte e e des pi`ces de 1, 2 et 5 francs. Un caf´ coˆte 2 francs. D`s que le consommateur e e u e a introduit 2 francs ou plus, la machine n’accepte plus de pi`ces jusqu’` ce e a que le caf´ soit servi. D’autre part, s’il avait introduit plus de 2 francs, la e machine rend la monnaie.

106

Repr´sentation des traitements et des donn´es... e e

On consid`re que la machine ` caf´ est constitu´e d’une partie physique et e a e e du dispositif informatique que nous appelons contrˆleur. L’environnement du o contrˆleur est constitu´ de l’utilisateur humain et de la partie physique de la o e machine. Les entr´es du contrˆleur en provenance de l’utilisateur humain se e o r´duisent a l’introduction de pi`ces (dans un exemple plus g´n´ral on envisae ` e e e gerait le choix de la boisson). Les entr´es en provenance de la partie physique e de la machine sont des comptes-rendus d’activit´ (voir plus loin). Les sorties ` e a destination de la partie physique de la machine sont les commandes de service du caf´, de fermeture de l’orifice d’introduction des pi`ces, de rendu de monnaie e e (on supposera qu’il existe un dispositif capable de calculer la somme ` rendre, a non d´crit ici). On n’envisage pas de sorties ` destination de l’utilisateur. e a Nous nous int´ressons ici ` l’algorithme du contrˆleur de cette machine. e a o Le contrˆleur est un exemple typique de syst`me dit r´actif : il interagit en o e e permanence avec son environnement, et r´agit ` des entr´es par l’´mission de e a e e sorties appropri´es. On peut le d´crire par une machine s´quentielle r´active, e e e e de Moore ou de Mealy. Notons que le crit`re math´matique de r´activit´ de la e e e e machine s´quentielle correspond exactement ` la nature r´active du syst`me de e a e e contrˆle de la machine ` caf´ : la r´action du contrˆleur doit ˆtre parfaitement o a e e o e d´finie, dans chacun de ses ´tats, pour chacune des entr´es possibles. e e e L’algorithme ` ´crire analyse une s´quence d’entr´es et produit une a e e e s´quence de sorties correspondante. e

Interface d’entr´e/sortie du contrˆleur : Pour d´terminer le vocabue o e laire d’entr´e de la machine s´quentielle d´crivant le contrˆleur, il convient de e e e o faire quelques hypoth`ses sur son environnement. On pourra consid´rer que les e e actions de l’utilisateur et le compte-rendu de la machine ne sont jamais simultan´s. D’autre part des contraintes physiques comme la taille de l’orifice dans e lequel on introduit les pi`ces empˆchent sans doute d’introduire deux pi`ces e e e en mˆme temps. Les seules entr´es ` consid´rer sont donc : e e a e – s1 , s2 , s5 signifient respectivement que l’utilisateur a introduit une pi`ce de e 1, 2 ou 5 francs. – fs est un compte-rendu d’activit´ de la machine : lorsqu’elle re¸oit la come c mande de service de caf´, elle r´pond par cet acquittement de fin de service, e e apr`s un certain temps. e – rien signifie que rien n’arrive : ni introduction de pi`ces, ni compte-rendu e de la machine. Le vocabulaire de sortie est P({R, C, B, AUCUNE}) o` R signifie : calculer u et Rendre la monnaie ; C signifie servir le Caf´ ; B signifie Bloquage de l’orifice e d’introduction des pi`ces ; AUCUNE signifie pas de sortie. Toutefois les seuls e sous-ensembles effectivement utilis´s dans la machine s´quentielle qui d´crit le e e e contrˆleur sont : {AUCUNE}, {C, B} et {R, C, B}. o

1. Machines s´quentielles simples e

107

Nous verrons au chapitre 10 que l’identification exacte du sous-ensemble effectivement utile du vocabulaire de sortie peut ˆtre utilis´ pour proposer un codage e e efficace des sorties d’une machine s´quentielle, lorsqu’elle est implant´e par un e e circuit s´quentiel. e

Description du comportement du contrˆleur : Le comportement du o contrˆleur de machine ` caf´ peut ˆtre d´crit par la machine de Moore de la o a e e e figure 5.2 (le mod`le de Moore est ici le plus appropri´ car la valeur des sorties e e est intrins`quement d´finie par l’´tat, et ne d´pend pas de l’entr´e). e e e e e Cette description appelle un certain nombre de remarques. 0n suppose que l’environnement de ce contrˆleur (c’est-`-dire l’ensemble form´ par l’utilisateur o a e humain et par la machine) a un comportement correct, c’est-`-dire que cera taines successions d’entr´es et de sorties du contrˆleur peuvent ˆtre consid´r´es e o e ee comme impossibles : 1) Tant que l’introduction des pi`ces est bloqu´e par la e e machine, s1 , s2 et s5 ne peuvent pas survenir ; 2) Lorsque l’utilisateur humain a command´ le service du caf´, le compte-rendu fs surviendra n´cessairement, e e e apr`s un certain temps ; 3) Le compte-rendu fs ne peut pas survenir si l’on n’a e pas command´ le service du caf´. e e Ces contraintes permettent de v´rifier que les formules bool´ennes qui e e conditionnent les transitions issues d’un mˆme ´tat assurent bien les propri´t´s e e ee de d´terminisme et r´activit´ de la machine. Par exemple, dans l’´tat Attente e e e e Pi`ces, les seules conditions envisag´es sont s1 , s2 , s5 et rien. rien correspond e e e e a ` la condition bool´enne : s1 .s2 .s5 . L’entr´e fs n’est pas mentionn´e. En ree vanche, dans l’´tat 2F re¸us s1 , s2 et s5 ne peuvent pas se produire et rien e c signifie fs . Nous donnons figure 5.3 une s´quence de monˆmes d’entr´e et la s´quence e o e e de monˆmes de sorties correspondante. o

1.4

Codage algorithmique d’une machine s´quentielle, e application aux reconnaisseurs de langages r´guliers e

Lorsqu’un probl`me est d´crit sous forme de machine s´quentielle, il est e e e possible de produire syst´matiquement un algorithme it´ratif dont le compore e tement est le comportement s´quentiel de la machine. e Par exemple, l’algorithme de reconnaissance d’un langage r´gulier est un e parcours de s´quence qui calcule un bool´en Appartenance. Lorsque le parcours e e s’arrˆte, ce bool´en a la valeur vrai si et seulement si la s´quence parcourue e e e constitue une phrase correcte du langage consid´r´ (c’est-`-dire si l’automate ee a reconnaisseur s’arrˆte dans un ´tat de satisfaction). e e On suppose que la s´quence des entr´es de la machine s´quentielle est ace e e cessible grˆce aux primitives D´marrer, Avancer, FinDeS´q et CarCour qui pera e e mettent d’abstraire les algorithmes de traitement s´quentiel (Cf. [SFLM93]). e Nous construisons l’algorithme it´ratif par un codage syst´matique de la e e machine s´quentielle de Moore qui d´finit le reconnaisseur. La consommae e

108

Repr´sentation des traitements et des donn´es... e e

s5

AUCUNE Attente Pi`ces e

rien

s2 fs fs rien 2F re¸us c s1 s5 1F re¸u c AUCUNE C,B s1 rien

rien R,C,B

Trop per¸u c s2

Fig. 5.2 – Comportement du contrˆleur d’une machine ` caf´ (machine de Moore) o a e .

Entr´e e rien rien rien s2 rien rien rien fs s1 rien s2 rien fs ...

Sortie {AUCUNE} {AUCUNE} {AUCUNE} {AUCUNE} {C, B} {C, B} {C, B} {C, B} {AUCUNE} {AUCUNE} {AUCUNE} {R, C, B} {R, C, B} {AUCUNE}

Etat courant Attente Pi`ces e Attente Pi`ces e Attente Pi`ces e Attente Pi`ces e 2F re¸us c 2F re¸us c 2F re¸us c 2F re¸us c Attente Pi`ces e 1F re¸u c 1F re¸u c Trop per¸u c Trop per¸u c Attente Pi`ces e

Fig. 5.3 – Une s´quence d’ex´cution du contrˆleur de la machine ` caf´ : chaque ligne e e o a e correspond ` un instant diff´rent ; le temps passe du haut vers le bas dans le a e tableau.

2. Machines s´quentielles avec actions e

109

Etat : le type (Un, Deux, Trois, Quatre, Erreur) E : un Etat ; Appartenance : un bool´en e E ←− Un ; D´marrer e tant que non FinDeS´q e selon E E = Un : selon CarCour : CarCour = ’c’ : E ←− Deux CarCour = ’b’ : E ←− Quatre CarCour = ’a’ : E ←− Trois E = Deux : selon CarCour : CarCour = ’c’ : E ←− Deux CarCour = ’b’ ou CarCour = ’a’ : E ←− Erreur E = Trois : selon CarCour : CarCour = ’a’ : E ←− Trois CarCour = ’b’ : E ←− Quatre CarCour = ’c’ : E ←− Erreur E = Quatre : E ←− Erreur E = Erreur : { rien ` faire } a Appartenance ←− (E = Un ou E = Deux ou E = Quatre) { Invariant : Appartenance est vrai ssi la s´quence de caract`res lue jusque e e l` est une phrase du langage d´crit par l’expression r´guli`re a∗ b + c∗ } a e e e Avancer

Fig. 5.4 – Algorithme de reconnaissance du langage a∗ b + c∗ bas´ sur l’automate de la e figure 5.1-b.

tion des ´l´ments de la s´quence est r´alis´e par un appel de la primitive ee e e e Avancer. Chaque passage dans la boucle consomme exactement un ´l´ment ee de la s´quence et repr´sente l’ex´cution d’une transition de la machine. Les e e e conditions sur l’entr´e sont traduites en conditions sur l’´l´ment courant de la e ee s´quence, accessible par la fonction Carcour. La sortie Appartenance est calcul´e e e en fin de boucle, en fonction de l’´tat atteint. e On suppose que la s´quence d’entr´e ne comporte que les caract`res a, b et e e e ∗ ∗ c. L’algorithme de reconnaissance du langage a b + c est donn´ figure 5.4. e

2.

Machines s´quentielles avec actions e

Dans le langage des actions pr´sent´ au paragraphe 1. du chapitre 4, la e e structuration des algorithmes est assur´e par un petit nombre de construce tions it´ratives (tant que, parcourant) ou conditionnelles. Parmi les actions e

110

Repr´sentation des traitements et des donn´es... e e

A A C (a) C faux C? vrai (b)

Fig. 5.5 – Machine de Moore avec actions et organigramme. (a) : un ´tat de machine e de Moore avec actions (C est une condition bool´enne et A une action) ; (b) : e une portion d’organigramme qui repr´sente le mˆme traitement. e e

´l´mentaires on trouve en particulier l’affectation. ee L’id´e du mod`le des machines s´quentielles avec actions — on trouve e e e parfois dans la litt´rature le terme d’automate interpr´t´ ou de sch´ma de proe ee e gramme avec interpr´tation (Cf. par exemple [Liv78]) — est d’exprimer les e structures conditionnelles et it´ratives d’un algorithme par les ´tats et trane e sitions d’une machine s´quentielle. Les actions sont les sorties de la machine e et constituent donc les ´tiquettes des transitions ou des ´tats, selon que l’on e e utilise le mod`le de Mealy ou le mod`le de Moore. Des conditions bool´ennes e e e constituent les entr´es de la machine s´quentielle. e e

2.1

D´finition e

On se donne un lexique (au sens d´fini chapitre 4) qui d´finit des types, e e des variables typ´es, des fonctions et des actions sans param`tres. Parmi les e e fonctions on distingue les pr´dicats, qui sont ` r´sultat bool´en. Le pr´dicat e a e e e constant vrai et l’action vide vide sont toujours d´finis, et jouent un rˆle pare o ticulier dans les manipulations de machines s´quentielles ` actions (Cf. Parae a graphe 2.4). Une machine s´quentielle avec actions est une machine ` ´tats finie dont le e ae vocabulaire d’entr´e est l’ensemble des pr´dicats : l’´valuation d’un pr´dicat e e e e repr´sente une entr´e de la machine, au sens du paragraphe 1.1. Les transitions e e sont donc ´tiquet´es par des pr´dicats. L’ensemble des actions constitue le e e e vocabulaire de sortie. Une machine de Moore avec actions est tr`s similaire aux organigrammes e classiques, ainsi que le montre la figure 5.5. Les machines de Mealy avec actions sont ´tudi´es dans [SFLM93]. Elles sont e e une extension naturelle des algorithmes obtenus comme codage syst´matique e des machines de reconnaissance des langages r´guliers (paragraphe 1.4). Nous e ne les ´tudierons pas ici. e

2. Machines s´quentielles avec actions e

111

2.2

Repr´sentation des structures de contrˆle par des e o machines s´quentielles avec actions e

Dans le chapitre 4 nous avons d´fini un petit langage d’actions, et ´tudi´ e e e la premi`re ´tape de traduction des structures de donn´es, c’est-`-dire la e e e a repr´sentation des donn´es complexes en m´moire. Nous obtenons donc des e e e programmes sans structures de donn´es, dans lesquels ne subsistent que des e acc`s de taille 1, 2 ou 4 au tableau MEM. e Nous nous int´ressons ici au codage des structures de contrˆle, sauf l’ape o pel d’action ou fonction param´tr´, qui sera ´tudi´ de fa¸on d´taill´e au chae e e e c e e pitre 13. La figure 5.6 donne la traduction des structures de contrˆle usuelles en mao chines s´quentielles avec actions. Chaque machine obtenue pour la traduction e d’une structure de contrˆle poss`de un ´tat initial et un ´tat final. Pour como e e e poser de telles machines, il suffit de d´finir comment remplacer une action A e par une machine. Pour cela on remplace l’´tat q qui porte l’action A par le e dessin complet de la machine qui repr´sente l’algorithme de A. Les transitions e issues de q deviennent issues de l’´tat final de la machine de A ; les transitions e qui arrivent ` q sont branch´es sur l’´tat initial de la machine de A. A titre a e e d’exemple nous donnons la machine de l’algorithme :
tant que C faire A tant que D faire B E

2.3

D´finition du lexique d’une machine s´quentielle e e avec actions

Dans ce paragraphe nous montrons comment produire une machine s´quentielle avec actions ` partir d’un algorithme it´ratif. Nous illustrons cette e a e transformation pour l’algorithme de Bresenham, qui permet de calculer les coordonn´es des points d’un segment dans un plan quadrill´. Cet exemple est e e repris dans le chapitre 11 o` nous montrons comment obtenir un circuit ` paru a tir de cet algorithme. L’exercice E13.5 du chapitre 12 propose de programmer cet 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 points de coordonn´es enti`res qui approchent le mieux possible une droite d’´quation e e e donn´e. e Le segment qui passe par les points de coordonn´es (0, 0) et (m, n) est e support´e par la droite d’´quation y = (n/m)x si m = 0. Il s’agit donc de tracer e e

112

Repr´sentation des traitements et des donn´es... e e

si C alors A sinon B

si C alors A

A ;B

non C B vrai

C A vrai non C C A vrai A vrai B

R´p´ter A jusqu’` C e e a non C A C C A tantque C faire A non D non C A B vrai E non C X vrai C non C A vrai non C vrai X C A C vrai D vrai vrai vrai tantque C faire [ A ; tantque D faire [ B ] ; E ]

X ; si C alors A

Fig. 5.6 – Traduction des structures de contrˆle en machines s´quentielles avec actions. o e Les ´tats non ´tiquet´s portent implicitement l’action vide. e e e

2. Machines s´quentielles avec actions e

113

5

3 2 0 0 5 6 11 12

00 10 21 31 42 52 63 73 83 94 10 4 11 5 12 5

Fig. 5.7 – Trac´ d’un segment dont les extr´mit´s sont les points de coordonn´es (0, 0) e e e e et (12, 5). Le trait blanc est id´al, les pixels noirs sont obtenus par l’algorithme, e les pixels gris pourraient sembler candidats.

le segment de cette droite qui va du point (0, 0) au point (m, n). Les points n’ayant que des coordonn´es enti`res, il faut noircir un ensemble de points (ou e e pixels, pour picture element) aussi proches que possibles de la droite id´ale. e
Remarque : Sans perte de g´n´ralit´, nous traitons le cas o` 0 ≤ n ≤ m. e e e u Les autres cas s’obtiennent ais´ment par des transformations simples o` le e u point de coordonn´es (j, k) devient (±j, ±k) ou (±k, ±j). e

L’´quation de la droite ´tant y = (n/m)x, avec m et n entiers, pour tout e e point de coordonn´es enti`res (j, k), il est possible de calculer un ´cart par e e e rapport ` la droite id´ale : k = (n/m).j − ou = (n/m).j − k. Le crit`re de a e e proximit´ retenu est le suivant : tout point de coordonn´es (j, k) doit ˆtre tel e e e 1 que : | | ≤ 2 . Evaluons la proximit´ relative de deux pixels par rapport ` la droite id´ale e a e avec les valeurs m = 12, et n = 5 (Cf. Figure 5.7). Pour le pixel d’abcisse 1, calculons l’´cart ` la droite id´ale de (1, 1) qui apparaˆ en gris´, et de (1, 0) e a e ıt e 5 7 qui est donn´ par l’algorithme ; pour (1, 1), = − 12 et pour (1, 0), = 12 . e C’est le point (1, 0) qui est donn´ par l’algorithme. Pour le point d’abscisse 6, e les deux points (6, 2), en gris´, et (6, 3), en noir, donnent la mˆme valeur de | |. e e 1 De | | ≤ 2 nous pouvons d´duire : e
1 −2 1 −2 −m −2m

≤ ≤ (n/m).j − k ≤ 2.n.j − 2.m.k ≤ 2.n.j − 2.m.k − m

≤ 1 2 ≤ 1 2 ≤ m ≤ 0

Posons ∆ = 2.n.j − 2.m.k − m. On remarque alors que lorsque j augmente de 1, ∆ augmente de 2.n ; lorsque k augmente de 1, ∆ diminue de 2.m. La construction de l’algorithme de calcul des coordonn´es des pixels successifs e

114

Repr´sentation des traitements et des donn´es... e e

lexique n : l’entier ... ; m : l’entier ... T : un tableau sur [0..m, 0..n] de bool´ens e j, k, ∆ : des entiers algorithme k ←− 0 ; j ←− 0 ; ∆ ←− − m { Valeur initiale de l’´cart : l’abscisse j vaut 0, l’ordonn´e k vaut 0, donc e e ∆ = −m } tant que j ≤ m : { Invariant : 0 ≤ j ≤ m et -2*m ≤ ∆ ≤ 0 } Tj,k ←− vrai { Le point de coord. j, k doit ˆtre affich´ } e e { Pour le point suivant, on augmente j de 1 } j ←− j + 1 ; ∆ ←− ∆ + 2*n si ∆ > 0 { Si ∆ est devenu trop grand, on le ram`ne ` une valeur convee a nable en augmentant l’ordonn´e courante } e k ←− k + 1 ; ∆ ←− ∆ − 2*m { −2 ∗ m ≤ ∆ ≤ 0 } Fig. 5.8 – Algorithme de Bresenham

utilise cette propri´t´. La variable d’abscisse j est incr´ment´e de 1 en 1. A ee e e chaque incr´mentation de j, k est mis ` jour de fa¸on ` maintenir ∆ entre e a c a −2m et 0. Pour cela il faut soit laisser k inchang´, soit incr´menter k. e e La figure 5.8 donne l’algorithme correspondant.

2.3.2

Machine s´quentielle avec actions r´alisant l’algorithme de e e Bresenham

Nous donnons Figure 5.9 le lexique des actions n´cessaires ` la d´finition e a e de la machine s´quentielle avec actions produite ` partir de l’algorithme de e a Bresenham. La figure 5.10 d´crit cette machine s´quentielle. e e Remarquons que cette machine a une forme particuli`re. Les ´tats ne sont e e pas s´par´s si cela n’est pas n´cessaire ; par exemple, l’action MajTetIncrAbs e e e est constitu´e des trois actions ´l´mentaires : Tj,k ←− vrai, j ←− j + 1 et e ee ∆ ←− ∆ + 2 * n. Les pr´dicats se limitent ` la consultation d’une variable e a bool´enne (Fini ou ∆pos). Le calcul des pr´dicats est syst´matiquement r´alis´ e e e e e dans un ´tat ; il pourrait parfois ˆtre int´gr´ ` un autre ´tat : la mise ` jour e e e ea e a de ∆pos pourrait, par exemple, ˆtre faite dans l’´tat o` est r´alis´ l’action e e u e e MajTetIncrAbs.

2. Machines s´quentielles avec actions e

115

{ Les variables : } Fini, ∆pos : des bool´ens e { Les actions : } Init : une action : j ←− 0 ; k ←− 0 ; ∆ ←− −m MajTetIncrAbs : une action Tj,k ←− vrai ; j ←− j + 1 ; ∆ ←− ∆ + 2 * n IncrOrdonn´e : une action : k ←− k + 1 ; ∆ ←− ∆ − 2 * m e CalculFini : une action : Fini ←− j > m Calcul∆pos : une action : ∆pos ←− ∆ > 0 { Les pr´dicats : } e EstFini : −→ un bool´en : fini e ∆EstPos : −→ un bool´en : ∆pos e Fig. 5.9 – Lexique de machine s´quentielle avec actions repr´sentant l’algorithme de Bree e senham

Init vrai CalculFini non EstFini EstFini non ∆estPos MajTetIncrAbs vrai Calcul∆pos vrai ∆estPos IncrOrdonnee Fig. 5.10 – Machine s´quentielle avec actions r´alisant l’algorithme de Bresenham e e

116

Repr´sentation des traitements et des donn´es... e e

2.4

Propri´t´s et transformations de machines e e s´quentielles avec actions e

Nous donnons ici quelques transformations des machines s´quentielles ` e a actions qui en pr´servent la s´mantique — c’est-`-dire la s´quence des actions e e a e effectu´es sur les donn´es du lexique — mais peuvent en modifier la structure. e e Plusieurs de ces transformations modifient le nombre d’´tats de la machine e parcourus lors d’une s´quence donn´e d’actions. Lorsque l’on s’int´resse aux e e e machines s´quentielles ` actions comme mod`le interm´diaire dans le processus e a e e de traduction des langages de haut niveau vers un langage d’assemblage, cela a peu d’importance, et toutes les transformations seront permises. En revanche, si ce mod`le de machine s´quentielle est utilis´ pour obtenir une r´alisation e e e e mat´rielle de l’algorithme ´tudi´, le nombre d’´tats sera en relation directe avec e e e e le temps d’ex´cution. En effet le cadencement des syst`mes mat´riels suit assez e e e rigoureusement la r`gle : dur´e de s´jour dans un ´tat = une p´riode d’horloge ; e e e e e en particulier la dur´e de s´jour dans un ´tat est une constante ind´pendante e e e e de l’´tat. Nous revenons sur cet aspect du probl`me au chapitre 11. e e 2.4.1 Fusion d’´tats e

Si ` la suite du processus de construction de l’algorithme deux ´tats E1 a e et E2 d’une machine s´quentielle ` actions ne sont s´par´s que par une trane a e e sition portant le pr´dicat vrai, on peut les fusionner. En effet, les propri´t´s e ee de d´terminisme et de r´activit´ des machines impliquent qu’il ne peut alors e e e pas y avoir d’autre transition entre les deux ´tats E1 et E2. Si les actions, e A1 et A2, qu’ils portent sont d´pendantes, l’´tat obtenu porte l’action A1 ; A2. e e Si les actions qu’ils portent sont ind´pendantes, on note A || B l’action come pos´e port´e par l’´tat obtenu, de pr´f´rence ` A ; B ou B ; A pour rappeler e e e ee a que l’ordre est indiff´rent. e 2.4.2 Eclatement d’´tats e

Inversement, tout ´tat portant une action compos´e de la forme A1 ; A2 e e peut ˆtre ´clat´ en deux ´tats s´par´s par la transition portant le pr´dicat vrai, e e e e e e e le premier portant l’action A1 et le deuxi`me l’action A2. e
Remarque : Dans l’exemple de Bresenham on aurait pu ´clater en e deux l’action MajTetIncrAbs. Le premier ´tat porte l’action : Tj,k ←− vrai ; e j ←− j + 1 ; ∆ ←− ∆ + 2*n. Le deuxi`me : j ←− j + 1 || ∆ ←− ∆ + 2*n. e

Nous verrons au chapitre 11 que lorsqu’il s’agit de produire un circuit synchrone pour implanter une machine s´quentielle, il faut placer sur chaque ´tat e e une action r´alisable en 1 coup d’horloge. Cela peut imposer de d´composer des e e actions complexes en suites d’actions ´l´mentaires r´alisables en 1 seul coup ee e d’horloge chacune. La machine s´quentielle comporte alors une suite d’´tats e e s´par´s par des transitions portant le pr´dicat vrai. e e e

2. Machines s´quentielles avec actions e

117

C3 C3 C1 A1 vrai C2 A2 vrai A3 vrai non C1 A1 vrai vrai vrai Fig. 5.11 – Transformation des tests n-aires en tests binaires non C2 C1 C2 A2 non C3 A3

2.4.3

Transformation des branchements n-aires en branchements binaires

Que les machines s´quentielles soient utilis´es pour construire des circuits e e s´quentiels synchrones (chapitre 11), ou pour produire du langage machine e (chapitre 12), il faut parfois se restreindre ` des branchements binaires. La a transformation syst´matique d’une machine ` branchements n-aires en mae a chine ` branchements uniquement binaires peut ajouter des ´tats, et donc a e allonger le chemin n´cessaire ` l’ex´cution d’une action. Dans le cas logiciel e a e comme dans le cas mat´riel, cet allongement du chemin se traduit par un e allongement du temps d’ex´cution. e La figure 5.11 donne deux machines s´quentielles correspondant ` la struce a ture conditionnelle :
selon C1 : A1 ; C2 : A2 ; C3 : A3

La premi`re machine poss`de un ´tat ` 3 transitions sortantes, pour lequel e e e a on exige : (C1 ou C2 ou C3) et non ((C1 et C2) ou (C2 et C3) ou (C1 et C3)). La deuxi`me machine est ` branchement binaire. Noter que le test des e a conditions peut se faire dans un ordre quelconque. Il existe donc 6 machines diff´rentes ayant le mˆme comportement. Noter ´galement que si la condition e e e de r´activit´ est bien respect´e dans la machine ` branchement binaire, la e e e a transition qui porte la condition non C1 est inutile. 2.4.4 Echange contrˆle/donn´es o e

Les deux algorithmes de la figure 5.12 produisent les mˆmes r´sultats. La e e figure 5.14 repr´sente les deux machines s´quentielles avec actions associ´es, e e e en utilisant le lexique d´crit Figure 5.13. e

118

Repr´sentation des traitements et des donn´es... e e

lexique B1 : le bool´en ... ; B2 : le bool´en ... ; N : l’entier ... ; i : un entier e e T : un tableau sur [0..N] de bool´ens e CondT : un entier −→ un bool´en { une propri´t´ portant sur un entier } e ee algorithme 1 : i ←− 0 tant que i ≤ N si CondT(i) alors Ti ←− (Ti et B1) sinon Ti ←− (Ti ou B2) i ←− i + 1 algorithme 2 : i ←− 0 tant 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 contrˆle/donn´es : deux algorithmes ´quivalents o e e

{ lexique : } C1, C2 : des bool´ens e { les actions : } Init : une action (la donn´e-r´sultat i : un entier) : i ←− 0 e e CalculC1 : une action (les donn´es i : un entier, N : un entier) : C1 ←− i ≤ N e CalculC2 : une action (la donn´e i : un entier) : C2 ←− CondT(i) e AndT : une action (les donn´es : x : un bool´en, i : un entier) : Ti ←− Ti et x e e OrT : une action (les donn´es : x : un bool´en, i : un entier) : Ti ←− Ti ou x e e ActCond : une action (les donn´es : x1, x2 : deux bool´ens, i : un entier) e e Ti ←− (CondT(i) et (Ti et x1)) ou (non CondT(i) et (Ti ou x2)) { les pr´dicats : } e EstC1 : −→ un bool´en : C1 e EstC2 : −→ un bool´en : C2 e Fig. 5.13 – Echange contrˆle/donn´es : lexique des machines s´quentielles o e e

2. Machines s´quentielles avec actions e

119

Init vrai CalculC1 non EstC1 EstC1 CalculC2 non EstC2 OrT(B2,i) vrai vrai Incr(i) vrai EstC2 AndT(B1,i)

Init vrai non EstC1 CalculC1 EstC1 ActCond(B1, B2, i) vrai vrai Incr(i)

Fig. 5.14 – Deux machines s´quentielles r´alisant le mˆme traitement e e e

120

Repr´sentation des traitements et des donn´es... e e

Dans la deuxi`me machine, l’utilisation de l’action ActCond permet e l’´conomie du test portant sur C2, c’est-`-dire sur CondT. e a Formellement les deux algorithmes ne sont pas ´quivalents. Dans le premier, e une seule des deux expressions Ti et B1 et Ti ou B2 est ´valu´e ; dans l’autre e e les deux le sont. Il n’y a ´quivalence que si aucune des deux ´valuations ne e e produit d’effet de bord. Nous verrons au chapitre 11 que cette technique permettant de transf´rer e des informations du contrˆle aux donn´es est utilis´e lors de la r´partition o e e e du travail entre une partie op´rative et une partie contrˆle. L’action ActCond e o correspond en mat´riel ` l’utilisation d’un multiplexeur (Cf. Chapitre 8). e a

Chapitre 6 Temps, donn´es temporelles et e synchronisation
Ce chapitre est l’occasion d’introduire la notion de temps dans les syst`mes e informatiques. Quand on s’int´resse ` un syst`me informatique au niveau e a e d’abstraction que donnent les langages de haut niveau, on peut se contenter d’une notion de temps logique pour raisonner sur la succession des op´rations e dans un programme. Cette notion de temps est qualifi´e de logique parce qu’on e ne s’int´resse pas ` la relation avec le temps physique (mˆme lorsque cette ree a e lation existe : pour un processeur donn´ et une chaˆ de compilation donn´e, e ıne e elle est mˆme exprimable). e En revanche, lorsqu’on s’int´resse aux mod`les de traitements de bas niveau e e comme le langage machine, le s´quencement des op´rations est en rapport e e direct avec le temps physique. D’autre part, ne fˆt-ce que pour comprendre u les m´canismes d’entr´es/sorties, il faut s’interroger sur l’interface entre le e e dispositif informatique et son environnement, et sur le rapport entre les notions de temps de l’un et de l’autre : le temps de l’environnement est un temps physique continu ; celui du syst`me informatique est par nature discret. e

Nous ´tudions tout d’abord au paragraphe 1. l’interface entre un envie ronnement physique et un dispositif informatique r´duit ` une machine e a s´quentielle (´tudi´e au chapitre 5). Le paragraphe 2. introduit la notion e e e de signal logique obtenu par discr´tisation d’un signal physique continu, e et la repr´sentation de telles informations temporelles par des chronoe grammes. Le paragraphe 3. s’int´resse aux probl`mes de synchronisation e e de deux dispositifs informatiques connect´s l’un ` l’autre ; trois solutions e a sont envisag´es, dont le protocole poign´e de mains que nous utilisons e e dans les chapitres 11 et 16. Au paragraphe 4. nous reprenons l’exemple de la machine de distribution de caf´ d´j` ´tudi´e au chapitre 5, pour e ea e e pr´ciser l’interface entre le contrˆleur informatique et l’environnement e o physique de la machine.

122

Temps, donn´es temporelles et synchronisation e

1.

Interface entre un dispositif informatique et un environnement physique

Pour comprendre o` intervient le temps dans les traitements informatiques, u nous nous int´ressons ici au cas o` une machine s´quentielle repr´sente le fonce u e e tionnement d’un dispositif informatique directement connect´ ` un environneea ment physique.

1.1

Le temps logique discret des machines s´quentielles e

Bien que la d´finition math´matique des s´quences et des machines e e e s´quentielles ne suppose pas l’introduction d’une notion de temps, il est assez e naturel de parler d’apr`s ou d’avant dans la s´quence des entr´es. L’indiciation e e e des ´l´ments de la s´quence — c’est-`-dire l’ensemble des entiers naturels — ee e a est donc un bon candidat pour repr´senter une certaine notion de temps. Ce e temps est qualifi´ de logique parce qu’on ne s’int´resse pas n´cessairement ` la e e e a relation entre les instants qu’il d´finit et un v´ritable temps physique. Il est dit e e discret parce que l’ensemble des entiers naturels n’est pas dense dans (une s´quence indic´e par les ´l´ments de l’ensemble des r´els repr´senterait plus e e ee e e naturellement un temps continu). Tant qu’on utilise le mod`le des machines s´quentielles avec actions e e (Cf. Chapitre 5), on reste au niveau d’abstraction du logiciel. La s´quence des e entr´es de la machine s´quentielle est accessible grˆce aux primitives D´marrer, e e a e Avancer, FinDeS´q et CarCour qui, dans un programme complet, seraient effece tivement programm´es. Elles peuvent repr´senter le parcours d’un tableau en e e m´moire, la saisie interactive au clavier, aussi bien que l’acc`s aux ´l´ments e e ee d’un fichier pr´sent sur un disque. Le fonctionnement de la machine, c’est-`e a dire le d´roulement de l’algorithme, d´pend donc bien de param`tres de temps, e e e comme le temps d’acc`s ` la m´moire, le temps n´cessaire pour r´aliser une e a e e e entr´e clavier, le temps d’acc`s au disque, etc., mais d’une fa¸on difficilement e e c exprimable.

1.2

Le temps physique continu de l’environnement

Si la machine s´quentielle consid´r´e repr´sente le fonctionnement d’un e ee e dispositif informatique directement connect´ ` un environnement physique, les ea alphabets d’entr´e et de sortie repr´sentent des informations en provenance ou e e a ` destination de cet environnement. Il faut alors exprimer pr´cis´ment la relae e tion entre les ph´nom`nes continus qui nous int´ressent dans l’environnement e e e et la structure de s´quence des entr´es/sorties de la machine s´quentielle. e e e On se ram`ne toujours ` des ph´nom`nes physiques que des appareils de e a e e mesure appropri´s transforment en tensions ´lectriques accessibles au dispositif e e informatique.

1. Interface entre un dispositif informatique et un environnement physique

123

L’´volution d’une tension ´lectrique en fonction du temps peut-ˆtre e e e repr´sent´e par une courbe de fonction, comme illustr´ figure 6.1-a. e e e

1.3

D´finition de l’interface d’entr´es/sorties e e de la machine s´quentielle e

Le dispositif informatique ne peut traiter que des informations discr`tes. e Nous avons vu au chapitre 3 comment ramener l’ensemble des valeurs possibles de G ` un nombre fini de valeurs. On discr´tise donc l’axe G en d´finissant une a e e partition finie de l’ensemble des valeurs possibles, comme indiqu´ figure 6.1e b o` il y a deux valeurs. On peut ensuite reporter les variations continues u sur cette nouvelle ´chelle GD. On obtient une suite de paliers de longueurs e quelconques, comme indiqu´ figure 6.1-c. Notons que deux paliers successifs e sont ` des hauteurs distinctes, par construction. a On va se limiter au cas des informations bool´ennes (pour lesquelles l’ene semble des valeurs a ´t´ partitionn´ en deux). Ce qui est en dessous du seuil ee e devient la valeur la plus basse (cod´e par 0), et ce qui est au-dessus du seuil e devient la plus haute (cod´ par 1). e

1.4

Discr´tisation du temps : interpr´tation synchrone e e ou asynchrone

Pour compl´ter la d´finition de l’interface entre l’environnement et le dise e positif informatique repr´sent´ par une machine s´quentielle, il faut d´finir e e e e la structure de s´quence, c’est-`-dire d´cider comment la suite de paliers de e a e la figure 6.1-c doit ˆtre interpr´t´e en une s´quence d’´l´ments de l’alphabet e ee e ee d’entr´e, ` fournir ` la machine. e a a Il y a essentiellement deux choix : l’interpr´tation asynchrone, et l’ine terpr´tation synchrone, que nous exposons ci-dessous. e 1.4.1 Interpr´tation asynchrone e

En interpr´tation asynchrone, la structure de s´quence est d´finie par les e e e changements de hauteurs de paliers. Dans le cas d’une information bool´enne, qui ne comporte que deux haue teurs de paliers, on parle de front montant ou de front descendant, selon qu’on passe du niveau inf´rieur au niveau sup´rieur ou inversement. Notons que cette e e interpr´tation de la suite de paliers donne des s´quences o` les fronts montants e e u et descendants alternent, par construction. Par cons´quent, quelle que soit la courbe de la grandeur mesur´e, et quelle e e que soit la position des fronts sur l’´chelle de temps physique, la s´quence des e e hauteurs de paliers est une alternance de 0 et de 1 ; la s´quence des fronts e porte exactement la mˆme information. Il n’est donc pas tr`s int´ressant de e e e consid´rer la r´action d’une machine s´quentielle ` cette s´quence d’entr´es. e e e a e e

124

Temps, donn´es temporelles et synchronisation e

G

G

(a) temps G G β α temps

temps GD 1 1 GD

(b) temps

(c) 0 GD 1 1 (d) 0 (A) 0 (B) 0 GD

Fig. 6.1 – S´quence d’entr´es correspondant ` une grandeur continue de l’environnee e a ment : a) ´volution d’une grandeur continue ; b) discr´tisation de l’axe G ; c) e e discr´tisation du temps, interpr´tation asynchrone ; d) discr´tisation du temps, e e e interpr´tation synchrone. e A) Cas d’une grandeur ; B) cas de plusieurs grandeurs

1. Interface entre un dispositif informatique et un environnement physique

125

En revanche, d`s que l’on consid`re plusieurs grandeurs, les paliers (ou, e e de mani`re ´quivalente, les fronts) sont superpos´s. En associant une variable e e e bool´enne — par exemple α — ` chacune des grandeurs, et en notant α la e a valeur 1 de cette grandeur, α la valeur 0 de cette grandeur, on peut construire une s´quence de monˆmes bool´ens qui refl`te les superpositions de paliers. e o e e On passe ` un nouvel ´l´ment de la s´quence d`s que l’une au moins des deux a ee e e grandeurs change de palier. Pour l’exemple de la figure 6.1-Bc, on construit la s´quence e α.β, α.β, α.β, α.β, α.β, α.β, α.β, α.β Il devient int´ressant de d´crire des machines s´quentielles capables de traie e e ter des s´quences ainsi construites. e Exemple E6.1 : Interpr´tation asynchrone de deux grandeurs et e comptage Consid´rons une machine s´quentielle qui per¸oit deux grandeurs α et β, et e e c dont la sortie bool´enne γ est vraie si et seulement si les deux grandeurs ont e eu la mˆme valeur un nombre pair de fois dans le pass´. e e En utilisant la s´quence des niveaux superpos´s, on ´crira par exemple la e e e machine de Moore suivante :
¬(α.β ∨ α.β) α.β ∨ α.β γ = vrai Pair α.β ∨ α.β Fig. 6.2 – Machine de Moore lisant la s´quence des niveaux e Impair γ = faux ¬(α.β ∨ α.β)

Pour la s´quence α.β, α.β, α.β, α.β, α.β, α.β, α.β, α.β, la s´quence e e de sortie est : γ, γ, γ, γ, γ, γ, γ, γ, γ. On peut aussi consid´rer que δ d´note le front montant d’une grandeur e e bool´enne D, et δ son front descendant. La s´quence construite pour l’exemple e e de la figure 6.1-Bc est alors : β, α, β, α, β, α.β, α. Notons que l’origine des temps n’est pas consid´r´e comme un front. D’autre part rien n’empˆche d’envisager ee e le changement simultan´ des deux grandeurs, d’o` l’existence d’´l´ments de la e u ee s´quence de la forme α.β. e 1.4.2 Interpr´tation synchrone e

L’interpr´tation synchrone est un cas particulier de l’interpr´tation asyne e chrone d´crite ci-dessus pour deux grandeurs, dans lequel on consid`re que e e

126

Temps, donn´es temporelles et synchronisation e

l’une des grandeurs est l’horloge de l’autre. La grandeur choisie comme horloge d´finit un d´coupage de l’axe du temps qui permet d’´chantillonner l’autre e e e grandeur. Ce d´coupage n’est pas n´cessairement r´gulier en temps physique ; e e e l’axe du temps sous-jacent n’est pas d´coup´ en intervalles de tailles ´gales, e e e quoique ce soit g´n´ralement le cas avec des horloges r´gul´es par des quartz. e e e e En interpr´tation synchrone, on a donc toujours au moins deux grandeurs. e Notons d’ailleurs que synchrone signifie litt´ralement qui partage le mˆme e e temps, et qu’il faut ˆtre au moins deux pour partager quelque chose. Deux e grandeurs seront dites synchrones si elles sont ´chantillonn´es sur la mˆme e e e horloge, asynchrones sinon. A partir d’une grandeur qui sert d’horloge et d’une ou plusieurs autres grandeurs, on fabrique une s´quence d’entr´es de la machine s´quentielle en e e e cr´ant un ´l´ment de s´quence par front d’horloge : c’est un monˆme qui d´crit e ee e o e le niveau des autres grandeurs ` l’instant de ce front. a
Nous verrons qu’une machine s´quentielle peut ˆtre r´alis´e par un circuit e e e e s´quentiel synchrone (Cf. Chapitres 10 et 11). Une horloge d´termine alors e e les instants auxquels la machine change d’´tat. Un processeur peut ˆtre vu e e comme une machine s´quentielle synchrone cadenc´e elle-aussi par son hore e loge (Cf. Chapitre 14). Il existe aussi des r´alisations, dont des processeurs, e asynchrones. Nous n’´tudions pas cette technique dans ce livre. e

Exemple E6.2 : Machine ` caf´ (suite de l’exemple E5.2) a e Nous envisagions une s´quence e d’entr´es e commen¸ant c par s1 .s2 .s5 , s1 .s2 .s5 , s1 .s2 .s5 , ... Si l’on utilise l’interpr´tation asynchrone d´finie ci-dessus, les entr´es s1 , e e e s2 , s5 et fs de la machine ` caf´ sont superpos´es, et on en d´duit une a e e e s´quence d’entr´es en cr´ant un nouvel ´l´ment uniquement quand l’une au e e e ee moins change. La s´quence ci-dessus n’apparaˆ donc jamais. e ıt Si l’on utilise l’interpr´tation synchrone, en revanche, on introduit une e cinqui`me entr´e implicite : l’horloge. On construit un ´l´ment de la s´quence e e ee e pour chaque p´riode d’horloge. La s´quence ci-dessus peut donc apparaˆ e e ıtre.

2.

Signaux logiques et repr´sentation par des e chronogrammes

Les grandeurs physiques continues dont nous avons envisag´ la e discr´tisation sont des signaux physiques. Nous appellerons signal logique e l’´chantillonnage d’un tel signal physique par les fronts d’un autre signal qui e sert d’horloge.
On ´tudie l’influence des probl`mes de synchronisation sur la r´alisation des e e e automates synchrones dans le chapitre 10.

L’´volution au cours du temps des horloges et des signaux logiques peut e ˆtre repr´sent´e par des courbes en cr´neaux carr´s, comme sur la figure 6.3. e e e e e

3. Probl`mes de synchronisation e

127

a

H Temps Fig. 6.3 – Un exemple de repr´sentation de signaux logiques par des chronogrammes : e H est un signal d’horloge, et a est un signal logique d’horloge H (noter que l’horloge est un signal bool´en. Ici le signal a est ´galement bool´en). e e e

S S2

S1 S0

H t1 t2

Fig. 6.4 – Repr´sentation de l’´volution de grandeurs : la valeur S cod´e sur 3 bits S0 , e e e S1 et S2 est momentan´ment instable entre les instants t1 et t2 e

Ces courbes sont des chronogrammes. Si l’on s’int´resse au temps de changement de valeur discr`te d’un sie e gnal par rapport au rythme d’une horloge H, et aux ´ventuels probl`mes e e d’´chantillonnage qui en d´coulent, on peut repr´senter l’´volution temporelle e e e e des grandeurs en jeu par une figure comme 6.4. Pour repr´senter des valeurs ind´finies ou non significatives, nous utilisons e e aussi les repr´sentations donn´es dans la figure 6.5. e e

3.

Probl`mes de synchronisation e

Nous avons envisag´ jusqu’ici le cas d’un dispositif informatique connect´ e e a ` un environnement physique dont il doit ´chantillonner les grandeurs. e Si l’on s’int´resse ` plusieurs dispositifs informatiques, on peut consid´rer e a e chacun comme l’environnement de l’autre : les sorties de l’un peuvent ˆtre les e entr´es de l’autre. Pour ´tudier les probl`mes de synchronisation entre syst`mes e e e e informatiques, on suppose que les deux syst`mes sont d´crits par des machines e e s´quentielles, et que les entr´es de l’un peuvent ˆtre les sorties de l’autre. e e e

128

Temps, donn´es temporelles et synchronisation e

a)

b)

t0 δ1 δ2

Fig. 6.5 – Repr´sentations particuli`res de valeurs : e e a) Signal bool´en dont la valeur est ind´finie avant l’instant t0 e e b) La valeur n’est significative que pendant les p´riodes δ1 et δ2 ; ce type de e sch´ma est souvent utilis´ pour repr´senter la valeur pr´sente sur un bus : e e e e lorsque aucun composant n’est connect´ au bus sa valeur n’est pas significae tive.

instants de lecture, cas 2 V

instants de lecture, cas 1

Fig. 6.6 – Acc`s ` une valeur commune V e a

Si les deux dispositifs A et B re¸oivent un mˆme signal qui peut servir c e d’horloge commune H, ils peuvent ´chantillonner toutes les grandeurs sur e la mˆme horloge. Dans le cas contraire, les deux dispositifs A et B peuvent e n´anmoins avoir des horloges locales, c’est-`-dire utiliser chacun un signal pare a ticulier comme horloge pour ´chantillonner les autres signaux, mais chacun e doit ˆtre consid´r´ comme l’environnement asynchrone de l’autre. e ee

3.1

Le probl`me g´n´ral d’acc`s ` un signal commun e e e e a

On consid`re deux dispositifs informatiques appel´s r´cepteur et ´metteur, e e e e qui doivent se mettre d’accord sur une valeur V produite par l’un et consomm´e e par l’autre. L’´metteur a un comportement cyclique : il maintient une valeur e sur le fil (ou les fils) V pendant un certain temps, puis fabrique une nouvelle valeur (pendant ce temps l’´tat du fil est ind´termin´) et la maintient sur le e e e fil, etc. Le r´cepteur a ´galement un comportement cyclique : il acc`de ` ce fil en e e e a lecture ; consomme la valeur (ce traitement prend un certain temps) ; acc`de e de nouveau ` V , etc. a Le probl`me pos´ comporte deux contraintes : e e – Le r´cepteur ne doit pas consommer deux fois la mˆme valeur e e

3. Probl`mes de synchronisation e

129

– Le r´cepteur ne doit pas ignorer une valeur e Si les deux dispositifs ´voluent de mani`re compl`tement ind´pendante l’un e e e e de l’autre, les instants de lecture sont quelconques : les deux probl`mes cie dessus peuvent survenir. Voir figure 6.6 : dans le cas 1, les instants de lecture sont trop proches, le r´cepteur lit plus vite que l’´metteur ne produit ; dans le e e cas 2, les instants de lecture sont trop ´loign´s, le r´cepteur ne lit pas assez e e e vite. Il faut donc se d´brouiller pour synchroniser l’´metteur et le r´cepteur e e e pour l’acc`s ` la valeur commune V . Cette synchronisation est assur´e par un e a e protocole de communication.

3.2
3.2.1

Protocole poign´e de mains et mise en oeuvre e
Le protocole

Pour ´viter les deux cas de fonctionnement incorrect d´crits par la figure 6.6, e e on doit assurer que : 1. le r´cepteur ne peut pas lire deux fois la donn´e V sans avoir ´t´ pr´venu e e ee e par l’´metteur d’un changement entre temps ; e 2. l’´metteur ne peut pas modifier la valeur de la donn´e (c’est-`-dire e e a ´mettre deux valeurs diff´rentes) ` moins d’avoir ´t´ pr´venu par e e a ee e le r´cepteur entre temps que la premi`re valeur a effectivement ´t´ e e ee consomm´e. e On introduit ` cet effet deux signaux de synchronisation E prˆt et R prˆt. a e e e e e e e E prˆt est produit par l’´metteur et consomm´ par le r´cepteur. R prˆt est produit par le r´cepteur et consomm´ par l’´metteur. L’id´e est d’assurer la e e e e synchronisation par un dialogue entre l’´metteur (E) et le r´cepteur (R), de la e e forme suivante : E est responsable de la production des valeurs V, et pr´vient e R de l’apparition d’une nouvelle valeur — c’est le signal E prˆt ; R attend e d’ˆtre ainsi pr´venu pour consommer la valeur pr´sente sur le fil ; il envoie e e e e c ensuite ` E un acquittement de lecture — c’est le signal R prˆt ; lorsqu’il re¸oit a l’aquittement de lecture en provenance de R, E peut proc´der ` la production e a d’une nouvelle valeur.
Remarque : Cette id´e d’un ´change d’informations suppl´mentaires du e e e type j’ai ´crit et j’ai bien lu, pour r´guler les acc`s en lecture/´criture ` une e e e e a information partag´e est une id´e simple et tr`s g´n´rale. La complexit´ des e e e e e e protocoles de communication dans les r´seaux informatiques tient ` un autre e a probl`me : les lignes de transmission entre l’´metteur et le r´cepteur ne peuvent e e e pas ˆtre consid´r´es comme fiables, ce qui oblige ` pr´voir la r´´mission des e ee a e ee e messages et de leurs acquittements. En effet, lorsqu’un signal comme X prˆt est ´mis par l’un, on n’a pas de garantie de r´ception par l’autre. e e

130

Temps, donn´es temporelles et synchronisation e

3.2.2

Mise en oeuvre, cas g´n´ral e e

e L’´metteur a une horloge H e et le r´cepteur une horloge H r. Les deux e e e signaux E prˆt et R prˆt donnent deux signaux logiques chacun, selon qu’ils sont ´chantillonn´s par l’horloge de l’´metteur ou par l’horloge du r´cepteur. e e e e On consid`re les 4 signaux logiques suivants p ep, d ep, p rp, d rp (Cf. Fie gure 6.8) : ´mission du signal E prˆt (´chantillonn´ sur H e), d´tection du e e e e e e e e e e e e signal E prˆt (´chantillonn´ sur H r), ´mission du signal R prˆt (´chantillonn´ sur H r), d´tection du signal R prˆt (´chantillonn´ sur H e). e e e e e Le pr´fixe p indique la production du signal, le pr´fixe d indique sa e d´tection. e e e a e E prˆt est ´gal ` son ´chantillonnage sur l’horloge H e, puisqu’il est produit sur cette horloge ; il est en revanche diff´rent de son ´chantillonnage sur H r. e e Fonctionnement temporel de l’´metteur et du r´cepteur La fie e gure 6.7 donne les machines de Moore d´crivant le comportement temporel e de l’´metteur et du r´cepteur, en terme des signaux logiques p ep, d ep, d rp, e e p rp. Chacune des machines change d’´tat sur les fronts de son horloge, d’apr`s e e la valeur des signaux de communication ` cet instant-l`. a a En observant le comportement des deux machines s´quentielles, on peut se e convaincre des propri´t´s suivantes : ee – Le r´cepteur ne peut pas passer deux fois dans l’´tat de lecture de V sans e e que l’´metteur ait quitt´ son ´tat d’´criture. e e e e – Sym´triquement, l’´metteur ne peut pas passer deux fois dans l’´tat e e e d’´criture sans que le r´cepteur soit pass´ dans son ´tat de lecture. e e e e Repr´sentation par des chronogrammes Les chonogrammes de la fie gure 6.8 illustrent les contraintes d’ordre sur les fronts de la donn´e V et des e e e signaux logiques p ep, d ep, d rp, p rp, impos´es par le protocole poign´e de mains ainsi que l’´tat courant de l’´metteur et du r´cepteur. e e e 3.2.3 Mise en oeuvre : cas particuliers

Synchronisation par horloge commune ou horloges inverses : Lorsque les deux dispositifs qui communiquent ´chantillonnent les grandeurs e sur la mˆme horloge, le sch´ma de la figure 6.8 est simplifi´ : il n’y a pas de e e e d´calage temporel entre la production d’un signal et sa d´tection (si l’on n´glige e e e le d´lai de transmission du signal d’horloge dans les connexions physiques par e rapport au temps de travers´e d’un circuit combinatoire). e u Le cas des horloges inverses, He = Hr est un cas simple o` l’opposition de phase des horloges des deux syst`mes r´soud les probl`mes d’´chantillonnage e e e e et de stabilit´ des grandeurs ´chang´es. e e e

3. Probl`mes de synchronisation e

131

Emetteur (changements d’´tat sur fronts montants de H e) e d rp

R´cepteur (changements e d’´tat sur fronts montants de H r) e d ep

E1 t3 d rp t4 E2 d rp

p ep

R1 t1 d rp d ep t2

p rp

d ep

p ep d ep

R2

p rp

Fig. 6.7 – Machines de Moore d´crivant le fonctionnement temporel de l’´metteur et du e e r´cepteur, dans le cas d’un protocole de poign´e de mains. Etat E1 : attente e e d’´mission ; Etat E2 : ´mission de V et attente d’acquittement de la part du e e r´cepteur. Etat R1 : attente de valeur ; Etat R2 : ´mission de l’acquittement e e et attente de prise en compte de cet acquittement par l’´metteur. Transition e t1 : consommation de la valeur V ; Transition t2 : reconnaissance du fait que l’acquittement de consommation de V a ´t´ pris en compte par l’´metteur ; ee e Transition t3 : prise en compte de l’acquittement en provenance du r´cepteur ; e Transition t4 : reconnaissance du fait que le r´cepteur traite l’information e envoy´e par l’´metteur. e e

132

Temps, donn´es temporelles et synchronisation e

V

He p ep d ep p rp d rp

Hr Temps Emetteur Recepteur Ecr. Att. Attente Ecr Consomm. Attente Ecriture Consomm.

Fig. 6.8 – Comportement temporel des signaux dans un protocole poign´e de mains. e On a repr´sent´ : la donn´e V dont les valeurs sont ´mises par l’´metteur, e e e e e e sur son horloge H e ; l’horloge du r´cepteur H r ; les signaux logiques p ep, d ep (resp. d rp, p rp) qui correspondent ` l’´chantillonnage du signal E prˆt a e e (resp. R prˆt) sur les horloges de l’´metteur et du r´cepteur. Les courbes e e e pointill´es grasses termin´es par une fl`che illustrent des relations de cause ` e e e a effet, d´ductibles du fonctionnement temporel de l’´metteur et du r´cepteur. e e e Les lignes obliques en trait plein, sans fl`che, illustrent les d´calages temporels e e entre la production d’un signal, c’est-`-dire son ´chantillonnage sur l’horloge a e du producteur, et la d´tection de ce signal, c’est-`-dire son ´chantillonnage e a e sur l’horloge du consommateur.

4. Un exemple : la machine ` caf´ a e

133

Synchronisation avec d´lai constant : Lorsque le temps de r´action e e (consommation) du r´cepteur est toujours le mˆme, et connu lors de la e e construction du syst`me qui fait communiquer les deux dispositifs informae tiques, la mise en oeuvre du protocole de poign´e de mains est tr`s simplifi´e : e e e le signal d’acquittement en provenance du r´cepteur n’est plus un vrai signal e physique : il est implicite. L’´metteur peut en effet consid´rer que l’acquittee e ment j’ai bien lu survient n coups d’horloges apr`s la production du signal j’ai e ´crit ; il peut mˆme arriver que n = 1. e e
C’est un mode de synchronisation qui peut parfois ˆtre utilis´ entre le processeur e e (l’´metteur) et une m´moire (le r´cepteur) (Cf. Chapitres 14 et 15). e e e

Emetteur rapide : Si l’´metteur est suppos´ beaucoup plus rapide que le e e r´cepteur, on sait que le r´cepteur ne peut pas consommer deux fois la mˆme e e e valeur. Il suffit d’assurer que le r´cepteur n’ignore pas de valeur. Pour cela, e on ajoute un signal de synchronisation qui permet au r´cepteur de signaler e qu’il a consomm´ une valeur. L’´metteur attend cet acquittement avant de e e produire une nouvelle valeur. En fait le r´cepteur est esclave de l’´metteur : il e e n’a pas d’horloge propre, et utilise l’un des signaux ´mis par l’´metteur comme e e horloge. R´cepteur rapide : Inversement, si le r´cepteur est suppos´ beaucoup plus e e e rapide que l’´metteur, on sait qu’aucune valeur ´mise ne peut lui ´chapper. Il e e e suffit d’assurer qu’il ne lit pas deux fois la mˆme valeur. Pour cela on ajoute un e signal de synchronisation qui permet ` l’´metteur de signaler qu’il a produit a e une nouvelle valeur. Le r´cepteur attend cet avertissement pour lire. e

4.

Un exemple : la machine ` caf´ a e

Exemple E6.3 : Machine ` caf´ (suite de l’exemple E5.2, p 105) a e Nous reprenons l’exemple de la machine ` caf´. Il s’agit d’´tudier maintenant a e e la d´finition des s´quences d’entr´es de la machine s´quentielle qui repr´sente e e e e e le contrˆleur, d’apr`s les grandeurs physiques qui ´voluent dans l’environneo e e ment de ce contrˆleur. o On consid`re que les divers dispositifs ´lectrom´caniques de la machine ` e e e a caf´ ´mettent des signaux physiques que l’on ´chantillonne sur l’horloge du e e e contrˆleur informatique. Cette horloge est suppos´e beaucoup plus rapide que o e le temps de r´action des capteurs. e La figure 6.9 donne : l’horloge H du contrˆleur ; le signal physique s1 issu o du capteur qui d´tecte l’insertion d’une pi`ce de 1F ; le signal logique s1h e e obtenu par ´chantillonnage de s1 sur l’horloge du contrˆleur ; le signal logique e o

134

Temps, donn´es temporelles et synchronisation e

H s1 s1h s1hf sortie

Fig. 6.9 – Signaux d’entr´e et de sortie de la machine ` caf´ e a e

s1hf obtenu par d´tection des fronts montants de s1h ; une sortie sortie de la e machine s´quentielle. e Il est n´cessaire de d´tecter les fronts de s1h afin de fournir en entr´e du e e e contrˆleur un signal logique qui indique l’insertion d’une pi`ce pendant au o e plus une p´riode d’horloge. En effet la machine s´quentielle qui repr´sente le e e e contrˆleur change d’´tat ` chaque p´riode d’horloge, et risquerait sinon d’utio e a e liser plusieurs fois le mˆme signal pour compter une pi`ce de 1F. Nous verrons e e au chapitre 9, paragraphe 1.2.4, un dispositif mat´riel capable de r´aliser cette e e d´tection de fronts. e Si l’entr´e s1 fait passer dans un ´tat o` la sortie sortie est active, le signal e e u logique correspondant ` cette sortie est vrai d`s la p´riode d’horloge qui suit a e e le front montant de s1h et le reste pendant toutes les p´riodes d’horloge o` la e u machine s´quentielle est dans le mˆme ´tat. e e e

Deuxi`me partie e Techniques de l’algorithmique mat´rielle e

Chapitre 7 De l’´lectron aux dispositifs e logiques
L’objet de ce chapitre est de montrer quels ph´nom`nes physiques e e ´l´mentaires sont mis en oeuvre dans les r´alisations mat´rielles de ceree e e taines fonctions dont, principalement, les fonctions bool´ennes. Ces r´alisations e e mat´rielles re¸oivent le nom de dispositifs logiques. Nous verrons plus loin come c ment combiner de telles fonctions pour r´aliser les ´l´ments d’un ordinateur. e ee Cela se fera seulement ` travers un moyen de r´alisation des dispositifs : la a e technologie CMOS (Complementary Metal Oxyde Semiconductor). Nous ne donnons que les principes g´n´raux. Il n’est pas question ici d’inclure un cours e e complet de physique ou d’´lectronique donnant les tenants et aboutissants de e chacun des ph´nom`nes ´tudi´s. e e e e Nous envisageons les ph´nom`nes sous des points de vue d’abstraction e e croissante : l’´chelle atomique, o` l’on parle d’atomes et d’´lectrons (pae u e ragraphe 1.) ; l’´chelle ´lectrique, o` l’on parle de r´sistances, de condene e u e sateurs et de transistors (paragraphe 2.) ; l’´chelle logique, o` l’on parle e u de fonctions bool´ennes (paragraphe 3.). Nous nous ´loignons ainsi proe e gressivement des ph´nom`nes physiques pour en avoir une vision en e e terme d’information. Cela permet de d´crire l’ensemble des circuits loe giques utilis´s dans les ordinateurs (paragraphe 4.). Nous donnerons e aussi un bref aper¸u de la fabrication des circuits, notamment en raison c de l’influence qu’elle a sur les m´thodes de conception (paragraphe 5.). e

1.
1.1
1.1.1

Ph´nom`nes ` l’´chelle atomique e e a e
Atomes, ´lectrons et cristaux e
Atomes, ´lectrons e

La mati`re est constitu´e d’atomes. Chaque atome est constitu´ d’un e e e noyau et d’un cort`ge d’´lectrons appel´ nuage ´lectronique. Les ´lectrons e e e e e

138

De l’´lectron aux dispositifs logiques e

portent chacun une charge ´lectrique ´l´mentaire n´gative et le noyau autant e ee e de charges positives qu’il y a d’´lectrons. On r´partit les ´lectrons selon e e e leur ´nergie en niveaux d’´nergie. La classification p´riodique des ´l´ments e e e ee de Mendele¨ donne pour chaque ´l´ment : le nombre d’´lectrons dans le ıev ee e cort`ge ; le nombre de niveaux d’´nergie contenant des ´lectrons ; le nombre e e e d’´lectrons appartenant au niveau d’´nergie le plus ´lev´ (la couche externe). e e e e Extrayons une partie de cette table :
B bore Ga gallium C carbone Si silicium Ge germanium

P phosphore As arsenic

Le carbone, le silicium et le germanium ont 4 ´lectrons au niveau d’´nergie e e le plus ´lev´, le bore et le gallium en ont 3, le phosphore et l’arsenic 5. e e 1.1.2 Cristaux

Les atomes d’un corps sont li´s entre eux plus ou moins fortement et e peuvent se disposer les uns par rapport aux autres selon des structures r´guli`res : les cristaux. Le diamant et le graphite sont 2 organisations phye e siques diff´rentes du mˆme ´l´ment chimique carbone. De mˆme il existe des e e ee e vari´t´s de silicium monocristallin et polycristallin qui sont obtenues par des ee proc´d´s de fabrication diff´rents. e e e

1.2

Courant et conducteur

L’organisation des atomes en r´seaux cristallins entraˆ un ´largissement e ıne e des niveaux d’´nergie (qui sont discrets) en bandes d’´nergies (qui sont contie e nues) et une d´localisation des ´lectrons de plus haute ´nergie sur l’ensemble e e e du r´seau. Le courant ´lectrique est un mouvement d’ensemble de particules e e charg´es, ici les ´lectrons. Qui dit mouvement dit ´nergie cin´tique, donc vae e e e riation de l’´nergie totale de l’´lectron. Ceci n’est possible que s’il trouve une e e place ` l’´nergie correspondante dans une bande d’´nergie autoris´e et non a e e e pleine. 1. Si la derni`re bande n’est pas pleine, l’´nergie n´cessaire ` cette excursion e e e a est faible : on parle de conducteur comme le cuivre, l’or, l’aluminium. 2. Si la derni`re bande est pleine et s´par´e de la suivante par une zone e e e d’´nergie non autoris´e (gap), l’´nergie n´cessaire ` la production d’un e e e e a courant ´lectrique est forte : on parle d’isolant. Le quartz est un cristal e isolant d’oxyde de silicium. Le verre est un oxyde de silicium, isolant, mais non cristallin. 3. Il arrive que le gap soit faible, l’´nergie n´cessaire est alors interm´diaire : e e e on parle de semi-conducteur . Le silicium et le germanium sont deux corps simples semi-conducteurs. L’arseniure de gallium est un corps compos´ e semi-conducteur. Ces trois mat´riaux sont les constituants de base des e

1. Ph´nom`nes ` l’´chelle atomique e e a e

139

circuits ´lectroniques. Le silicium est le plus r´pandu dans les composants e e utilis´s en informatique. Le dioxyde de silicium peut ˆtre utilis´ comme e e e isolant, il peut ˆtre obtenu facilement ` la surface du silicium. e a En gagnant de l’´nergie (par exemple d’origine thermique), un ´lectron peut e e atteindre la bande de conduction et s’´loigner, laissant derri`re lui un trou dans e e la bande de valence et un atome charg´ positivement. Il y a donc cr´ation d’une e e paire (´lectron mobile n´gatif, trou fixe positif). R´ciproquement, un autre e e e ´lectron perdant de l’´nergie peut venir combler ce trou et r´tablir l’´quilibre e e e e ´lectrique de l’atome. On parle alors de recombinaison ´lectron-trou. Du point e e de vue ´lectrique, il est alors commode de consid´rer que c’est un trou positif e e qui s’est d´plac´ dans le cristal. e e Dans un semiconducteur pur il y a autant de trous que d’´lectrons. e

1.3

Diffusion et dopage

Faites cette exp´rience (ou imaginez-la) : prenez un verre de th´ (pas e e une tasse, un verre) pas trop fort mais pas trop clair, Darjeeling, Earl Grey, Lapsang-Souchong, . . .au choix. A la surface du liquide d´posez d´licatement e e une goutte de lait. Ne remuez pas le verre et regardez par transparence. Il y a diffusion du lait dans le th´. Au bout d’un certain temps, en un point du e verre de th´, la concentration de lait est fonction de la distance par rapport e au point de d´pˆt de la goutte, de la concentration du th´, de la grosseur de e o e la goutte, de la temp´rature . . . e Imaginez le mˆme ph´nom`ne de diffusion d’un solide (du phosphore) dans e e e un autre solide (du silicium). Bien sˆr il faut chauffer un peu, et on ne voit u rien par transparence. Le r´sultat de l’exp´rience pr´c´dente est int´ressant en termes ´lectriques. e e e e e e Les ´l´ments silicium et phosphore sont voisins par leur structure ´lectronique : ee e il y a un ´lectron de plus dans le phosphore. L’introduction de phosphore dans e le silicium modifie la structure et l’´quilibre atomiques. Le silicium ainsi trait´ e e est devenu meilleur conducteur. La diff´rence de r´sistivit´ est importante. En e e e apportant un atome de phosphore pour 100 millions d’atomes de silicium, la r´sistivit´ est divis´e par un facteur de l’ordre de 30 000. e e e On dit que le silicium a ´t´ dop´ ; on parle de dopage n´gatif puisqu’il ee e e y a exc`s d’´lectrons. Quand le silicium a re¸u, par diffusion, des atomes de e e c phosphore, tout se passe comme si on avait du silicium avec des ´lectrons e libres, non li´s aux atomes. e On peut aussi doper positivement le silicium en diffusant du bore qui a un ´lectron de moins et obtenir un exc`s de trous. e e L’int´rˆt du silicium est qu’il est facilement dopable et que le dioxyde de ee silicium est, lui, un obstacle au dopage. Par facilit´ de langage on dit souvent e dop´ N (pour N´gatif, exc`s d’´lectrons) ou dop´ P (pour Positif, exc`s de e e e e e e trous) en parlant du silicium.

140

De l’´lectron aux dispositifs logiques e

Une ´tude plus d´taill´e de la physique des dispositifs semi-conducteurs se e e e trouve dans [CW96] ou [GDS98].

2.
2.1

Ph´nom`nes ` l’´chelle ´lectrique e e a e e
Rappels d’´lectricit´ ´l´mentaire e eee

– La r´sistance R d’un fil ´lectrique homog`ne de section constante est propore e e tionnelle ` la longueur L du fil, ` la r´sistivit´ ρ du mat´riau et inversement a a e e e proportionnelle ` la section S du fil. a – Si un fil est purement r´sistif, la diff´rence de potentiel U aux bornes du fil e e est proportionnelle ` la r´sistance R de ce fil et ` l’intensit´ I du courant a e a e qui le traverse. C’est la loi d’Ohm. – Un sandwich Conducteur-Isolant-Conducteur r´alise un condensateur. Sa e capacit´ C augmente avec la surface S des armatures conductrices et dimie nue avec leur ´cartement. Elle varie selon les caract´ristiques ´lectriques du e e e mat´riau isolant. e – La charge Q emmagasin´e dans un condensateur est proportionnelle ` la e a capacit´ C du condensateur et ` la diff´rence de potentiel U aux bornes du e a e condensateur. – La variation dQ/dt de la charge aux bornes du condensateur est l’intensit´ e du courant de charge (ou de d´charge) du condensateur. e – Si deux conducteurs sont branch´s en s´rie entre deux points, le courant e e doit passer dans les deux conducteurs. Les r´sistances s’ajoutent. e – Dans le m´canisme du pont diviseur si deux r´sistances de valeurs R1 e e et R2 sont connect´es en s´rie entre deux points reli´s ` des potentiels e e e a Va et 0, le point situ´ entre les deux r´sistances est ` un potentiel V = e e a V a × R1/(R1 + R2). – Si deux conducteurs sont branch´s en parall`le entre deux points, le e e courant passe en partie par un conducteur, en partie par l’autre, selon leurs r´sistances. Les conductances (inverse de r´sistances) s’ajoutent. e e – Si un condensateur charg´, de capacit´ C, est mis en situation de se e e d´charger ` travers un conducteur de r´sistance R, il se d´charge. La vae a e e riation de tension est d´crite par une exponentielle en e−t/RC . Le temps de e d´charge est d’autant plus grand que R et C sont grands. Le ph´nom`ne de e e e charge est sym´trique. e – Une diode, constitu´e d’une zone dop´e N et d’une zone dop´e P, ne laisse e e e passer le courant que dans un sens.

2.2
2.2.1

Le transistor ` effet de champ M.O.S. a
Description physique du principe du transistor ` canal N a

Observons la figure 7.1. Dans un substrat de silicium (vari´t´ monoee cristalline, faiblement dop´e P) on d´limite deux zones fortement dop´es e e e

2. Ph´nom`nes ` l’´chelle ´lectrique e e a e e

141

Grille L N x
¥ ¤ ¥ ¤

A y N

Grille
¢ £ ¢ £ ¢ £

B
§ ¦ § ¦ § ¦ § ¦ § ¦ § ¦ § ¦

substrat P Vue de dessus Coupe x y Transistor seul

substrat P

Coupe x y Vue de dessus Transistor reli´ e

Fig. 7.1 – Coupe et vue de dessus d’un transistor seul ou reli´ e

N´gativement. Ces deux zones sont espac´es d’une distance L. La zone faie e blement dop´e P est nomm´e substrat. Sur la zone rectangulaire entre les deux e e zones dop´es, on fait croˆ e ıtre du dioxyde de silicium : le verre (isolant). Audessus du verre on d´pose du silicium (polycristallin) et on le dope aussi. e
Remarque : La r´alit´ de fabrication est diff´rente : en fait, le dopage du e e e silicium monocristallin du substrat et celui du silicium polycristallin au-dessus de l’oxyde pourraient ˆtre simultan´s : la couche de dioxyde de silicium bloque e e la diffusion.

On obtient ainsi deux sandwiches. L’un vertical : Conducteur – Isolant – Semi-conducteur et l’autre horizontal : Semi-conducteur dop´ – Semi-conducteur – Semi-conducteur dop´. e e Le premier est ` l’origine du nom M´tal Oxyde Semi-conducteur. Sur la a e figure 7.1, les zones dop´es du substrat sont not´es A et B. On appelle grille la e e zone de silicium polycristallin dop´. L’isolant est sous la grille. Les deux zones e A et B sont ici suppos´es rectangulaires pour faciliter le dessin. La distance L e entre les deux zones est caract´ristique d’une technologie de r´alisation. Si le e e journal annonce la sortie d’un nouveau circuit en technologie 0,17 micron, cela donne la distance L pour les transistors. 2.2.2 Comportement ´lectrique e

Supposons que le substrat est reli´ ` la masse et que les tensions sont telles ea que 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 deux jonctions NP orient´es en sens inverse l’une de l’autre. Or une jonction a pour e propri´t´ de ne conduire le courant que dans le sens N vers P. La jonction ee drain-substrat bloque donc le passage du courant entre le drain et la source : le transistor est bloqu´. e Lorsqu’une tension positive est appliqu´e sur la grille, le champ ´lectrique e e entre la grille et le substrat attire sous la grille et concentre en surface les ´lectrons libres du substrat (et repousse les trous en profondeur). En sure

§ ¦

¥ ¤

¥ ¤

¥ ¤

A N

B

¥ ¤

¥ ¤ ¥ ¤ ¡   ¡   ¡    

N

142

De l’´lectron aux dispositifs logiques e

source A=0V
¡  

Grille
¡   ¡  

drain B

A=0V Grille N
£ ¢ £ ¢ £ ¢

B

A=0V Grille N
¥ ¤ ¥ ¤ ¥ ¤

B

N

N

.. .. . .: :N

::::::::::::::::::::N:::::::: : : : : : : : ::: : : :

P Tension de grille = 0 V

P Tension de grille = 0.5 V

P 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-source de faible profondeur, artificiellement dop´ n´gativement par l’accumulation e e d’´lectrons due au champ ´lectrique grille-substrat. Ce canal est conducteur et e e un courant peut y circuler. L’intensit´ du courant est soumise ` la loi d’Ohm : e a la r´sistance du canal entre source (A) et drain (B) est fonction de la longueur e et de la section du canal mais aussi de la r´sistivit´ du semi-conducteur obtenu. e e Cette r´sistivit´ diminue ` mesure que la diff´rence de potentiel entre e e a e la grille et le substrat augmente. Le transistor fonctionne donc comme une r´sistance command´e par la diff´rence de potentiel grille-substrat. e e e Cet effet de conduction dˆ ` un champ ´lectrique a donn´ le nom de tranua e e sistor ` effet de champ. a Une mod´lisation plus fine du transistor met en ´vidence une limite du e e transistor : la tension du drain et la source doit ˆtre inf´rieure ` celle de la e e a grille faute de quoi le canal ne peut se former. Nous appellerons V gsth la diff´rence de potentiel minimale entre grille et source n´cessaire ` la formation e e a du canal. La figure 7.2, dans laquelle les petits points repr´sentent des ´lectrons, e e sugg`re la formation du canal. e Par rapport au substrat la grille du transistor se comporte comme une capacit´. Quand la capacit´ est charg´e, elle est au potentiel d’alimentation, e e e quand elle ne l’est pas, la grille est au potentiel de la masse. 2.2.3 Le transistor ` canal P a

Il est obtenu de fa¸on assez sym´trique du transistor ` canal N. Le dopage c e a est fait par du bore qui a 3 ´lectrons sur la couche externe. Le dopage est e P ositif : des trous sont apparus. Le substrat faiblement dop´ N est reli´ au e e potentiel positif d’alimentation, typiquement 5 volts. Le canal se forme si le potentiel sur la grille est suffisamment plus petit que celui du substrat. On remarque la difficult´ de cohabitation sur un mˆme substrat de silicium e e d’un transistor N avec un substrat P ` la masse et d’un transistor P avec un a substrat N reli´ ` l’alimentation. C’est pourtant ce que l’on cherche ` faire en ea a technologie CMOS, o` les deux types de transistors cohabitent. La technologie u

3. Ph´nom`nes ` l’´chelle logique e e a e

143

de r´alisation bri`vement d´crite au paragraphe 5.2 en tient compte. e e e 2.2.4 Remarque finale ` propos d’´lectricit´ a e e

Le fonctionnement du transistor, N ou P, tel qu’il vient d’ˆtre d´crit est tr`s e e e continu : une petite variation d’un des param`tres induit une petite variation e de comportement. Le transistor ne passe pas brutalement de conducteur ` a non conducteur. Tout changement de l’´paisseur d’oxyde, de la longueur du e canal du transistor, de la diff´rence de potentiel entre la grille et le substrat ou e entre les points A et B donne une variation de l’intensit´ du courant de fa¸on e c continue. La mise en ´quation des ph´nom`nes physiques mis en jeu dans le transistor e e e MOS est trait´e dans les livres d’´lectronique (Par exemple [CDLS86]) et n’a e e pas sa place ici.

3.

Ph´nom`nes ` l’´chelle logique e e a e

Dans l’alg`bre bool´enne, les deux ´l´ments significatifs sont cod´s 0 et e e ee e 1. Avec deux symboles, interpr´t´s comme des chiffres 0 et 1, la num´ration ee e en base 2 permet de repr´senter les nombres. Les dispositifs ` transistors ont e a un comportement continu : toute variation infinit´simale des entr´es provoque e e une variation faible des sorties (courant, tension...). La question est de savoir comment repr´senter des informations num´riques avec des dispositifs ainsi e e continus. Il existe des calculateurs dits analogiques. Le principe est simple : le nombre 470 est repr´sent´ par la tension 4,7 volts, le nombre 32 est repr´sent´ par 0,32 e e e e volts. Un circuit additionneur est un dispositif ` deux entr´es, capable de a e d´livrer sur la sortie la somme, ici 5,02 volts, des tensions. Ces machines sont e difficiles ` calibrer si l’on souhaite une pr´cision dans les calculs de plus de 4 a e chiffres d´cimaux significatifs. e Par opposition aux calculateurs analogiques, les calculateurs les plus fr´quents sont num´riques, ou digitaux . Les nombres sont repr´sent´s par des e e e e vecteurs de bool´ens, ou vecteurs de bits. e

3.1

L’abstraction logique

Les valeurs 0 et 1 d’un bit sont repr´sent´es par des tensions, respectivement e e nulle (0 volt ou masse) et la tension d’alimentation, standardis´e ` 5 volts (de e a plus en plus souvent 3,3 volts, voire moins, notamment dans les machines portables). Les transistors sont fabriqu´s de telle fa¸on qu’il existe une tension de e c seuil (“threshold” en anglais) Vth au-dessus de laquelle l’entr´e d’un circuit ine terpr´tera le signal comme un 1, et comme un 0 au-dessous. La valeur nominale e de Vth est choisie de mani`re ` optimiser la tol´rance aux bruits et parasites e a e

144

De l’´lectron aux dispositifs logiques e

Type de transistor Canal N Canal P

Tension de commande Alimentation Masse Masse Alimentation

Comportement Passant Bloqu´ e Passant Bloqu´ e

Fig. 7.3 – Comportement des transistors

´lectriques pouvant affecter le signal. Compte tenu des tol´rances de fabricae e tion sur la valeur de Vth , tous les circuits interpr´teront une tension inf´rieure e e a 0,75 volts comme un 0 et sup´rieure ` 4,5 volts comme un 1. e a On parle de niveaux 0 logique et 1 logique, ou de niveaux logiques bas et haut. En logique n´gative le niveau haut correspond au 0 et le niveau bas au e 1. Nous ne prendrons pas cette convention. Etudions un comportement simplifi´ du transistor. Cette simplification e consiste ` faire comme si le canal du transistor ´tait soit totalement bloqu´ soit a e e passant, auquel cas il a une r´sitance R. Nous ne regardons les transistors que e reli´s soit a la masse, (le potentiel 0 volt), soit ` un potentiel positif, la tension e ` a d’alimentation. En r´alit´ les tensions ´lectriques varient de fa¸on continue, et e e e c parfois il y a des parasites. Pour un transistor ` canal N avec le substrat ` la masse : a a – Si la grille est ` l’alimentation, le transistor est passant. S’il y a une a diff´rence de potentiel entre A et B, du courant circule entre A et B. e – Si la grille est ` la masse, le transistor est bloqu´. Mˆme s’il y a une diff´rence a e e e de potentiel entre A et B, aucun courant ne circule entre A et B. Pour un transistor ` canal P, avec le substrat ` l’alimentation, le fonctiona a nement est invers´ : e – Si la grille est ` ` la masse, le transistor est passant. S’il y a une diff´rence aa e de potentiel entre A et B, du courant circule entre A et B. – Si la grille est ` l’alimentation, le transistor est bloqu´. Mˆme s’il y a une a e e diff´rence de potentiel entre A et B, aucun courant ne circule entre A et B. e Ces diff´rentes fonctions sont regroup´es dans le tableau de la figure 7.3. Ce e e comportement simplifi´ fait abstraction de nombreux ph´nom`nes. On parle e e e d’abstraction logique.

3.2

R´alisation de la fonction logique e la plus simple : l’inverseur

Les fonctions logiques peuvent ˆtre mod´lis´es simplement par des fonce e e tions bool´ennes. La r´alisation mat´rielle de l’op´ration bool´enne de e e e e e compl´mentation s’appelle un inverseur . L’inverseur peut ˆtre un montage e e ´lectrique ayant une entr´e E et une sortie S (L’alg`bre de Boole ne tient e e e

3. Ph´nom`nes ` l’´chelle logique e e a e

145

´videmment pas compte de l’existence de l’alimentation et de la masse dans e les montages ´lectriques). e On fait abstraction des valeurs exactes des tensions ´lectriques en disant : e Si E = 0, alors S = 1 et si E = 1 , alors S = 0. En r´alit´, comme on va le voir, si 0 <= E <= 0,75 volts, alors S = 5 volts e e et si 4,5 <= E <= 5 volts, alors S = 0 volt. Cela nous donne les points extrˆmes de fonctionnement d’un inverseur. e Mais quel peut ˆtre le comportement souhaitable de l’inverseur entre ces deux e extrˆmes ? Pour r´pondre ` cette question imaginons deux montages : l’un e e a constitu´ de 4 inverseurs en s´rie : la sortie de l’un est l’entr´e du suivant. Dans e e e l’autre les deux inverseurs sont r´trocoupl´s : la sortie de l’un est l’entr´e de e e e l’autre et r´ciproquement. Les sch´mas simplifi´s correspondants sont donn´s e e e e figure 7.4. L’inverseur y est repr´sent´ par une simple boˆ avec une entr´e e e e ıte e et une sortie s. Dans le montage de 4 inverseurs en s´rie, envoyons un signal d’entr´e qui e e en fonction du temps passe de 0 ` 5 volts (la repr´sentation en escalier n’´tant a e e pas ` prendre au pied de la lettre). a Examinons les sorties apr`s 2, ou 4, inversions pour trois types d’inverseurs. e Les trois sont candidats au titre du meilleur inverseur. Pour les trois types, nomm´s Accroissement, Maintien, Diminution, nous e donnons une courbe de transfert donnant la tension de sortie de l’inverseur en fonction de la tension d’entr´e (Figure 7.5). Pour les trois types les vae leurs extrˆmes des tensions sont respect´es, et il existe une tension m´diane e e e VM pour laquelle la tension de sortie est ´gale ` la tension d’entr´e. Mais le e a e comportement entre ces points est diff´rent. e Pour les trois types nous donnons l’allure de la r´ponse du montage e constitu´ de 2 ou de 4 inverseurs ` l’entr´e en escalier. e a e L’inverseur de type Accroissement accentue les diff´rences entre les niveaux e faibles et forts. C’est un amplificateur. Si il y a un faible parasite en entr´e, le e parasite n’est pas apparent en sortie. A l’inverse l’inverseur de type Diminution diminue les diff´rences entre e niveaux faibles et forts. D`s que le signal d’entr´e pr´sente un parasite, le e e e niveau de sortie risque d’ˆtre autour de VM , ce qui n’est pas souhaitable. e De mˆme, pour le montage constitu´ de deux inverseurs r´trocoupl´s, on e e e e comprend ais´ment que l’inverseur de type Accroissement donne un syst`me e e stable. Soit une sortie vaut 1 et l’autre 0, soit le contraire, mais une stabilisation a ` un ´tat interm´diaire est tr`s improbable (quoique pas impossible). Avec un e e e inverseur du type Diminution, on pourrait facilement obtenir un montage de deux inverseurs r´trocoupl´s se stabilisant avec des sorties ` VM . e e a C’est ´videmment l’inverseur de type Accroissement qui est le plus e int´ressant pour la r´alisation de fonctions bool´ennes. e e e L’´lectronique digitale ´tudie de fa¸on pr´cise comment obtenir un mone e c e tage ayant la bonne courbe de transfert. Elle permet aussi d’´tudier une e r´alisation avec un point de basculement Vm proche de la moiti´ de la tene e

146

De l’´lectron aux dispositifs logiques e

Accroissement Maintien 5V 0V entr´e e Diminution s1 apr`s 2 inversions e e e s e s e s e s s2 2 inverseurs r´tro-coupl´s e e s2 apr`s 4 inversions e e s e s

s1 4 inverseurs en s´rie e

Fig. 7.4 – Comportement des candidats inverseurs apr`s 2 ou 4 inversions e

Vs 5

Vs 5

Vs 5

1 1 Accroissement 5

1 Ve 1 Maintien 5

1 Ve 1 Diminution 5 Ve

Fig. 7.5 – Courbes de transfert de trois candidats inverseurs

3. Ph´nom`nes ` l’´chelle logique e e a e

147

Transistors gN dN sN dP gP sP masse sN

Inverseur CMOS entr´e e gN gP alim. dN dP sP sortie

` canal N a

` canal P a

Fig. 7.6 – Sch´ma conventionnel des transistors MOS et de l’inverseur CMOS. d,g,s sont e respectivement les Drains, Grilles et Sources. N et P d´signant les transistors e N et P.

Tension d’entr´e e Ve 0 V <= Ve <= 0.75 V 4.5 V <= Ve <= 5 V

R´sistance du e transistor N RN infinie R2

R´sistance du e transistor P RP R1 infinie

Tension de sortie Vs 5V 0V

Fig. 7.7 – R´ponse de l’inverseur CMOS e

sion de r´f´rence, ce qui donne une bonne tol´rance aux parasites ([CDLS86]). ee e Nous donnons ici deux solutions : la principale est la technologie ` base a de transistors MOS Compl´mentaires (Complementary MOS). La figure 7.6 e donne la structure interne de l’inverseur. En technologie CMOS, l’inverseur est obtenu en connectant un transistor N et un transistor P en s´rie entre la e masse et l’alimentation. L’entr´e est la tension de grille commune aux deux e transistors et la sortie est le point interm´diaire entre les deux. Les substrats e respectifs des deux transistors N et P sont ` la masse et ` l’alimentation. a a Si l’on consid`re les diff´rentes valeurs possibles pour la tension d’entr´e e e e V e, on obtient le tableau de la figure 7.7, o` RN d´signe la r´sistance du u e e transistor a canal N, RP d´signe la r´sistance du transistor ` canal P, V s ` e e a d´signe la tension de sortie, ´gale, dans tous les cas, ` Vref × RN /(RP + RN ) e e a ou Vref × 1/(1 + RP /RN ), o` Vref d´signe la tension d’alimentation. u e Une autre solution est de remplacer le transistor P par une r´sistance, mais e la courbe de transfert est moins int´ressante. Le principal avantage est une e plus grande simplicit´ (Inverseur NMOS). On utilisera dans le livre certaines e portes bas´es sur ce principe. e Il existe d’autres organisations d’inverseurs. Beaucoup des circuits de petite ´chelle d’int´gration (quelques centaines de transistors par puce) sont dans e e une technique nomm´e Transistor Transistor Logic TTL. Mais la plupart des e circuits de tr`s grande ´chelle d’int´gration sont aujourd’hui en CMOS. e e e

148

De l’´lectron aux dispositifs logiques e

3.3

Fonctionnements statique et dynamique de l’inverseur

L’analyse du fonctionnement statique de l’inverseur a ´t´ faite ee pr´c´demment. Si l’entr´e est stable ` 1, la sortie est stable ` 0. Si l’entr´e e e e a a e est stable a 0, la sortie est stable ` 1. ` a L’´tude du comportement dynamique de l’inverseur concerne le comportee ment lors des changements de tension d’entr´e. Elle doit prendre en compte o` e u est connect´e la sortie de cet inverseur. La r´ponse est simple : ` des grilles de e e a transistors, en entr´e d’autres circuits logiques. Elles sont donc capacitives par e rapport ` la masse. On assimilera donc la sortie de l’inverseur ` une capacit´. a a e Que se passe-t-il lors du changement de la tension d’entr´e ? Lors d’un front e montant, o` la tension d’entr´e passe de 0 ` 5 volts, la sortie doit passer de 5 ` u e a a 0 volts. La capacit´ reli´e ` la sortie doit se d´charger, vers la masse, ` travers e e a e a le transistor N. Sym´triquement, lors d’un front descendant, la capacit´ de e e sortie doit se charger ` travers le transistor P. a Cette charge ou cette d´charge se fait en un certain temps. Ce temps constie tue le temps de basculement, ou temps de r´ponse, de l’inverseur. Ce temps e est couramment inf´rieur ` la nanoseconde (10−9 s). Il d´pend fortement de e a e la valeur de la capacit´. L’existence de ce temps de changement de la sortie e de l’inverseur explique pourquoi tous les circuits logiques ont un temps de r´ponse. e

4.

Circuits logiques

Nous allons ´tudier dans la suite diff´rents assemblages de transistors e e r´alisant des fonctions bool´ennes. Ces assemblages seront class´s en deux e e e cat´gories : e – Les assemblages qui ne m´morisent pas l’information, que l’on nomme cire cuits combinatoires, – Les assemblages qui m´morisent de l’information, que l’on nomme circuits e s´quentiels. e
Les diff´rences entre ces deux types de circuits sont difficiles ` comprendre. e a On y revient dans la suite du livre. Chacune des deux familles fait l’objet d’un chapitre entier (Cf. Chapitres 8 et 10).

4.1

Assemblages combinatoires

Les r´alisations des fonctions bool´ennes s’appellent des portes logiques. La e e figure 7.9 donne la structure de diff´rentes portes logiques. L’inverseur est une e porte logique ` une entr´e et une sortie. Il est d´j` connu (figure 7.9-a). a e ea

4. Circuits logiques

149

P E S

E=0V Charge E=5V P S=0V D´charge e E C D´charg´e e e N S

P S=5V

N

N

C Charg´e e

Fig. 7.8 – D´charge et charge de la capacit´ de sortie d’un inverseur e e

E1 E1 E S E2 S (a) Inverseur (b) NOR2 (c) NAND2 (d) Porte ”inconnue” E1 E2 S E2 E3 S

Fig. 7.9 – Structure interne de diff´rentes portes de base e

150

De l’´lectron aux dispositifs logiques e

4.1.1

La porte NOR ` deux entr´es E1 et E2 a e

Le montage comporte deux transistors N et deux transistors P. Les deux transistors N sont en parall`le entre la masse et la sortie, les deux transistors e P sont en s´rie entre l’alimentation et la sortie. Les grilles d’un transistor N et e d’un transistor P sont connect´es ` l’entr´e E1, les grilles de l’autre transistor e a e N et de l’autre transistor P sont connect´es ` l’entr´e E2. La sortie est donc e a e reli´e ` la masse, via une r´sistance passante, si et seulement si une au moins e a e des deux entr´es est au niveau de l’alimentation. La fonction logique est un e NOR ` deux entr´es. On le note parfois NOR2 (figure 7.9.-b). a e 4.1.2 La porte NAND ` deux entr´es E1 et E2 a e

Le montage comporte deux transistors N et deux transistors P. Les deux transistors N sont en s´rie entre la masse et la sortie, les deux transistors P sont e en parall`le entre l’alimentation et la sortie. Les grilles d’un transistor N et d’un e transistor P sont connect´es ` l’entr´e E1, les grilles de l’autre transistor N et e a e de l’autre transistor P sont connect´es ` l’entr´e E2. La sortie est donc reli´e e a e e a ` la masse, via une r´sistance passante, si et seulement si les deux entr´es sont e e au niveau de l’alimentation. La fonction logique est un NAND ` deux entr´es. a e On le note souvent NAND2 (figure 7.9-c). 4.1.3 Les portes ` plus de deux entr´es a e

De fa¸on tr`s similaire au montage des portes NAND ou NOR ` deux entr´es, c e a e on obtient une porte NOR ` trois entr´es avec 3 transistors N en parall`le entre a e e la masse et la sortie et 3 transistors P en s´rie entre la sortie et l’alimentation. e De mˆme on obtient une porte NAND ` trois entr´es avec 3 transistors N en e a e s´rie entre la masse et la sortie et 3 transistors P en parall`le entre la sortie et e e l’alimentation. Le proc´d´ semble pouvoir continuer. N’oublions pas que les r´sistances e e e des transistors passants en s´rie s’ajoutent. Certaines techniques de r´alisation e e vont imposer des contraintes d’origine ´lectrique au nombre maximal d’entr´es e e des portes. 4.1.4 Une porte inconnue ` trois entr´es a e

Le montage de la figure 7.9-d est particulier en ce sens qu’il ne r´alise e pas une fonction logique ´l´mentaire comme le NAND ou le NOR. On v´rifie ee e ais´ment que S vaut 0 si et seulement si E1 vaut 1 ou si E2 et E3 valent 1. On e a donc S = E1 + E2.E3. 4.1.5 Deux inverseurs en parall`le : un petit et un gros e

Si l’on connecte ensemble les sorties de deux inverseurs, que se passe-t-il ? Si les deux inverseurs ont la mˆme entr´e, donc la mˆme sortie, il n’y a rien e e e de sp´cial a dire, le comportement global est celui d’un seul inverseur. e `

4. Circuits logiques

151

C e s A B e2 e3 B e s e e1 e s

c1

c2

c3

s

C A

s

Aiguillage 3 voies vers 1
C e e s e s C s

Commutateur - structure interne - sch´ma simplifi´ e e Porte de sortie 3 ´tats e - structure interne - sch´ma simplifi´ e e

e

s

Fig. 7.10 – Commutateur et aiguillage ` base de commutateurs a

Si les deux inverseurs ont des entr´es diff´rentes, on se trouve avec deux e e montages de ponts diviseurs de r´sistances en parall`le. Si les deux inverseurs e e ont des r´sistances tr`s proches, la tension de sortie est autour de 2,5 volts. e e Si l’un des deux inverseurs a des transistors dont les r´sistances sont tr`s e e diff´rentes de l’autre, un des deux inverseurs peut prendre l’avantage, la tene sion de sortie prenant des valeurs de 2 ou 3 volts, par exemple. Ce type de fonctionnement ´chappe ´videmment au domaine des circuits combinatoires e e bien construits... Dans certaines technologies le pont diviseur obtenu laisse passer beaucoup de courant, ce qui produit de l’´nergie thermique. C’est le court-circuit. e 4.1.6 Le commutateur ou interrupteur 3 ´tats e

La source d’un transistor MOS peut ne pas ˆtre connect´e au mˆme potene e e tiel que le substrat. On obtient alors entre drain et source un demi-interrupteur ´lectronique command´ par la tension de grille qui permet de r´aliser des e e e connexions intermittentes entre d’autres ´l´ments. (Cf. Figure 7.10) ee La polarit´ du signal de commande qui ´tablit la connexion d´pend du type e e e de transistor (1 pour un transistor ` canal N, 0 pour un transistor ` canal P). a a Pour que les niveaux logiques 0 et 1 soient tous les deux bien transmis, on utilise une paire de transistors N et P. On a alors un interrupteur complet, ou

152

De l’´lectron aux dispositifs logiques e

s = si c1 et non c2 et non c3 alors non e1 sinon si non c1 et c2 et non c3 alors non e2 sinon si non c1 et non c2 et c3 alors non e3 sinon ind´fini e Fig. 7.11 – Comportement de l’aiguillage

commutateur. Le commutateur est d’usage fr´quent. Il est symbolis´ par un e e simple carr´ inclin´. e e 4.1.7 L’aiguillage

Observons la figure 7.10. Dans l’aiguillage 3 voies vers 1 r´alis´ ` base de 3 e ea commutateurs et de 3 inverseurs, on dit que la sortie s constitue une connexion de type bus. les compl´mentaires des trois signaux e1, e2, e3 peuvent ˆtre e e envoy´s sur le bus. La sortie s est d´crite Figure 7.11. Cette sortie est parfois e e ind´finie. e Le cas ind´fini est complexe ; il y a deux sous-cas. Si l’on trouve deux e ou trois sorties ´gales sur le bus, cela ne pose pas de probl`me, et s prend e e cette valeur. Si l’on trouve des sorties diff´rentes, selon les forces respectives e des inverseurs qui traitent e1, e2 et e3, s re¸oit une valeur non bool´enne. Ce c e montage ne doit donc s’utiliser qu’avec la garantie que seulement l’un parmi c1, c2, c3 vaut 1. 4.1.8 L’amplificateur 3 ´tats e

Observons la figure 7.12. L’ensemble inverseur (qui est aussi un amplificateur) suivi d’un commutateur est parfois r´alis´ en un seul circuit nomm´ e e e amplificateur/inverseur 3 ´tats. Le montage constitu´ de deux inverseurs suivis e e d’un commutateur re¸oit le nom de porte de sortie 3 ´tats. On peut dire aussi c e que c’est un inverseur suivi d’un amplificateur/inverseur. Ce montage est utilis´ dans beaucoup de dispositifs comprenant des bus. Nous en utiliserons dans e les chapitres relatifs aux entr´es/sorties. On donne aussi une autre r´alisation e e de la porte 3 ´tats. Dans ces diff´rents montages, les r´sistances des transistors e e e quand ils sont passants doivent ˆtre ajust´es soigneusement. e e 4.1.9 La gare de triage

Par g´n´ralisation des aiguillages, et utilisation de portes de sortie 3 ´tats, e e e 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 de sortie aout, bout, cout et dout et de signaux de commande d’entr´e ain, bin, cin e et din. En fonctionnement normal, un seul des signaux de commande de sortie doit valoir 1. Plusieurs des signaux de commande d’entr´e peuvent valoir 1. e Par exemple quand aout et cin et din valent 1 et que tous les autres valent 0,

4. Circuits logiques

153

OE

e

e

s

OE

s e OE

s

(a) OE e s e OE s e OE s

(b)

(c) Fig. 7.12 – Deux r´alisations de l’amplificateur/inverseur 3 ´tats et leurs symboles. L’ine e verseur est repr´sent´ par un triangle avec un petit rond, les 2 portes sont e e un nand2 et un nor2. (a) sch´mas en transistors. (b) sch´mas en transistors e e et portes. (c) symboles logiques.

aout A

ain

cin

cout C

B

D

bout

bin

din

dout

Fig. 7.13 – Ensemble d’aiguillages constituant une gare de triage.

154

De l’´lectron aux dispositifs logiques e

la valeur de A est transmise sur C et D. Cette transmission est directionnelle. Ce type de structure est utilis´e dans les interconnexions entre une m´moire e e et plusieurs processeurs par exemple (Cf. Chapitre 16). La liaison centrale (en gras sur la figure), par laquelle tout passe, est le bus du syst`me. e

4.2
4.2.1

Assemblages s´quentiels e
Introduction

La r´alisation de dispositifs s´quentiels permet de stocker l’information. e e Cela signifie pi´ger la valeur d’un signal ´lectrique ` un instant donn´ dans un e e a e dispositif o` cette valeur restera stable. u Pour comprendre cette m´canique commen¸ons par voir comment une vae c leur peut ˆtre m´moris´e de fa¸on stable. Pour cela examinons le r´trocouplage e e e c e de deux inverseurs d´j` rencontr´ pour l’´tude de l’inverseur. ea e e 4.2.2 Le bistable

Observons la figure 7.14-a. Le montage de deux inverseurs, chacun ayant comme entr´e la sortie de l’autre, a trois points de fonctionnement : e – l’entr´e du premier est au niveau logique 1, sa sortie au niveau logique 0. e – ` l’inverse, c’est le deuxi`me inverseur qui a l’entr´e ` 1 et la sortie ` 0 (ces a e e a a deux ´tats sont stables, le montage s’appelle un bistable car il a deux points e de fonctionnement stable). – l’entr´e et la sortie des deux inverseurs sont ` 2,5 volts. Cet ´tat est instable, e a e le moindre parasite sur une des deux connexions est amplifi´e et le syst`me e e tombe dans un des deux ´tats stables. C’est pour cela qu’on a choisi des e inverseurs de type Accroissement (on parle souvent de m´ta-stabilit´ pour e e cet ´tat). e Il reste un probl`me : ces deux ´tats sont tellement stables qu’on ne voit pas e e comment y pi´ger une nouvelle valeur. R´soudre ce probl`me permet de r´aliser e e e e une m´moire vive de 1 mot de 1 bit. e 4.2.3 Les points m´moire de type m´moire vive e e

Le point m´moire ´l´mentaire, telle qu’il est r´alis´ dans les boˆ e ee e e ıtiers de m´moire vive statique, permet de pi´ger une valeur nouvelle dans un bistable e e (figure 7.14-b). Si la commande de for¸age F sur les 2 transistors de part et c d’autre du bistable est active et si aux extr´mit´s du dispositif on pr´sente e e e une valeur V1 et son compl´ment V2 ` l’aide de circuits plus puissants que les e a deux inverseurs utilis´s dans le montage bistable, ces deux valeurs restent en e place quand la commande F sur les deux transistors redevient inactive. C’est un point de m´morisation dans lequel on peut donc ´crire. La lece e ture se fait simplement en r´cup´rant les valeurs du bit m´moris´ et de son e e e e

4. Circuits logiques

155

F1 F e s s e Bistable (a) V1 e s s e V2 E e s C1

F2 e s C2

F3

Bistable avec for¸age c (b)

Points de m´morisation dynamique e (c)

Fig. 7.14 – Les diff´rents points m´moire e e

compl´mentaire en sortie des deux inverseurs. Le chapitre 9, consacr´ aux e e ´l´ments de m´morisation, reprend ces points en d´tail. ee e e

4.2.4

Les points de m´morisation dynamiques e

Il existe des points m´moire utilisant un principe tout ` fait diff´rent : e a e c’est la capacit´ d’entr´e d’un inverseur, ou d’une porte, qui pi`ge la valeur e e e (Figure 7.14-c). La m´morisation a lieu pendant que les signaux F1 et F2 sont inactifs. Une e nouvelle valeur est introduite dans la capacit´ du premier inverseur par la mise e a ` 1 de F1. Cette m´morisation dans la capacit´ de grille d’un transistor ne peut e e ˆtre de longue dur´e. Elle est en revanche tr`s int´ressante car elle n’utilise e e e e pas de circuits en plus des fonctions combinatoires. Si l’on veut transf´rer e l’information d’un point ` un autre on utilise F2. Il convient dans ces points a de m´morisation dynamique de ne pas avoir simultan´ment F1 et F2 actifs. e e

4.2.5

L’oscillateur

Le circuit oscillateur pr´sent´ figure 7.15-a oscille. Le montage d’un quartz e e de fr´quence de r´sonnance donn´e permet de rendre la fr´quence d’oscillation e e e e constante. Ce montage fabrique un signal p´riodique, carr´. Il est utilis´ comme e e e horloge. Dans la suite du livre nous utiliserons ces primitives de r´initialisation e (Reset) et d’horloge pour les r´alisations de circuits s´quentiels. e e

4.2.6

Le monostable

Lors de l’appui sur le bouton Reset d’un ordinateur, une impulsion est g´n´r´e, puis elle disparaˆ Un montage comme celui de la figure 7.15-b assure e ee ıt. cette fonctionnalit´. e

156

De l’´lectron aux dispositifs logiques e

R R C (a) R C Clock (b) Vreset

Fig. 7.15 – (a) Oscillateur d´livrant une horloge. (b) Syst`me de r´initialisation d´livrant e e e e une tension de Reset.

5.

Fabrication des dispositifs

Les dispositifs ` base de transistors sont r´alis´s dans des chaˆ a e e ınes de fabrication de haute technologie. Pour simplifier la pr´sentation, supposons que le e monde comporte deux cat´gories : les fabricants eux-mˆmes et les clients. Si e e le client trouve dans les catalogues des fabricants le circuit dont il a besoin, d´j` con¸u, il l’ach`te et l’utilise. Sinon le client con¸oit un circuit pour une ea c e c application et le fait fabriquer, puis il int`gre le circuit dans un assemblage, e g´n´ralement logiciel et mat´riel. Cet assemblage peut ˆtre un ordinateur, un e e e e magn´toscope . . . e Un circuit con¸u sp´cialement pour une application s’appelle un A.S.I.C. c e (Application Specific Integrated Circuit). Le terme s’oppose aux circuits standard (m´moires, processeurs, . . .). La fabrication est dans ses grandes lignes la e mˆme. e Les galettes de silicium de quelques d´cim`tres de diam`tre subissent une e e e suite de traitements physico-chimiques destin´s ` fabriquer les transistors. Les e a diff´rentes ´tapes sont simultan´es : toutes les grilles des cent (et quelques) e e e millions de transistors de la galette sont r´alis´es en mˆme temps par un mˆme e e e e d´pˆt de silicium polycristallin. Diff´rents d´pˆts font appel au proc´d´ de e o e e o e e photogravure que nous allons pr´senter. e

5.1

Le proc´d´ de photogravure e e

Le proc´d´ de photogravure (Cf. Figure 7.16) permet d’obtenir un motif e e complexe dans un mat´riau A ` la surface d’un mat´riau B. e a e Pour cela on d´pose du A partout ` la surface du B. Puis on d´pose par e a e dessus une couche d’un produit photo-sensible. On pose au-dessus un masque partiellement opaque, partiellement transparent. Les zones opaques sont appel´es les noirs, les autres les blancs. Il y a des milliards de motifs de chaque e couleur, notre figure n’en comporte qu’un ! On illumine le tout par au-dessus (´tape 1 de la figure 7.16). Le produit photo-sensible re¸oit de la lumi`re en e c e face des blancs du masque et n’en re¸oit pas en face des noirs du masque. Un c produit chimique permet d’attaquer le produit photo-sensible l` o` il a re¸u a u c de la lumi`re et seulement l` (´tape 2 de la figure 7.16). e a e

5. Fabrication des dispositifs

157

lumi`re e A B prod photo A B 2 : apr`s enl`vement e e du produit photo non illumin´ e B A

3 apr`s enl`vement e e du produit A ` a d´couvert e

1 : flashage Fig. 7.16 – Trois ´tapes du proc´d´ de photogravure e e e

Apr`s cette attaque, le mat´riau A est apparent en face des blancs du e e masque. Puis un deuxi`me produit chimique attaque le mat´riau A l` o` il est e e a u en surface (´tape 3 de la figure 7.16). Le mat´riau B est alors sur le dessus e e en face des blancs du masque. Un troisi`me produit chimique attaque le proe duit photo-sensible l` o` il n’a pas ´t´ illumin´. On obtient ainsi une forme en a u ee e mat´riau A ` la surface d’un substrat constitu´ de mat´riau B. Cette forme e a e e est celle qui ´tait dessin´e sur le masque. La mise en oeuvre effective de ce proe e cessus de fabrication demande une haute technologie pour obtenir des dessins dont les tailles sont de l’ordre du dizi`me de micron. e A partir du sch´ma de connexions entre les transistors l’obtention des dese sins des masques suppose de manipuler quelques centaines de millions de rectangles. Un outil de Conception Assist´e par Ordinateur est ´videmment ine e dispensable. Les vieillards se souviennent avec ´motion du bon temps o` les e u circuits n’avaient que quelques centaines de transistors et o` les crayons de couu leurs et le papier quadrill´ tenaient lieu d’assistance. Les sch´mas physiques e e ´taient obtenus en d´coupant de l’autocollant noir, aux ciseaux, et en le collant e e sur du papier blanc. Un n´gatif d’une photo de la feuille de papier tenait lieu e de masque.

5.2

Un proc´d´ de fabrication : CMOS ` grille silicium e e a polycristallin et ` deux niveaux de m´tal a e

La fabrication de circuits logiques organis´s avec des transistors N et e des transistors P n´cessite de nombreuses op´rations technologiques. Nous e e les envisageons ici ` travers les dessins des masques impliqu´s. Les masques a e comportent les dessins des motifs n´cessaires ` la r´alisation simultan´e des e a e e quelques millions de transistors sur la galette de silicium d’une vingtaine de centim`tres de diam`tre. Nous ne dessinons ici qu’un inverseur. e e La figure 7.17 montre par 6 dessins A, B, C, D, E et F les masques utilis´s. e Nos dessins sont simplifi´s par rapport ` la r´alit´. Sur les vues en coupe les e a e e vraies proportions ne sont pas respect´es. La ligne de surface du substrat qui e apparaˆ sur les coupes n’est pas si rectiligne. Il y a en r´alit´ environ 15 ıt e e

158

De l’´lectron aux dispositifs logiques e

x’

y’
F E F E F E F E F E F E F E F E D C D C D C D C D C D C D C D C C C

Caisson P Caisson P

Caisson N 
 © ¨ ¨ ¥ ¤ ¥ ¤ £ ¢ ¢

Coupe x’y’ A
H G H G G P I P I P I P I P I

B
@ 9 B A @ 9 @ 9 9 H G

C e
@ 9 @ 9 @ 9 @ 9 @ 9

e

s a 
           " ! " ! " ! " ! " !

s V a Coupe xy
6 6 5 5 6 6 5 5 6 6 5 5 6 6 5 5 6 6 5 5 6 6 5 5 6 6 5 5 6 6 5 5 5 5 4 3

V
6 6 5 6 6 5 6 6 5

D L´gende des masques e DifP
0 ) 0 ) 0 ) ( ' ( '

E Sch´ma ´lectrique e e

F e entr´e e V Vref s sortie

DifN Sipol
0 ) 2 1 0 ) 0 ) 2 1

a masse Alu2

Alu1

C1 C2 Contacts
2 1 2 1

Fig. 7.17 – Les masques intervenant dans la technologie CMOS. DifP est le masque de la zone diffus´e P, DifN de la zone diffus´e N, Sipol est le masque du silicium e e polycristallin, Alu1 et Alu2 sont les deux niveaux d’aluminium, C1 et C2 sont les deux niveaux de contacts sous l’aluminium. Les masques sont cumul´s e dans les diff´rentes parties de la figure. La vue en coupe apr`s l’op´ration est e e e selon la ligne xy ou la ligne x’y’. Dans les vues en coupe l’oxyde n’est pas color´. e

@ 9

5

@ 9

5

@ 9

5

@ 9

@ 9

§ ¦

@ 9

@ 9

8 7

8 7

8 7

8 7

@ 9

@ 9

§ ¦

@ 9

@ 9

8 7

8 7

8 7

8 7

@ 9

§ ¦

@ 9

8 7

8 7

8 7

8 7

@ 9

§ ¦

9

8 7

8 7

8 7

8 7

8 7

8 7

8 7

8 7

¡  

H G

H G

H G

H G 

¡  

H G

H G

H G

H G

H G 

¡  

H G

H G

H G

H G

¡  

H G

H G

H G

H G 



 

Caisson P Caisson N Coupe xy

F E

F E

F E

F E

F E

F E

F E

F E

D C

D C

D C

D C

D C

D C

D C

D C

C

x

Dessin des masques y

e
C G G G G 

P I P I P I P I & %

P I P I P I P I 0 ) 2 1 0 )

P I P I P I P I 0 ) 2 1

P I P I P I P I $ #

P I P I P I P I $ # ' '

5. Fabrication des dispositifs

159

masques. D´crivons les op´rations principales : e e 1. La premi`re consiste ` doper, faiblement, un caisson P pour y r´aliser des e a e transistors N. Le caisson P existe sous toute la zone des transistors N. Il y a de mˆme un caisson N pour les transistors P. Cette ´tape utilise e e un premier masque. Puis on d´limite ` l’aide d’un deuxi`me masque une e a e zone active comprenant l’ensemble des zones qui seront diffus´es et les e transistors. Des points de contacts entre l’alimentation, ou la masse, et le subtrat, ou le caisson, sont aussi dans les zones actives. Ce sont les points de polarisation. A l’ext´rieur de la zone active se trouve un oxyde e ´pais de silicium (ces deux masques caisson et zone active sont partie A). e 2. Puis on d´limite la zone de silicium polycristallin, qui est au-dessus d’une e couche d’oxyde mince. Cette zone est l’entr´e de l’inverseur. (partie B, e o` le caisson n’apparaˆ plus). u ıt 3. Puis deux masques marquent les zones diffus´es N ou P. Cette diffusion e ne passe pas ` travers l’oxyde. Elle ne se fait pas, donc ni sous l’oxyde a mince, laissant la place aux canaux des transistors, ni sous l’oxyde ´pais e hors de la zone active (partie C). 4. Une nouvelle couche d’oxyde ´pais est ajout´e, dans laquelle on d´limite e e e des trous de contacts selon un nouveau masque (partie D). 5. Des connexions d’aluminium sont grav´es entre diff´rentes parties des e e diff´rents transistors. L’alimentation, ` droite sur la figure, relie le point e a de polarisation du substrat N, et un cˆt´ des transistors P. La masse, ` oe a gauche sur la figure, relie le point de polarisation du caisson P et un cˆt´ oe des transistors N. Une autre connexion d’aluminium, au centre, relie le transistor N, le transistor P et la sortie de l’inverseur. Des connexions d’aluminium peuvent aussi servir ` relier des sorties d’inverseurs ou de a portes ` des entr´es d’autres portes (partie E). a e 6. Si n´cessaire, on introduit une nouvelle couche d’oxyde ´pais, perc´e de e e e contacts, et une nouvelle couche d’aluminium (partie F). On peut trouver ainsi 3 ou 4 niveaux d’aluminium. Puis l’ensemble du circuit est recouvert d’un oxyde de protection.

5.3

Proc´d´s simplifi´s e e e

La pr´sentation qui a ´t´ faite au paragraphe pr´c´dent montre que la e ee e e fonction du circuit provient de son dessin. La forme des connexions de grille et des zones dop´es donne les transistors. La forme des connexions d’aluminium e et l’emplacement des contacts donnent leurs liaisons. La figure 7.18 indique ce que peut ˆtre le masque du niveau d’aluminium d’un petit morceau de circuit e (une centaine de transistors). La forme des connexions est, en fait, la fonction. La conception, incluant notamment le dessin, et la fabrication des circuits int´gr´s digitaux sont des op´rations complexes et on´reuses. On essaie dans e e e e

160

De l’´lectron aux dispositifs logiques e

Fig. 7.18 – Masque du niveau d’aluminium d’un petit morceau de circuit (une centaine de transistors). On remarque une r´p´titivit´ du motif. e e e

certains cas de les simplifier. Les diverses simplifications peuvent porter soit sur la fabrication proprement dite, soit sur le dessin du circuit. La simplification vise ` apporter un gain soit dans la surface du circuit, soit dans sa vitesse a de fonctionnement, soit dans la difficult´ de conception, soit dans sa facilit´ ` e ea r´aliser plusieurs fonctions. La surface est souvent un param`tre critique : plus e e le circuit est grand, plus il risque d’y avoir des d´fauts de fabrication, donc e plus le rendement de fabrication est faible. Des m´thodes visant ` simplifier la conception ou la fabrication sont exe a pos´es ci-apr`s. e e 5.3.1 Simplification par la fabrication

Une des simplifications possibles est de ne pas fabriquer totalement le circuit pour une application donn´e. En sortant de l’´tape de fabrication, le circuit e e n’a pas encore de fonction. Cette fonction sera donn´e par une ´tape de persone e nalisation finale du circuit. Cette personnalisation est plus ou moins d´finitive. e Elle re¸oit parfois le nom, plus ou moins impropre, de programmation. c Il y a quatre cas : 1. Aucune personnalisation, le circuit sort de la fabrication bon ` l’emploi a (m´moires vives, processeurs, . . .). e 2. Personnalisation par modification d´finitive : une ´tape de modificae e tion est appliqu´e au circuit. Certaines connexions sont ´tablies, ou e e supprim´es, pendant cette modification. Cette programmation se fait e d´finitivement, par exemple en faisant claquer des fusibles (Programe mable Logic Array, Programmable Logic Device). Cette programmation est en g´n´ral faite par le client, chez lui. Une autre fa¸on de faire assez e e c semblable est de r´aliser la personnalisation du circuit par un ensemble e

5. Fabrication des dispositifs

161

de contacts et de connexions d’aluminium r´alis´s au moyen de masques e e sp´cifiques de l’application alors que les autres ´tapes ont ´t´ les mˆmes e e ee e pour des circuits de fonctionnalit´ diff´rente (Gate arrays, sea of gates). e e Le fabricant r´alise ainsi des ensembles de portes, non interconnect´es, e e identiques pour diff´rents clients. Chaque client donne au fabricant un e sch´ma qui lui est propre pour le masque des contacts et celui de l’alue minium. Cette programmation, de mise en oeuvre lourde puisqu’il faut r´aliser les derni`res ´tapes, est faite chez le fabricant. e e e 3. Personnalisation difficilement modifiable : certaines connexions sont ´tablies, ou certaines informations sont stock´es en m´moire, mais leur e e e effa¸age et remplacement est difficile (passage sous ultra violets, effa¸age c c sous haute tension, etc.). 4. Personnalisation et effacement simple : une configuration est introduite dans le circuit ` la fa¸on dont un programme est introduit en m´moire. a c e La modification est tr`s simple (Field Programmable Gate Array). Les e valeurs introduites pilotent des transistors utilis´s en commutateur et e ´tablissent ou non des connexions. Ces circuits contiennent parfois aussi e des petites m´moires vives de 16 mots de 1 bit permettant de tabuler e certaines fonctions bool´ennes de 4 variables. Ces deux derni`res persone e nalisations sont faites chez le client. La forme de personnalisation chez le client est toujours plus ou moins la mˆme : Le circuit est mis sur une boˆ sp´ciale, branch´e comme un simple e ıte e e p´riph´rique d’un ordinateur individuel. Un logiciel, en g´n´ral sp´cifique du e e e e e type de circuit, ´tablit ` partir d’une description textuelle ou graphique de la e a fonction du circuit, la configuration qu’il faut introduire dans le circuit. La configuration est introduite dans le circuit sous conduite du logiciel. Dans le cas des FPGA, la configuration est stock´e dans le circuit lui-mˆme en m´moire e e e vive. 5.3.2 Cas particulier des m´moires mortes e

On trouve sous le nom de m´moire morte plusieurs cas de figures : e 1. M´moires o` l’information stock´e a ´t´ introduite par les masques de e u e ee r´alisation du circuit. La m´moire se comporte comme une tabulation e e mat´rielle de la fonction. e 2. M´moires o` l’information est charg´e apr`s fabrication, de fa¸on ine u e e c alt´rable (claquage de fusibles, par exemple). e 3. des m´moires flash, vives, mais o` le maintien d’information est assur´ e u e mˆme en cas de coupure de l’alimentation ´lectrique. e e 4. M´moire morte effa¸able plus ou moins souvent, plus ou moins come c mod´ment. Il existe des m´moires o` l’on peut changer le contenu seulee e u ment un million de fois. C’est beaucoup pour une information d´finitive, e mais c’est trop peu pour une m´moire vive. e

162

De l’´lectron aux dispositifs logiques e

5. Fausses m´moires mortes constitu´es en fait d’un boˆ e e ıtier int´grant une e m´moire vive ` faible consommation et une micropile. e a 5.3.3 Simplification par le dessin

On cherche dans de telles m´thodes ` avoir un dessin du circuit pr´sentant e a e une grande r´gularit´. e e Les simplifications du dessin des circuits consistent ` reprendre des para ties communes, ` r´utiliser certains blocs de dessins. Une fa¸on simple est de a e c dessiner ` l’identique des tranches de circuits. Dans un microprocesseur 32 a bits, il semble naturel que la partie physique qui traite le bit num´ro 5 soit e presque identique ` celle qui traite le bit 23. On trouve r´guli`rement dans la a e e presse des photos de processeurs. Sur les photos d’assez grande taille, on peut reconnaˆ de telles tranches. On a alors envie de dessiner tr`s soigneusement ıtre e la tranche pour qu’elle soit le plus petite possible et le plus emboˆ ıtable possible sur elle-mˆme. Dessiner une tranche de microprocesseur est un probl`me qui e e ressemble un peu ` dessiner un motif de papier peint avec raccord ! a Une autre approche est de remarquer que les portes logiques constituant le circuit sont toutes plus ou moins identiques. On a alors comme grain de r´p´titivit´ non plus la tranche correspondant ` une fonction, mais la simple e e e a porte logique. Toutes les portes de mˆme type sont alors dessin´es de fa¸on e e c identique. Il y a un patron pour les NAND ` 2 entr´es, un pour les NAND a e a ` 3 entr´es, . . .Toute fonction complexe utilisant une NAND2 utilise le mˆme e e dessin de NAND2. Seules les connexions entre ces portes sont topologiquement diff´rentes d’une fonction ` l’autre. C’est le cas, par exemple, figure 7.18 o` la e a u mˆme bascule est dessin´e 4 fois. e e

6.

Exercices

La ”logique” voudrait qu’en permutant les positions des transistors N et P dans l’inverseur et la porte NOR, on obtienne respectivement la fonction identique (S=E) et une porte OR. Les transistors ` canal N auront alors leur a drain connect´ ` l’alimentation et leur source connect´e ` la sortie. En pratique ea e a le fonctionnement de ce type de porte n’est pas satisfaisant. Pourquoi ? Il faut raisonner de fa¸on plus approfondie que 1 ou 0 logique et consid´rer c e les tensions V alimentation - V gsth . Consid´rons le cas o` l’entr´e et la sortie e u e de la porte sont au 1 logique. La tension de sortie devrait ˆtre ´gale ` la tension e e a d’alimentation. Sachant qu’une diff´rence de potentiel minimale grille-source e V gsth est indispensable ` la formation du canal et la tension de grille atteint a au mieux la tension d’alimentation, la tension de sortie ne pourra d´passer e V alimentation - V gsth . Le mˆme raisonnement appliqu´ aux transistors ` e e a canal P et au 0 logique montre que la sortie ne peut descendre en dessous de V gsth . En r´sum´, les transistors MOS ` canal N (respectivement P) ne e e a

6. Exercices

163

transmettent bien que les 0 (respectivement 1) logiques. Le cumul des p´nalit´s e e V gsth rend ce montage inutilisable pour la construction de circuits ` plusieurs a ´tages de portes. e Pour r´aliser une porte OR ou AND, on utilisera une porte NOR ou NAND e suivie d’un inverseur.

164

De l’´lectron aux dispositifs logiques e

Chapitre 8 Circuits combinatoires
Un circuit combinatoire est un dispositif mat´riel dont le comportee ment peut ˆtre d´crit par une fonction bool´enne g´n´rale, et toute fonction e e e e e bool´enne peut ˆtre r´alis´e par un circuit combinatoire. Un circuit combinae e e e toire peut r´aliser tout traitement si l’entr´e et la sortie sont des informations e e cod´es par des vecteurs de bool´ens. Un circuit combinatoire convertit une e e information d’un code dans un autre, r´alise une fonction arithm´tique sur des e e nombres cod´s en binaire, etc. e Les entr´es sont une nappe de fils. Une entr´e, ` un instant donn´, est ` un e e a e a certain niveau logique Vrai ou Faux, c’est-`-dire ` un niveau ´lectrique. Ce nia a e veau est susceptible de changer au cours du temps. Si une entr´e est constante, e la faire intervenir dans le calcul d’une fonction n’est pas une n´cessit´. Les sore e ties sont une nappe de fils. Elles sont aussi susceptibles d’´voluer au cours du e temps. Il n’est pas n´cessaire de r´aliser un circuit combinatoire pour calculer e e une sortie constante. Puisque nous nous limitons dans ce livre aux dispositifs ´lectroniques, les e circuits combinatoires sont aliment´s en courant ´lectrique mais l’alimentation e e et la masse ne sont pas consid´r´es comme des entr´es des circuits combinaee e toires. Un circuit combinatoire est constitu´ d’un ensemble de portes logiques. Cere taines ont ´t´ pr´sent´es au chapitre 7. Les entr´es du circuit sont connect´es ee e e e e a ` des entr´es de portes. Les sorties du circuit combinatoire proviennent de e sorties de portes. A l’int´rieur du circuit il peut y avoir plusieurs circuits come binatoires ou portes successifs, les sorties des uns ´tant reli´es aux entr´es des e e e autres. Un circuit combinatoire est un ˆtre physique. Il occupe une certaine surface, e consomme une certaine puissance ´lectrique, puissance qui est dissip´e sous e e forme thermique, il n’´tablit les valeurs correctes de ses sorties qu’un certain e d´lai apr`s le changement de ses entr´es. Les concepteurs de circuits cherchent e e e g´n´ralement ` obtenir un circuit ayant la plus petite surface possible, donnant e e a les d´lais de r´ponse les plus brefs possibles et consommant/dissipant le moins e e d’´nergie possible. Ces trois crit`res participent au coˆt d’un circuit. Un autre e e u

166

Circuits combinatoires

e0 e1

Alimentation F F

Masse s0 s1 s2 F : 2 entrées , 1 sortie G : 3 entrées, 2 sorties

e2 e3 entrées

G s3 sorties

Circuit global : 4 entrées, 4 sorties

Fig. 8.1 – Un exemple de circuit combinatoire. Les carr´s F et G sont des portes ou des e circuits combinatoires.

crit`re de coˆt est la r´gularit´ du circuit, c’est-`-dire, indirectement, le temps e u e e a n´cessaire a sa conception et ` son dessin. Plus un circuit comporte de fois un e ` a bloc r´p´t´, moins il est difficile de le concevoir. Voir par exemple la figure 7.18 e ee du chapitre 7. Dans ce chapitre nous donnons d’abord (paragraphe 1.) quelques ´l´ments ee relatifs au comportement temporel des circuits combinatoires avant de d´finir pr´cis´ment ces circuits. Cela permet de mieux situer la diff´rence e e e e entre les circuits combinatoires et une autre classe de circuits qui fait l’objet du chapitre 10. Nous ´tudions ensuite (paragraphe 2.) en quoi e consiste la conception de circuits combinatoires ` partir de blocs phya siques de base. Dans le paragraphe 3. nous insistons sur la ressemblance entre cette conception et la conception des algorithmes. Le paragraphe 4. pr´sente une ´tude de cas. Certains des exemples retenus dans ce chapitre e e sont utiles dans plusieurs chapitres ult´rieurs du livre. e

1.
1.1

Notion de circuit combinatoire
Comportement temporel d’un circuit combinatoire

L’origine du d´lai de r´ponse d’une porte (charge ou d´charge de capacit´) e e e e a ´t´ pr´sent´ au chapitre 7. Il est naturellement strictement positif. A l’heure ee e e o` nous ´crivons ce livre, il est couramment de l’ordre d’un dizi`me de nanou e e −10 seconde, soit 10 s. Ce d´lai n’est pas constant, n’est pas une propri´t´ de la e ee porte elle-mˆme. Il varie avec la valeur de la capacit´ ` charger, la temp´rature e ea e de fonctionnement, etc. Les constructeurs donnent les valeurs maximales et minimales du d´lai de r´ponse des composants. Le d´lai de r´ponse d’un circuit e e e e combinatoire provient de l’accumulation des d´lais des diff´rentes portes et ine e terconnexions entre les entr´es et les sorties. Par approximation, on consid`re e e souvent que les d´lais de portes cascad´es s’ajoutent. Des valeurs transitoires e e peuvent apparaˆ ıtre. Mais au bout d’un certain temps les sorties sont stabi-

1. Notion de circuit combinatoire

167

e0 e1 s0 observé s0 idéal (sans délais) s0 (avec délais)

1 logique 0 logique

5 Volts 0 Volt

Ind´termin´ e e 1 logique 0 logique

Fig. 8.2 – Comportement possible du circuit combinatoire donn´ en exemple e

lis´es. Dans un circuit combinatoire, une sortie ne peut se mettre ` osciller e a ind´finiment. Un circuit ´lectronique fabricant un tel signal oscillant est tr`s e e e utile mais n’est pas un circuit combinatoire. Par exemple le circuit pr´sent´ e e figure 8.1 peut donner le comportement d´crit par la figure 8.2. Nous y distine guons des entr´es id´ales (par d´finition bool´ennes), des sorties telles qu’elles e e e e pourraient ˆtre observ´es (entre 0 et 5 Volts) et des sorties id´ales (bool´ennes e e e e aussi). On trouve souvent une repr´sentation avec des sorties ind´termin´es e e e pendant le d´lai de r´ponse. Nous la faisons figurer aussi. C’est ´videmment la e e e situation la plus r´aliste, mais elle n’est pas bool´enne. e e

1.2
1.2.1

Caract´risation des circuits combinatoires e
Caract´risation par le comportement e

Un circuit combinatoire r´alise une fonction. Cela veut dire qu’une certaine e configuration des entr´es donne toujours la mˆme configuration des sorties. e e Examinons ce que signifie ce toujours. Si plusieurs configurations d’entr´es e sont appliqu´es successivement aux entr´es du circuit combinatoire, on observe, e e apr`s stabilisation, certaines configurations de sorties. e Un circuit est combinatoire si : Pour tout couple (C1,C2) de configurations d’entr´es, le circuit recevant e la s´quence temporelle C1, C2, C1 en entr´e donne, apr`s ´ventuelle e e e e stabilisation des valeurs, une s´quence de sortie S1, S2, S1. e La configuration C1 donne toujours S1. A l’inverse, si pour un circuit on peut trouver un couple de configurations d’entr´es (C3, C4) tel que la s´quence temporelle d’entr´e C3, C4, C3 donne e e e une s´quence de sortie S3, S4, S5, avec S3 = S5, le circuit n’est pas combinae toire.

168

Circuits combinatoires

Intuitivement le circuit non combinatoire se souvient qu’il est pass´ par la e configuration S4, cela change ses r´sultats ult´rieurs. Le circuit combinatoire e e ne se souvient de rien. Les circuits combinatoires n’ont aucune fonction de m´morisation. On verra des circuits ayant une m´morisation dans des chapitres e e ult´rieurs. e Il convient de pr´ciser que si les configurations d’entr´e C1 et C2 diff`rent e e e de plusieurs bits, on suppose les changements de valeurs simultan´s (comme e les entr´es e1 e0 de la figure 8.2). e Le circuit combinatoire r´alise une fonction au sens math´matique du e e terme : chaque appel avec des valeurs identiques des param`tres d´livre la e e mˆme valeur. A l’inverse, la fonction random des calculettes n’est pas une e fonction puisque diff´rents appels ne donnent pas le mˆme r´sultat. e e e 1.2.2 Caract´risation par la structure e

Consid´rons un assemblage de portes interconnect´es comme un graphe. e e Les portes sont les noeuds, les connexions les arcs. Une orientation ´vidente e des arcs est fournie par le sens sortie d’une porte vers l’entr´e d’une autre. Si e le graphe ainsi obtenu est sans cycle, le circuit est combinatoire.
Remarque : Attention, la r´ciproque est fausse ! L’exercice E8.17 donne e un circuit combinatoire comportant un cycle. Il est hors du sujet de ce livre de caract´riser l’ensemble des circuits combinatoires avec un cycle. e

1.3

Le principe de r´alisation e

Les objets de base utilis´s dans les circuits combinatoires sont les portes e logiques. Une technologie de r´alisation ´tant choisie, il n’est pas n´cessaire de e e e garder la repr´sentation en transistors des portes NOR ou NAND comme dans e le chapitre 7. L’usage a consacr´ des symboles pour les portes. Les connexions e entre ces portes sont repr´sent´es par des traits. Ces symboles sont repr´sent´s e e e e figure 8.3. On trouve souvent des portes NAND et NOR sans le petit rond utilis´es e pour repr´senter des fonctions ET et OU. e 1.3.1 Les circuits existants : inverseurs, portes NAND et NOR

Les inverseurs, les NAND et les NOR sont les portes ´l´mentaires. L’inveree seur est un NAND (ou un NOR) ` une seule entr´e. Pour des raisons ´lectriques a e e (trop grande r´sistance obtenue en mettant beaucoup de transistors en s´rie, e e par exemple) le nombre d’entr´es des portes est parfois limit´. Ainsi pour la e e r´alisation de carte imprim´e ` base de boˆ e e a ıtiers de la famille technologique TTL (Transistor Transistor Logic) on peut disposer de portes NAND ` 2, 3, 4, a 8 ou 13 entr´es. Pour r´aliser une fonction NAND portant sur 6 variables, tout e e va bien puisque NAND(a, b, c, d, e, f) = NAND(a, b, c, d, e, f, f, f) et la porte

1. Notion de circuit combinatoire

169

s e

e1

s

e1

s

e1

s e 4

a b c d 5

a s b c 6 s

e3 1 2

e2 3

e2

Fig. 8.3 – Repr´sentation conventionnelle des portes logiques : e 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 ` 8 entr´es fait l’affaire. Mais pour une fonction ` plus de 13 entr´es a e a e c’est moins simple. L’exercice E8.15 donne une id´e de solution ` ce probl`me. Dans d’autres e a e technologies les portes NOR ne peuvent avoir que 2 ou 3 entr´es et les portes e NAND que 2, 3 ou 4. Dans certains cas, plusieurs technologies peuvent intervenir dans un mˆme ´quipement mat´riel comportant plusieurs puces. Une puce e e e peut ne contenir que des portes ` au plus 4 entr´es alors que la puce voisine a a e des portes ` 20 ou 2000 entr´es. a e 1.3.2 Assemblage syst´matique e

Toute fonction bool´enne peut s’exprimer sous forme de somme de proe duits de variables normales ou compl´ment´es. Cette expression en somme de e e produits peut se traduire de fa¸on syst´matique sous forme de combinaison de c e deux ´tages de NAND de variables normales ou compl´ment´es. On rappelle e e e que, par application directe des r`gles de De Morgan, si a, b, c, d, e, f sont des e variables bool´ennes : e a + b.c + d.e.f = a.(b.c).(d.e.f ) ou, en utilisant une notation pr´fix´e pour le NAND, e e a + b.c + d.e.f = nand(not(a), nand(b, c), nand(e, f, g)) De mˆme, pour une expression en produit de sommes, e a.(b + c).(d + e + f ) = a + (b + c) + (d + e + f ) ou, en utilisant une notation pr´fix´e pour le NOR, e e a.(b + c).(d + e + f ) = nor(not(a), nor(b, c), nor(e, f, g)) On r´alise un circuit dont le comportement est d´crit par une fonction e e bool´enne par un tel assemblage de portes NAND ou NOR et d’inverseurs e (Cf. Figure 8.4). Cela donne des sch´mas logiques de circuits combinatoires e dans lesquels il n’y a que deux ou trois ´tages de portes entre l’entr´e et la e e sortie : un ´tage d’inverseurs pour certaines entr´es, puis deux ´tages, soit de e e e

170

Circuits combinatoires

a

b

c

d

e

f

g

Fig. 8.4 – Exemple de r´alisation de fonctions ` base de portes NAND. e a g = a.b.c.d + b.c.d f = b.c.d e = a.b.c.d + c.d

NAND soit de NOR. Ces circuits sont optimaux en terme de nombre d’´tages. e Exemple E8.1 : R´alisation en NAND de la fonction majorit´ e e Reprenons la table de v´rit´ de l’addition de deux naturels (Cf. Parae e graphe 2.2.2, chapitre 3) en nous limitant ` la fonction majorit´ : a e a b 0 0 0 0 0 0 1 1 re 0 1 0 1 rs maj(a, b, re ) 0 0 0 1 a b 1 1 1 1 0 0 1 1 re 0 1 0 1 rs maj(a, b, re ) 0 1 1 1

On obtient l’expression optimis´e : e

ou

rs = a.b + a.re + b.re rs = nand(nand(a, b), (nand(a, re ), nand(b, re ))

Le sch´ma en portes NAND du circuit combinatoire r´alisant la fonction e e majorit´ est donn´ figure 8.5. e e

1. Notion de circuit combinatoire

171

a b re

a b re

s

s

Fig. 8.5 – R´alisation de la fonction majorit´ en portes NAND. Sur le sch´ma, deux e e e conventions usuelles sont pr´sent´es : avec l’une, les points noirs repr´sentent e e e des connexions entre un fil horizontal et un fil vertical ; avec l’autre, un trou dans le fil vertical permet de mettre en ´vidence la non-connexion. e

1.4

Conception de circuits combinatoires

Etant donn´e une fonction bool´enne g´n´rale, concevoir un circuit come e e e binatoire consiste ` assembler des ´l´ments logiques de base, choisis parmi a ee une liste donn´e, comme les portes par exemple, pour que le comportement e global de l’ensemble soit d´crit par la fonction bool´enne voulue. De plus cet e e assemblage doit ˆtre d’un coˆt acceptable, voire minimal. Cette conception de e u circuits suppose deux niveaux de travail. Les noms de ces deux niveaux sont fluctuants mais nous choisissons ceux d’algorithmique cˆbl´e et de synth`se loa e e gique. On retrouvera cette distinction dans le chapitre 10. La conception peut se faire soit manuellement (rarement), soit, principalement, en utilisant des outils de Conception Assist´e par Ordinateur. Il existe donc des outils de CAO e de synth`se logique 1 ou d’algorithmique cˆbl´e. Il arrive aussi que les deux e a e outils soient fusionn´s en un seul. e 1.4.1 Algorithmique cˆbl´e a e

Il arrive que l’expression de la fonction bool´enne fasse appel ` des obe a jets extra-bool´ens. En particulier la donn´e d’une fonction arithm´tique et e e e du codage binaire des nombres manipul´s constituent une description d’une e fonction bool´enne. Par exemple un multiplieur combinatoire de 2 nombres e entiers cod´s sur 64 bits en compl´ment ` 2 est une description d’une fonction e e a bool´enne. e La conception conduit ` une expression de la fonction globale comme une a composition de sous-fonctions d´crites en termes bool´ens et/ou arithm´tiques. e e e Cette d´composition n’est jamais unique et les aspects de coˆt doivent ˆtre pris e u e en consid´ration pour choisir la bonne solution. La possibilit´ de r´-utiliser des e e e r´sultats interm´diaires doit ˆtre retenue pour ´conomiser des ´l´ments. Le e e e e ee
Pour la beaut´ de son nom signalons un outil qui construit les portes ` partir de la e a description de la fonction bool´enne : BuildGates ! e
1

172

Circuits combinatoires

crit`re de r´gularit´ peut intervenir aussi comme crit`re de comparaison entre e e e e des solutions. Cette recherche d’un assemblage d’´l´ments donnant un comportement atee tendu est tr`s proche de l’algorithmique o` l’on cherche ` assembler les inse u a tructions pour obtenir un certain comportement. Cet ensemble de techniques, que nous d´taillons dans le paragraphe 3. sous e le nom d’algorithmique cˆbl´e, est parfois nomm´e conception logique. Elle a e e conduit ` une description en terme de composition de fonctions bool´ennes a e de la fonction globale. Le terme algorithmique cˆbl´e peut sembler ´trange. Il a e e indique simplement que la composition de fonctions exprim´es dans les algoe rithmes de ces traitements est un banal cˆblage. Utiliser les r´sultats d’une a e fonction comme entr´es d’une autre fonction, c’est connecter les sorties du e sous-circuit r´alisant l’une aux entr´es du sous-circuit r´alisant l’autre. e e e 1.4.2 Synth`se logique e

On parle de synth`se logique pour d´crire l’assemblage de portes phye e siques choisies parmi une liste donn´e, ` partir de la description de la fonction e a bool´enne. e Il ne faut pas perdre de vue que la notion d’´l´ments logiques de base n’est ee pas absolue. Elle est relative ` une liste donn´e, une biblioth`que de circuits. De a e e la mˆme fa¸on qu’en programmation, diff´rents langages ou syst`mes peuvent e c e e offrir des primitives plus ou loins avanc´es. e Un circuit combinatoire r´alisant les fonctions majorit´ et ⊕ du chapitre e e 3 est un additionneur 1 bit. Il comporte en g´n´ral deux portes XOR comme e e celles de l’exercice E8.14. La fonction majorit´ est connue aussi (exemple E8.1), e mais rien n’interdit de consid´rer un additionneur 1 bit comme bloc de base. e Il est d’ailleurs inclus dans beaucoup de biblioth`ques. D’autres biblioth`ques e e proposent un circuit de calcul rapide des retenues. L’utilisation des outils de CAO de synth`se logique suppose la description e de la fonction bool´enne et celle de l’ensemble d’´l´ments de base selon un lane ee gage formel traitable par un programme. La conception manuelle repose plutˆt o sur l’utilisation d’un sch´ma et d’un catalogue des composants disponibles. e Entre la repr´sentation de la fonction bool´enne et celle de la struce e ture de connexions entre ´l´ments qui la r´alise, il peut exister plusieurs ee e repr´sentations interm´diaires. Il faut que l’´quivalence soit pr´serv´e dans e e e e e ces diff´rentes formes. Des techniques de synth`se logique peuvent s’appliquer e e plutˆt sur la forme alg´brique (remplacement d’une formule bool´enne par o e e une autre formule bool´enne) ou plutˆt au r´sultat physique (remplacement e o e d’un ´l´ment de circuit par un autre, plus petit ou moins consommateur, par ee exemple). Dans la suite nous pr´sentons d’abord les cas simples, o` la distance est e u faible entre l’expression alg´brique et la r´alisation. Pour cela nous pr´sentons e e e des exemples d’´l´ments logiques qui peuvent ˆtre consid´r´s comme de base ee e ee

2. Assemblage de blocs de base...

173

et nous montrons les expressions alg´briques qui y collent le mieux. Il s’agit e bien de synth`se logique. e Nous ´tudions ensuite des circuits moins simples o` la distance peut ˆtre e u e grande entre l’expression de la fonction et la structure de la r´alisation. Il s’agit e bien alors d’une v´ritable algorithmique cˆbl´e. e a e Nous privil´gions les solutions syst´matiques mais nous montrerons parfois e e quelques astuces.

2.
2.1
2.1.1

Assemblage de blocs de base : synth`se logique e
D´codeurs, encodeurs e
Les circuits existants

Un circuit fabriquant en sortie les 2N monˆmes canoniques correspondant o a ` ses N entr´es est appel´ un d´codeur. On en rencontre en particulier dans e e e les m´moires o`, ` partir des N bits d’adresse, il faut ´mettre un des 2N e u a e signaux de s´lection d’un mot. Ainsi pour le d´codeur, ` partir d’un nombre e e a cod´ en binaire, on obtient un seul 1 parmi une nappe de fils. C’est le fil dont e le num´ro est celui donn´ en entr´e. G´n´ralement il y a un AND entre une e e e e e entr´e suppl´mentaire de validation val et ce bit de sortie. e e La fonction d’un encodeur est exactement sym´trique. Si parmi une nappe e de fils on est certain qu’un seul est ` 1 ` un instant donn´, l’encodeur donne a a e le num´ro de ce fil. Si la garantie qu’un seul fil d’entr´e est ` 1 ne peut ˆtre e e a e ´tablie, le circuit est diff´rent. Il d´livre alors le num´ro du premier fil ` 1. La e e e e a notion de premier suppose un ordre sur les fils ; c’est soit l’ordre des num´ros e croissants, comme dans notre exemple, soit d´croissants. e Les tables de v´rit´ de la figure 8.6 caract´risent le d´codeur, l’encodeur e e e e avec garantie qu’une seule entr´e est ` 1 (encodeur1), l’encodeur en g´n´ral, e a e e sans cette garantie (encodeur2). Dans ce dernier on introduit une sortie a, vraie si aucune entr´e n’est ` 1. e a On en d´duit ais´ment les expressions logiques et les sch´mas correspone e e dants. Par exemple, dans le d´codeur : s0 = e1.e0. val, dans l’encodeur1 : e s1 = e3 + e2.

2.1.2

Synth`se syst´matique e e

L’exemple E8.8, paragraphe 3.3, montre l’utilisation de d´codeurs. On en e retrouvera dans le livre comme d´codeurs d’adresse (Cf. Chapitres 9 et 15). e

174

Circuits combinatoires

D´codeur e Entr´es e Sorties val e1 e0 s3 s2 s1 s0 100 0001 101 0010 110 0100 111 1000 0xx 0000

Encodeur1 Entr´es e Sorties e3 e2 e1 e0 s1 s0 0001 00 0010 01 0100 10 1000 11

Encodeur2 Entr´es e Sorties e3 e2 e1 e0 s1 s0 a 0000 ΦΦ1 0001 000 001x 010 0 1 xx 100 1 xxx 110

Fig. 8.6 – Tables de v´rit´ des encodeurs et d´codeurs. Les x et les Φ indiquent une e e e valeur non pertinente respectivement en entr´e ou en sortie. e

2.2
2.2.1

Programmable Logic Array
Les circuits existants

On trouve dans le commerce des circuits nomm´s PLA ou PLD (Programe mable Logic Arrays ou Programmable Logic Devices). L’utilisateur peut facilement personnaliser ces circuits pour y r´aliser des produits ou des sommes e de produits. Dans ces circuits les nombres d’entr´es, sorties et, s’il y a lieu, e monˆmes, sont fix´s. Par exemple un PLA donn´ a 12 entr´es, 20 monˆmes et o e e e o 8 sorties. L’utilisateur claque des fusibles pour fixer : 1) quelle entr´e (normale ou e compl´ment´e) fait partie de quel monˆme ; c’est la partie AND du PLA. 2) quel e e o monˆme fait partie de quelle sortie ; c’est la partie OR du PLA. o Le claquage (la ”programmation”) se fait dans un petit dispositif ´lectronique, connectable ` un ordinateur personnel, et facilement commane a dable par un logiciel qui a re¸u les ´quations logiques en entr´e. c e e Des organisations proches des PLA peuvent ˆtre r´alis´es ` base de portes e e e a dans les circuits non pr´-existants. e 2.2.2 Synth`se syst´matique e e

L’utilisateur cherche souvent ` minimiser le nombre de monˆmes de la a o fonction ou des fonctions ` r´aliser. Soit parce que le nombre total de monˆmes a e o est contraint par la technologie, soit pour ´conomiser de la surface dans le e circuit. Nous allons ´tudier un exemple de fonction r´alis´e sur un tel r´seau e e e e programmable PLA permettant de faire des sommes de produits. Dans un cas on a proc´d´ ` une minimisation de chacune des fonctions, e e a ind´pendamment des autres, par des tableaux de Karnaugh. Dans l’autre cas, e on a cherch´ une minimisation globale grˆce ` un outil de CAO. e a a Exemple E8.2 : Contrˆle d’un afficheur 7 segments o L’exemple retenu est tr`s classique. Nous l’avons d´j` rencontr´ dans le chae ea e pitre 2. Un circuit combinatoire re¸oit 4 entr´es x3 , x2 , x1 , x0 codant un naturel c e

2. Assemblage de blocs de base...

175

x3 x2 x1 x0

a b c d e f g

a f e g d b c

Fig. 8.7 – Affichage des nombres de 0 ` 15 sur 7 segments a
x3 x2 x1 x0

x3 x2 x1 x0

a b c d e f g

a b c d e f g Fig. 8.8 – Description symbolique des PLA r´alisant le codage pour un afficheur 7 sege ments. A gauche minimisation de chacune des fonctions, ind´pendamment les e unes des autres, ` droite, minimisation globale. a

176

Circuits combinatoires

entre 0 et 15. Il d´livre 7 sorties activant 7 segments d’un afficheur. Les 7 sege ments se nomment a, b, c, d, e, f et g. Ils sont dispos´s comme sur la figure 8.7. e Les chiffres hexad´cimaux sont affich´s comme indiqu´. La fonction du circuit e e e est de transcoder entre le code binaire des nombres et le code en segments allum´s et segments ´teints. e e On cherche ` exprimer chacune des 7 fonctions bool´ennes a, . . ., g en a e fonction 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 monˆmes diff´rents. La partie gauche de o e la figure 8.8 donne les diff´rentes fonctions. Chaque ligne figure un monˆme. e o Pour chaque monˆme, on repr´sente par un point noir : quelles entr´es il o e e prend en compte (partie AND du PLA) ; dans quelles sorties il figure (partie OR du PLA). Ainsi la troisi`me ligne repr´sente le monˆme x2 .x0 . Il est utilis´ e e o e par les fonctions a, b et e.

2.2.3

Minimisation locale, minimisation globale

Dans les r´alisations ` base de monˆmes, en portes ou en PLA, le concepteur e a o cherche ` minimiser le nombre total de monˆmes. La surface du PLA est en a o effet proportionnelle ` ce nombre. Si cette recherche est faite ind´pendamment a e pour chacune des fonctions individuelles, il se peut que le r´sultat global soit e moins bon que pour une minimisation globale. Les outils modernes de Conception Assist´e par Ordinateur comportent de tels programmes de minimisation e globale. Pour la solution du transcodeur de 7 segments, avec une telle minimisation globale, un outil d´velopp´ par l’un des auteurs obtient 14 monˆmes e e o diff´rents. La partie droite de la figure 8.8 donne les diff´rentes fonctions. e e

2.3
2.3.1

M´moires mortes : une table de v´rit´ cˆbl´e e e e a e
Les circuits existants

Une m´moire morte de 256 mots de 16 bits r´alise 16 fonctions combie e natoires de 8 variables. En effet ` partir d’une configuration des 8 entr´es, a e habituellement interpr´t´e comme une adresse, la m´moire morte d´livre 16 ee e e bits. Une telle r´alisation de fonction ` base de ROM est parfois utilis´e. Elle e a e est optimale du point de vue du temps de conception. C’est une tr`s bonne soe lution de paresseux ! La table de v´rit´ suffit ` d´crire la r´alisation. On peut e e a e e aussi consid´rer cette solution comme un PLA avec tous les monˆmes canoe o niques. On trouve souvent dans les circuits programmables (FPGA) des petites ROM, inscriptibles par l’utilisateur, par programmation. Ces m´moires, qu’on e ne peut plus appeler mortes, re¸oivent le nom de Look-Up Tables (LUT). c

2. Assemblage de blocs de base...

177

x3 x2 x1 x0 c1 c1 c0 11 10 01 00 c0 e1 e0 1 c s 0

x3

x2

x1

x0

s

s

Fig. 8.9 – Repr´sentation symbolique des multiplexeurs 4 voies vers 1 et 2 voies vers 1. e Structure interne du multiplexeur 4 voies vers 1.

2.3.2

Synth`se syst´matique e e

Pour une fonction de 8 variables on forme les 256 monˆmes canoniques pour o exprimer la fonction sous forme de somme de produits ` partir de la table de a v´rit´, et on r´alise un circuit combinatoire en collant ` cette expression. e e e a

2.4
2.4.1

Multiplexeurs
Les circuits existants

Un circuit combinatoire est d’usage fr´quent : le multiplexeur. Il r´alise la e e N s´lection parmi 2 entr´es de donn´es. Celle des entr´es s´lectionn´e est celle e e e e e e dont le num´ro est donn´ sur les N bits de commande. Le nombre d’entr´es e e e de commande du multiplexeur est le logarithme ` base 2 du nombre de bits de a donn´es. e Ainsi pour 2 bits de commande c1 et c0 et 4 bits de donn´e x3, x2, x1, x0 e la sortie s est d´crite par l’´quation logique : e e 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 ´gale ` l’entr´e x d’indice k. La e a e r´alisation interne s’en d´duit ais´ment. Elle constitue dans ce cas un multie e e plexeur 4 voies vers 1. Le sch´ma conventionnel des multiplexeurs 2 voies vers e 1 et 4 voies vers 1 sont donn´s figure 8.9. e 2.4.2 Synth`se syst´matique e e

Les multiplexeurs sont tr`s pratiques pour synth´tiser une fonction d´crite e e e par un graphe de d´cision binaire (BDD). Ils sont surtout une brique de base de e l’algorithmique cˆbl´e o` ils r´alisent la primitive de choix. Ainsi de nombreux a e u e

178

Circuits combinatoires

outils de CAO partent d’une repr´sentation des fonctions bool´ennes en BDD, e e notamment si la brique de base des circuits combinatoires est le multiplexeur.
Remarque : Attention le multiplexeur est orient´. Ce n’est pas un aie guillage 4 voies vers 1 tel qu’il pourrait ˆtre r´alis´ avec 4 commutateurs (voir e e e la figure 7.10 dans le chapitre 7).

Exemple E8.3 : Cascades de multiplexeurs En utilisant 5 multiplexeurs 4 voies vers 1, on peut r´aliser un multiplexeur e 16 voies vers 1. Pour cela on utilise un premier ´tage de 4 multiplexeurs en e parall`le recevant les mˆmes 2 bits de commande, puis l’autre multiplexeur e e recevant les deux derniers bits de commande. Le lecteur est convi´ ` examiner ea diff´rentes possibilit´s de choix d’affectation des bits de commandes soit au e e premier ´tage de 4 multiplexeurs en parall`le soit au deuxi`me. e e e

2.5
2.5.1

Portes complexes
Les circuits existants

Dans certains types de r´alisations des portes un peu complexes sont utie lis´es ; par exemple les portes ORNAND et ANDNOR pr´sent´es figure 8.3. e e e 2.5.2 Synth`se syst´matique e e

Le principal probl`me li´ ` l’utilisation de telles portes est que des proc´d´s e ea e e syst´matiques de synth`se ne sont pas toujours disponibles. On obtient facie e lement une expression en somme de produits, donc en NAND de NAND. Les portes plus complexes correspondant par exemple ` (abc + de + f g) ne peuvent a provenir que d’outils de Conception Assist´e par Ordinateur. Les m´thodes utie e lis´es alors consistent ` modifier les formes alg´briques (ou autres comme les e a e BDDs) des fonctions bool´ennes pour retrouver ou calquer (on parle de mape ping en anglais) les motifs correspondant aux ´l´ments de base disponibles. ee

3.

Algorithmique cˆbl´e : conception logique a e

La conception logique a pour but de composer des fonctions bool´ennes, e ´ventuellement assez complexes, pour r´aliser une fonction bool´enne plus e e e g´n´rale. L’essentiel de la difficult´ est la recherche de r´gularit´. e e e e e

3.1

La question de la r´gularit´ e e

Pour introduire la notion de r´gularit´ dans la conception, nous montrons e e ici les r´sultats de deux m´thodes de conception sur un mˆme exemple. e e e

3. Algorithmique cˆbl´e : conception logique a e

179

Exemple E8.4 : Conversion binaire vers DCB Il s’agit d’une fonction bool´enne ` 9 entr´es et 10 sorties. Sur la figure 8.10 e a e les bits d’entr´e et de sorties ne figurent que par leur num´ro. Le circuit e e convertit l’´criture binaire d’un naturel de l’intervalle [1, 366] (donc sur e 9 bits) vers son ´criture en D´cimal Cod´ en Binaire (donc sur 10 bits). e e e Chaque chiffre de l’´criture d´cimale est cod´ en binaire, par exemple e e e 28510 = 1 0001 11012 = 10 1000 0101DCB . 1) Par l’´tude de l’algorithme de conversion, nous connaissons une e d´composition de la fonction du circuit en fonctions ´l´mentaires. Il y a une e ee forte r´gularit´ dans la fa¸on dont se combinent ces fonctions ´l´mentaires. e e c ee Elle est li´e ` la r´gularit´ induite par l’algorithme de conversion. Cette e a e e d´composition donne la structure de la solution 2 de la figure 8.10. Tous les e rectangles repr´sentent la mˆme fonction ` 4 entr´es et 4 sorties. Les deux e e a e rectangles marqu´s d’un point, blanc ou noir, ont une entr´e de moins ou e e une entr´e et une sortie de moins. Tous les blocs ´tant identiques et leur e e disposition ´tant r´guli`re, le sch´ma topologique du circuit serait simple. e e e e La fonction ´tant une fonction arithm´tique, pour obtenir le mˆme circuit e e e pour plus d’entr´es et de sorties, il suffit d’´tendre le sch´ma. On d´nombre 6 e e e e niveaux de blocs entre les entr´es et les sorties. e 2) Nous avons, avec l’aide des auteurs d’un logiciel de synth`se logique, e donn´ la table de v´rit´ compl`te de ce circuit ` l’outil. Cela repr´sente un e e e e a e peu moins de 400 lignes de 10 bits. Elles peuvent ˆtre obtenues par un proe gramme. Ce logiciel a travaill´ en aveugle uniquement ` partir de ces tables. e a Le logiciel cherchait ` synth´tiser ` partir de fonctions ` 3 ou 4 entr´es. Il a a e a a e essay´ de minimiser le nombre total de blocs. Il a par ailleurs essay´ de regroue e per des fonctions qui utilisaient les mˆmes variables ou les mˆmes r´sultats e e e interm´diaires. Il a de plus cherch´ ` minimiser le nombre de niveaux logiques e ea total entre les entr´es et les sorties. Le r´sultat est celui de la partie 1 de e e la figure 8.10. Par exemple le bloc repr´sent´ en gris´ re¸oit les 4 entr´es de e e e c e num´ro 7, 5, 3 et 2 et d´livre 3 sorties, chacune ´tant utilis´e dans deux blocs. e e e e On d´nombre 4 niveaux de blocs entre les entr´es et les sorties. e e

Dans tous les circuits ayant un grand nombre d’entr´es, le concepteur e cherche une r´gularit´ permettant de simplifier le travail. Il est ` noter que e e a cette r´gularit´ se retrouve souvent dans la topologie effective de la r´alisation e e e du circuit. La plupart des circuits r´alisant des fonctions arithm´tiques, et e e d’autres, pr´sentent de telles r´gularit´s. Nous allons les ´tudier. Cette partie e e e e suppose connus les ´l´ments du chapitre 3 sur les repr´sentations des granee e deurs. Dans la suite nous montrons 3 m´thodes d’assemblage de sous-circuits. e – Dans la premi`re, l’assemblage it´ratif, ou lin´aire, la connaissance de la soe e e

180

Circuits combinatoires

7532 7543864876352 86 864875 642310

8 7 6 5 4 3 2 1 0

9

8 7

6

5

432

1

0

9 8 7 6 5

4 3 2 1 0

Solution 1

Solution 2

Fig. 8.10 – Deux solutions pour la r´alisation d’une mˆme fonction e e

lution pour le circuit travaillant sur N −1 bits permet de concevoir le circuit travaillant sur N bits. Cette structure est proche de la boucle d’it´ration. e Le circuit global est obtenu en r´p´tant N fois un circuit de base. e e – Dans la deuxi`me, l’assemblage r´cursif, ou arborescent, la connaissance de e e la solution pour le circuit travaillant sur N/2 bits permet de concevoir le circuit travaillant sur N bits. Cette structure est proche de la structure d’arbre binaire. Parfois les deux r´alisations de la fonction sur N/2 bits e doivent ˆtre compl´t´es pour permettre de r´aliser la fonction sur N bits. e ee e – La troisi`me m´thode, g´n´rale, regroupe des blocs selon des r`gles de come e e e e position de fonctions quelconques. Pour chacune de ces m´thodes d’assemblage nous donnons un ou quelques e exemples typiques. Un exemple simple, la fonction incr´mentation, permet e ensuite de comparer diff´rentes m´thodes dans une ´tude de cas. e e e

3.2
3.2.1

Assemblages lin´aires e
Sch´ma en tranches, sch´ma en blocs e e

Repr´senter un circuit r´sultant d’un assemblage it´ratif peut se faire de e e e deux fa¸ons repr´sent´es figure 8.11. C’est un exemple sans signification. Un c e e circuit traite deux vecteurs de n bits a et b. Le traitement se compose de la mise en s´rie de 3 fonctions. Dans la premi`re fonction, symbolis´e par un carr´, e e e e une entr´e externe X est prise en compte pour chaque bit. Dans la troisi`me e e fonction, symbolis´e par un ovale, une information passe de bit en bit, ` la e a fa¸on d’une retenue. c On parle de repr´sentation en tranches quand on fait apparaˆ e ıtre toutes les cellules qui participent ` la fonction globale. L’exemple r´el de l’UAL a e (Cf. Exemple E8.10) utilise cette technique.

3. Algorithmique cˆbl´e : conception logique a e

181

an−1

ai b0 a0

b n X

n

a

A Add X S additionneur A 0 B Mux 1

B

rn−1

r0

r Schéma en blocs

s

Schéma en tranches

C multiplexeur

Fig. 8.11 – Repr´sentation d’un circuit en tranches ou en blocs ; repr´sentation convene e tionnelle de l’additionneur et du multiplexeur N bits

On parle de repr´sentation en blocs quand on ne dessine que les fonctions e sur N bits. On repr´sente alors par un trait gras les bus, ou nappes de fils. e L’exemple du circuit de calcul du quanti`me (Cf. Exemple E8.9) utilise cette e repr´sentation. e 3.2.2 Exemples : addition et soustraction de naturels

Exemple E8.5 : L’additionneur N bits La 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 cod´s sur N e bits. La somme de deux naturels cod´s en binaire pur sur N bits est sur N + 1 e bits. Le sch´ma du circuit est donn´ figure 3.3 (chapitre 3). e e Exemple E8.6 : L’additionneur/soustracteur N bits On a vu au chapitre 3 que le calcul sur les vecteurs bool´ens donnant la e repr´sentation de la somme ou de la diff´rence, cod´e en binaire pur ou en e e e compl´ment ` 2, est le mˆme. Puisque le circuit peut effectuer l’addition ou e a e la soustraction, il dispose d’un bit de commande Add/Sub. Ce fil vaut 0 si l’op´ration voulue est une soustraction, 1 si c’est une addition. e Le calcul de la somme A+B se fait en ajoutant A, B et 0. Le calcul de la diff´rence A-B se fait en ajoutant A, le compl´mentaire bool´en de B et 1. e e e On se sert du fil Add/Sub pour s´lectionner l’op´rande Q ` ajouter ` A. e e a a Pour chaque bit, on a Qi = Add.Bi + Sub.Bi . De mˆme, on fabrique le report entrant r0 , pour ajouter 0 ou 1, selon e l’´quation : r0 = (si Add/Sub alors 0 sinon 1) = Add/Sub e Si l’op´ration est une addition, la retenue sortante C est le report sortant. e Si l’op´ration est une soustraction, la retenue sortante C est le compl´mentaire e e

182

Circuits combinatoires

An−1

Bn−1

A0 B0

10 1 0 C V

10

10

10

Add/Sub

Sn−1

Sn−2

S1

S0

Fig. 8.12 – Additionneur-soustracteur N bits. Chaque carr´ est un additionneur 1 bit. e Tous les multiplexeurs sont command´s par le mˆme signal. e e

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 sch´ma, en tranches, du circuit est donn´ figure 8.12. e e

3.3

Assemblages arborescents

Exemple E8.7 : Le XOR g´n´ralis´ e e e On connaˆ la porte XOR ` 2 entr´es. Cette fonction est la somme modulo 2 ıt a e si l’on interpr`te les deux entr´es comme entiers plutˆt que comme bool´ens. e e o e Il est possible d’obtenir une somme modulo 2 de N entiers sur un bit (ou le XOR g´n´ralis´ de N bool´ens) en utilisant l’associativit´ de cette fonction. Ce e e e e e calcul est utilis´ pour obtenir le bit de parit´ d’un mot qui vaut 1 si le mot e e a un nombre impair de 1. Ce genre de technique peut s’appliquer pour toute op´ration associative, par exemple le AND ou le OR. La figure 8.13 rappelle e que des arbres de NAND et de NOR peuvent remplacer les AND ou les OR. Voir aussi l’exercice E8.15. Exemple E8.8 : Le d´codeur N bits e Le d´codeur est pr´sent´ paragraphe 2.1. Nous nous int´ressons ici ` sa e e e e a r´alisation interne. Nous supposerons que son nombre d’entr´es N est une e e puissance de 2. Il fabrique 2N sorties bool´ennes sur 2N fils ` partir de N e a

3. Algorithmique cˆbl´e : conception logique a e

183

e1 D2 e3 D1 e2 s”3

e0 D´codeur 2 vers 4 e s0 s1

s3 s”0

s10

Fig. 8.14 – D´codeur ` 4 entr´es et 16 sorties, ` partir de 2 d´codeurs ` 2 entr´es et 4 e a e a e a e sorties et de 16 portes AND.

entr´es. Une seule des sorties est ` 1. Il est tr`s facile de d´crire un tel circuit e a e e r´cursivement : e – si N vaut 1, le circuit consiste en 1 seul inverseur. Les deux sorties sont l’entr´e et l’entr´e compl´ment´e. e e e e – si N est sup´rieur ` 1, on dispose de deux d´codeurs ` N/2 entr´es. Ils e a e a e N/2 ont chacun 2 sorties. En combinant 2 ` 2 dans des portes AND ` deux a a entr´es les sorties des 2 d´codeurs, on obtient le d´codeur souhait´. e e e e Montrons le passage de 2 entr´es ` 4 par un exemple (Cf. Figure 8.14). e a Un d´codeur D1 ` 2 entr´es e3 e2 d´livre les 4 sorties s3 s2 s1 s0 . e a e e Un d´codeur D2 ` 2 entr´es e1 e0 d´livre les 4 sorties s3 s2 s1 s0 . e a e e Les ´quations des sorties du d´codeur ` 4 entr´es sont, pour p compris entre 0 e e a e et 15 : sp = sp div 4 AND sp modulo 4 c’est-`-dire : a s15 = s3 AND s3 s14 = s3 AND s2 jusqu’` s1 = s0 AND s1 s0 = s0 AND s0 a

3.4

Assemblages g´n´raux e e

L’expression d’une fonction bool´enne tr`s complexe comme composition e e de fonctions bool´ennes plus simples donne une organisation de circuits come binatoires. Il suffit de coller la structure du circuit sur la structure de la combinaison de fonctions. C’est le cas pour le circuit de calcul du quanti`me dans e l’ann´e pr´sent´ en exemple. e e e Dans les cas o` une composition est connue, tout va bien. Si on ne sait pas u exprimer la fonction bool´enne complexe, il ne reste plus que la table de v´rit´ e e e

184

Circuits combinatoires

et sa traduction vers une somme de monˆmes. C’est le cas pour le calcul du o nombre premier suivant pr´sent´ aussi. e e Il y a peu de r`gles dans l’obtention de l’assemblage. C’est une branche de e l’algorithmique, sans plus. Une propri´t´ toutefois est ` retenir : la s´lection, ee a e exprim´e dans les algorithmes par des structures choix est r´alis´e par des e e e multiplexeurs. Souvent ce choix commute avec d’autres op´rations et cette e commutation peut ˆtre exploit´e pour diminuer le coˆt d’un circuit. Cela supe e u pose ´videmment connus les coˆts des multiplexeurs et autres blocs. Ceci est e u illustr´ dans le circuit d’Unit´ Arithm´tique et Logique. e e e Exemple E8.9 : Le calcul du quanti`me dans l’ann´e e e Cet exemple a sa source dans [SFLM93]. Il a fait l’objet d’une vraie r´alisation e par un groupe d’´tudiants de maˆ e ıtrise d’informatique dans le cadre d’un projet europ´en de d´veloppement de l’enseignement de la micro´lectronique. e e e Un circuit re¸oit le code binaire d’une date. Cette date est compos´e d’un c e num´ro de jour dans le mois, cod´ sur 5 bits, d’un num´ro de mois, cod´ sur e e e e 4 bits. L’ann´e est limit´e aux deux chiffres d´cimaux donnant l’ann´e dans e e e e 2 le si`cle . Chacun de ces deux chiffres d´cimaux est cod´ en binaire, selon un e e e code DCB. Le circuit d´livre le code binaire du quanti`me de la date dans l’ann´e. e e e eme ` Ainsi le 3 mars est le 62 jour de l’ann´e les ann´es non bissextiles et le e e ` 63eme les ann´es bissextiles. e Concevoir ce circuit suppose de connaˆ ıtre une m´thode de calcul. Ici on e retient la suivante qui repose sur des fonctions tr`s sp´cifiques de cette applie e cation : – Un premier circuit bis d´livre 1 si l’ann´e est bissextile, 0 sinon. Il s’agit de e e reconnaˆ un multiple de 4, ` partir du code DCB. ıtre a – Un deuxi`me circuit > 2 d´livre 1 si le num´ro de mois est sup´rieur ` 2. e e e e a – Un circuit D´b donne sur 9 bits le code binaire du quanti`me du premier e e jour du mois les ann´es non bissextiles, ` partir du code du mois. On fait e a ais´ment les 9 tables de v´rit´ correspondant ` cette fonction : 1→1 ; 2→32 ; e e e a 3→60,. . .,12→334. – Un additionneur ajoute le num´ro du jour, le num´ro du premier du mois e e et 1 si l’ann´e est bissextile et si le num´ro de mois est sup´rieur ` 2. e e e a On remarque que plusieurs fonctions sont Φ-bool´ennes car des codes binaires e d’entr´es ne repr´sentent pas des valeurs du domaine. e e

Exemple E8.10 : L’unit´ arithm´tique et logique e e L’unit´ arithm´tique et logique que nous ´tudions re¸oit deux nappes de fils A e e e c et B. Elle d´livre une nappe F. e
2

Encore un syst`me informatique avec le bogue de l’an 2000 ! e

3. Algorithmique cˆbl´e : conception logique a e

185

année 8 4 5 Déb 9 >2 bis mois jour

9

Fig. 8.15 – Circuit de calcul du quanti`me dans l’ann´e e e Op´ration e souhait´e e A+B A-B B div 2 A AND B Op´ration e r´alis´e e e A+B+0 A+B+1 B div 2 + 0 + 0 A AND B retenue entrante 0 1 0 – entr´e di e ai ai bi+1 ai entr´e ei e bi bi 0 bi sortie fi si si si xi

Fig. 8.16 – Op´rations de l’UAL e Op´ration e A+B A-B B div 2 A AND B mux 1 bi bi – bi mux 2 ci ci 0 ci mux 3 ai ai bi+1 ai mux 4 si si si xi

Fig. 8.17 – Commandes des multiplexeurs

Les nappes peuvent ˆtre interpr´t´es comme des entiers ou des vecteurs de e ee bits. L’UAL calcule, selon 2 bits de commande com1 com0, la somme de A et B, la diff´rence de A et B, le quotient de B par 2 ou, sans l’interpr´tation e e enti`re, le AND (bit ` bit) des nappes A et B. e a L’UAL comporte un additionneur. En aiguillant les bonnes valeurs sur les entr´es ei , di et la retenue entrante de l’additionneur, on obtient les 3 r´sultats e e arithm´tiques en sortie si de l’additionneur (Cf. Figure 8.16). En utilisant e la sous-fonction AND pr´sente dans la fonction majorit´ de chaque tranche e e d’additionneur, on obtient la valeur xi = ei AND di . Un dernier multiplexeur permet d’obtenir fi ´gal soit ` xi soit ` si . e a a Les s´lections des multiplexeurs 1, 2, 3 et 4 de la figure 8.18 peuvent ˆtre e e obtenues ais´ment (Cf. Figure 8.17). Il reste ` exprimer les commandes de e a chaque multiplexeur en fonction de com1 com0.

186

Circuits combinatoires

ai bi+1
1 0 2 3 3

bi

1 ci 2

1 0 2 3 3 0

di
Add

ei ri si
4 4 4 Add Add

ri+1 xi

Add

4

fi Fig. 8.18 – UAL. Les tranches repr´sent´es sont la tranche de plus fort poids, une tranche e e de rang interm´diaire et la tranche de poids faible. Le remplacement de e certains multiplexeurs par des portes est fait dans la partie droite.

Exemple E8.11 : Le calcul du nombre premier suivant Ceci est un exemple d’´cole. Un circuit re¸oit le code binaire d’un naturel A e c cod´ sur N bits. Il d´livre le code binaire du nombre premier imm´diatement e e e sup´rieur ` A si A est premier, 0 sinon. e a On ne connaˆ pas d’algorithme g´n´ral donnant ce r´sultat. Pour r´aliser ıt e e e e le circuit il ne reste qu’une solution : pr´-calculer la fonction sous forme de e table, la coder en binaire sous forme de table de v´rit´ et r´aliser le circuit e e e d’apr`s les expressions bool´ennes. e e Cela ne pose pas de probl`me pour les petites valeurs de N. e

4.

Etude de cas

Certains circuits peuvent donner lieu ` diff´rentes organisations car l’anaa e lyse de leur d´composition n’est pas unique. Nous montrons ici un exemple e d’un tel circuit. Un exemple analogue est propos´ en exercice E8.18. e Exemple E8.12 : Incr´menteur e Un incr´menteur est un circuit combinatoire qui incr´mente le naturel pr´sent e e e en entr´e. Les entr´es sont une nappe de N fils xN −1 , xN −2 , . . . , x1 , x0 . Ces e e bits codent en binaire un naturel X. Les sorties sont une nappe de N + 1 fils yN , yN −1 , yN −2 , . . . , y1 , y0 . Ces bits codent en binaire un naturel Y . Le circuit

4. Etude de cas

187

´tudi´ doit ˆtre tel que Y = X + 1. e e e Introduisons les produits interm´diaires Pi d´finis par : P−1 = 1, P0 = x0 , e e i=j P1 = x1 .x0 , P2 = x2 .x1 .x0 , et g´n´ralement Pj = i=0 xi . e e On obtient, pour tout k dans l’intervalle [0, N ], yk = xk ⊕ Pk−1 ou, ce qui est ´quivalent, yk = xk ⊕ Pk−1 . e La r´alisation de l’incr´menteur suppose donc la r´alisation des produits e e e partiels Pi . Si N est petit (3 ou 4), il est facile de former les Pi par des portes NAND par synth`se syst´matique. Plus g´n´ralement, examinons diff´rentes e e e e e solutions dans la fabrication des Pi avec des NAND et NOR. Les crit`res pris e en compte sont le nombre total de portes, le nombre de niveaux logiques entre entr´es et sorties et le nombre de portes (ou blocs) diff´rentes ` dessiner pour e e a pouvoir les assembler et obtenir le dessin global du circuit. 1) Utilisation de portes AND ` 2, 3, . . . , N − 1 entr´es (partie 1 de la a e figure 8.19) Le nombre de portes est de l’ordre de N . Le nombre de niveaux est optimal, il est de 1. La r´gularit´ est tr`s mauvaise, chaque porte est diff´rente e e e e des autres. Une solution consiste ` dessiner une porte ` N entr´es et ` n’en a a e a utiliser qu’une partie, mais ce n’est pas tr`s ´conomique. Les portes AND sont e e r´alis´es par des NAND suivies d’inverseurs. Pour N grand cette technique ne e e fonctionne que si l’on dispose de portes ` nombre d’entr´es quelconque. Ce a e n’est en g´n´ral pas le cas. e e 2) Utilisation de portes AND ` 2 entr´es (partie 2 de la figure 8.19) Coma e plexit´ : de l’ordre de 2N portes, de l’ordre de 2N niveaux de portes. Une seule e cellule physique ` dessiner (encadr´e), est r´p´t´e N fois. Malheureusement la a e e ee porte AND n’est pas une primitive physique en g´n´ral ; elle est r´alis´e par un e e e e NAND suivi d’un inverseur. Cela conduit ` chercher une autre solution. a 3) Utilisation de portes AND ` 2 entr´es, alternativement r´alis´es par un a e e e NAND ou un NOR (partie 3 de la figure 8.19) Cette solution repose sur les ´galit´s suivantes : e e u ⊕ (v.w) = u ⊕ NAND (v, w) t ⊕ (u.v.w) = t ⊕ NOR (u, NAND (v, w)) Complexit´ : de l’ordre de 2N portes, de l’ordre de N niveaux de portes. e Une seule cellule physique ` dessiner (encadr´e). Elle comporte deux ´tages. a e e Elle est r´p´t´e N/2 fois. e ee 4) D´composition r´cursive des produits partiels, ` base de AND ` 2 entr´es e e a a e (partie 4 de la figure 8.19) Voyons comment on passe du circuit ` 8 entr´es au a e circuit ` 16 entr´es. Supposons connu le circuit qui fabrique les Pi pour i allant a e de 0 ` 7 ` partir des x7 , . . . , x0 . Dupliquons ce circuit et connectons-le aux a a entr´es x15 , . . . , x8 . On obtient des produits partiels Pi . P8 = x8 , P9 = x9 .x8 , e jusqu’` P15 = x15 . . . . .x9 .x8 . Il suffit d’un ensemble de portes AND ` 2 entr´es a a e pour obtenir les Pi car, pour i de 8 ` 15 : Pi = Pi .P7 a Le nombre de portes est de l’ordre de 2 × N × log2 N portes, le nombre de niveaux est de log2 N . Chaque bloc est redessin´ deux fois (encadr´). Dans e e

188

Circuits combinatoires

x0 P1 P0

1

P2

P1

P0

2

4 3

P3 P7 P1 P0

Fig. 8.19 – Diff´rentes solutions pour la r´alisation de l’incr´menteur. Les portes XOR e e e ne sont pas dessin´es dans la solution 4 e

chaque bloc, il faut dessiner le dernier ´tage de portes r´alisant les AND avec e e le dernier produit de l’´tage pr´c´dent. e e e Dans cette solution aussi il conviendrait de remplacer les cascades de AND par des cascades de NAND et de NOR, alternativement. La mise au point de cette solution est un excellent exercice.

5.

Exercices

E8.13 : De toutes les couleurs Reprendre les codes des couleurs dans le d´but du chapitre 3. Pour les couleurs e cod´es dans les deux codes, concevoir le circuit combinatoire qui transcode dans e un sens, dans l’autre. E8.14 : R´alisation du XOR e a e e Avec une porte s = (ab + c) et un NOR ` 2 entr´es, r´aliser la fonction XOR. En se servant des sch´mas en transistor de la figure 7.9 du chapitre 7, compter e les transistors de la r´alisation du XOR. e Essayer d’autres expressions du XOR. Faire les sch´mas correspondants ; e compter les transistors, comparer.

5. Exercices

189

E8.15 : Des grandes portes avec des petites En utilisant les r`gles de De Morgan (Cf. Chapitre 2), montrer que e (a + b).(c + d) = a + b + c + d En d´duire le sch´ma d’une fonction NOR ` 8 entr´es n’utilisant que des e e a e NAND ou NOR ` 2 entr´es. Penser ` une organisation arborescente. a e a De mˆme3 donner le sch´ma d’une fonction NAND ` 8 entr´es n’utilisant e e a e que des NAND et NOR ` 2 entr´es. a e G´n´ralisation : donner la r`gle g´n´rale permettant de r´aliser toute fonce e e e e e tion AND, OR, NAND ou NOR ` nombre quelconque d’entr´es en se servant de a e NAND ` au plus 4 entr´es, de NOR ` au plus 3 entr´es et d’inverseurs. a e a e E8.16 : Multiplieur Reprendre la technique de multiplication des naturels dans le chapitre 3. Etudier le circuit de multiplication. Au lieu d’une it´ration en ligne, il faut penser e a ` une it´ration en matrice. Il est aussi possible de donner une description e r´cursive de la solution. e E8.17 : Un circuit combinatoire avec un cycle Prendre un additionneur 1 bit. Reboucler le report sortant sur le report entrant. Se persuader que le circuit ` deux entr´es obtenu est un circuit combinatoire. a e Indication : le report (sortant) est soit constant pour les entr´es 00 et 11, e soit ´gal au report entrant pour les entr´es 01 et 10. On peut donc le reboucler e e sur le report entrant. E8.18 : Un seul 1 Soit une nappe de N fils xN −1 , xN −2 , . . . , x1 , x0 . Ce sont les entr´es d’un circuit e combinatoire C. La sortie S vaut 1 si et seulement si un seul des xi vaut 1. Nous allons esquisser 5 solutions ` ce probl`me. a e – Id´e 1 (fonctionne bien pour N petit) : faire la table de v´rit´ de S, donner e e e l’´quation de S, en d´duire le circuit. e e – Id´e 2 : concevoir un circuit C’, n’ayant que N − 1 entr´es et deux sorties e e Z et T. Z vaut 1 si aucune des entr´es ne vaut 1. T vaut 1 si une seule e des entr´es vaut 1. Concevoir un circuit C” qui, combin´ avec C’ donne un e e circuit ayant mˆme comportement que C’, mais N entr´es. Construire C e e comme circuit it´ratif par mise en cascade de circuits C”. R´soudre le cas e e particulier du premier ´tage. e – Id´e 3 : supposer que N est une puissance de 2. Supposer que l’on sait faire e un circuit C’ ` N/2 entr´es. C’ a deux sorties Z et T. Z vaut 1 si aucune a e des entr´es ne vaut 1. T vaut 1 si une seule des entr´es vaut 1. Concevoir e e un circuit C” qui combine les quatre sorties des deux circuits C’ et d´livre e deux sorties Z et T. Construire C comme circuit r´cursif par mise en arbre e de circuits C”. R´soudre le cas particulier du premier ´tage. e e
3

Apr`s ˆtre all´ au NOR, il faut qu’on pense ` faire NAND (G. Brassens) e e e a

190

Circuits combinatoires

– Id´e 4 : se persuader qu’un additionneur un bit donne le nombre de 1 e parmi trois fils d’entr´es. En utilisant un ensemble d’additionneurs un bits e concevoir un circuit qui donne le nombre de 1 parmi une nappe de fils. Concevoir un circuit qui d´tecte si ce nombre de 1 est sup´rieur ` un, ou e e a nul. Simplifier le circuit qui calcule le nombre de 1 pour tenir compte du fait que dans cet exercice on n’a pas besoin du nombre de 1, seulement de savoir s’il est sup´rieur ` un ou nul. e a – Id´e 5 : concevoir un circuit qui re¸oit une nappe de N fils et d´livre une e c e nappe de N fils. Les deux nappes sont ordonn´es (de droite ` gauche, de e a haut en bas...). La notion de premier fait r´f´rence ` cet ordre. Les sorties ee a de ce circuit soit sont toutes ` 0, soit sont toutes ` 0 sauf une, celle dont le a a rang est le rang du premier 1 de la nappe d’entr´e. e Utiliser deux tels circuits pour la nappe des xi , l’un pour un ordre, l’autre pour l’ordre inverse. Si il y a un seul 1, le premier 1 dans un sens est aussi le premier 1 dans l’autre sens. Etudier les 5 solutions du point de vue du nombre de portes, du nombre d’´tages de portes pour N valant 4, 16, 64 et 256. S’aider d’un outil de Concepe tion Assist´e par Ordinateur. e

Chapitre 9 El´ments de m´morisation e e
Un ordinateur est muni de composants permettant de stocker les donn´es e et les programmes ; nous avons parl´ du tableau MEM au chapitre 4 et nous e reparlerons de m´moire dans les chapitres ult´rieurs. e e Des ´l´ments de m´morisation sont aussi n´cessaires pour r´aliser des maee e e e chines s´quentielles telles que nous les avons d´finies au chapitre 5 (Cf. Chae e pitres 10, 11 et 14). D’une fa¸on g´n´rale, il s’agit de savoir comment r´aliser la fonction d’afc e e e fectation des langages de haut niveau : x ←− f(a, b, c). La m´morisation peut e avoir lieu chaque fois qu’une des variables a, b ou c est modifi´e (comportee ment asynchrone) ou ` des instants fix´s par une entr´e sp´cifique ne d´pendant a e e e e pas des autres entr´es (comportement synchrone). Nous avons d´j` parl´ de e ea e ces aspects au chapitre 6 et dans ce livre nous nous limitons aux circuits synchrones. Un cas particulier de ce type d’affectation est : x ←− f(x, e) o` u les deux instances du nom x correspondent aux valeurs de x sur une mˆme e nappe de fils, ` des instants diff´rents. Ce n’est pas une ´quation de point a e e fixe. On la lit par exemple, comme dans un langage de programmation usuel, nouveau-x ←− f (ancien-x, e). Dans ce chapitre nous ´tudions les ´l´ments de m´morisation permettant e ee e de r´soudre les probl`mes abord´s ci-dessus sous les deux aspects : e e e – la vision externe, fonctionnelle, o` nous voyons qu’un processeur connect´ u e a ` de la m´moire peut ´crire une information dans la m´moire ou lire une e e e information pr´c´demment m´moris´e en envoyant des signaux de come e e e mande a cette m´moire. Une m´moire ne permet que les affectations de ` e e type x ←− f(a, b, c) ; on ne peut pas lire et ´crire ` un mˆme emplacement e a e dans la m´moire d’un ordinateur dans le mˆme instant. e e – la vision interne, structurelle, o` nous expliquons comment de la m´moire u e peut ˆtre fabriqu´e ` partir d’´l´ments de m´morisation de base (nous e e a ee e partons du bistable ´tudi´ au chapitre 7). Nous montrons aussi quels e e ´l´ments de m´morisation conviennent pour r´aliser une affectation du type ee e e x ←− f(x, e). Ces ´l´ments sont aussi utilis´s dans les dispositifs de traiteee e ment de l’information dont naturellement les processeurs (Cf. Chapitre 14).

192

El´ments de m´morisation e e

Dans le paragraphe 1. nous pr´sentons les composants ´l´mentaires utie ee lis´s pour m´moriser de l’information et pour construire des circuits e e s´quentiels. Nous pr´sentons ensuite la notion de m´moire dans un ore e e dinateur (paragraphe 2.) puis comment est construite une m´moire ` e a partir de cellules ou points m´moires ´l´mentaires (paragraphe 3.). Le e ee paragraphe 4. pr´sente des optimisations et des r´alisations de m´moire e e e particuli`res. e

1.

Points de m´morisation de bits : bascules e et registres

Dans le chapitre 7, nous avons d´crit le comportement ´lectrique de certains e e points m´moire. Consid´rons une chaˆ de 2k (k ≥ 1) inverseurs, la sortie de e e ıne l’un ´tant connect´e ` l’entr´e du suivant. Si nous rebouclons la sortie de la e e a e chaˆ d’inverseurs sur l’entr´e, nous obtenons un circuit s´quentiel ` deux ıne e e a ´tats stables, ou bistable. Nous nous int´ressons au cas k = 1. Tel que (Cf. Fie e gure 9.1-a), le bistable ne peut que fournir sa valeur ` un autre composant, a il n’est pas possible de le charger avec une valeur particuli`re ; il peut ˆtre lu, e e mais on ne peut y ´crire. e Nous allons ´tudier deux r´alisations permettant de forcer une valeur en e e entr´e du circuit. La premi`re consiste ` remplacer les inverseurs par des portes e e a NOR (ou NAND). On obtient ainsi un circuit avec deux entr´es de commandes, e appel´ bascule RS (voir la figure 9.1-b pour le montage). La deuxi`me consiste e e a ` intercaler un multiplexeur entre les deux inverseurs ; ce montage est appel´ e verrou construit ` partir du bistable (Cf. Figure 9.4-a). a Par essence, les points de m´morisation sont des circuits o` l’une des sorties e u reboucle sur l’une des entr´es. Cela conduit ` des ´quations du type x = f(x, e), e a e o` les deux occurrences de x d´notent des valeurs de x ` des instants diff´rents. u e a e Pour distinguer une variable x ` un instant et la mˆme ` l’instant suivant, nous a e a ´crivons x’. L’´quation pr´c´dente devient : x’ = f(x, e) : la nouvelle valeur de e e e e x est fonction de son ancienne valeur et de e.
Comme nous l’avons pr´cis´ en introduction, dans ce livre nous nous limitons e e aux circuits synchrones. Lorsque nous utiliserons des ´l´ments de m´morisation ee e dans des assemblages complexes (Cf. Chapitres 10, 11 et 14), les valeurs des variables seront examin´es ` des instants d´finis par un signal en g´n´ral e a e e e p´riodique appel´ horloge. e e

1.1
1.1.1

Points de m´morisation ´l´mentaires : bascule RS, e ee verrou
Bascule RS

Une bascule RS poss`de deux entr´es R (Reset) et S (Set) permettant de e e forcer l’´tat respectivement ` 0 ou ` 1, et deux sorties Q1 et Q2. e a a

1. Points de m´morisation de bits : bascules et registres e

193

R

Q1 R S Q Q

(a)

S (b)

Q2 (c)

Fig. 9.1 – a) le bistable b) la bascule RS r´alis´e avec des portes NOR c) le symbole e e logique de la bascule RS

Nous allons d´tailler le fonctionnement d’une bascule RS r´alis´e ` partir e e e a de portes NOR (voir pour le montage la figure 9.1-b) : – Lorsque R et S sont stables ` 0, la bascule est ´quivalente ` un bistable. En a e a effet, NOR(x, 0) = x. – A partir de cet ´tat stable, le passage de R ` 1 fait passer Q1 ` 0, apr`s un e a a e d´lai de commutation de la porte NOR. Apr`s un autre d´lai, Q2 passe ` e e e a 1. Lorsque R repasse ` 0, alors l’´tat reste stable. a e – Par sym´trie, ` partir de l’´tat stable, le raisonnement est le mˆme. Lorsque e a e e S passe ` 1, Q2 passe ` 0 et Q1 passe ` 1, ` ceci pr`s que Q2 change avant a a a a e Q1. – Lorsque S (respectivement R) est ` 1 et que R (respectivement S) passe ` a a 1, les sorties Q1 et Q2 sont ` 0. Cette situation n’´volue pas tant que les a e deux entr´es restent stationnaires. Cela constitue le plus souvent une erreur e d’initialisation. Remarquons que lorsque R et S ne sont pas tous deux ` 1, Q1 et Q2 sont a compl´mentaires, ce qui justifie les noms habituels Q et Q. e La stabilisation des sorties ne peut avoir lieu exactement au mˆme instant e que le changement de l’entr´e, ` cause du temps de commutation de chaque e a porte. Il existe ainsi un d´lai de stabilisation de la bascule, d´lai faible et born´. e e e Nous ne prenons pas en compte de fa¸on chiffr´e ce d´lai mais seulement son c e e existence et notons que les valeurs en entr´e et en sortie sont consid´r´es ` e ee a des instants successifs. Plus pr´cis´ment, nous notons Q1, Q2 les valeurs de e e la bascule ` un instant donn´ et Q1’, Q2’ les nouvelles valeurs, ` un instant a e a imm´diatement ult´rieur. e e La table d’´volution des valeurs de la bascule est donn´e ci-dessous, la e e premi`re ligne se lisant : si les entr´es S et R sont ` 0, la sortie Q1 reste ` la e e a a valeur qu’elle avait pr´c´demment et donc Q1’ = Q1. A partir de cette table, e e on obtient les ´quations donn´es ` cˆt´. e e a oe Du sch´ma de la figure 9.1-b, on tirerait les ´quations : Q1 = R + Q2, Q2 = e e S + Q1. D’o` Q1 = R + S + Q1 = R.(S + Q1) et Q2 = S + R + Q2 = u S.(R + Q2).

194

El´ments de m´morisation e e

S 0 1 0 1

R Q1’ 0 Q1 0 1 1 0 1 0

Q2’ Q2 0 1 0

Q1

Q2

= = = = = =

Q1.S.R + S.R R.(Q1.S + S) R.(Q1 + S) Q2.S.R + S.R S.(Q2.R + R) S.(Q2 + R)

R S Q1

Q2 temps Fig. 9.2 – Chronogramme du comportement logique id´al d’une bascule RS. Les poine till´s repr´sentent les instants de changement de Q1 et Q2. e e

On remarque que si R.S = 1, Q1 = Q2 ce qui justifie le sch´ma logique de e la figure 9.1-c. En revanche, dans le cas o` R et S valent 1, les sorties Q1 et u Q2 ne sont pas compl´mentaires. e Le chronogramme de la figure 9.2 montre le comportement temporel logique de la bascule RS. Avec la bascule RS ` portes NOR, la remise ` 0 est prioritaire sur la mise a a a a ` 1 : en effet, Q = R.(Q + S). Donc, si R vaut 1, la sortie Q passe ` 0. Sinon, la sortie est conditionn´e ` la valeur de S : si S vaut 1, la sortie Q vaut 1 sinon e a 0. La bascule RS peut ˆtre aussi r´alis´e avec des portes NAND. Les entr´es e e e e de commande sont actives ` 0 (lorsque R=S=1, la nouvelle valeur est ´gale ` a e a l’ancienne, si R vaut 0 et S vaut 1, Q passe ` 0, si R vaut 1 et S vaut 0, Q a passe ` 1) et la mise ` 1 est prioritaire sur la mise ` 0. a a a La table d’´volution de la bascule et sa d´finition ´quationnelle sont alors : e e e S 1 1 0 0 R 1 0 1 0 Q Q 0 1 1 Q Q 1 0 1 Q Q = R.Q.S = R.Q + S = S.Q.R = S.Q + R

1. Points de m´morisation de bits : bascules et registres e

195

1.1.2

Verrou

Un verrou (Cf. Figure 9.4) poss`de une entr´e de donn´e D (pour Data), e e e qui est la valeur ` m´moriser, et une entr´e de commande En (pour Enable). a e e Lorsque l’entr´e En est active (En=1), le verrou est dit transparent et sa sortie e Q est ´gale ` la valeur de l’entr´e D apr`s un petit d´lai appel´ temps de e a e e e e travers´e du verrou. Lorsque En est ` 0, le montage est ´quivalent ` un bistable. e a e a La sortie Q est fig´e et sa valeur est celle de l’entr´e D au moment du front e e descendant de En. La d´finition ´quationnelle du verrou D est : Q = En.D + e e En. Q. Le chronogramme de la figure 9.3 illustre ce comportement. Le verrou peut ˆtre r´alis´ de plusieurs fa¸ons, par exemple ` partir d’un bise e e c a table en intercalant un multiplexeur entre les deux inverseurs (Cf. Figure 9.4a a). L’´quation d´duite de la figure est : Q = En.D + En.Q. On retrouve l` e e l’´quation du verrou en notant que Q=Q. e Un autre montage peut ˆtre envisag´ en rebouclant directement la sortie e e du multiplexeur sur son entr´e. En effet, la r´alisation d’un multiplexeur dee e mande l’utilisation de portes, induisant ainsi un d´lai de commutation lorse qu’on effectue le rebouclage de la sortie sur l’entr´e. Il est donc possible e de ne pas intercaler d’inverseurs (en nombre pair) entre la sortie du multiplexeur et l’entr´e. Dans la figure 9.4-d, on montre une r´alisation de vere e rou ` partir d’un multiplexeur, lui-mˆme r´alis´ ` partir de portes NAND. a e e e a Remarquons que nous retrouvons cette r´alisation ` partir de l’´quation : e a e Q’ = En.D + En.Q = En.D.En.Q. Nous proposons une derni`re r´alisation d’un verrou ` partir d’une bascule e e a RS. Nous l’obtenons en transformant l’´quation pr´c´dente : e e e 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 ´quation de celle de la bascule RS ` portes NOR : e a Q = R.(Q + S), avec R = En.D et S = En.D, on obtient la r´alisation e donn´e dans la figure 9.4-b. Notons que, par construction, ce montage interdit e R = S = 1.

1.2

Points de m´morisation pour les circuits e s´quentiels : bascule maˆ e ıtre-esclave, bascule sensible au front

Nous avons dit pr´c´demment que nous souhaitions r´aliser des fonctions de e e e m´morisation permettant des affectations de la forme x ←− f(x, e) en nous lie mitant aux syst`mes synchrones o` la progression des valeurs de x est cadenc´e e u e par un signal (g´n´ralement p´riodique) appel´ horloge. e e e e

196

El´ments de m´morisation e e

En D Q temps

Fig. 9.3 – Chronogramme du comportement logique d’un verrou

D En 10 D (a) En D D En Q Q En (b)

R S

Q Q

Q

(c)

(d)

Fig. 9.4 – Trois r´alisations d’un verrou de type D et son symbole logique. a) r´alisation e e d’un verrou ` partir d’un bistable et d’un multiplexeur, b) r´alisation d’un a e verrou ` partir d’une bascule RS, c) symbole logique d’un verrou, d) r´alisation a e d’un verrou ` partir d’un multiplexeur seul (en gris est repr´sent´ l’int´rieur a e e e du multiplexeur).

1. Points de m´morisation de bits : bascules et registres e

197

Un verrou ne convient pas pour ce genre de r´alisation car il ne permet pas e de commander les instants o` la m´morisation a lieu. Dans ce paragraphe, nous u e pr´cisons pourquoi le verrou ne convient pas et nous montrons des solutions e pour r´soudre le probl`me. e e 1.2.1 Probl`me de rebouclage du verrou e

e e Etudions le circuit dont l’´quation est x=x.e, r´alis´ avec un verrou, dont e l’entr´e d’activation est connect´e au signal p´riodique En (par exemple l’hore e e loge) et l’entr´e D est reli´e ` la sortie d’une porte NAND ` deux entr´es. e e a a e Cette porte NAND a pour entr´e e et la sortie Q du verrou. Nous avons les e ´quations suivantes : e Q’ = En.D + En.Q D = e.Q

Pendant que En est ` 1, si l’entr´e e vaut 1, on a Q’=D et D=Q. Si En a e reste ` 1 pendant un temps sup´rieur au temps de travers´e de la porte NAND, a e e la sortie Q et l’entr´e D peuvent passer successivement de 1 ` 0 un nombre e a ind´termin´ de fois et donc fournir un r´sultat incoh´rent. e e e e Illustrons ce comportement incoh´rent dans un circuit r´el effectuant un e e calcul sur des nombres cod´s sur n bits. Supposons que l’on veuille r´aliser e e x’ ←− x + e avec x et e entiers (Cf. Figure 9.5-a). Nous ´tudierons de fa¸on e c syst´matique ces fonctions au chapitre 10. On veut que l’horloge H, connect´e ` e e a l’entr´e En des verrous, cadence les ´volutions de x aux instants i0 , i1 , i2 , i3 , i4 , e e . . .Notons x0 , x1 , x2 , x3 et x4 les valeurs successives de x. Les fils d’entr´e e, eux, e changent n’importe quand par rapport aux instants fix´s par H. D’apr`s les e e valeurs de e observ´es aux instants i1 , i2 , i3 et i4 (Cf. Figure 9.5-b), les valeurs e de x ` ces mˆmes instants sont respectivement : x1 = x0 + 1, x2 = x1 + 1, a e x3 = x2 + 3 et x4 = x3 + 7. Observons le bit de poids faible de x m´moris´ dans le verrou d’entr´e D0 e e e et de sortie Q0. Il change ` chaque addition puisqu’on ajoute des nombres a impairs ; donc D0 = Q0. Si l’horloge H vaut 0, le verrou est stable, il ne se passe rien. Quand H vaut 1, le verrou est transparent et Q0 suit les variations de D0. Dans le circuit combinatoire qui fabrique D0, D0 = Q0, et donc D0 passe alternativement de 1 ` 0 et de 0 ` 1. (Cf. Figure 9.5-c). a a On ne peut pas contrˆler combien de fois l’inverseur inverse pendant que o H est ` 1. Ceci peut donner une valeur quelconque lorsque H repasse ` 0. a a Le verrou ne peut donc pas ˆtre ` la base de r´alisation du comportement e a e x ←− f(x, e). R´duire la dur´e de l’´tat haut de l’horloge pour ´liminer le probl`me n’est e e e e e pas r´aliste. La solution consiste alors ` construire une bascule, c’est-`-dire un e a a dispositif pour lequel l’´tat transparent est limit´ ` un tr`s court instant au e ea e moment du front montant (ou descendant) de l’horloge.

198

El´ments de m´morisation e e

e ADD x Q0 D0 En x’

instants fix´s e i0 par H x e x0 1

i1 x1 1

i2 x2 3

i3 x3 7

i4 x4

(b) valeurs de x et e aux instants fix´s par H e e (impair) ADD

Qp Dp En H (a) R´alisation de l’affectation x’ ←− x + e e x est repr´sent´ sur p bool´ens e e e m´moris´s dans p verrous e e D0 Q0 transparent 1 (c) H=1 : verrou transparent

Fig. 9.5 – Probl`me pos´ par la nature transparente d’un verrou e e

1.2.2

Bascule de type maˆ ıtre-esclave

Une bascule de type maˆtre-esclave est construite en connectant en s´rie ı e deux verrous command´s par des signaux compl´mentaires. Les figures 9.6 e e et 9.7 donnent respectivement le montage et un exemple de chronogramme. Le premier verrou, appel´ maˆ e ıtre, m´morise l’entr´e D lorsque En1, c’este e a `-dire H, est ` 1 : la sortie Q1 suit l’entr´e D (D1=D). Pendant ce temps, la a e valeur m´moris´e par le second verrou reste stable, puisque En2=0. Lorsque e e H prend la valeur 0, le contenu du premier verrou reste fig´ et est transf´r´ e ee dans le second verrou qui devient actif (En2=1) et m´morise donc la valeur e pr´c´demment stock´e dans le premier verrou. Ainsi, la sortie Q reste stable e e e pendant que le signal H est ` 1 ou pendant que le signal H reste ` 0. La sortie a a Q change lorsque le signal H passe de 1 ` 0. Le temps pendant lequel H est ` a a 1 doit ˆtre sup´rieur au temps de travers´e du verrou. e e e 1.2.3 Bascule D ` front a

Une bascule D ` front a une entr´e de donn´e D, une entr´e d’activation H a e e e et une sortie Q. La bascule D ` front montant (respectivement descendant) est a caract´ris´e par le fait que sa sortie Q est stable entre deux fronts montants e e (respectivement descendants) du signal connect´ sur H, en g´n´ral une horloge. e e e La valeur de la sortie est celle de l’entr´e D au moment du dernier front mone tant (respectivement descendant) de H. Il est donc n´cessaire que l’entr´e D e e soit stable pendant le front. Une bascule ` front montant (respectivement desa

1. Points de m´morisation de bits : bascules et registres e

199

D

D1 Q1 En1

D2 Q2 En2

Q

H Fig. 9.6 – Bascule de type maˆ ıtre-esclave

H D Q1

Q

Fig. 9.7 – Chronogramme d´crivant le comportement de la bascule maˆ e ıtre-esclave. Avant le premier front montant de H, Q1 est ind´termin´. e e

R1 H S1 R2 D S2

Q1 Q1 Q2 Q2

R3 S3

Q3 Q3

Q D Q H

Q Q

Fig. 9.8 – Une r´alisation de la bascule de type D ` front descendant et son symbole e a logique

200

El´ments de m´morisation e e

cendant) peut ˆtre r´alis´e ` partir de 3 bascules RS NAND (respectivement e e e a NOR). Nous d´crivons le comportement de la bascule ` front descendant. La e a r´alisation avec 3 bascules RS ` portes NOR est donn´e dans la figure 9.8. e a e Il y a deux niveaux de bascules : – la bascule en sortie RS3, dont les entr´es sont pilot´es par les sorties des e e bascules RS1 et RS2, et – les deux bascules RS1 et RS2, dont les entr´es sont pilot´es par H et D. e e Les ´quations de la bascule ` front sont : e a S2 Q1 R3 S3 R1 Q3 = = = = = = D S1.(Q1 + R1) Q1 Q2 Q2 S3(Q3 + R3) (1) (3) (5) (7) (9) (11) S1 R2 Q2 Q2 Q3 = = = = = H H + Q1 R2(Q2 + S2) S2(Q2 + R2) R3(Q3 + S3) (2) (4) (6) (8) (10)

Nous allons montrer que la sortie ne change pas entre deux fronts descendants de H. Nous faisons l’hypoth`se que D reste stable pendant que H passe de 1 ` 0. e a Consid´rons l’´tat initial H=1, qui pr´c`de le front descendant de H. En e e e e appliquant les ´quations, nous obtenons les r´sultats partiels suivants : S1 = e e 1, Q1 = 0, R2 = 1, R3 =0 , Q2 = 0, S3 =0 . Donc, la bascule RS3 ne change pas d’´tat et la sortie Q3 est stable. e Supposons qu’` l’´tat initial, on ait en plus D=0. Il en r´sulte que S2=0, a e e Q2=1, R1=1. Lors du passage de H ` 0, nous obtenons S1=0 d’apr`s (2). a e u Puisque R1=1 d’apr`s (3), nous obtenons Q1=1. D’o` R3=1 . Par ailleurs, e le fait que R2=1 entraˆ Q2=0 d’apr`s (4), et donc S3=0 . La sortie de la ıne e bascule Q3 est 0. Ensuite, tant que H reste ` 0, Q1 = 1 et R2=1. Il s’ensuit a a a e que R3=1 et S3=0 . La sortie reste ` 0. Lorsque H repasse ` 1, Q1=0 d’apr`s (2) et (3), et R2=1 d’apr`s (4). Donc R3 passe ` 0 et S3 reste ` 0 : la sortie e a a reste inchang´e. e Si ` l’´tat initial D=1, alors S2=1, Q2=0, R1=0. Nous obtenons Q1 = 0. a e Comme R2=0 et S2=1, Q2=1. La bascule RS3 est forc´e ` 1. Par un raisone a nement analogue au cas o` D=0 ` l’´tat initial, la sortie Q3 reste stable. u a e Nous avons montr´ que, si l’entr´e D reste stable pendant que H passe de e e 1 ` 0, la sortie Q3 reste stable jusqu’au front descendant suivant. a Le chronogramme de la figure 9.9 montre l’´volution de la sortie Q de la e bascule ` front descendant en fonction de l’entr´e D. a e Du point de vue de la r´alisation, en technologie CMOS, la bascule ` front e a utilise autant de transistors qu’une bascule maˆ ıtre-esclave c’est-`-dire deux fois a plus qu’un verrou.

1. Points de m´morisation de bits : bascules et registres e

201

H D Q

Fig. 9.9 – Chronogramme d´crivant le comportement de la bascule ` front descendant e a

1.2.4

Un exemple de circuit utilisant des bascules ` front : a le d´tecteur de passage e

Le d´tecteur de passage, n´cessaire lorque l’on veut rep´rer le passage d’un e e e signal de 1 ` 0, est un montage s´quentiel qui ´chappe aux techniques de a e e r´alisation syst´matique que nous ´tudions au chapitre 10. e e e La figure 9.10 d´crit un dispositif permettant la d´tection d’un passage. e e La sortie Q1 prend la valeur de l’entr´e e aux fronts descendants de H et e la sortie Q2 recopie Q1 aux fronts montants de H. Q1 est stable entre deux fronts descendants. La sortie Q2 prend ainsi la valeur de la sortie Q1 avec une demi-p´riode de retard. e Supposons que les deux bascules soient initialement ` 0. Si l’entr´e e passe a e a ` 1, Q1 et S passent ` 1. Apr`s une demi-p´riode, Q2 passe ` son tour ` 1 et a e e a a S passe ` 0. On obtient une impulsion de S d’une demi-p´riode apr`s chaque a e e transition de 0 ` 1 de l’entr´e. a e

1.3

Autres commandes associ´es ` une bascule e a

Pour certains circuits complexes, il est indispensable d’introduire une nouvelle entr´e dite de commande de chargement sur les bascules. L’ensemble des e bascules a l’entr´e d’horloge connect´e ` l’entr´e d’horloge du circuit et des e e a e groupes de bascules peuvent avoir l’entr´e de chargement en commun. e En interne, le signal d’horloge est l’entr´e d’horloge de la bascule (H) et e le signal de chargement (Ch) commande un multiplexeur (Cf. Figure 9.11). Notons que dans certaines documentations l’entr´e de chargement est appel´e e e enable 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 ` 1 et a a ` 0. Dans le chapitre 10, on fera figurer sur les bascules les entr´es de commande e et d’initialisation. Selon la structure interne de la bascule, ces entr´es sont e consid´r´es soit ` un front (initialisation synchrone), soit d`s qu’elles sont ee a e actives (initialisation asynchrone).

202

El´ments de m´morisation e e

S e Q1 Q2

H H e Q1 Q2 S

Fig. 9.10 – D´tecteur de passage de 0 ` 1 e a

D Ch

0 1

D H

Q

Q

D Ch H

Q

H Fig. 9.11 – Une r´alisation d’une bascule avec commande de chargement et son symbole e logique

2. La m´moire : organisation matricielle des points de m´morisation e e

203

1.4

Notion de registre

Un verrou ` n bits permet de stocker des informations cod´es sur plus d’un a e bit. On l’obtient par simple juxtaposition de verrous ´l´mentaires command´s ee e par le mˆme signal de chargement. e Sur le mˆme principe, en utilisant des bascules D, on obtient un registre ` e a n bits. La nappe des n bool´ens peut ˆtre interpr´t´e comme un vecteur de bits e e ee mais aussi comme un nombre, un caract`re, etc. (Cf. Chapitre 3). e
Dans les chapitres 11 et 14, nous verrons l’utilisation de tels registres dans la r´alisation des parties op´ratives. Dans la suite et en particulier dans ces e e chapitres, nous consid´rons syst´matiquement des registres fabriqu´s ` partir e e e a de bascules ` front et le plus souvent avec une commande de chargement. a

2.

La m´moire : organisation matricielle des e points de m´morisation e

Tout ordinateur est dot´ de m´moires plus ou moins grandes ` acc`s plus e e a e ou moins rapide. Ce paragraphe pr´sente la m´moire du point de vue externe, e e celui de l’utilisateur. Nous expliquons ce que sont un mot m´moire et un acc`s e e m´moire, et nous donnons une id´e des diff´rents types de m´moire. e e e e

2.1

Notion de m´moire dans un ordinateur e

Une m´moire est l’organisation d’un ensemble de points de m´morisation e e ´l´mentaires en matrice ` p lignes et n colonnes. On peut ainsi voir la m´moire ee a e comme l’assemblage de n × p bits. Mais on l’utilise comme un tableau de p ´l´ments de taille n auxquels on acc`de par indice. Une ligne est appel´e mot ee e e de la m´moire et on parle d’une m´moire de p mots de n bits. e e A chaque mot, c’est-`-dire ` l’ensemble des n points de m´morisation a a e ´l´mentaire qui le composent, est associ´ un fil dit de s´lection du mot. La ee e e s´lection d’un mot consiste ainsi ` mettre ` 1 le fil de s´lection associ´. e a a e e L’interface de la m´moire est compos´e de p fils de s´lection S0 , ..., Sp−1 . e e e Lors d’un acc`s un seul des S0 , ..., Sp−1 doit valoir 1. De plus, un fil permet de e pr´ciser si l’acc`s souhait´ est une lecture ou une ´criture. Le signal sp´cifiant e e e e e a le sens de l’acc`s est not´ l/e (r/w en version anglaise) ; s’il est ` 1 il s’agit e e d’une lecture (read) et s’il est ` 0 c’est une ´criture (write). Une telle notation a e a d´j` ´t´ vue au chapitre 8 pour le signal Add/Sub. eaee Habituellement, le mot auquel le processeur acc`de est d´sign´ par un e e e m num´ro (compris entre 0 et p − 1) appel´ adresse. Si p = 2 , l’adresse est e e cod´e sur m bits (Am−1 , ..., A0 ) et un d´codeur associ´ ` la m´moire r´alise e e e a e e la fonction de calcul de l’unique fil de s´lection valant 1 ; ainsi, si les m bits e d’adresse Am−1 , ..., A0 codent l’entier i (0 ≤ i ≤ 2m − 1), le fil de s´lection de e num´ro i vaut 1 et tous les autres valent 0. e

204

El´ments de m´morisation e e

Adresses A0 D´codeur e

S0

bit n-1 mot 0 mot 1

bit 0 Cellule M´moire e SelMem 0 0 1 1 l/e 0 1 0 1 Op´ration e pas d’acc`s e pas d’acc`s e ´criture e lecture

Am-1 Sp−1 mot 2m − 1 n Donn´es e SelMem l/e FinAcces

Fig. 9.12 – M´moire de 2m mots de n bits et signification des signaux SelMem et l/e. e

De plus, un acc`s ` la m´moire est mat´rialis´ par l’activation d’un signal e a e e e de s´lection m´moire que nous notons dans la suite SelMem. e e La figure 9.12 repr´sente une m´moire de 2m mots de n bits ainsi que e e l’op´ration r´alis´e selon la valeur des signaux SelMem et l/e. e e e
Remarque : Dans certains processeurs, les signaux de commande de la m´moire sont d´finis de fa¸on diff´rente avec, par exemple, deux signaux lec e e c e et ecr. L’acc`s ` la m´moire en lecture est r´alis´ par la commande : lec ET e a e e e ecr et l’acc`s en ´criture par la commande : lec ET ecr ; lec ET ecr signifie e e qu’il n’y a pas d’acc`s ` la m´moire, et lec ET ecr n’a aucun sens (et doit ˆtre e a e e ´vit´). e e

La valeur ` stocker dans la m´moire (cas d’une ´criture) ou ` extraire de a e e a celle-ci (cas d’une lecture) est appel´e la donn´e (de taille n). e e Le processeur dialogue avec la m´moire via les signaux de contrˆle SelMem, e o e e FinAcces et l/e, et via le bus m´moire comprenant les adresses et les donn´es. On parle de bus d’adresses et de bus de donn´es. e

2.2

D´roulement d’un acc`s m´moire par un processeur e e e

Nous consid´rons ici un ordinateur compos´ d’un processeur et d’une e e m´moire vive, avec les hypoth`ses simplificatrices suivantes : e e 1. Les adresses sont sur m bits et les donn´es sur n bits. Les adresses sont e des adresses de mots de n bits et les acc`s m´moire sont limit´s aux seuls e e e mots de n bits. Le cas g´n´ral permettant l’acc`s ` des sous-ensembles du e e e a mot m´moire est ´tudi´ dans le chapitre 15. L’acc`s ` des sur-ensembles e e e e a du mot m´moire, en mode rafale, est ´tudi´ dans le paragraphe 4.3 du e e e pr´sent chapitre. e

2. La m´moire : organisation matricielle des points de m´morisation e e

205

2. La taille de m´moire physique et la capacit´ d’adressage du processeur e e sont identiques. En g´n´ral, la capacit´ d’adressage du processeur est e e e sup´rieure ` la taille de la m´moire physique ; une mˆme adresse risque e a e e alors de correspondre ` plusieurs mots m´moire. Nous ´tudions cette a e e situation au chapitre 15. Le raccordement des signaux entre processeur et m´moire est tr`s simple : le e e bus de donn´es est connect´ aux entr´es et sorties des donn´es de la m´moire, e e e e e le bus d’adresse aux entr´es de s´lection de mot. Le bus de donn´es est bidie e e rectionnel alors que le bus d’adresses est monodirectionnel. L’entr´e l/e de la e m´moire est reli´e au signal de mˆme nom du processeur, et l’entr´e d’actie e e e vation de la m´moire SelMem au signal de demande d’acc`s ` la m´moire du e e a e processeur AccesMem. La sortie FinAcces est reli´e au signal du mˆme nom du e e processeur. 1. Lors d’une ´criture, le processeur 1) affiche sur le bus d’adresses le num´ro e e de l’emplacement m´moire auquel il acc`de ; 2) affiche l’information ` e e a a ´crire sur le bus de donn´es ; 3) met ` 0 le signal l/e ; 4) met ` 1 le signal e e a AccesMem. A l’int´rieur de la m´moire, le d´codeur d’adresses s´lectionne l’emplacee e e e ment correspondant, active le dispositif d’´criture et d´sactive la sortie e e du circuit de lecture. Pour chaque bit du mot dont la nouvelle valeur diff`re de l’ancienne, le bistable m´moire change d’´tat. Le d´lai maxie e e e mal de commutation d´finit le temps d’acc`s en ´criture de la m´moire. e e e e Le signal FinAcces est alors ´mis. A la fin de l’´criture, le processeur met e e a ` 0 le signal AccesMem. 2. Dans le cas d’une lecture, le processeur 1) affiche sur le bus d’adresses le num´ro de l’emplacement m´moire auquel il acc`de ; 2) met ` 1 le signal e e e a l/e ; 3) met ` 1 le signal AccesMem. a A l’int´rieur de la m´moire, le d´codeur d’adresse s´lectionne l’emplacee e e e ment correspondant, d´sactive le dispositif d’´criture et active la sortie du e e circuit de lecture. Apr`s un certain d´lai, dont la borne sup´rieure est le e e e temps d’acc`s en lecture, la valeur lue se stabilise sur le bus de donn´es. e e Le signal FinAcces est alors ´mis. A la fin de la lecture, le processeur e m´morise la valeur stabilis´e sur le bus de donn´es dans un registre (ou e e e un verrou) interne et met ` 0 le signal AccesMem. a Entre deux cycles d’acc`s m´moire, le signal AccesMem vaut 0 et les signaux e e d’adresses, de donn´es et l/e ne sont pas significatifs. e Si un acc`s ` la m´moire dure un seul cycle d’horloge du processeur et si e a e le temps de cycle de la m´moire est inf´rieur ou ´gal ` ce dernier, on peut e e e a simplifier le protocole de communication : la m´moire n’´met pas l’acquite e tement FinAcces pour signifier explicitement la fin d’un acc`s. Le processeur e demande l’acc`s, signal ´mis sur sa propre horloge, et la lecture ou l’´criture e e e sont suppos´es ˆtre effectives lors du prochain top d’horloge du processeur. e e

206

El´ments de m´morisation e e

Adresse

A1

A2

AccesMem

l/e T1 T2

Fig. 9.13 – Chronogrammes d´crivant l’acc`s ` la m´moire. L’intervalle T1 correspond e e a e ` la lecture du mot m´moire d’adresse A1 ; l’intervalle T2 correspond ` a e a l’´criture du mot m´moire d’adresse A2. e e

La figure 9.13 montre une ´volution possible des diff´rents signaux, donn´es e e e et adresses intervenant lors d’un acc`s ` la m´moire par le processeur. e a e

2.3

Typologie de m´moires e

On peut donner une premi`re classification de la m´moire en consid´rant e e e l’ordre dans lequel le processeur acc`de aux donn´es. La plupart des m´moires e e e centrales offrent un acc`s al´atoire : les donn´es peuvent ˆtre lues ou ´crites e e e e e a ` n’importe quel emplacement (en anglais RAM ou Random Access Memory). Le temps d’acc`s ` une valeur est pratiquement ind´pendant de l’emplacement e a e dans lequel elle est stock´e. e Les bandes, cartouches et cassettes magn´tiques sont au contraire d’excele lents exemples de dispositifs ` acc`s s´quentiel (Cf. Chapitre 19). Pour acc´der a e e e a ` une donn´e situ´e en fin de bande, il faut d’abord parcourir la totalit´ de e e e la bande et des donn´es qui pr´c`dent. Le temps d’acc`s est proportionnel ` e e e e a l’´loignement de l’information sur la bande. e Les m´moires peuvent ˆtre class´es selon leurs fonctionnalit´s. Une dise e e e tinction est faite entre ROM (Read Only Memory) et RWM (Read Write Memory). Les premi`res ´tant accessibles en lecture seule, les secondes en lece e ture et ´criture. Dans les RWM, les donn´es sont m´moris´es dans des points e e e e m´moires statiques (bascules) ou dynamiques (capacit´s). Dans la mesure o` e e u un point m´moire dynamique peut ˆtre r´alis´ avec moins de transistors, pour e e e e une mˆme surface, une m´moire dynamique aura une plus grande capacit´ de e e e stockage. En revanche, elle devra ˆtre rafraˆ e ıchie r´guli`rement. e e La structure des ROM est g´n´ralement bas´e sur un autre principe : l’ine e e formation est cod´e dans la structure du circuit en ajoutant ou retranchant e des transistors (Cf. Chapitre 7). La structure ´tant fig´e, la m´moire ne peut e e e ˆtre modifi´e. De plus, la d´connexion ´lectrique du dispositif ne modifie pas e e e e

3. R´alisation des m´moires statiques e e

207

les donn´es m´moris´es. e e e Pour des raisons historiques, le sigle RAM est utilis´ ` la place de RWM ea (Read Write Memory).

3.
3.1

R´alisation des m´moires statiques e e
D´composition de la m´moire globale e e d’un ordinateur en boˆ ıtiers et barettes

Nous avons pr´sent´ la m´moire d’un ordinateur comme un tableau de 2m e e e mots de n bits (Cf. Paragraphe 2.). En pratique, on cherche ` minimiser le a nombre de broches. On va construire la m´moire ` l’aide de plusieurs boˆ e a ıtiers pour obtenir la capacit´ voulue. On peut envisager deux strat´gies : e e – consid´rer un boˆ e ıtier de capacit´ une colonne de 2m mots de 1 bit et juxe taposer les boˆ ıtiers. Cela donne, par boˆ ıtier, un d´codeur ayant m entr´es e e d’adresse, une entr´e SelMem, une entr´e l/e et une sortie repr´sentant le e e e bit s´lectionn´. Le sch´ma est analogue ` la figure 9.12, en consid´rant une e e e a e m m´moire de 2 mots de 1 bit. En juxtaposant n boˆ e ıtiers, partageant les mˆmes entr´es, on obtient une barette de capacit´ 2m × n. e e e – int´grer les mots les plus longs possibles jusqu’` la taille n. Dans ce cas, nous e a consid´rons p boˆ e ıtiers de 2ki mots de n bits, tels que Σp 2ki = 2m . Nous i=1 obtenons ainsi une d´composition de la m´moire en tranches horizontales. e e La premi`re solution est plus souple et peut s’adapter ` des processeurs e a de tailles diff´rentes (16, 32 ou 64 bits). De plus, le nombre de broches est e optimis´ : il y a m broches d’adresses et n broches de donn´es. Si on ajoute e e m une broche de donn´e, on passe d’une capacit´ de 2 × n ` une capacit´ de e e a e 2m × (n + 1). Si on ajoute une broche d’adresse, on passe d’une capacit´ de e m m+1 2 ×n ` 2 a × n. Toutes les m´moires de grande capacit´ sont organis´es e e e suivant ce sch´ma. Dans la suite, on assimilera une barette de n boˆ e ıtiers de 1 bit ` un boˆ a ıtier de n bits.

3.2
3.2.1

R´alisation physique e
Principe d’une r´alisation avec verrous e

Nous donnons une r´alisation interne d’un boˆ e ıtier m´moire de 2m mots de e 1 bit ` l’aide de verrous et de portes 3 ´tats (Cf. Figure 9.14-a). Ce boˆ a e ıtier a m + 3 entr´es qui sont : l’adresse du mot (Am−1 , ...A0 ), le bit de donn´e Don, e e le signal SelMem, et le signal l/e. Le boˆ ıtier comporte un d´codeur qui sert ` e a s´lectionner le bon verrou : si Am−1 , ...A0 =i, moti =1. A l’aide du signal l/e, e on s´lectionne le sens de transfert de la donn´e : si ce signal est ` 1, alors la e e a valeur sur le fil de donn´e Don est recopi´e dans la bascule s´lectionn´e. Si ce e e e e

208

El´ments de m´morisation e e

signal est a 0, la porte 3 ´tats en sortie de bascule s´lectionn´e est activ´e et ` e e e e le contenu de la bascule est recopi´ sur le fil de donn´e Don. e e La r´alisation de chaque bit met en jeu 2 sorties pour le d´codeur, 1 verrou, e e 2 portes et, 1 inverseur et une porte 3 ´tats. e 3.2.2 Cellule de m´moire statique e

La figure 9.14-b montre une autre solution : la cellule m´moire ` bistable e a et for¸age par court-circuit. c Le processeur s´lectionne la cellule de num´ro i en activant le mot de ligne e e (moti ), qui connecte via les deux transistors C1 et B1, les inverseurs aux coe lonnes v et v d´finissant la valeur d’un bit. En lecture (SelMem vaut 1 et l/e vaut 1), la valeur stock´e dans la cellule e (cˆt´ gauche du bistable) et son compl´ment (cˆt´ droit du bistable) appaoe e oe raissent respectivement sur les colonnes v et v avec une d´gradation des sie gnaux logiques. Le comparateur analogique d´tecte la colonne sur laquelle la e tension est la plus ´lev´e et donne la valeur stock´e dans la cellule. Cette valeur e e e est envoy´e en sortie (Don) de la m´moire via un amplificateur 3 ´tats activ´ e e e e par le produit des signaux l/e et SelMem. En ´criture (SelMem vaut 1 et l/e vaut 0) on impose un z´ro sur un des e e cˆt´s du bistable en reliant une des colonnes v et v ` la masse via un des deux oe a transistors B2 ou C2. Le signal de commande du transistor B2 ou C2 est le produit du signal de s´lection du boˆ e ıtier (SelMem), du signal d’´criture (l/e) e et du signal d’entr´e (Don pour B2 (v) et Don pour C2 (v)). e – La colonne v est reli´e ` la masse si C2 est passant, ce qui est le cas lorsque e a Don vaut 0. Pendant ce temps, B2 est bloqu´. Si de plus moti est ` 1, le e a transistor C1 est passant et le cˆt´ gauche du bistable est forc´ ` la masse. oe ea Ceci installe un 1 du cˆt´ droit. oe – La colonne v est reli´e ` la masse si B2 est passant, ce qui est le cas lorsque e a Don vaut 1. Si de plus moti est ` 1, le transistor B1 est passant et le cˆt´ a oe droit du bistable est forc´ ` la masse. Ceci installe un 1 du cˆt´ gauche. ea oe 3.2.3 Organisation de cellules de m´moire en matrice e

On peut qualifier une m´moire en fonction de son d´bit : c’est le nombre de e e mots auxquels on acc`de par seconde. Consid´rons une m´moire de 220 mots e e e (20 bits d’adresse) de 1 bit organis´e comme nous l’avons vu pr´c´demment. e e e On peut organiser cette m´moire, par exemple, comme une matrice (Cf. Fie gure 9.15) de 2048 (211 ) lignes de 512 (29 ) bits. La m´moire est ainsi constitu´e e e de lignes, une ligne ´tant s´lectionn´e grˆce aux 11 bits de poids forts de e e e a l’adresse, et un ´tage de d´codage des informations d’une colonne, la colonne e e ´tant s´lectionn´e grˆce aux 9 bits de poids faibles de l’adresse. Le d´bit est e e e a e alors am´lior´ puisque pendant le d´codage des colonnes, il est possible de e e e commencer le d´codage d’une nouvelle ligne. e

3. R´alisation des m´moires statiques e e

209

v (a) (b) moti moti A0 EnD Q motj +Am−1 motj EnD Q l/e SelMem C1 B1

v Cellule

S´lecteur e

l/e

Don C2 B2

Don SelMem

Fig. 9.14 – Deux r´alisations de points de m´moire. a) ` partir de verrous et de portes, e e a b) ` partir de bistables (le triangle en gris est un comparateur analogique). a

SelMem Poids forts A19 A9 l/e S´lecteurs e Poids faibles A8 A0

Donn´es e Fig. 9.15 – Matrice de Cellules construite ` partir de bistables a

210

El´ments de m´morisation e e

Nous verrons dans le paragraphe 4. qu’une telle organisation permet aussi d’optimiser l’acc`s ` des donn´es appartenant ` une mˆme colonne. e a e a e

4.

Optimisations et techniques particuli`res e

Il existe divers types de r´alisation des m´moires. Nous en pr´sentons e e e quelques-unes et ` la suite de l’observation du paragraphe 3.2.3, nous montrons a quelques approches permettant d’am´liorer encore le d´bit de la m´moire. e e e

4.1

Multiplexage lignes/colonnes

Dans le cas d’une organisation de la m´moire telle que nous l’avons vue ` e a la figure 9.15, on peut diminuer le nombre de broches de moiti´. En effet, il ne e sert ` rien d’activer une colonne avant que la ligne ne soit s´lectionn´e. a e e L’id´e est de r´utiliser les broches servant ` la s´lection des lignes pour e e a e r´aliser la s´lection des colonnes. Il convient alors que le nombre de fils soit le e e mˆme et on fabrique ainsi des matrices carr´es de cellules. e e Etant donn´ m/2 broches et une adresse cod´e sur m bits (m ´tant pair), e e e les m/2 bits de poids forts codent une ligne et les m/2 bits de poids faibles une colonne. Le circuit re¸oit les m/2 bits de poids forts, qui sont m´moris´s c e e et reli´s au d´codeur des lignes. Puis, pendant ce d´codage, le circuit re¸oit les e e e c m/2 bits de poids faibles qui sont reli´s au d´codeur des colonnes. e e Ce circuit est r´alis´ ` partir d’une matrice de cellules, en utilisant deux e ea signaux suppl´mentaires RAS (Row Address Strobe) et CAS (Column Address e Strobe). La ligne (respectivement la colonne) est s´lectionn´e au front dese e e a cendant de RAS, i.e. RAS (respectivement CAS). Le temps d’acc`s ` une cellule m´moire est la somme du temps de s´lection d’une ligne et du temps e e de s´lection d’une colonne. e

4.2

M´moires dynamiques e

Les m´moires dynamiques sont organis´es en matrices tout comme les e e m´moires statiques. Dans une cellule, l’information y est cod´e sous forme de e e charge ´lectrique stock´e dans la capacit´ grille-source d’un transistor MOS. e e e La capacit´ de la cellule de m´moire dynamique se d´charge lentement et e e e l’information stock´e disparaˆ avec le temps. Pour ´viter cela, chaque ligne e ıt e est p´riodiquement lue et r´´crite en totalit´. Ce processus, connu sous le e ee e nom de rafraˆchissement, est effectu´ sur chaque ligne toutes les 2 ` 4 ms. ı e a Dans une m´moire de 16Mbits (4096 lignes) de 50 ns de temps de cycle, le e rafraˆ ıchissement repr´sente de l’ordre d’un acc`s ligne par microseconde, ce qui e e consomme environ 5% du d´bit th´orique de la m´moire. La cellule dynamique e e e ne n´cessite que deux transistors et un seul signal de colonne. Cela autorise la e construction de m´moires de plus grande capacit´. e e

4. Optimisations et techniques particuli`res e

211

Par ailleurs, les m´moires dynamiques sont dot´es d’un registre interne e e de stockage de num´ro de ligne (adresses de poids fort), ce qui permet e d’´conomiser la moiti´ des broches d’adresse sur le boˆ e e ıtier au prix d’un dispositif externe de multiplexage (commun ` tous les boˆ a ıtiers). L’acc`s m´moire se d´roule en deux temps : le num´ro de ligne est ene e e e voy´ le premier et stock´ dans un verrou interne. Le temps de d´codage et e e e l’´tablissement de la connexion entre la ligne s´lectionn´e et les signaux de coe e e lonne est mis ` profit pour transmettre la deuxi`me partie de l’adresse (num´ro a e e de colonne) au boˆ ıtier. Notons que dans la salve d’acc`s ` diff´rentes colonnes e a e d’une mˆme ligne, l’´tape de s´lection et de connexion de la ligne aux colonnes e e e peut ˆtre effectu´e en une seule fois en d´but de salve. Cette optimisation est e e e applicable a toute suite d’acc`s m´moire ` des adresses ne diff´rant que par les ` e e a e poids faibles, qui correspondent au num´ro de colonne (Cf. Paragraphe 4.3). e A partir de ce principe, certaines m´moires ont ´t´ con¸ues sp´cialement pour e ee c e la r´alisation de cartes vid´o (Cf. Paragraphe 4.5). e e

4.3

Mode rafale

Le multiplexage ligne/colonne permet d’´conomiser non seulement des e broches mais aussi du temps : une fois l’acc`s ` une ligne r´alis´, l’acc`s ` e a e e e a des colonnes dans cette ligne est rapide. Si l’intervalle d’adresses auquelles on acc`de appartient ` une mˆme ligne, e a e on acc`de a la premi`re adresse par l’interm´diaire des poids forts, puis on e ` e e acc`de ` chaque colonne. Si on r´alise N acc`s cons´cutifs ` des ´l´ments ape a e e e a ee partenant ` la mˆme ligne, le temps d’acc`s total est ´gal ` : Temps d’acc`s a e e e a e ligne + Temps d’acc`s colonne * N. e On parle d’acc`s en mode rafale. Il existe de nombreuses mani`res de r´aliser e e e le mode rafale ; nous n’en donnons ici que quelques principes. Par exemple, pour le mode dit quartet, la m´moire est dot´e d’un circuit interne qui compte e e e e modulo quatre ; ` chaque impulsion de CAS, le circuit incr´mente le num´ro a de colonne modulo 4 : on acc`de ` quatre informations cons´cutives. Le mode e a e dit page permet de s´lectionner n’importe quelle colonne dans une ligne : une e page correspond ` une ligne. a Nous ´tudions l’acc`s m´moire un peu plus pr´cis´ment en consid´rant deux e e e e e e types d’interface entre la m´moire et le processeur : asynchrone et synchrone. e Dans les deux cas, nous nous int´ressons ` la lecture de 4 donn´es de la mˆme e a e e ligne. Nous ne repr´sentons pas le signal de lecture/´criture, il est ´chantillonn´ e e e e en mˆme temps que l’adresse de colonne par CAS. e Lorsque l’interface est asynchrone RAS joue le rˆle de SelMem et CAS pero met la s´lection des colonnes auxquelles on acc`de dans la rafale. Consid´rons e e e les chronogrammes de la figure 9.16. Le signal RAS reste actif durant la s´lection des colonnes d’une ligne. e Soit R-C une adresse compos´e d’un num´ro de ligne R et d’un num´ro de e e e colonne C. Soient a, b, c et d les mots d’adresses R-C1, R-C2, R-C3 et R-C4.

212

El´ments de m´morisation e e

adresse mode page adresse mode quartet RAS CAS Donn´e e

r r

c1 c1

c2

c3

c4

a

b

c

d

Fig. 9.16 – Chronogrammes d´crivant l’acc`s m´moire en mode rafale, pour une interface e e e asynchrone

adresse mode quartet RAS CAS SelMem Donn´e e Horloge

r

c1

a

b

c

d

Fig. 9.17 – Chronogrammes d´crivant l’acc`s m´moire en mode rafale, pour une interface e e e synchrone

4. Optimisations et techniques particuli`res e

213

V

W mot b

W

V

mot a

Fig. 9.18 – Sch´ma interne d’une cellule de m´moire ` 2 acc`s simultan´s e e a e e

En mode page, le processeur envoie le num´ro de ligne (R), puis celui de la e colonne C1, celui de la colonne C2, celui de la colonne C3 et enfin celui de la colonne C4 (C1, C2, C3 et C4 pouvant ˆtre quelconques). e En mode quartet, le processeur envoie seulement le num´ro de la premi`re e e colonne C1 apr`s celui de la ligne R. On acc`de ` des emplacements cons´cutifs e e a e et c’est le circuit m´moire qui incr´mente en interne le num´ro de colonne : e e e (C4 = C3 + 1, C3 = C2 + 1, C2 = C1 + 1). Avec une interface synchrone (Cf. Figure 9.17), le processeur et la m´moire e sont synchronis´s sur la mˆme horloge. L’acc`s m´moire se d´roule un peu e e e e e comme dans le mode quartet d´crit pr´c´demment ` quelques diff´rences pr`s : e e e a e e il y a un signal SelMem en plus de RAS ; tout est cadenc´ par une horloge de e bus H, d´riv´e de celle du processeur ; la longueur des rafales est d´finie en e e e initialisant un registre de commande avant utilisation. Lors de la commande d’initialisation de la m´moire, les nombres de cycles e d’horloge entre RAS et CAS et entre CAS et la stabilisation des donn´es sont e d´finis en fonction du temps d’acc`s de la m´moire (qui est fixe), et de la e e e p´riode d’horloge qui peut varier avec la fr´quence du bus. Par exemple, ` 33 e e a Mhz, la m´moire sera capable de fonctionner sans cycle d’attente entre RAS, e CAS et la stabilisation des donn´es. A 66 Mhz, on intercalera un cycle d’attente e pour avoir le mˆme temps d’acc`s. e e

4.4

M´moires ` plusieurs acc`s e a e

Le principe est d’acc´der simultan´ment ` deux (ou plus dans le cas d’acc`s e e a e multiple) emplacements m´moire. On a autant de d´codeurs, de signaux l/e, e e de s´lection de boˆ e ıtiers SelMem et de bus de donn´es, que d’acc`s. De plus, e e on rajoute un comparateur pour v´rifier qu’il n’y a pas d’acc`s simultan´s au e e e mˆme emplacement m´moire en ´criture. Le sch´ma interne d’une cellule d’une e e e e telle m´moire est donn´ figure 9.18. e e Les m´moires ` n acc`s permettent de r´aliser des bancs de n registres e a e e utilis´s par exemple dans la partie op´rative du processeur. e e

214

El´ments de m´morisation e e

4.5

La m´moire vid´o e e

Le processeur est connect´ ` de la m´moire et l’ensemble procese a e seur/m´moire est lui-mˆme connect´ ` des p´riph´riques permettant le diae e e a e e logue avec le monde ext´rieur. L’´cran et le clavier dont dispose tout utilisateur e e sont deux p´riph´riques particuliers. Nous d´taillons au chapitre 16 les aspects e e e connexion et synchronisation, et au chapitre 17 les probl`mes pos´s par la gese e tion de p´riph´riques de plus en plus ´labor´s. Nous nous int´ressons ici ` l’un e e e e e a d’entre eux, posant des probl`mes de gestion m´moire : l’´cran graphique. e e e L’image affich´e par un ´cran graphique est construite sous la forme d’une e e matrice ` deux dimensions indiquant les points (ou pixels) de l’´cran ` allumer. a e a Chaque ´l´ment de cette matrice, stock´ dans une m´moire appel´e m´moire ee e e e e d’´cran, d´finit l’intensit´ et la couleur du pixel correspondant de l’´cran. e e e e L’int´rieur du tube cathodique est recouvert d’une substance qui ´met de e e la lumi`re lorsqu’elle est frapp´e par un faisceau d’´lectrons qui balaie la e e e surface de l’´cran, ligne apr`s ligne. Le contenu de la m´moire d’´cran est e e e e donc transmis s´quentiellement au dispositif qui module l’intensit´ du faise e ceau. L’image g´n´r´e est par nature fugitive et doit ˆtre rafraˆ e ee e ıchie (r´affich´e) e e p´riodiquement, cinquante ` cent fois par seconde. e a La m´moire d’´cran est une partie de la m´moire principale ` laquelle on e e e a acc`de en ´criture par le processeur pour modifier l’image affich´e, et en lecture e e e par le dispositif de rafraˆ ıchissement de l’´cran. Dans certains cas, cette m´moire e e d’´cran n’est accessible qu’` un processeur sp´cialis´, le processeur graphique. e a e e En utilisant les techniques pr´sent´es dans les paragraphes pr´c´dents, le e e e e d´bit de la m´moire resterait insuffisant. Il faut organiser l’acc`s diff´remment. e e e e L’id´e consiste ` transf´rer un paquet de m´moire important vers le e a e e p´riph´rique et ` lui d´l´guer le travail consistant ` calculer les pixels ` affie e a ee a a cher ; essentiellement, il s’agit de r´aliser des d´calages sur les donn´es fournies e e e au p´riph´rique (le paquet de m´moire transf´r´). e e e ee On appelle m´moire vid´o une m´moire optimis´e au niveau temps d’acc`s e e e e e (matrice), et pourvue d’un registre interne sur lequel agit un circuit s´quentiel e permttant d’effectuer les d´calages n´cessaires ` l’affichage des pixels aux inse e a tants fix´s par les contraintes du balayage ´cran. e e

Chapitre 10 Circuits s´quentiels e
Un circuit s´quentiel poss`de, comme un circuit combinatoire (Cf. Chae e pitre 8), un ensemble d’entr´es et un ensemble de sorties. Un circuit s´quentiel e e est un circuit dont les valeurs de sortie ` l’instant pr´sent d´pendent de la a e e s´quence des valeurs d’entr´e qu’il y a re¸ues depuis l’instant initial. Il se dise e c tingue ainsi d’un circuit combinatoire dans lequel les valeurs de sortie ` l’insa tant pr´sent d´pendent seulement des valeurs d’entr´e pr´sentes ` cet instant e e e e a (apr`s le d´lai de stabilisation dˆ ` la travers´e des portes logiques). Le circuit e e ua e s´quentiel poss`de une m´moire lui permettant de stocker des informations sur e e e la succession des valeurs d’entr´e. Ces informations constituent l’´tat courant e e du circuit s´quentiel ` un instant donn´. e a e Un circuit s´quentiel comporte ainsi des ´l´ments de m´morisation e ee e (Cf. Chapitre 9) dot´s d’une fonction permettant de fixer l’´tat initial. La e e valeur ´crite dans ces ´l´ments de m´morisation est fonction de celle qui y e ee e ´tait ` l’instant pr´c´dent : l’´tat suivant est une fonction de l’´tat courant e a e e e e et des valeurs d’entr´e. Des circuits combinatoires permettent de calculer les e sorties du circuit et l’´volution de son ´tat. e e Ce type de circuit permet de r´aliser un comportement qui peut ˆtre d´crit e e e a ` l’aide d’un automate d’´tats fini (Cf. Chapitre 5) ou d’un algorithme. On e peut parler de machine algorithmique. Le nombre d’´tats, d’entr´es et de sorties du circuit ` concevoir sont tr`s e e a e variables suivant la complexit´ de l’application. Cela d´termine le choix de la e e m´thode de conception. On retrouve les deux familles de solution ´voqu´es au e e e chapitre 8. Dans le cas o` l’algorithme peut ˆtre d´crit de fa¸on simple par un automate u e e c d’´tats fini le point de d´part de la synth`se est le graphe explicite de l’automate e e e d’´tats fini. La m´thode de conception d´pend du type de l’automate, de la e e e biblioth`que de circuits combinatoires disponibles, et du type d’´l´ments de e ee m´morisation utilis´s ; nous nous limitons ici aux bascules de type D pr´sent´es e e e e au chapitre 9. On est proche ici de la synth`se logique. e Dans le cas plus g´n´ral o` la construction du graphe de l’automate correse e u pondant ` l’algorithme est impossible pour cause de trop grande complexit´, a e

216

Circuits s´quentiels e

la conception du circuit se fait selon des proc´d´s diff´rents (Cf. Chapitre 11). e e e On est proche ici de l’algorithmique cˆbl´e. Deux grands types d’architectures a e (organisations mat´rielles) des circuits s´quentiels sont alors employ´s. e e e Dans l’un, la partie qui permet de stocker les variables de l’algorithme et de r´aliser les calculs sur ces variables (partie op´rative) est s´par´e de la e e e e partie commandant l’enchaˆ ınement de ces op´rations (partie contrˆle). Ces e o deux parties sont des circuits s´quentiels. e Dans l’autre type d’architecture, les aspects de contrˆle et de calcul sont o m´lang´s. Ce sont les valeurs des variables (les donn´es) qui contrˆlent direce e e o tement l’enchaˆ ınement des op´rations sur celles-ci. On parle d’architecture ` e a flots de donn´es (Data flow en anglais). Des architectures ` flots de donn´es e a e sont illustr´es par des exemples dans ce chapitre. Le cas particulier des orgae nisation ` pipeline est introduit. a La m´thode de synth`se bas´e sur une partie contrˆle et une partie op´rative e e e o e est pr´sent´e en d´tail au chapitre 11. e e e Ces m´thodes de conception de circuits sont aujourd’hui automatis´es grˆce e e a a ` des outils de CAO de circuits. La r´alisation se fait ` partir des sp´cifications e a e des algorithmes dans diff´rents langages. Le plus courant, VHDL (devenu e un standard) permet de d´crire des sp´cifications de circuits s´quentiels ` e e e a diff´rents niveaux : graphes d’automates d’´tats fini et algorithmes ` base e e a d’instructions de types divers (it´ratif, conditionnel . . .). e Nous d´finissons dans le paragraphe 1. la notion de circuit s´quentiel en e e pr´cisant son architecture et en d´crivant son comportement temporel. e e Dans le paragraphe 2. nous ´tudions en d´tail les m´thodes de r´alisation e e e e de circuits s´quentiels ` partir du graphe explicite d’un automate d’´tats e a e fini (Cf. Chapitre 5). Nous d´taillons ici deux types de synth`se : cˆbl´e et e e a e microprogramm´e. Dans le paragraphe 3. nous d´crivons deux exemples e e de r´alisations par flots de donn´es de circuits s´quentiels ` partir d’un e e e a algorithme. Nous donnons aussi une id´e de la notion de pipeline. e

1.
1.1

Notion de circuit s´quentiel e
Caract´risation e

Un circuit s´quentiel m´morise des informations qui lui permettent de r´agir e e e a ` une s´quence d’entr´es. Les sorties ` un instant donn´ ne d´pendent plus e e a e e seulement des entr´es pr´sentes ` cet instant, mais aussi de la s´quence des e e a e entr´es qu’il y a re¸ues depuis un instant initial. Pour d´finir cet instant initial e c e le circuit comporte une entr´e particuli`re souvent appel´e init. e e e Le changement des entr´es peut ˆtre pris en compte soit ` n’importe quel e e a moment (celui o` l’entr´e change r´ellement), soit ` des instants d´termin´s u e e a e e et r´guliers d´pendant d’une entr´e particuli`re (horloge ou clock ). Dans le e e e e premier cas on parle de circuits s´quentiels asynchrones, dans le deuxi`me de e e

1. Notion de circuit s´quentiel e

217

circuits s´quentiels synchrones. La conception de circuits asynchrones, beaue coup plus d´licate, continue d’ˆtre aujourd’hui utilis´e pour des applications e e e ayant des contraintes temporelles ou de consommation critiques. Pour des raisons p´dagogiques, nous nous limitons dans ce livre ` la conception de circuits e a de type synchrone. Dans le cas synchrone, le circuit a besoin d’une entr´e d´finissant les inse e tants successifs de prise en compte des valeurs des entr´es de donn´es. C’est en e e g´n´ral un signal r´gulier de p´riode fixe. Le circuit est synchronis´ sur cette e e e e e horloge : son ´tat ´volue vers un nouvel ´tat sur un des fronts (montant ou e e e descendant) de l’horloge.
Remarque : Dans la suite nous appelons entr´es les entr´es de donn´es, e e e les autres entr´es sont d´sign´es par leur nom sp´cifique (init et clock ). e e e e

L’´tat courant de l’automate est m´moris´ ` l’aide de bascules sensibles au e e ea front (Cf. Chapitre 9) dont l’entr´e d’activation est l’horloge. L’´tat suivant e e d´pend de l’´tat courant et des entr´es pr´sentes ` l’instant courant. Les sorties e e e e a d´pendent soit de l’´tat courant (mod`le de Moore), soit de l’´tat courant et e e e e des entr´es pr´sentes ` l’instant courant (mod`le de Mealy). Les deux mod`les e e a e e sont pr´sent´s dans le chapitre 5. e e

1.2

Architecture g´n´rale e e

La figure 10.1 d´crit l’architecture g´n´rale du circuit r´alisant un automate e e e e dans le cas des deux mod`les de Moore et de Mealy. Cette architecture peut e ˆtre d´compos´e en 3 blocs aux fonctionnalit´s distinctes : e e e e – Un bloc de bascules permet de m´moriser l’´tat courant de l’automate. Il e e donne ainsi en sortie la valeur de l’´tat courant et prend en entr´e la valeur e e de l’´tat suivant. Ces bascules sont sensibles au front de l’entr´e particuli`re e e e clock : le passage de l’´tat courant au suivant est cadenc´ par cette entr´e e e e clock. Les bascules peuvent ˆtre initialis´es ` une valeur donn´e (´tat initial) e e a e e grˆce ` l’entr´e init. a a e – Un bloc permet de calculer la fonction de sortie de l’automate. Si l’automate est de Mealy les sorties d´pendent des entr´es courantes et de l’´tat courant. e e e Si l’automate est de Moore les sorties ne d´pendent que de l’´tat courant. e e – Un bloc permet de calculer la fonction de transition de l’automate : il donne l’´tat suivant ` partir de l’´tat courant et des entr´es courantes. e a e e

1.3
1.3.1

Comportement temporel
Echantillonnage des entr´es et fr´quence de l’horloge e e

Pour que l’automate fonctionne correctement il est indispensable que l’entr´e des bascules soit stabilis´e au moment du front d’activation du sie e gnal clock. Si ce n’est pas le cas la valeur de la sortie de ces bascules est ind´termin´e (Cf. Chapitre 9). Deux cas peuvent se pr´senter : e e e

218

Circuits s´quentiels e

entr´es e

entr´es e Fonction de sortie Fonction de transition bascules sorties Fonction de sortie Fonction de transition bascules sorties

Etat courant (a) init

Etat suivant clock (b) init

clock

Fig. 10.1 – Architecture g´n´rale d’un circuit r´alisant un automate d’´tats fini. e e e e a) Mod`le de Moore ; b) mod`le de Mealy. e e

– le syst`me en amont (fournissant les entr´es) ne connaˆ pas l’horloge, c’est e e ıt le cas par exemple lorque les entr´es proviennent de capteurs sur un monde e ext´rieur. Nous avons vu dans le chapitre 9 comment mettre en place un e m´canisme simple pour obtenir un ´chantillonnage ` partir de l’horloge. e e a – le syst`me en amont est d´j` synchronis´ sur la mˆme horloge que l’autoe ea e e mate. C’est le cas par exemple de composants d’un mˆme ordinateur. Les e diff´rents composants ont en entr´e la mˆme horloge. On verra au parae e e graphe 1.3.3 comment r´aliser la synchronisation entre deux syst`mes de ce e e type. Calcul de l’´tat suivant (Cf. Figure 10.2) Supposons ici que le front d’ace tivation des bascules du circuit s´quentiel soit le front montant de l’horloge. e Soit t-´tats le d´lai n´cessaire ` la stabilisation des circuits combinatoires de e e e a calcul de l’´tat suivant. Nous avons vu au chapitre 8 que ce d´lai n’est pas nul. e e Soit i-entr´es l’instant ` partir duquel les entr´es sont stables. e a e
Remarque : Le temps de stabilisation de la sortie des bascules n’est pas nul. On le n´glige ici par rapport aux d´lais de stabilisation des circuits come e binatoires.

Pour que l’automate puisse ´voluer ` chaque front montant de l’horloge, e a il faut que le r´sultat du calcul du nouvel ´tat soit stable avant le prochain e e front montant de clock. Le chronogramme de la figure 10.2-a montre cette d´pendance. e Etudions le cas simple pour lequel on sait ´chantillonner les entr´es sur e e l’horloge, c’est-`-dire o` les entr´es changent toujours sur un front de l’horloge. a u e Dans ce cas i-entr´es correspond ` un des deux fronts de l’horloge. On peut e a faire deux choix d’´chantillonnage. e

1. Notion de circuit s´quentiel e

219

Clock Temps i-entr´es e t-´tats e (a) i-entr´es e t-´tats e

Clock

Clock

Temps (b) i-entr´es e t-´tats e

Temps (c)

Fig. 10.2 – Chronogrammes d’´chantillonnage des entr´es d’un automate. a) Temps de e e calcul ; b) ´chantillonnage sur front descendant ; c) ´chantillonnage sur front e e montant.

Une premi`re id´e est d’´chantillonner les entr´es sur le front descendant e e e e de clock. Le circuit arrivant dans un nouvel ´tat au front montant et les entr´es e e sur le front descendant, les sorties des circuits combinatoires calculant l’´tat e suivant ont alors une demi-p´riode de l’horloge pour se stabiliser. Le chronoe gramme de la figure 10.2-b montre cette d´pendance : la demi-p´riode de clock e e doit ˆtre sup´rieure ` t-´tats pour que les entr´es des bascules soient stables e e a e e au front montant. Si l’on regarde de plus pr`s, il s’av`re que l’on peut anticiper cet e e ´chantillonnage et l’effectuer au mˆme front que le changement d’´tat. Au e e e mˆme instant l’´tat suivant est m´moris´ et les entr´es sont fournies. En effet e e e e e grˆce au temps de stabilisation des sorties des circuits combinatoires t-´tats, a e l’arriv´e des nouvelles valeurs des entr´es n’est pas encore r´percut´e ` l’entr´e e e e e a e des bascules au moment du chargement du nouvel ´tat. La p´riode de clock doit e e ˆtre sup´rieure ` t-´tats. Pour une valeur de t-´tats maximale donn´e, on peut e e a e e e ainsi doubler par rapport ` la premi`re solution (Figure 10.2-b) la fr´quence a e e maximale ` laquelle l’automate peut ´voluer (si on prend des niveaux haut et a e bas de l’horloge de mˆme dur´e). Le chronogramme de la figure 10.2-c montre e e cette ´volution. e Calcul des sorties (Cf. Figure 10.3) Si la solution adopt´e est e l’´chantillonnage des entr´es sur le front d’activation des bascules, que l’on e e soit dans le cas d’un automate de Moore ou de Mealy le r´sultat est le mˆme. e e Soit t-sorties le d´lai de stabilisation des circuits combinatoires calculant les e sorties. Les signaux de sorties seront stables un temps t-sorties apr`s le front e d’activation des bascules (Cf. Figure 10.3-a). En revanche, dans le cas o` l’´chantillonnage ne se fait pas sur le front u e d’activation des bascules, les sorties d’un automate de Mealy auraient un comportement diff´rent de celui d’un automate de Moore. Dans le cas de Moore, e les sorties ne d´pendant que de l’´tat courant, l’´chantillonnage des entr´es ne e e e e change en rien leur calcul. Dans le cas du mod`le de Mealy, les sorties d´pendent des entr´es et de e e e l’´tat courant. Soit i-entr´es l’instant ` partir duquel les entr´es sont stables. e e a e

220

Circuits s´quentiels e

Clock

Clock

Temps t-sorties (a) i-entr´es e t-sorties

Temps (b)

Fig. 10.3 – Chronogrammes des sorties d’un automate. a) Cas de Moore ; b) cas de Mealy.

Les sorties sont stables un temps t-sorties apr`s i-entr´es (Cf. Figure 10.3-b). e e Il apparaˆ alors des valeurs transitoires sur les sorties pendant des temps non ıt n´gligeables avant leur stabilisation. Ces valeurs transitoires peuvent provoquer e des ´volutions non voulues pour un syst`me aval (qui utiliserait les sorties ainsi e e produites). 1.3.2 Initialisation

Nous avons vu au chapitre 9 qu’il existe deux sortes d’initialisation des bascules. L’initialisation asynchrone est effectu´e d`s la pr´sence de la valeur e e e d’initialisation sur le signal correspondant. L’initialisation synchrone n’est effectu´e qu’au moment du front d’activation de l’horloge. e Si l’initialisation n’est pas effectu´e au moment du front montant de l’hore loge l’automate peut passer dans un ´tat ind´termin´ si les circuits combie e e natoires de calcul de l’´tat suivant n’ont pas le temps de se stabiliser entre e l’instant d’initialisation et le prochain front montant de l’horloge. La solution synchrone est donc utilis´e de pr´f´rence. e ee 1.3.3 Synchronisation de deux r´alisations e

On a souvent besoin de r´aliser deux automates 1 et 2, les sorties de l’aue tomate 1 ´tant connect´es aux les entr´es de l’automate 2. Pour les raisons e e e ´voqu´es pr´c´demment les horloges de ces deux automates ne peuvent pas e e e e ˆtre ind´pendantes. Supposons que le front d’activation de l’automate 1 soit e e le front montant et que ses entr´es soient ´chantillonn´es sur le front montant e e e de son horloge clock1 (Cf. Figure 10.4). Supposons que le front d’activation de l’automate 2 soit aussi le front montant. Le temps de calcul de ses sorties n’est pas n´gligeable : elles sont stables un temps t-sorties1 apr`s le front d’activation e e de l’horloge clock1. Le front montant de l’horloge de l’automate 2 doit avoir lieu apr`s que ses entr´es (les sorties de l’automate 1) sont devenues stables et e e que le calcul de son ´tat suivant s’est stabilis´ (t-´tats2). e e e Une premi`re id´e consiste ` penser que les fronts d’activation des deux e e a horloges doivent ˆtre d´cal´s du temps de stabilisation n´cessaire. e e e e

1. Notion de circuit s´quentiel e

221

Clock1 t-sorties1 t-´tats1 e

Clock2 t-´tats2 e Fig. 10.4 – Chronogrammes de synchronisation de deux automates

Une fa¸on simple pour r´aliser ce d´calage est de prendre pour clock2 le c e e compl´ment de clock1. Le d´calage est alors d’une demi-p´riode. Pour que les e e e entr´es des bascules des deux automates soient toujours stables au moment du e front d’activation, la p´riode minimale P de l’horloge doit alors v´rifier : e e – P/2 > t-sorties1 + t-´tats2 pour que l’´tat de l’automate 2 soit stable au e e moment du front montant de clock2. – P > t-´tats1 pour que l’´tat de l’automate 1 soit stable au moment du front e e montant de clock1. Dans ce cas le d´calage de l’´volution de l’´tat des deux automates est e e e d’une demi-p´riode de l’horloge. e Il s’av`re que l’on peut aussi prendre clock1 ´gale ` clock2. Les entr´es des e e a e bascules restent stables si l’on respecte les conditions suivantes sur la p´riode e P de l’horloge : – P > t-sorties1 + t-´tats2 pour que l’´tat de l’automate 2 soit stable au e e moment du front montant de clock. – P > t-´tats1 pour que l’´tat de l’automate 1 soit stable au moment du front e e montant de clock. Automates en boucle Le cas particulier o` les sorties de l’automate 2 sont u les entr´es de l’automate 1 est int´ressant ` ´tudier. Ce cas de figure se pr´sente e e ae e souvent et apparaˆ en particulier dans la r´alisation d’algorithmes complexes ıt e ´tudi´s au chapitre 11. e e Dans le cas o` les deux automates sont de type Mealy, nous obtenons la u configuration de la figure 10.5. Cette architecture peut ne pas arriver dans un ´tat stable puisque les entr´es des blocs combinatoires C1 et C2 sont des e e sorties de ces mˆmes blocs. e Il faut donc que l’un des deux automates soit de type Moore. Pour simplifier

222

Circuits s´quentiels e

entr´es1 e

Fonction de sortie C1 Fonction de transition bascules

sorties1

entr´es2 e

Fonction de sortie C2 Fonction de transition bascules

sorties2

init

clock

init

clock

Fig. 10.5 – Cas de deux automates de Mealy en boucle

Clock t-sorties1 t-´tats2 e

t-sorties2

t-´tats1 e

Fig. 10.6 – Chronogramme d´crivant la synchronisation de deux automates en boucle e

supposons que les deux soient de type Moore. Les deux automates peuvent alors ´voluer ` l’aide de la mˆme horloge clock (chronogramme de la figure 10.6). e a e Nous obtenons alors les conditions suivantes sur la p´riode P de l’horloge : e – P > t-sorties1 + t-´tats2 pour que l’´tat de l’automate 2 soit stable au e e moment du front montant de clock. – P > t-sorties2 + t-´tats1 pour que l’´tat de l’automate 1 soit stable au e e moment du front montant de clock.

2.

Synth`se des automates d´crits par leur e e graphe

Le point de d´part de cette synth`se est le graphe explicite d’un automate e e d’´tats fini. Nous nous limitons ici aux automates de type : e – synchrone (Cf. Chapitre 6) : les instants de changement des entr´es sont e

2. Synth`se des automates d´crits par leur graphe e e

223

connus et synchronis´s avec l’´volution de l’automate, le signal d’horloge e e permettant d’effectuer cette synchronisation. L’utilisation de ce type d’automate est largement r´pandue. La synth`se en est plus simple et donc d’un e e int´rˆt p´dagogique important. ee e – r´actif et d´terministe (Cf. Chapitre 5) : d’un point de vue mat´riel, il est e e e obligatoire que le circuit r´sultant ´volue toujours en fonction de ses entr´es e e e vers un nouvel ´tat d´termin´ et unique. e e e En ce qui concerne le choix du type de l’automate Moore ou Mealy, il n’y a pas de r`gle pr´cise. On peut toujours d´crire un automate de Moore ´quivalent e e e e a ` un automate de Mealy (Cf. Paragraphe 1.1.4, Chapitre 5). Suivant le syst`me e a e ` sp´cifier une des deux formes peut ˆtre plus complexe que l’autre en nombre e d’´tats et de transitions. Cependant pour des raisons de comportement teme porel dans le cas de synchronisation d’automates (Cf. Paragraphe 1.3), le type Moore est en g´n´ral plus utilis´. e e e Nous d´taillons dans ce paragraphe la synth`se de deux types d’architece e ture. La premi`re est dite cˆbl´e car la r´alisation des fonctions de sorties e a e e et de transition est faite ` l’aide de circuits combinatoires. On va cˆbler les a a portes logiques correspondantes. La r´alisation de ces fonctions bool´ennes est e e effectu´e suivant les techniques de synth`se de circuits combinatoires ´tudi´es e e e e au chapitre 8. Nous donnons ensuite les principes de r´alisation d’un deuxi`me type d’are e chitecture dite microprogramm´e. Dans ce type de synth`se les fonctions de e e sortie et de transition sont en grande partie r´alis´es ` l’aide d’une m´moire e e a e morte (rom). Ce type de r´alisation s’inspire des principes de programmation e en langage d’assemblage (Cf. Chapitre 12).

2.1

R´alisation cˆbl´e e a e

Les diff´rentes ´tapes de ce type de synth`se sont expliqu´es et illustr´es e e e e e sur un exemple simple. 2.1.1 Un exemple : une commande de feu tricolore

On veut r´aliser une commande d’un feu tricolore ` plaque. Les informations e a d’entr´es sont : voiture-pr´sente (vp), voiture-absente (va). La sortie est la e e couleur du feu : Vert (V), Orange(O) ou Rouge (R). Le comportement du syst`me est le suivant (automate de Moore de la e figure 10.7). Au d´part le feu est rouge. Si le feu est rouge : si une voiture est e pr´sente, le feu passe au vert sinon le feu reste rouge. Si le feu est orange le e feu passe au rouge. Si le feu est vert : si une voiture est pr´sente, le feu reste e au 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 d´coup´ e e en intervalles r´guliers. Nous retrouvons ici les entr´es d’un automate syne e

224

Circuits s´quentiels e

R Un va O Quatre vp va V Trois vp V vp

va

Deux va

vp

Fig. 10.7 – Automate d´crivant un syst`me de commande de feu tricolore e e Etat Un Deux Trois (c) Quatre q1 0 0 1 1 q2 0 1 0 1

Vocabulaire va vp (a)

e 0 1

Vocabulaire R O V (b)

s1 0 0 1

s2 0 1 0

Fig. 10.8 – Codage des entr´es, des sorties et des ´tats du syst`me de commande de feu e e e tricolore.

chrone ´chantillonn´es sur une horloge qui d´coupe le temps de fa¸on r´guli`re. e e e c e e deux fois de suite signifie alors pendant deux p´riodes d’horloge successives. e

2.1.2

Choix de l’´l´ment de m´morisation ee e

Pour pouvoir m´moriser l’´tat courant de l’automate nous avons ` notre e e a disposition les ´l´ments de m´morisation ´l´mentaires pr´sent´s au chapitre 9. ee e ee e e Nous ne pouvons pas utiliser de verrous puisque la valeur de l’´tat suivant e d´pend de l’´tat courant. Nous utilisons donc des bascules de type D sensibles e e au front. Elles comportent un signal d’activation qui force le changement d’´tat e et un signal d’initialisation (soit ` 1, soit ` 0 suivant le codage de l’´tat initial). a a e Ce signal d’initialisation est de type synchrone. 2.1.3 Codage des entr´es et des sorties e

Les ´l´ments des vocabulaires d’entr´e et de sortie sont cod´s en binaire. Les ee e e codes inutilis´s dans ce codage correspondent ` des cas de valeur phi-bool´enne e a e dans les fonctions de transition et de sortie. Reprenons l’exemple. Le vocabulaire d’entr´e {va, vp} est cod´ ` l’aide e e a d’une variable bool´enne e (Figure 10.8-a). Le vocabulaire de sortie {R, O, V} e est cod´ ` l’aide de deux variables bool´ennes s1 et s2 (Figure 10.8-b). Le code ea e s1 = s2 = 1 ne correspond ` aucune sortie. a

2. Synth`se des automates d´crits par leur graphe e e

225

2.1.4

Codage des ´tats e

L’´tat ´tant m´moris´ dans des bascules, une bascule stockant une infore e e e mation binaire, les diff´rentes valeurs de l’´tat doivent ˆtre cod´es en binaire. e e e e Les variables bool´ennes correspondant ` ce codage sont appel´es variables e a e d’´tats. Diff´rents types de codage peuvent ˆtre utilis´s (Cf. Chapitre 3). Soit e e e e n le nombre d’´tats, le nombre minimum de bits permettant de r´aliser le coe e dage est log2 (n). Un tel codage est appel´ compact. Il permet une r´alisation e e avec un nombre minimum de points de m´morisation. Un autre type de coe dage souvent utilis´ est le codage un parmi n. Ce type de codage entraˆ e ıne un nombre maximum de points de m´morisation mais l’´laboration du circuit e e r´alisant l’automate peut se faire d’une mani`re sp´cifique que nous pr´cisons e e e e dans le paragraphe 2.1.6. L’automate de la figure 10.7 comporte 4 ´tats. La figure 10.8-c donne un e exemple de codage compact des ´tats de cet automate ` l’aide de deux variables e a d’´tats q1 , q2 . e Le choix du code q1 = 0, q2 = 0 pour l’´tat initial implique que l’initialisae tion des bascules ` l’aide du signal init est une initialisation ` z´ro. a a e On peut choisir un autre code pour l’´tat initial. Dans ce cas les bascules e doivent comporter les deux types d’initialisation (` 0 et ` 1). a a Il est a noter que les fonctions bool´ennes de sortie et de transition ` e d´pendent de ces codages et que le choix du codage influence fortement les e caract´ristiques du circuit (par exemple sa complexit´ en nombre de portes) e e et donc ses performances. Les outils de CAO r´alisant cette synth`se prennent e e en compte ces crit`res lors du choix de ces codes. e 2.1.5 Expression alg´brique des fonctions de transition et de sortie e

L’architecture g´n´rale du circuit (pour un automate de Moore) est donn´e e e e dans la figure 10.9. Soient (d1 , d2 , . . . dn ) les variables codant l’´tat suivant, e (q1 , q2 , . . . qn ) les variables codant l’´tat ` l’instant courant, (s1 , s2 , . . . sm ) les e a variables codant les sorties et (e1 , e2 , . . . et ) les variables codant les entr´es. e – Le bloc m´morisant l’´tat courant de l’automate est compos´ de n bascules e e e D sensibles au front de l’horloge clock. Chacune a sur son entr´e D un signal e di et sa sortie Q donne un signal qi . – Le circuit combinatoire calculant la fonction de sortie r´alise les fonce tions bool´ennes d´finissant la valeur des si . Dans le cas d’un automate e e de Moore, si est une fonction bool´enne des variables de l’´tat courant : e e 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’´tat suivant r´alise les fonctions e e bool´ennes : di = gi (q1 , q2 , . . . qn , e1 , e2 , . . . et ). e La fonction de transition de l’automate de la figure 10.7 peut ˆtre d´crite e e sous forme de table. En utilisant les codes choisis pr´c´demment, cette table e e

226

Circuits s´quentiels e

Circuit combinatoire calculant les sorties m s1 ...sm Circuit combinatoire calculant l’´tat suivant e e1 ...et t QD n ... q1 ...qn init clock n d1 ...dn

M´morisation de l’´tat courant e e

Fig. 10.9 – La structure d’un circuit r´alisant un automate de fa¸on cˆbl´e e c a e

donne les valeurs des variables codant l’´tat suivant (d1 , d2 ) en fonction des e variables codant l’´tat courant (q1 , q2 ) et de l’entr´e (e). Ce tableau correspond e e a ` la table de v´rit´ des deux fonctions bool´ennes d1 , d2 . La figure 10.10 donne e e e ces tables ainsi que celles correspondant aux sorties. La figure 10.11 d´crit le e circuit r´sultant r´alis´ ` base de portes NAND et d’inverseurs. e e ea 2.1.6 Cas particulier du codage des ´tats un parmi n e

Ce codage consiste ` coder n ´tats sur n bits en repr´sentant chaque ´tat par a e e e un bit ; le code d’un ´tat comporte alors un seul bit (parmi n) ` 1. On peut e a proc´der de la mˆme fa¸on que pr´c´demment. Les fonctions de l’automate e e c e e comportent alors beaucoup de phi-bool´ens puisqu’il y a un nombre important e de codes inutilis´s pour les ´tats. e e Toutefois on peut obtenir plus simplement une solution ´quivalente (et e simplifi´e) du circuit en se calquant directement sur le graphe de l’automate. e La figure 10.13 montre la r´alisation du circuit de commande de feu tricolore. e Par exemple, la bascule 1, codant l’´tat 1, est charg´e avec la valeur 1 si l’´tat e e e e c e e courant est 1 et l’entr´e e ou si l’´tat courant est 4. De fa¸on plus g´n´rale, e pour r´aliser le circuit on applique les r`gles suivantes : e e

2. Synth`se des automates d´crits par leur graphe e e

227

entr´e e va vp va vp va vp va vp

´tat courant e Un Un Deux Deux Trois Trois Quatre Quatre

´tat suivant e Un Deux Trois Deux Quatre Deux Un Un

e 0 1 0 1 0 1 0 1

q1 0 0 0 0 1 1 1 1

q2 0 0 1 1 0 0 1 1

d1 0 0 1 0 1 0 0 0

d2 0 1 0 1 1 1 0 0

´tat e Un Deux Trois Quatre

sortie R V V O

q1 0 0 1 1

q2 0 1 0 1

s1 0 1 1 0

s2 0 0 0 1

Fig. 10.10 – Tables de d´finition des fonctions de transition et de sortie de l’automate e de commande de feu tricolore e s2

s1 Fonctions de sortie d1 d2

DQ DQ

q1 q2 init

clock Fonctions de transition

Fig. 10.11 – Synth`se de l’automate de la figure 10.7 ` base de portes NAND et e a de bascules D. Les expressions bool´ennes correspondantes sont : d1 = e q1 .q2 .¯ + q1 .q2 .e et d2 = q1 .e + q1 .q2 ; s1 = q1 .q2 + q1 .q2 et s2 = q1 .q2 . ¯ e

228

Circuits s´quentiels e

Etat Un Deux Trois Quatre

q1 1 0 0 0

q2 0 1 0 0

q3 0 0 1 0

q4 0 0 0 1

Fig. 10.12 – Codage 1 parmi n des ´tats du syst`me de commande de feu tricolore e e

– On associe ` chaque ´tat un point de m´morisation (bascule D ` front). a e e a – Un arc sortant de l’´tat X portant l’entr´e E est r´alis´ par une porte ET e e e e dont les entr´es sont la sortie de la bascule correspondant ` l’´tat X et e a e l’entr´e E. Si un arc sort de l’´tat X pour toute entr´e du vocabulaire, cette e e e porte E est inutile (comme l’arc de l’´tat 4 ` l’´tat 1 dans l’exemple). e a e – Pour un ensemble d’arcs entrants dans un ´tat Y les diff´rentes sorties des e e portes ET correspondantes sont mises en entr´e d’une porte OU dont la e sortie est reli´e ` l’entr´e de la bascule correspondant ` l’´tat Y. Dans le e a e a e cas o` il n’y a qu’un seul arc entrant dans un ´tat, cette porte OU est u e inutile (comme ` l’entr´e de l’´tat 3 ou 4). a e e – On r´alise chaque sortie par une porte OU qui a comme entr´es les sorties e e des bascules correspondant aux ´tats o` la sortie vaut 1. e u – L’initialisation s’effectue en initialisant ` 1 la bascule correspondant ` l’´tat a a e initial et ` 0 les autres bascules. a – Au cas par cas une combinaison de portes ET-OU peut ˆtre remplac´e par e e une combinaison NAND-NAND. Pour l’exemple du feu tricolore, nous choisissons de coder l’´tat ` l’aide des e a 4 variables q1 , q2 , q3 , q4 (Figure 10.12). Le codage des entr´es et des sorties e reste inchang´. La figure 10.13 montre l’automate et le circuit r´sultant. Sur e e la figure la commande d’initalisation n’est pas repr´sent´e : la commande init e e initalise la bascule de num´ro 1 ` 1 et les autres ` 0. e a a

2.2

R´alisation microprogramm´e e e

Dans ce type de synth`se les fonctions de transition et de sortie sont e r´alis´es ` l’aide d’une m´moire de type ROM. Chaque adresse de cette e e a e m´moire est le code d’un ´tat de l’automate. e e On parle de microprogrammation car on peut utiliser un langage de description textuel du contenu de la ROM comme on le ferait avec le langage d’assemblage pour du langage machine. Chaque ligne de la m´moire correse pond ` une micro-instruction du microprogramme. a Ce type de synth`se a beaucoup ´t´ utilis´ pour la r´alisation de gros autoe ee e e mates demandant une mise au point importante. Elle permet en effet de modifier l’automate par simple reprogrammation d’une eprom (Cf. Chapitre 9).

2. Synth`se des automates d´crits par leur graphe e e

229

e
© ¨ © ¨

1 e 2 e ¯ 3 e ¯ 4 s2 s1 e

e ¯ 
 

D Q1
!

e

3
¡        § ¦

4 s2
% $ % $

Fig. 10.13 – Un circuit r´alisant un automate avec un codage un parmi n des ´tats e e

Elle a ´t´ en particulier employ´e pour la conception de la partie contrˆle de ee e o certains processeurs cisc comme le 68000. En effet, la partie contrˆle d’un tel o processeur est un automate de plusieurs centaines d’´tats et de sorties. Elle e est aussi utilis´e dans des circuits de type automate programmable. e 2.2.1 Architecture g´n´rale d’une r´alisation microprogramm´e e e e e

Cette technique s’applique ` la synth`se d’automates de type Moore. L’ara e chitecture g´n´rale du circuit est donn´e dans la figure 10.14. e e e Contraintes sur l’automate Pour des raisons li´es ` l’architecture utie a lis´e, des transformations pr´liminaires de l’automate peuvent ˆtre n´cessaires : e e e e chaque ´tat doit poss´der au plus deux successeurs. On a vu au paragraphe 2.4 e e du chapitre 5 comment effectuer une telle transformation. Il est ` remarquer a que l’ajout d’´tats suppl´mentaires, s’il ne change pas le comportement de e e l’automate d’un point de vue fonctionnel, change son comportement temporel. Les codes des ´tats sont choisis de fa¸on ` ce que : e c a – quand un ´tat x ne poss`de qu’un ´tat successeur, le code de celui-ci est e e e soit le code de x plus 1, soit un autre code choisi afin de limiter le nombre de codes. – quand un ´tat x poss`de 2 successeurs, le code de l’un des 2 est le code de x e e plus 1. L’autre est choisi de mani`re ` minimiser le nombre de codes. Il se e a 



# " 



# "  

 

¥ ¤

£ ¢

£ ¢

s1

2 s1

230

Circuits s´quentiels e

succ [q] +1 q+1 ´tat-suivant e

sorties[q]

Bascules

q

ROM

clock init Fonction f de calcul de condition entr´es e Fig. 10.14 – Architecture d’une r´alisation microprogramm´e d’un automate e e

cond [q] (types de condition)

peut que cela ne soit pas possible, on ajoute alors un ´tat suppl´mentaire e e afin d’obtenir cette configuration. Calcul de l’´tat suivant Le code de l’´tat courant est m´moris´ dans des e e e e bascules et fournit une adresse de la m´moire. e Les primitives de calcul de l’´tat suivant sont de deux types : une e incr´mentation (circuit +1 sur la figure 10.14) ; la donn´e dans la m´moire e e e du code de l’´tat suivant, l’acc`s ` ce code se faisant ` l’aide du code de l’´tat e e a a e courant (adresse d’une ligne de la m´moire). e Le fait que chaque ´tat ait au maximum deux ´tats successeurs permet de e e limiter la largeur de la m´moire. Quand le code de l’´tat suivant n’est pas le e e code de l’´tat courant plus 1, son code se trouve dans la m´moire. e e Par ailleurs, il faut pouvoir sp´cifier quelle est la condition permettant de e choisir l’´tat successeur (d´pendant des entr´es de l’automate) quand il y en e e e a deux. Cette condition est aussi sp´cifi´e dans la m´moire et correspond ` e e e a certaines sorties de celle-ci. On parle de champ condition. Soit q le code d’un ´tat, soit succ[q] le code de l’´tat successeur (qui n’est e e pas q + 1) contenu dans la m´moire, soit cond[q] la condition ` tester pour e a choisir l’´tat successeur suivant les entr´es de l’automate. L’architecture mie e croprogramm´e comporte les circuits permettant de d´finir le code de l’´tat e e e suivant comme suit : ´tat-suivant(q)= si f (cond[q], entr´es) alors succ[q] sinon q+1. e e Les codes sont choisis de fa¸on ` ce que : c a – quand un ´tat de code q ne poss`de qu’un ´tat successeur, cond [q] sp´cifie e e e e soit la condition toujours vraie et ´tat-suivant(q) = succ[q], soit toujours e

2. Synth`se des automates d´crits par leur graphe e e

231

fausse et ´tat-suivant(q) = q + 1, quelles que soient les entr´es de l’automate. e e – quand un ´tat q poss`de 2 successeurs, pour traiter les conditions d’entr´es e e e se trouvant sur les transitions de l’automate, un circuit combinatoire d´livre e la valeur de la fonction bool´enne f calculant la condition ` tester sp´cifi´e e a e e dans la m´moire cond[q] ` partir des entr´es de l’automate. La s´lection e a e e selon cette condition entre la sortie de l’incr´menteur et de la m´moire e e pourra se faire naturellement ` partir d’un multiplexeur 2 voies vers 1. a Le calcul de l’´tat suivant est donc r´alis´ ` l’aide d’une partie de la e e e a m´moire, d’un incr´menteur et d’autres circuits combinatoires pour le calcul e e de la condition (en gris sur la figure 10.14).

Calcul des sorties Apr`s avoir proc´d´ comme pr´c´demment au codage e e e e e des sorties, pour chaque ´tat, la valeur de chaque sortie est m´moris´e une fois e e e pour toute dans la ligne de la m´moire correspondant ` l’´tat (not´ sorties[q] e a e e sur la figure 10.14).

Optimisations On a limit´ ici le nombre d’´tats successeurs ` 2 pour ne pas e e a augmenter la largeur de la m´moire. Des techniques ont ´t´ d´velopp´es pour e ee e e d´finir plusieurs ´tats dans la m´moire sans trop en augmenter la largeur. Elles e e e consistent par exemple ` ne donner dans la m´moire que les bits qui changent a e pour les adresses successives ` partir d’une adresse de base. Ainsi par exemple 2 a bits suppl´mentaires peuvent suffire pour r´soudre les cas o` un ´tat poss`de 4 e e u e e successeurs. D’autres techniques sont aussi souvent employ´es pour minimiser e la largeur de la m´moire d´pendant des sorties. Par exemple, on peut utiliser e e le champ contenant l’´tat successeur pour certaines sorties quand celui-ci n’est e pas n´cessaire. e On peut aussi remarquer que dans le cas tr`s particulier de l’exemple de e la commande de feu tricolore, repris ci-dessous, la colonne la plus ` gauche a pourrait ˆtre supprim´e puisqu’elle ne comporte que des 0. e e

Microprogrammation Pour sp´cifier le contenu de la m´moire et permettre e e une mise au point ais´e, les concepteurs d´finissent un langage particulier e e dont la syntaxe ressemble ` celle d’un langage d’assemblage (Cf. Chapitre 12). a Chaque ligne de la ROM est une micro-instruction du microprogramme. On retrouve ainsi des micro-instructions de branchement conditionnel pour les cas o` un ´tat poss`de deux successeurs. Les micro-instructions permettent u e e aussi de sp´cifier des valeurs sp´cifiques pour les sorties. Elles peuvent alors e e faire r´f´rence, au niveau de la syntaxe, ` des entit´s ext´rieures ` l’automate, ee a e e a comme par exemple des registres ou une UAL dans le cas d’une partie contrˆle o d’un processeur (Cf. Chapitres 11 et 14).

232

Circuits s´quentiels e

+1 0 1 DQ DQ

2 0 0 0 0 0 1 1 0 0 1 1 φ

s1 0 1 1 0 0 0 0 1

s2

1 0 e

c

Fig. 10.15 – Architecture d’une r´alisation microprogramm´e de l’exemple du feu tricoe e lore et1 : et2 : bne be be ba et1 et2, et2, et1, ´tat e 1 2 3 4 code 00 01 10 11 succ 00 01 01 00 ´tat + 1 e 01 10 11 00 cond e e e code 0 1 1 -

s1 s1 s2

Fig. 10.16 – Microprogramme de l’exemple du feu tricolore

2.2.2

Exemple de la commande de feu tricolore

Chaque ´tat poss`de au plus deux ´tats successeurs. Le codage compact e e e choisi pr´c´demment v´rifie la condition sur le code des ´tats successeurs (q+1 e e e e e ou succ[q]). Les diff´rentes conditions ` tester sont : e dans l’´tat Un ; e dans e a les ´tats Deux et Trois ; VRAI dans l’´tat Quatre. e e En utilisant un incr´menteur modulo 4 cette derni`re condition est inutile. e e Un seul bit c suffit donc pour sp´cifier dans la ROM quelle est la condition ` e a tester. Nous choisissons c = 1 pour la condition e et c = 0 pour la condition e. Pour les sorties, on choisit le mˆme codage que pr´c´demment. La ROM e e e poss`de 4 lignes. Deux bits de la ROM sont donc utilis´s pour les sorties, un e e pour le calcul de la condition, deux pour le codage de l’´tat suivant. La fonction e f permettant de calculer la condition d´terminant le choix de l’´tat suivant est e e r´alis´e ` l’aide d’un multiplexeur 2 voies vers 1 (Cf. Figure 10.15). e e a L’initialisation se fait ` l’aide du signal init qui initialise les bascules ` 0 a a puisque le code de l’´tat initial est 00. e Le contenu de la m´moire dans le cas du feu tricolore pourrait ˆtre d´crit e e e par le microprogramme suivant de la figure 10.16. ba et1 est une micro-instruction de branchement inconditionnel ` une a ´tiquette et1. bne et be sont les micro-instructions de branchement sur les e conditions e et e. Seules les sorties ` 1 dans un ´tat sont sp´cifi´es dans la a e e e micro-instruction correspondante.

3. Synth`se des circuits s´quentiels par flots de donn´es e e e

233

2.3

Un exemple d´taill´ : la machine ` caf´ e e a e

Nous reprenons l’exemple de la machine ` caf´ pr´sent´ dans le chapitre 5. a e e e La figure 10.17 rappelle son graphe de Moore. Nous ´tudions le codage des e entr´es/sorties du contrˆleur et la synth`se d’un circuit s´quentiel d’apr`s la e o e e e machine s´quentielle qui d´crit son comportement. e e Exemple E10.1 : Machine ` caf´ (suite de E5.2, p 105 et E6.3, p 133) a e Nous supposons ici que les entr´es s1 , s2 et s5 venant des capteurs et que e l’entr´e fs venant de la machine ` caf´ sont synchronis´es sur le front d’une e a e e horloge clock. Nous allons ´tudier comment ´laborer une r´alisation cˆbl´e de e e e a e cet automate. Le vocabulaire d’entr´e de l’automate est {rien, s1 , s2 , s5 , fs }. rien signifie : e toutes les autres entr´es sont fausses. Les combinaisons sur les 4 entr´es s1 , e e s2 , s5 et fs n’´tant pas toutes possibles, 3 bits suffisent pour les coder. Les e codages choisis sont donn´s dans la figure 10.18. Les 3 codes sur e1 , e2 , e3 non e utilis´s correspondent ` des cas qui ne peuvent survenir. e a D’autre part, vues les sp´cifications de l’automate, certaines de ces combie naisons ne peuvent pas survenir dans certains ´tats. Ainsi on ne peut avoir ni e s1 , ni s2 , ni s5 dans les ´tats 2F re¸u et Trop per¸u. On ne peut avoir fs dans e c c les autres ´tats. La fonction de transition est phi-bool´enne. e e Nous proc´dons de mˆme pour les sorties. Le vocabulaire de sorties de e e l’automate ´tant { CB, RCB, AUCUNE}, trois cas sont possibles. Les sorties e sont cod´es sur 2 bits (Cf. Figure 10.18). e Il y a 4 ´tats que nous codons sur deux bits q1 et q2 (Cf. Figure 10.18). e L’´tat est m´moris´ dans des bascules D sensibles au front montant de e e e l’horloge clock. La figure 10.19 donne la table de v´rit´ des deux fonctions de e e transition d1 et d2 . La derni`re ligne r´sume tous les autres cas pour lesquels e e les deux fonctions sont ` φ. a Si l’on effectue une minimisation de la forme polynˆmiale (Cf. Chapitre 2), o 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 ´quations on peut ais´ment d´duire la r´alisation de cet automate e e e e en utilisant 2 bascules D et des portes ou un PLA (Cf. Chapitre 8).

3.

Synth`se des circuits s´quentiels par flots e e de donn´es e

Dans le cas o` la sp´cification du syst`me ` r´aliser est donn´e sous forme u e e a e e d’algorithme manipulant des variables, la mod´lisation sous forme de graphe e d’´tats fini devient rapidement impossible. En effet le nombre d’´tats peut e e devenir tr`s grand. Il est proportionnel au nombre de valeurs possibles des e variables de l’algorithme.

234

Circuits s´quentiels e

s5

AUCUNE Attente Pi`ces e

rien

s2 fs fs rien 2F re¸us c s1 s5 1F re¸u c AUCUNE C,B s1 rien

rien R,C,B

Trop per¸u c s2

Fig. 10.17 – Graphe de Moore de l’automate de la machine ` caf´ a e s1 0 1 0 0 0 s2 0 0 1 0 0 s5 0 0 0 1 0 fs 0 0 0 0 1 e1 0 1 0 1 0 e2 0 0 1 1 0 e3 0 0 0 0 1

Vocabulaire de sorties AUCUNE R,C,B C,B

sortie1 0 1 0

sortie2 0 1 1

Etats Attentes Pi`ces e 1F re¸u c 2F re¸u c Trop per¸u c

q1 1 1 0 0

q2 1 0 1 0

Fig. 10.18 – Codage des entr´es, des sorties et des ´tats pour la synth`se de l’automate e e e de contrˆle de la machine ` caf´ o a e e1 0 0 0 0 0 1 1 e2 0 0 0 0 0 0 1 e3 0 1 0 1 0 0 0 q1 0 0 0 0 1 1 1 q2 0 0 1 1 0 0 0 d1 0 1 0 1 1 0 0 d2 0 1 1 1 0 1 0

e1 0 0 1 1 0 -

e2 1 0 1 0 1 -

e3 0 0 0 0 0 -

q1 1 1 1 1 1 -

q2 0 1 1 1 1 -

d1 0 1 0 1 0 φ

d2 0 1 0 0 1 φ

Fig. 10.19 – Tables de v´rit´ des fonctions de transition de l’automate de contrˆle de la e e o machine ` caf´ a e

3. Synth`se des circuits s´quentiels par flots de donn´es e e e

235

Par exemple l’algorithme : u ←− 0 ; tant que vrai : u= (u+1) mod 2n avec u repr´sent´ sur n bits peut ˆtre mod´lis´ par un automate d’´tats fini dont le e e e e e e graphe comporterait 2n ´tats. e Une m´thode syst´matique permet de r´aliser le circuit sans passer par la e e e d´finition de son graphe d’´tats. L’´tat du circuit s´quentiel est d´fini par la e e e e e valeur des variables apparaissant dans l’algorithme. Un registre est alors utilis´ e pour chacune de ces variables. Chaque calcul apparaissant dans l’algorithme est r´alis´ par les composants combinatoires n´cessaires. L’enchaˆ e e e ınement des calculs se fait au gr´ du flot des donn´es ` travers ces composants. Ainsi l’exemple e e a ci-dessus se r´alise ´videmment avec un incr´menteur n bits et un registre n e e e bits. Dans la suite de ce paragraphe, nous illustrons cette m´thode sur deux e exemples. Puis nous donnons une id´e de la notion de pipeline. e

3.1

Circuit flot de donn´es ` une seule variable : e a la suite de Syracuse

Nous nous int´ressons ici ` l’´tude d’un circuit qui d´livre successivement e a e e les entiers composant une suite particuli`re (dite de Syracuse) d´finie par : e e si UN est pair alors UN +1 = UN DIV 2 sinon UN +1 = 3 * UN +1, o` DIV d´note u e la division enti`re. On peut d´crire le calcul de cette suite par l’algorithme : e e
Lexique U 0 : l’entier > 0 donn´ ; U : un entier > 0 e Algorithme U ←− U 0 tantque vrai : si U MODULO 2 = 0 alors U ←− U DIV 2 sinon U ←− 3 * U + 1

Cette suite a la particularit´ de converger vers les trois valeurs 4, 2, 1 pour e certaines valeurs de U 0. Prenons comme hypoth`se que U est born´ quelle e e que soit la valeur de U 0. Nous pouvons alors d´crire cet algorithme ` l’aide e a d’un automate d’´tats fini, mais cela serait fastidieux, l’automate comportant e autant d’´tats que de valeurs possibles de U . e La figure 10.20 donne l’architecture d’un circuit flot de donn´es r´alisant e e cet algorithme. Comme dans la synth`se cˆbl´e, l’´tat est m´moris´ dans un ensemble de e a e e e e bascules qui contiennent la valeur de U . La boucle principale est r´alis´e autour e e de ce registre puisque U change de valeur ` chaque it´ration. Une it´ration a e e est effectu´e pendant une p´riode de l’horloge clock activant les bascules du e e registre. Nous sommes oblig´s de fixer une borne sup´rieure ` U , en fixant le e e a nombre de bascules de ce registre ` n. Un circuit combinatoire calcule la valeur a suivante U de U .

236

Circuits s´quentiels e

init

clock

U U0 1

U0 1 0 DQ

x DIV 2 3∗x+1 n 0 1 U

Fig. 10.20 – Calcul de la suite de Syracuse par un circuit ` flot de donn´es a e

L’action si . . .alors . . .sinon . . . est r´alis´e en effectuant en parall`le les cale e e culs : U DIV 2 et 3 * U + 1, puis en s´lectionnant un des deux r´sultats ` l’aide e e a d’un multiplexeur. L’´valuation de l’expression de la condition ne demande pas e de calcul puisqu’elle correspond au bit de poids faible de U (U0 ). Le composant calculant x DIV 2 est r´alis´ par un d´calage vers les poids e e e faibles avec introduction d’un 0. Le composant calculant 3 * x + 1 peut se r´aliser ` l’aide d’un additionneur en observant que 3 * x + 1 = 2 * x + x + 1, e a 2 * x se r´alisant ` l’aide d’un d´calage vers les poids forts avec introduction e a e d’un 0. L’op´ration d’incr´mentation + 1 peut s’effectuer en for¸ant la retenue e e c entrante de l’additionneur ` 1. a L’initialisation de U ` U 0 peut se faire ` l’aide d’un multiplexeur a a s´lectionnant l’entr´e du registre m´morisant U , la valeur de U 0 ou de U . e e e Si l’entr´e init est ` 1 le circuit initialise U par U 0, sinon il donne ` U sa e a a prochaine valeur U . La figure 10.21 donne l’architecture de ce circuit sous forme de tranches de 0 ` n-1. Toutes les tranches sont identiques, sauf les tranches 0 et n-1. Chaque a tranche impl´mente l’algorithme sur 1 bit et contient une bascule m´morisant e e `me bit de U . On retrouve les multiplexeurs de l’initialisation (en haut) et de e le i l’action si alors sinon en bas. La division et multiplication par 2 se retrouvent dans le d´calage des indices sur l’entr´e de l’additionneur et du multiplexeur e e du bas.

3.2

Circuit flot de donn´es ` plusieurs variables : e a la racine carr´e e

L’algorithme de la figure 10.22 calcule la partie enti`re de la racine carr´e e e de l’entier naturel x. La premi`re boucle de l’algorithme qui consiste ` calculer la valeur de la e a plus petite puissance de 4 sup´rieure ` x peut se faire ` l’aide d’un circuit e a a combinatoire. Le lecteur pourra s’int´resser au probl`me ` titre d’exercice sur e e a les circuits combinatoires.

3. Synth`se des circuits s´quentiels par flots de donn´es e e e

237

U 0n−1

U 0i

U 00 init

D Q Qn−2 Qi Q

D Q Q0 Qi−1 Add ci Qi c1 Q1

D

clock

0 Add 1

Add 0

cn−1

ci+1

Qn−1 Qi+1

Q0 tranche n-1 tranche i tranche 0

Fig. 10.21 – Architecture en tranche pour le calcul de la suite de Syracuse par un circuit ` flot de donn´es a e

Lexique x : l’entier ≥ 0 donn´ e u, z, y, r´sultat : des entiers ≥ 0 e Algorithme u ←− 1 tantque u ≤ x : u ←− 4* u z ←− u ; y ←− x tantque u > 1 : u ←− u DIV 4 z ←− z DIV 2 - u si z ≤ y : y ←− y - z z ←− z + 2 * u r´sultat ←− z DIV 2 e

Fig. 10.22 – Algorithme de calcul de la racine carr´e [BB83] e

238

Circuits s´quentiels e

r´sultat e

U div4

Z

Y u div 4 div2 moins z div 2 - u

mult2 plus moins test

z + 2*u

y-z si z ≤ y tant que u > 1

test1

Fig. 10.23 – Calcul de la racine carr´e par un circuit ` flot de donn´es e a e

Nous nous int´ressons ici ` la deuxi`me boucle de l’algorithme. Le circuit e a e d’ensemble est donn´ figure 10.23. e Les variables internes u, z et y modifi´es dans cette boucle constituent e l’´tat de l’automate. Elles sont m´moris´es dans trois registres U , Z, et Y . La e e e boucle correspond ` la fonction de transition de l’automate. Un passage dans a la boucle correspond ` une transition de l’automate, donc ` une p´riode de a a e l’horloge activant les registres. Par exemple la fonction de transition, restreinte a ` la partie U de l’´tat, est N ouvU = si (U − 1 = 0) alors U sinon U DIV 4, e o` N ouvU d´note le nouvel ´tat. u e e On ne s’int´resse pas ici au dialogue du circuit avec un hypoth´tique monde e e ext´rieur. Le r´sultat est pr´sent tout au long du d´roulement de l’algorithme e e e e mais il n’est valide que lorsque U ≤ 1. La progression s’arrˆte quand U arrive ` e a la valeur 1. Comme un automate ne s’arrˆte pas, on reproduit ce comportement e en ne faisant plus changer les valeurs de U . La boucle tant que U > 1 est r´alis´e ` l’aide des 3 multiplexeurs du bas de e e a la figure 10.23, chaque multiplexeur d´cidant du changement des variables U ,Z e et Y . Le pr´dicat (U > 1) a besoin d’ˆtre calcul´. Pour cela on peut faire une e e e soustraction de 1 ` U . On peut aussi, plus simplement, fabriquer le bool´en a e U > 1 ` l’aide d’une simple porte OU sur les tous les bits de U sauf le premier a (composant test1 sur la figure 10.23). Chaque calcul apparaissant dans la boucle est r´alis´ ` l’aide d’un ou plue ea sieurs composants apparaissant dans un ´tage de la figure 10.23. Le calcul de e

3. Synth`se des circuits s´quentiels par flots de donn´es e e e

239

Z DIV 2 − U n´cessite un soustracteur (composant moins sur la figure). Le e calcul Z + 2 ∗ U n´cessite un additionneur (composant plus sur la figure). Le e calcul Y − Z n´cessite un soustracteur (composant moins sur la figure). On e n´glige ´videmment les multiplications ou divisions par une puissance de 2 e e (composants div2, mult2 et div4 sur la figure). Ce sont de simples d´calages. e Le calcul du pr´dicat Z ≤ Y n´cessite le calcul de Z −Y ou Y −Z, on profite e e du calcul de Y − Z pour l’obtenir ` travers le composant test. La r´alisation de a e l’instruction si Z ≤ Y est effectu´e ` l’aide de deux multiplexeurs command´s e a e par la sortie du composant test et d´cidant du changement des valeurs de Z e et Y par les r´sultats des calculs Z + 2 ∗ U et Y − Z. e

3.3

Notion de pipeline

Le principe de pipeline est une optimisation particuli`re du principe de e flot de donn´e. Son utilisation est largement r´pandue dans la conception des e e microprocesseurs actuels. Le lecteur peut trouver une description plus d´taill´e e e dans [HP94].
Remarque : Le terme de pipeline est un mot anglais. Il se prononce avec les diphtongues (aI ) /paI plaI n/. Une traduction fran¸aise, ol´oduc, ligne de c e pipe, n’ayant qu’un rapport lointain avec ce dont nous parlons, nous gardons le terme ”pipeline”. On peut le prononcer ` la fran¸aise... On peut aussi risquer a c oct´oduc. e

L’organisation sous forme de pipeline d’un syst`me s´quentiel digital s’ape e plique ` des classes de fonctions particuli`res : il s’agit de syst`mes qui d´livrent a e e e un flot de sorties en fonction d’un flot d’entr´es, en respectant un cadencement : e e e la N`me sortie est l’image de la N`me entr´e. On peut voir une analogie avec e la file d’attente de certaines caf´t´rias ou cantines : les clients arrivent dans ee un certain ordre, prennent ou non entr´e, dessert, boisson ou plat chaud dans e l’ordre o` ces plats sont pr´sent´s puis payent ; mais l’usage est que l’on ne se u e e double pas. Par opposition on trouve des organisations de type buffet o` chau cun passe d’un comptoir ` l’autre ` sa guise. Si l’on prend peu de plats, on peut a a passer ` la caisse avant un consommateur arriv´ avant mais qui prend chaque a e plat. Evoquons les avantages et inconv´nients des deux formules : attente dans e le pipeline derri`re l’ind´cis qui h´site entre frites et pommes saut´es, bouscue e e e lade dans le buffet asynchrone. On suppose qu’` l’entr´e les consommateurs arrivent ` intervalles constants a e a de dur´e T. Au premier plat pr´sent´ le premier client met moins de T ` choisir. e e e a A l’instant T il passe alors au rayon du deuxi`me plat et un deuxi`me client e e prend sa place au premier rayon. A l’instant 2*T, le premier client passe au troisi`me rayon, le second client au second rayon et un troisi`me arrive dans e e le premier rayon. Le processus peut continuer. Si un client met plus de T ` a choisir ou s’il veut passer au rayon suivant plus vite que T, le syst`me se met e a ` mal fonctionner (Cf. “Les Temps Modernes” de Charlie Chaplin).

240

Circuits s´quentiels e

Entr´es e Clock

R1

C1

R2

C2

Sorties

Fig. 10.24 – Un circuit ` pipeline ` trois niveaux a a

On a un fonctionnement du mˆme type dans le syst`me mat´riel d´crit par e e e e la figure 10.24. A la date 1, un premier item d’entr´e est charg´ dans le registre e e d’entr´e R1 . Le circuit combinatoire C1 calcule une fonction f1 ` partir de la e a sortie de ce registre. A la date 2, un deuxi`me item d’entr´e est charg´ dans le registre R1 . Sie e e multan´ment R2 est charg´ avec la sortie du circuit C1 . Le circuit combinatoire e e C1 calcule f1 sur la sortie de R1 , C2 calcule f2 sur la sortie de R2 . La simultan´¨ e est n´cessaire au bon fonctionnement du syst`me. Evidemeıt´ e e ment la p´riode T de l’horloge qui pilote les chargements de tous les registres e doit ˆtre sup´rieure au maximum des d´lais des circuits combinatoires intere e e venant dans le pipeline. L` s’arrˆte l’analogie avec le restaurant self-service o` a e u l’on passe au rayon suivant de fa¸on un peu asynchrone (d`s que l’on a fini ` c e a un rayon et que le client pr´c´dent a lib´r´ la place). e e ee Le temps de r´ponse unitaire pour chaque traitement est le produit de la e p´riode par le nombre de tranches dans le pipeline. Il peut ˆtre sup´rieur ` la e e e a somme des d´lais de chacun des circuits, voire tr`s sup´rieur si le pipeline est e e e mal ´quilibr´. e e

4.

Exercices

E10.2 : Compteur On veut r´aliser un compteur. Il d´livre en sortie les entiers successifs de 0 e e a ` 7 (sur 3 bits). La sortie sur 3 fils (s2 , s1 , s0 ) est incr´ment´e modulo 8 ` e e a chaque front montant d’une entr´e incr. L’initialisation ` 0 des sorties se fait e a a ` l’aide du signal init actif ` 1. Donner l’automate de Moore correspondant ` a a ces sp´cifications. Donner une r´alisation cˆbl´e de cet automate. e e a e Comment pourrait-on r´aliser un circuit ´quivalent ` l’aide d’un circuit e e a combinatoire calculant une sortie S sur 3 bits ´gale ` une entr´e E (sur 3 bits) e a e plus 1 ? Ce circuit a fait l’objet d’une ´tude de cas dans le chapitre 8. e V´rifiez en dessinant un chronogramme que le circuit de la figure 10.25 a e le mˆme comportement que les circuits pr´c´dents. e e e E10.3 : Automate reconnaisseur de s´quence e Donner un codage binaire de trois informations a, b et c et construire une r´alisation de l’automate ´tudi´ au chapitre 5 reconnaissant le langage r´gulier e e e e ∗ ∗ ab + c.

4. Exercices

241

incr clock Q reset s2 s1 D Q reset s0 clock D Q reset clock D init

Fig. 10.25 – Circuit r´alisant un compteur sur 3 bits e e ¯ e ¯ s=0 e e ¯ s=1 e e s=0

Fig. 10.26 – Graphe de Moore de l’automate correspondant au d´tecteur de front e

E10.4 : Compteur/d´compteur modulo 10 e Un automate m´morise un entier naturel u de l’intervalle [0, 9]. Il a deux entr´es e e plus, moins. L’´volution de l’´tat (c’est-`-dire de l’entier u) est d´finie ainsi : e e a e
u ←− 0 ; tant que vrai : si plus alors u ←− (u+1) mod 10 sinon si moins alors u ←− (u-1) mod 10 sinon u ←− u

Donnez une r´alisation en portes et bascules de ce compteur/d´compteur e e modulo 10. E10.5 : D´tecteur de front e On veut r´aliser l’automate du d´tecteur de front d´crit dans le chapitre 9, e e e paragraphe 1.2.4. On suppose que l’entr´e e est synchronis´e sur les fronts e e montants d’une horloge clock. La sortie s passe ` 1 apr`s chaque front montant a e de e et au front descendant de clock suivant. Elle doit rester ` 1 jusqu’au a prochain front montant de clock. V´rifier que l’automate de la figure 10.26 correspond ` ces sp´cifications. e a e Faire la synth`se cˆbl´e de cet automate. Quelle doit ˆtre le signal que l’on e a e e doit mettre sur l’entr´e d’activation des bascules de l’automate ? La sortie e s de l’automate reste ` 1 pendant une p´riode de l’horloge, comment faire a e pour qu’elle reste ` 1 seulement pendant la demi-p´riode voulue ? Faire un a e chronogramme pour comprendre.

242

Circuits s´quentiels e

E10.6 : Machine ` laver a On veut r´aliser un contrˆleur de machine ` laver. La machine ` laver poss`de 4 e o a a e fils en entr´e permettant d’effectuer des commandes sur les ´l´ments de la mae ee chine : Lancer-Moteur-vitesse1, Lancer-Moteur-vitesse2, Entr´e-Eau, Entr´ee e Lessive. La mise sous tension de 5 volts de ces fils correspond ` : a – Lancer-Moteur-vitesse1 : active le moteur du tambour de la machine ` une a vitesse lente pendant une dur´e fixe T1 (permettant le lavage) e – Lancer-Moteur-vitesse2 : active le moteur du tambour de la machine ` une a vitesse rapide pendant une dur´e fixe T2 (permettant l’essorage) e – Entr´e-Eau : permet l’arriv´e de l’eau dans le tambour pendant une dur´e e e e fixe T3 (active une pompe ` eau) a – Entr´e-Lessive : ouvre le conteneur de lessive (pour la mettre dans le tame bour). La machine ` laver poss`de 1 fil Fin en sortie indiquant la fin d’une tˆche a e a lanc´e par l’une des 4 commandes pr´c´dentes. Ce fil passe ` 5 Volts lorsque la e e e a tˆche en cours se termine. Il repasse ` 0 volts lors du lancement d’une nouvelle a a commande. Il est ` 0 ` l’initialisation. a a On veut r´aliser le circuit permettant de commander cette machine. Il a e en entr´e Fin, Init et D´marrer. Init est la commande d’initialisation ` la mise e e a sous tension. D´marrer passe ` 5 volts un court instant lorsque l’utilisateur e a lance un programme de lavage. Il a en sortie les 4 commandes Lancer-MoteurVitesse1 (LMV1), Lancer-Moteur-Vitesse2 (LMV2), Entr´e-Eau (EE), Entr´ee e Lessive (EL). On veut offrir ` l’utilisateur un seul programme de lavage qui correspond a a ` la suite des ´tapes suivantes : un lavage : entr´e de l’eau, de la lessive et e e lancement du tambour ` vitesse lente ; un rin¸age : entr´e de l’eau et lancement a c e du tambour ` vitesse lente ; un essorage : lancement du tambour ` vitesse a a rapide. Pour les ´tapes ` plusieurs tˆches, les commandes correspondantes peuvent e a a ˆtre effectu´es simultan´ment. Fin passe alors ` 1 ` la fin de la tˆche la e e e a a a plus longue. Donner le graphe de l’automate d’´tats fini qui correspond au e contrˆleur de la machine ` laver. Faire une synth`se de cet automate en utio a e lisant des bascules D sensibles au front montant et des portes NAND et inverseurs. Donner le dessin du circuit en faisant apparaˆ ıtre les entr´es (Init, e D´marrer, et Fin) et les sorties du circuit (LMV1, LMV2, EE, EL). e On veut maintenant offrir ` l’utilisateur 2 programmes au choix. Pour cela a on rajoute au contrˆleur une entr´e Prog sp´cifiant le programme de lavage ` efo e e a fectuer. Si Prog vaut 1 le programme de lavage est celui d´fini pr´c´demment, si e e e Prog vaut 0 le programme de lavage correspond seulement aux ´tapes de lavage e et rin¸age. Le contrˆleur poss`de comme pr´c´demment l’entr´e D´marrage. c o e e e e e Donner le graphe de l’automate correspondant ` ce nouveau contrˆleur et en a o r´aliser une synth`se. e e

Chapitre 11 Conception de circuits s´quentiels par s´paration du e e contrˆle et des op´rations o e
Nous avons vu dans le chapitre 10 comment concevoir un circuit s´quentiel e correspondant ` un automate d’´tats fini en partant de son graphe explicite. a e Ceci n’est faisable que lorsque le graphe de l’automate n’a pas trop d’´tats e (une centaine). Au-del` le travail est complexe et fastidieux. C’est en partia culier le cas lors de la r´alisation de circuits correspondant ` des algorithmes e a manipulant des variables enti`res. Dans ce cas d’autres techniques de concepe tions de circuits existent. Nous avons vu dans le chapitre 10 ` travers deux a exemples une technique appel´e flot de donn´es. Nous nous int´ressons ici ` e e e a une technique diff´rente permettant de d´composer le probl`me (et du coup e e e le circuit correspondant) en deux parties distinctes : une partie contrˆle et o une partie op´rative. La partie op´rative est form´e d’un ensemble de registres e e e et d’op´rateurs permettant de m´moriser les variables de l’algorithme et de e e r´aliser les op´rations apparaissant sur ces variables dans l’algorithme. Par e e contre l’enchaˆ ınement dans le temps des op´rations est d´cid´ par la partie e e e contrˆle. Par rapport au flot de donn´es cette technique permet d’optimio e ser le nombre d’op´rateurs n´cessaires mais souvent au d´triment du temps e e e d’ex´cution. e Nous expliquons dans le paragraphe 1. le principe g´n´ral d’une telle are e chitecture. Nous d´crivons dans le paragraphe 2. une partie op´rative e e type, utilisable dans la plupart des cas. Nous donnons dans le paragraphe 3. les principes de la partie contrˆle et ´tudions sa synchronio e sation temporelle avec la partie op´rative. Nous appliquons ensuite ces e principes g´n´raux ` deux exemples d´taill´s (paragraphe 4.). e e a e e Nous nous appuyons sur cette technique pour expliquer les principes de conception d’un processeur au chapitre 14.

244

Conception de circuits s´quentiels... e

Acquittements Partie contrˆle o

Ordres

Init Commandes

Comptes-rendus

Horloge Donn´es : e

Partie op´rative e

Entr´es e Sorties

Fig. 11.1 – Principaux signaux d’une architecture PC/PO

1.

Principe g´n´ral e e

La partie op´rative (ou PO) offre les ressources (Bus, registres, UAL . . .) e n´cessaires ` chaque op´ration sur les diff´rentes variables apparaissant dans e a e e l’algorithme. Mais ce n’est pas elle qui d´cide de l’op´ration ` effectuer ` un e e a a instant donn´. Elle envoie des signaux de comptes rendus sur ces calculs ` la e a partie contrˆle. o La partie contrˆle (ou PC) g`re l’enchaˆ o e ınement des calculs effectu´s sur e les donn´es au vu des comptes rendus de la PO. Elle g´n`re l’activation des e e e op´rations ` un instant donn´, en envoyant des signaux de commandes ` la e a e a partie op´rative. Elle ne modifie pas directement les donn´es. Elle traduit les e e primitives de contrˆle apparaissant dans l’algorithme. o Les deux parties sont deux circuits s´quentiels cadenc´s sur la mˆme hore e e loge. La figure 11.1 donne l’organisation des signaux entre la PC, la PO et le monde ext´rieur. Les communications entre les deux parties se font par e les signaux de commande et de compte-rendu. A chaque front (montant par exemple) d’horloge : – des valeurs de commandes sont envoy´es ` la PO par la PC pour s´lectionner e a e un calcul donn´ (par exemple : s´lection des entr´es de l’UAL, op´ration e e e e effectu´e dans l’UAL, . . .). e – des comptes-rendus du calcul effectu´ (par exemple les indicateurs e arithm´tiques d’une UAL) peuvent alors ˆtre renvoy´s par la PO ` la PC e e e a afin de lui permettre de prendre une d´cision pour le choix du calcul suivant. e Les connexions au monde ext´rieur tiennent compte de cette sp´cialisation : e e – la PC ne re¸oit que des ordres et ne d´livre que des acquittements, signalant c e la fin de sa mission, par exemple. – la PO ne re¸oit que des donn´es et ne d´livre que des donn´es. Les fils c e e e d’entr´es et de sorties peuvent dans certains cas ˆtre les mˆmes (bus bidie e e rectionnel).

2. Notion de partie op´rative type e

245

Nous avons vu au chapitre 5 comment obtenir une machine s´quentielle avec e actions ` partir d’un algorithme. Chaque action apparaissant dans la machine a s´quentielle doit pouvoir ˆtre ex´cut´e dans la PO. Les actions atomiques, ou e e e e microactions, auxquelles nous nous int´ressons sont de type Ri ←− Rj op Rk , e Ri ←− entr´e ou sortie ←− Ri o` op est une op´ration et Rj un registre. e u e On peut aussi avoir dans la PO type des microactions compos´es telle que e sortie ←− Rj || Ri ←− Rj op Rk . La partie contrˆle peut ˆtre d´crite explicio e e tement par le graphe de l’automate dans lequel on remplace les actions par un ensemble de sorties bool´ennes correspondant aux signaux de commande de la e PO. Les entr´es de cet automate sont les comptes-rendus des calculs effectu´s e e dans la PO. Le tableau 11.3 donne la correspondance entre microactions et sorties bool´ennes. e

2.

Notion de partie op´rative type e

Nous donnons Figure 11.2 la structure d’une partie op´rative type pere mettant une construction m´thodique et r´pondant ` la plupart des besoins. e e a Cette PO peut ˆtre dans la plupart des cas optimis´e en termes de nombre de e e ressources (registres, bus, op´rateurs) ou en termes de temps d’ex´cution. Ces e e crit`res sont souvent incompatibles. e Une partie op´rative comprend des registres, un op´rateur appel´ UAL e e e (Unit´ Arithm´tique et Logique) et des bus. e e
Remarque : Il est int´ressant de noter qu’une partie op´rative peut ˆtre e e e d´crite comme un automate d’´tats fini. Ses entr´es sont les donn´es entrantes, e e e e les commandes de chargement et d’initialisation des registres, les commandes d’op´ration. Son ´tat est compos´ des valeurs contenues dans les diff´rents e e e e registres. Ses sorties sont les donn´es sortantes et les comptes-rendus ` dese a tination de la PC. Une utilisation syst´matique de cette description est faite e dans l’exercice E14.4 du chapitre 14.

2.1

Registres et commandes de chargement

Les registres contiennent les valeurs des variables apparaissant dans l’algorithme. Un registre est un ensemble de bascules de mˆme type partageant e les mˆmes commandes d’activation et d’initialisation (Cf. Chapitre 9, parae graphes 1.3 et 1.4). Les primitives mat´rielles sur un registre permettent d’y e forcer une valeur pr´sente sur la nappe de fils en entr´e. Ceci est fait en connece e tant l’horloge g´n´rale du circuit ` l’entr´e d’horloge des bascules et en connece e a e tant l’entr´e Enable des bascules ` un signal de commande nomm´ signal de e a e chargement de ce registre. Sur la figure 11.2 chaque registre (Ri , i = 1, ..., n) est connect´ ` l’horloge ea g´n´rale et au signal de chargement not´ ChRi. Ces signaux de chargement font e e e partie des commandes envoy´es par la PC. e

246

Conception de circuits s´quentiels... e

Sorties SelSorties Bus A ChR1 SelBusAR1 R1 SelBusBR1 horloge Bus B Bus R´sultat e SelEntr´es e Entr´es e Fig. 11.2 – Une partie op´rative type e ComptesRendus Rn SelUAL UAL Op´ration UAL e

microactions Ri ←− Rj op Rk

Ri ←− entr´e e

sortie ←− Ri

commandes pendant le coup d’horloge ChRi = 1 ; ChRi (i=i ) = 0 ; SelBusARj = 1 ; SelBusARj (j=j ) = 0 ; SelBusBRk = 1 ; SelBusBRk (k=k ) = 0 ; SelUAL = 1 ; SelEntr´es = 0 ; SelSorties = 0 ; e commandes UAL pour l’op´ration op e ChRi = 1 ; ChRi (i=i ) = 0 ; SelBusARj = ϕ ; SelBusBRk = ϕ ; SelUAL = 0 ; SelEntr´es = 1 ; SelSorties = 0 ; e commandes UAL = ϕ ChRi = 0 ; SelBusARi = 1 ; SelBusBRk = ϕ ; SelUAL = 0 ; SelEntr´es = 0 ; SelSorties = 1 ; e commandes UAL = ϕ

Fig. 11.3 – Sorties correspondant aux microactions pour la P.O type de la figure 11.2

2. Notion de partie op´rative type e

247

La sortie de chaque registre est connect´e aux deux entr´es de l’UAL mais e e une de ces deux connexions peut ˆtre inutile et donc supprim´e. Il peut ˆtre e e e int´ressant d’initialiser les registres ` l’aide du signal d’initialisation (` 1 ou ` e a a a 0) des bascules plutˆt que d’obtenir des valeurs initiales via le bus Entr´es. o e

2.2

Op´rateur et commande d’op´ration e e

La r´alisation de l’op´rateur (ou UAL) suppose d’identifier la liste des e e op´rations n´cessaires ` l’ex´cution de l’algorithme. L’op´rateur est un circuit e e a e e combinatoire susceptible de r´aliser ces diff´rentes op´rations selon des signaux e e e de commande (Op´rationUAL sur la figure 11.2). Si l’op´rateur doit effectuer p e e op´rations diff´rentes, il est command´ par log2 (p) fils de commande. En plus e e e du r´sultat de l’op´ration proprement dit, des sorties de l’op´rateur peuvent e e e ˆtre de type indicateurs arithm´tiques, ressemblant aux classiques Z, N, C et V e e des mots d’´tat de processeurs (Cf. Chapitre 12). Rien n’empˆche d’en utiliser e e d’autres si l’expression de l’algorithme utilise des primitives de test diff´rentes. e Ces sorties de l’op´rateur forment les signaux de compte-rendu de la PO vers e la PC (ComptesRendus sur la figure 11.2). Il y a dans ce travail de conception d’un op´rateur un aspect tout ` fait e a particulier. L’expression d’un algorithme se fait ` base de primitives suppos´es a e donn´es ; ici le concepteur de machine algorithmique a le choix des primitives : e ce sont celles r´alisables par un circuit ` un coˆt convenable. On peut par e a u exemple d´cider d’utiliser un multiplieur combinatoire de nombres cod´s en e e virgule flottante sur 64 bits dans une machine algorithmique si on en a besoin. Cela permet de consid´rer la multiplication de r´els comme une primitive. Si e e l’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 nombres cod´s sur 8 bits. e On peut utiliser plusieurs op´rateurs effectuant chacun une op´ration e e donn´e afin de pouvoir parall´liser certaines op´rations et donc diminuer le e e e temps d’ex´cution de l’algorithme. Toutefois ce genre d’optimisation augmente e le nombre de connexions et d’op´rateurs n´cessaires. Si on le pousse ` l’extrˆme, e e a e on retombe sur la solution flot de donn´es pr´sent´e au paragraphe 3. du chae e e pitre 10.

2.3

Liaisons, bus et multiplexeurs, commandes de s´lection e

Les liaisons entre les registres et l’op´rateur se font par des liaisons nomm´es e e bus. Deux bus op´randes (A et B) permettent d’amener aux deux entr´es de e e l’UAL le contenu d’un des registres. Les signaux SelBusARi et SelBusBRi permettent d’effectuer cette s´lection. Un bus R´sultat permet d’amener ` l’entr´e e e a e des n registres le r´sultat du calcul. Les signaux ChRi permettent d’effectuer e le chargement du registre souhait´. e

248

Conception de circuits s´quentiels... e

C1 C 2 D1 D2 D3 D4 S1 D1 BUS

C1

C2

D´codeur e D2 D3 D4

S2

S3

S4

(a)

(b)

BUS

Fig. 11.4 – Liaisons de 4 registres ` un bus. a) ` base de multiplexeurs ; b) ` base de a a a portes trois ´tats. e

La liaison des registres ` chaque bus est r´alis´e soit ` l’aide de multia e e a plexeurs, soit ` l’aide de portes trois ´tats entre les sorties des registres et a e le bus. Elle n´cessite des signaux de commande permettant de d´terminer ce e e choix. La figure 11.4 montre la r´alisation d’un bus supportant 4 entr´es D1 , e e D2 , D3 et D4 (qui sont par exemple les sorties de 4 registres) ` l’aide de deux a signaux de commande C1 et C2 . Dans le cas d’une r´alisation ` base de portes e a trois ´tats, le bus obtenu est ` double sens (contrairement ` l’autre cas). Cela e a a peut ˆtre indispensable dans le cas d’entr´es/sorties avec l’ext´rieur. Cette e e e solution est la plus souvent utilis´e. e Sur la figure 11.2, c’est la solution ` base de portes trois ´tats qui a ´t´ a e ee choisie. Le d´codeur d´livrant les signaux Si (dans la figure 11.4) n’apparaˆ e e ıt pas sur la figure 11.2. Ces signaux de s´lections (Si ) peuvent ˆtre directement e e d´livr´s dans chaque ´tat de la PC. Une autre solution consiste a r´aliser le e e e e d´codeur dans la PC ; le nombre de fils de commande entre la PC et la PO est e alors fortement augment´. e On peut diminuer le nombre de connexions en diminuant le nombre de bus au d´triment du temps d’ex´cution de l’algorithme. On peut placer par e e exemple un registre tampon suppl´mentaire en sortie de l’UAL et connecter ce e registre ` un bus qui servira en mˆme temps de bus r´sultat et de bus op´rande. a e e e

2.4

Entr´es/Sorties e

Le bus Entr´es permet de charger des valeurs depuis l’ext´rieur dans les e e registres. Les signaux SelEntr´es et ChRi du registre concern´ doivent alors e e ˆtre actifs et la valeur initiale pr´sente sur le bus Entr´es. e e e Le bus Sorties permet de d´livrer ` l’ext´rieur les r´sultats de l’algorithme. e a e e Il est donc connect´ ` un des deux bus de sorties des registres de la PO. La ea porte trois ´tats activ´e par SelSorties n’est pas toujours n´cessaire. e e e

3. Partie contrˆle o

249

Dans certains cas, il peut ˆtre int´ressant de poss´der plusieurs nappes de e e e fils de sorties. Dans ces cas-l` les sorties de certains registres peuvent ˆtre, par a e exemple, directement des sorties du circuit. Dans d’autres cas les entr´es et les sorties peuvent ˆtre multiplex´es sur les e e e mˆmes fils. On peut alors relier les bus Entr´es et Sorties grˆce ` la pr´sence e e a a e de la porte trois ´tats command´e par SelSorties sur la figure 11.2. e e

2.5

Relations entre microactions et commandes

On peut r´capituler (Cf. Figure 11.3) l’ensemble des commandes n´cessaires e e a ` l’ex´cution des 3 types de microactions sur la base d’une partie op´rative e e comme celle de la figure 11.2. On verra dans la suite des primitives d’entr´es/sorties plus riches permettant un protocole de poign´e de mains. e e

2.6

Synchronisation du calcul et de l’affectation du r´sultat e

Deux sch´mas simples de synchronisation peuvent ˆtre utilis´s. Dans le e e e premier sch´ma, tous les registres sont sensibles au (mˆme) front d’horloge. e e A chaque coup d’horloge une microaction Ri ←− Rj op Rk est effectu´e et le e r´sultat est charg´ dans le registre concern´ au prochain front de l’horloge. e e e Dans le deuxi`me sch´ma, on peut utiliser des registres de type verrou e e (Cf. Chapitre 9) ; on ajoute alors un registre tampon en sortie de l’op´rateur. e Ce registre est pilot´ par un signal de chargement actif sur le niveau haut e de l’horloge. Les autres registres sont pilot´s par un signal de chargement e actif sur le niveau bas. Une microaction se d´compose alors en deux phases, e correspondant aux deux niveaux de l’horloge. Dans la premi`re phase (haut) e les op´randes sont aiguill´s vers l’op´rateur et le r´sultat du calcul est charg´ e e e e e dans le tampon. Dans la deuxi`me phase (bas), le r´sultat est charg´ dans le e e e registre concern´. e Dans la suite on fera abstraction de cette alternative de mise en oeuvre des actions atomiques.

3.

Partie contrˆle o

Comme d´crit au chapitre 5, nous pouvons ` partir de l’algorithme obtenir e a une machine s´quentielle avec actions. Pour des raisons de synchronisation e avec la PO (Cf. Chapitre 10, paragraphe 1.3.3) le mod`le de Moore est utilis´. e e Cette machine s´quentielle avec actions est ensuite transform´e en autoe e mate d’´tats fini en rempla¸ant les actions apparaissant sur les ´tats par l’afe c e fectation des valeurs correspondantes ` ces actions, aux signaux de commande a a ` destination de la PO. Cette ´tape est d´taill´e dans les ´tudes de cas trait´es e e e e e

250

Conception de circuits s´quentiels... e

au paragraphe 4. Cet automate peut ˆtre ensuite r´alis´ par du mat´riel suivant e e e e une des m´thodes d´crites dans le chapitre 10. e e Le probl`me est de d´cider quels op´rateurs et comptes-rendus de calculs e e e sont disponibles dans la PO. Chaque calcul et affectation de variable correspondante effectu´ dans un ´tat de l’automate doit ˆtre r´alisable en un cycle e e e e d’horloge dans la PO. Chaque condition apparaissant sur les transitions de l’automate doit ˆtre un compte-rendu de l’op´rateur utilis´ disponible dans e e e l’´tat pr´c´dent. e e e

3.1

Entr´es/sorties e

La gestion des entr´es et des sorties n´cessite une synchronisation avec le e e monde ext´rieur. Le protocole de poign´e de mains (Cf. Chapitre 6) peut ˆtre e e e employ´ pour permettre le chargement ou la sortie de certains registres de la e PO. Ce protocole de poign´e de mains peut ˆtre adapt´ au cas par cas suivant e e e l’environnement dans lequel on doit implanter le circuit ` r´aliser. Des signaux a e de synchronisation n´cessaires ` ces entr´es/sorties sont ajout´s aux signaux e a e e de donn´es. Ils sont re¸us par la PC. e c Dans le cas d’une entr´e le circuit est le r´cepteur et le monde ext´rieur est e e e l’´metteur, et inversement pour une sortie. On reprend le sch´ma de l’automate e e du r´cepteur et de l’´metteur dans une poign´e de mains pr´sent´ dans le e e e e e chapitre 6. On associe ` l’automate de la PC deux ´tats pour chaque acquisition a e d’entr´e et pour chaque d´livrance de sortie (Cf. Figure 11.5). Les entr´es sont e e e ´chantillonn´es sur la mˆme horloge que la PC comme nous l’avons vu dans le e e e chapitre 10. Dans le cas d’une entr´e, le signal PresE correspond au signal de e pr´sence d’une entr´e venant de l’ext´rieur (´metteur prˆt). Le signal EPrise e e e e e correspond au signal de signification ` l’ext´rieur de la prise en compte de a e l’entr´e (r´cepteur non prˆt). Bien entendu ce signal est ` 0 dans tous les e e e a autres ´tats de l’automate. Dans l’´tat Chargement de l’entr´e les commandes e e e a ` destination de la PO sont SelEntr´es pour amener la valeur du bus ext´rieur e e a ` l’entr´e des registres et ChRi pour charger le registre voulu. e Dans le cas d’une sortie, le signal PresS correspond au signal de pr´sence e d’une sortie pour l’ext´rieur (´metteur prˆt). Ce signal est ` 0 dans tous les e e e a autres ´tats de l’automate. Le signal SPrise permet ` l’ext´rieur de signaler e a e au circuit qu’il a pris en compte la sortie (r´cepteur non prˆt). Dans l’´tat e e e Sortie pr´sente les commandes ` destination de la PO sont SelBusARi pour e a transmettre le registre voulu sur le bus A et SelSorties pour amener la valeur du bus A sur le bus de sortie. Nous pouvons illustrer ce protocole ` travers le dialogue d’un circuit avec a une m´moire. Consid´rons par exemple un processeur effectuant des ´critures e e e (sorties) ou des lectures (entr´es) en m´moire. Nous avons expliqu´ au parae e e graphe 2.2 du chapitre 9 comment se d´roule un acc`s m´moire. Dans le cas e e e o` la m´moire est lente par rapport au processeur celui-ci doit attendre lors u e d’un acc`s en lecture ou en ´criture que la m´moire lui signale la fin de l’acc`s. e e e e

3. Partie contrˆle o

251

EPrise

Attente e Entr´e PresE

PresE

PresS SelSorties SelBusARi

Sortie pr´sente e SPrise

SPrise

EPrise Chargement ChRi e SelEntr´es de l’entr´e e PresE

PresE

PresS

Attente SPrise

SPrise

(a)

(b)

Fig. 11.5 – Gestion d’entr´es/sorties : a) acquisition d’une entr´e ; b) d´livrance d’une e e e sortie

La m´moire d´livre alors un signal FinAcc`s lorsque, soit la donn´e ` lire est e e e e a prˆte sur le bus, soit la donn´e ` ´crire est effectivement ´crite en m´moire. e e ae e e e a e Le processeur d´livre les signaux SelMem et l/e lors d’un acc`s ` la m´moire. e On reprend les automates de la figure 11.5. Pour l’´criture SPrise correspond ` e a a e FinAcc`s, PresS ` SelMem et l/e ; pour la lecture PresE correspond ` FinAcc`s, e a Eprise ` SelMem et l/e. a
Nous retrouverons la connexion d’un processeur avec une m´moire dans l’´tude e e de cas du paragraphe 4.3 et dans le chapitre 14. Nous nous placerons alors dans le cas simple et id´al o` la m´moire est suffisamment rapide pour permettre un e u e acc`s en un cycle d’horloge du processeur ; le signal FinAcc`s n’est alors plus e e utile, il est implicite. Nous retrouverons les aspects de synchronisation au chapitre 15, pour relier l’ensemble processeur/m´moire avec le monde ext´rieur. e e

3.2

Synchronisation de la partie contrˆle et de la partie o op´rative e

Nous avons vu dans le chapitre 10, paragraphe 1.3.3, comment synchroniser les r´alisations de deux automates. Dans le cas d’une r´alisation PC/PO les e e sorties de la PO sont des entr´es de la PC et inversement. Nous sommes donc e en pr´sence de deux automates en boucle. e Supposons que l’automate r´alisant la PC ´volue ` chaque front montant e e a d’une horloge H. Il faut qu’entre deux fronts montants de H, la PO effectue le calcul command´ et donne un compte-rendu pour permettre ` la PC de calculer e a le prochain ´tat. Regardons ce qui se passe dans les deux cas de synchronisation e ´tudi´s au paragraphe 1.3.3 du chapitre 10. e e Dans le cas o` les registres de la PO sont charg´s au front montant (Cf. Fiu e gure 11.6), c’est le r´sultat du calcul effectu´ dans l’´tat pr´c´dent qui est e e e e e charg´. La PO doit alors effectuer le calcul et ´mettre le compte-rendu de e e mani`re ` laisser le temps ` la PC de calculer l’´tat suivant avant le prochain e a a e

252

Conception de circuits s´quentiels... e

Passage dans l’´tat i e

Passage dans l’´tat i + 1 e

H Calcul effectu´ dans l’´tat i (PO) e e Calcul de l’´tat i+1 (PC) e Compte rendu valide Chargement du r´sultat de l’´tat i (PO) e e Fig. 11.6 – Chronogrammes montrant la synchronisation de la PC et de la PO avec chargement du registre r´sultat en fin de p´riode e e

Passage dans l’´tat i e

Passage dans l’´tat i + 1 e

H Calcul effectu´ dans l’´tat i (PO) e e Calcul de l’´tat i+1 (PC) e et Chargement du r´sultat e de l’´tat i (PO) e Compte rendu valide Le compte-rendu peut changer Fig. 11.7 – Chronogrammes montrant la synchronisation de la PC et de la PO avec chargement du registre r´sultat au milieu de la p´riode e e

front montant de H. Dans ce cas-l`, il n’est pas n´cessaire de m´moriser ces a e e comptes-rendus. Dans le cas o` le calcul est effectu´ dans la premi`re phase (Cf. Figure 11.7) u e e les comptes-rendus changent alors une deuxi`me fois dans la deuxi`me phase e e puisque certains des registres peuvent avoir chang´ apr`s le front descendant e e de H. Il faut donc m´moriser ces comptes-rendus dans un registre au front e descendant de H. L’´mission des commandes de la PC et le calcul doivent e donc ˆtre r´alis´s dans la premi`re demi-p´riode de H, le calcul de l’´tat suivant e e e e e e dans la deuxi`me. Cette solution est plus contraignante dans l’enchaˆ e ınement des diff´rentes op´rations de la PC et de la PO. e e

4. Etudes de cas

253

4.
4.1

Etudes de cas
D´marche de conception e

Avant de traiter concr`tement des exemples pr´cis nous donnons l’´bauche e e e d’une m´thode de conception d’une architecture PC/PO. Les deux premi`res e e ´tapes apparaissant ci-apr`s sont compl`tement li´es et sont ` effectuer simule e e e a tan´ment. e – Transformation de l’algorithme en une machine s´quentielle avec e actions : R´pertorier les actions et les pr´dicats apparaissant dans l’algorithme. e e D´finir les op´rations n´cessaires aux calculs de ces pr´dicats. D´finir les e e e e e op´rations et les affectations de variables pouvant ˆtre r´alisables par un e e e circuit disponible pour construire la PO. D´crire l’algorithme ` l’aide d’une machine s´quentielle avec actions utie a e lisant ces variables et ces op´rations. Les actions associ´es ` chaque ´tat e e a e doivent ˆtre r´alisables dans la PO en un coup d’horloge. e e – Obtention de la PO : R´pertorier l’ensemble des variables apparaissant dans la machine e s´quentielle avec actions, chacune correspond ` un registre de la PO. e a R´pertorier l’ensemble des op´rations apparaissant dans l’algorithme, y e e compris celles n´cessaires aux calculs des pr´dicats. Construire une PO type e e (Cf. Parapraphe 2.) poss´dant un op´rateur permettant de r´aliser tous les e e e calculs. On pourra ´ventuellement optimiser cette PO (au niveau temps de e calcul) en multipliant les op´rateurs et parall´lisant les calculs par fusion e e d’´tats dans la machine s´quentielle. e e – Obtention de l’automate correspondant ` la PC : a Au vu de la PO et de la machine s´quentielle avec actions obtenir l’autoe mate d’´tats fini correspondant ` la PC. Cet automate a comme entr´es e a e les fils de comptes-rendus (correspondant aux conditions apparaissant dans l’algorithme) sortant de l’op´rateur de la PO et les signaux de synchronie sation avec le monde ext´rieur. Il a comme sorties les fils de commande e apparaissant sur les ressources de la PO et des signaux avec l’ext´rieur. Il e faut donc d´finir pour chaque ´tat la valeur des commandes ` destination e e a de la PO correspondant aux actions effectu´es. e – Synth`se de l’automate de contrˆle : e o Il reste ` effectuer la synth`se de l’automate obtenu en utilisant une des a e m´thodes donn´es dans le chapitre 10. e e – Assemblage de la PC et de la PO

254

Conception de circuits s´quentiels... e

Lexique m,n : des entiers ≥ 0 { m et n ´tant donn´s} e e fin : le bool´en Vrai e j, k : des entiers ≥ 0 ∆ : un entier Algorithme Tantque VRAI : Acqu´rir(m) ; Acquerir(n) ; e k ←− 0 ; j ←− 0 ; ∆ ←− −m ; tantque j ≤ m : {invariant : 0 ≤ j ≤ m et −2.m ≤ ∆ ≤ 0 } D´livrer (j) ; D´livrer (k) ; e e j ←− j+1 ; ∆ ←− ∆ + 2.n ; {−2.m + 2.n ≤ ∆ ≤ 2.n} si ∆ ≥ 0 k ←− k + 1 ; ∆ ←− ∆ − 2.m ; { apr`s cela : −2.m ≤ ∆ ≤ 0 } e fin ←− VRAI ; D´livrer(fin) ; e Fig. 11.8 – Algorithme de Bresenham

4.2

Le traceur de segments

Le circuit que nous voulons concevoir doit d´livrer les coordonn´es des e e points d’un segment de droite sur un ´cran. Nous choisissons l’algorithme de e Bresenham pr´sent´ au paragraphe 2.3 du chapitre 5. La figure 11.8 rappelle e e l’algorithme. Les actions Acqu´rir et D´livrer correspondent aux entr´es et sore e e ties. Pour que le circuit puisse fonctionner pour un nombre de segments illimit´, e nous ajoutons une boucle globale sans fin. 4.2.1 Obtention d’une machine s´quentielle avec actions ` partir de e a l’algorithme

On peut classer les actions ` effectuer en deux cat´gories. Certaines corresa e pondent ` des entr´es/sorties : Acqu´rir(m), Acqu´rir(n), D´livrer (j), D´livrer(k), a e e e e e D´livrer (fin) ; d’autres correspondent ` des calculs : j ←− 0, k ←− 0, ∆ e a ←− −m , j ←− j + 1, ∆ ←− ∆ + 2.n, k ←− k + 1, ∆ ←− ∆ − 2.m. Les initialisations de j et k ` 0 se font directement ` travers un signal a a d’initialisation sur les registres. On peut ainsi r´unir les actions j ←− 0, k e ←− 0, et ∆ ←− −m dans le mˆme ´tat. On choisit d’utiliser un seul op´rateur e e e (Cf. Paragraphe 2.), les autres actions doivent donc se faire dans des ´tats e distincts. Les pr´dicats ` tester sont j ≤ m et ∆ ≥ 0. On peut de fa¸on ´quivalente e a c e calculer chaque pr´dicat ou son compl´mentaire ; par exemple on peut calculer e e j>m ou j ≤ m. Pour le calcul du pr´dicat j > m on effectue m − j. Il est plus e

4. Etudes de cas

255

Acqu´rir(m) e D´livrer(fin) e Acqu´rir(n) e ∆ ←− −m || j ←− 0 || k ←− 0 m-j ResNeg ∆ ←− ∆ − 2.m ResNeg k ←− k+1 ResNeg D´livrer(j) e D´livrer(k) e

ResNeg

j ←− j +1

∆ ←− ∆ + 2.n Fig. 11.9 – Une machine s´quentielle avec actions r´alisant l’algorithme de Bresenham e e

facile de r´aliser une UAL qui donne un indicateur signifiant r´sultat n´gatif e e e que r´sultat n´gatif ou nul. Pour le pr´dicat ∆ ≥ 0, on a besoin du mˆme e e e e indicateur. Le calcul d’un pr´dicat peut n´cessiter l’ajout d’un ´tat. Par exemple ici le e e e calcul de j > m doit ˆtre effectu´ dans un ´tat sp´cifique alors que le calcul de e e e e ∆ ≥ 0 peut ˆtre effectu´ au moment de l’action ∆ ←− ∆ + 2.n. e e On obtient la machine s´quentielle avec actions de la figure 11.9. e 4.2.2 Description de la partie op´rative e

La figure 11.11 donne la partie op´rative. Le circuit comporte 5 registres e nomm´s J, K, M, N et D contenant les valeurs des variables j, k, m, n et ∆. e Les registres J et K poss´dent un signal d’initialisation InitJK ` 0 pour e a pouvoir effectuer les actions j ←− 0 et k ←− 0. Les calculs ` effectuer correspondent aux diverses actions ´num´r´es a e ee pr´c´demment : − M, K + 1, J + 1, D + 2.N, D − 2.M. Il faut ajouter e e les calculs correspondant aux pr´dicats : j > m et ∆ ≥ 0. e On utilise une PO type comme d´finie pr´c´demment mais on minimise le e e e nombre de connexions des registres aux bus. Ainsi les connexions J ; BusA, K ; BusA, M ; BusB, N ; BusB, D ; BusA suffisent. Nous r´alisons toutes les op´rations avec un op´rateur unique ; il doit e e e

256

Conception de circuits s´quentiels... e

Op2 0 0 0

Op1 0 0 1

Op0 0 1 0

Op´ration e A+1 B−A A + 2*B

Op2 0 1

Op1 1 0

Op0 1 0

Op´ration e A − 2*B −B

Fig. 11.10 – Signaux de commande de l’UAL de l’algorithme de Bresenham Sorties Bus A SelMBusB ChJ J InitJK H BUS R´sultat e Entr´es e Fig. 11.11 – Partie op´rative correspondant ` l’algorithme de Bresenham e a ChK K SelKBusA ChD D SelDBusA SelJBusA ChM M ChN SelNBusB SelUAL N UAL Op2, Op1, Op0

InitJK Bus B

ResNeg SelEntr´es e

r´aliser les op´rations suivantes sur ses op´randes A et B : A+1, B−A, A+2*B, e e e A−2*B et −B. Chacune de ces op´rations doit ˆtre effectu´e dans un ´tat e e e e diff´rent de la machine s´quentielle avec actions. e e La signification des trois signaux Op2 , Op1 , Op0 de commande des op´rations de l’UAL est donn´e dans le tableau de la figure 11.10. e e Cette UAL peut ˆtre r´alis´e ` l’aide d’un additionneur (Cf. Chapitre 8). e e e a Elle doit g´n´rer un bit de signe du r´sultat (ResNeg). e e e

4.2.3

Hypoth`ses sur les entr´es/sorties e e

Sans hypoth`ses sur l’environnement exact (´cran, table tra¸ante,..) il est e e c impossible de d´crire pr´cis´ment la primitive d’affichage d’un pixel. e e e Nous convenons que M et N sont initialis´s ` partir d’un bus d’entr´es (not´ e a e e Entr´es sur la figure 11.11), que J et K sont d´livr´s sur un bus de sorties (not´ e e e e Sorties sur la figure 11.11) et que le signal Fin est d´livr´ directement par un e e fil particulier issu de la PC (fil portant une valeur constante, on pourrait bien sˆr l’´liminer). u e Pour les entr´es sur M et N et les sorties sur Fin, J et K nous utilisons le e protocole de poign´e de mains. e

4. Etudes de cas

257

4.2.4

D´finition de la partie contrˆle par un automate d’´tats fini e o e

La figure 11.12 donne la partie contrˆle. Les ´tats correspondant ` o e a Acqu´rir(N) et Acqu´rir(M) sont remplac´s chacun par les deux ´tats du e e e e r´cepteur dans le protocole poign´e de mains. On introduit ainsi les signaux e e de contrˆle venant de l’ext´rieur (PresN et PresM) et un mˆme signal vers o e e l’ext´rieur pour les deux cas EPrise. De mˆme pour les sorties Fin, J et K avec e e les signaux SortieFin, SortieJ, SortieK et SPrise. Nous supposons que les bascules utilis´es dans la PO sont des bascules D e sensibles au front montant, avec signal d’initialisation actif ` 1. a Il est ` remarquer que dans certains cas la valeur de signaux de commande a de la PO n’a pas d’importance. Ces valeurs sont alors d´finies comme phie bool´ennes pour les fonctions de sortie correspondantes. e La figure 11.13 donne le d´tail des sorties pour chaque ´tat de la PC ; ce e e sont des fils de commande apparaissant sur la PO de la figure 11.11 et les fils destin´s aux entr´es/sorties avec l’ext´rieur. e e e

4.2.5

Assemblage de la PC et de la PO

Le circuit de la figure 11.14 montre l’ensemble des signaux ´chang´s lors e e de l’assemblage de la PC et de la PO ainsi que ceux permettant la gestion des entr´es/sorties. Le seul compte-rendu de la PO vers la PC est ResNeg. La PC e et la PO ´voluent avec la mˆme horloge H. e e

4.3

La machine ` trier a

Cette ´tude de cas montre l’utilisation d’une m´moire ` cˆt´ d’une machine e e a oe algorithmique. C’est ` ce titre une bonne introduction au chapitre 14 qui porte a sur la conception d’un processeur. Le m´canisme d’entr´e/sortie utilis´ ici est e e e sp´cifique et diff´rent de ceux explicit´s plus haut. e e e Soit une m´moire permettant de stocker M mots de N bits. On d´sire e e construire une machine permettant de r´aliser le tri des ´l´ments contenus e ee dans cette m´moire. On consid`re que ces ´l´ments sont des entiers naturels e e ee cod´s en base 2. La figure 11.15 donne l’algorithme du tri par insertion. e On suppose que M est initialis´ au d´part de l’algorithme. La m´moire e e e comporte un bus donn´e, un bus adresse et un signal de commande, not´ l/e, e e pr´cisant si on r´alise une op´ration de lecture ou d’´criture. Il faut donc que le e e e e circuit r´alisant l’algorithme poss`de un bus de sortie correspondant ` l’adresse e e a en m´moire et un bus d’entr´es/sorties correspondant ` la donn´e stock´e en e e a e e m´moire. On suppose que l’acc`s ` la m´moire en lecture ou ´criture peut se e e a e e faire en un cycle d’horloge du circuit ` concevoir. Il n’y a donc pas de signal a FinAcc`s. e

258

Conception de circuits s´quentiels... e

PresM SPrise SPrise 16 PresN SPrise Sortir Fin PresN 15 SPrise ResNeg PresM

1 PresM 2 Chargement de M PresM 3 PresN 4 Chargement de N PresN 5 D ←− −M M−J ResNeg 7 Sortir J SPrise J ←− 0 K ←− 0

6 SPrise

14 D ←− D − 2*M SPrise 8 ResNeg 13 K ←− K+1 SPrise ResNeg 12 D ←− D+2*N 10 SPrise 11 J ←− J +1 SPrise SPrise 9 Sortir K SPrise

Fig. 11.12 – Automate d’´tats fini correspondant ` l’algorithme de Bresenham e a

4. Etudes de cas

259

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

Attente : InitJK = ChJ = ChK = ChD = ChM = ChN = φ, (Op2, Op1, Op0) = (φ, φ, φ) Chargement de M : ChM = SelEntr´es = EPrise = 1, InitJK = e ChJ = ChK = ChD = ChN = φ, (Op2, Op1, Op0) = (φ, φ, φ) Attente : InitJK = ChJ = ChK = ChD = ChN = φ, (Op2, Op1, Op0) = (φ, φ, φ) Chargement de N : ChN = SelEntr´es = EPrise = 1, e InitJK = ChJ = ChK = ChD = φ, (Op2, Op1, Op0) = (φ, φ, φ) D ←− −M ; J ←− 0 ; K ←− 0 : ChD = InitJK = SelMBusB = SelUAL = 1, (Op2, Op1, Op0) = (1, 0, 0) M − J : SelJBusA = SelMBusB = 1, (Op2, Op1, Op0) = (0, 0, 1) Sortir J : SortieJ = SelJBusA = 1, (Op2, Op1, Op0) = (φ, φ, φ) Attente : (Op2, Op1, Op0) = (φ, φ, φ) Sortir K : SortieK = SelKBusA = 1, (Op2, Op1, Op0) = (φ, φ, φ) Attente : (Op2, Op1, Op0) = (φ, φ, φ) J ←− J+1 : ChJ = SelJBusA = SelUAL = 1, (Op2, Op1, Op0) = (0, 0, 0) D ←− D+2*N : ChD = SelDBusA = SelNBusB =SelUAL = 1, (Op2, Op1, Op0)=(0, 1, 0) K ←− K+1 : ChK = SelUAL = SelKBusA = 1, (Op2, Op1, Op0) =(0, 0, 0) D ←− D−2*M : ChD = SelDBusA = SelMBusB = SelUAL = 1, (Op2, Op1, Op0) = (0,1,1) Sortir fin : SortieFin = 1, InitJK = ChJ = ChK = ChD = ChM = ChN = φ, (Op2, Op1, Op0) = (φ, φ, φ) Attente : InitJK = ChJ = ChK = ChD = ChM = ChN = φ, (Op2, Op1, Op0) = (φ, φ, φ)

Fig. 11.13 – Sorties ´mises dans chaque ´tat de la partie contrˆle de la figure 11.12. Les e e o signaux dont la valeur est 1 ou φ sont pr´cis´s et ceux pour lesquels elle e e vaut 0 sont omis. H Init PresN Sorties Entr´es e ResNeg Partie ChJ ChK ChD ChM ChN SelJBusA SelKBusA op´rative SelMBusB SelNBusB e SelDBusA SelSorties SelUAL SelEntr´es e Op2 Op1 Op0 InitJK Partie contrˆle o PresM SPrise EPrise SortieJ SortieK SortieFin

Fig. 11.14 – Vue g´n´rale du traceur de segments e e

260

Conception de circuits s´quentiels... e

Lexique M : un entier donn´ e i, j, t : des entiers ≥ 0 ; trouv´, fin : des bool´ens e e mem : un tableau [0..M−1] d’entiers ≥ 0 Algorithme i ←− 1 tantque i ≤ M−1 : j ←− i ; t ←− mem[i] ; trouv´ ←− FAUX e tantque (j > 0 et non trouv´) : e si mem[j−1] > t alors mem [j] ←− mem[j−1] ; j ←− j−1 sinon trouv´ ←− VRAI e mem [j] ←− t ; i ←− i + 1 fin ←− VRAI ; D´livrer (fin) e Fig. 11.15 – Algorithme de la machine ` trier a

4.3.1

Obtention d’une machine s´quentielle avec actions ` partir de e a l’algorithme

Les actions ` effectuer sont : a i ←− 1, j ←− i, t ←− mem[i], trouv´ ←− FAUX, e 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’´valuation des pr´dicats : e e – i ≤ M−1 : on peut calculer i − M et tester si le r´sultat est nul. En effet, e i − M ≤ −1 ⇐⇒ i − M < 0. Initialement i < M et i ´tant incr´ment´ de 1 e e e a ` chaque it´ration on peut tester i = M. e – j > 0 et non (trouv´) : on peut calculer j et tester si le r´sultat est non nul, e e puis calculer trouv´ et tester si le r´sultat est nul. Initialement j > 0 et j e e ´tant d´cr´ment´ de 1 ` chaque it´ration on peut tester j = 0. e e e e a e – mem[j−1] > t : on calcule mem[j−1] − t et on teste si le r´sultat est e strictement positif. Pour ce calcul si l’on se restreint ` un seul op´rateur, il a e faut tout d’abord aller chercher en m´moire mem[j−1] et stocker la valeur e dans une variable temporaire que nous appelons temp. On peut ensuite calculer temp − t. Le calcul se fait donc dans deux ´tats successifs r´alisant e e les actions temp ←− mem[j−1] puis ´valuation du signe de temp − t. e L’affectation mem [j] ←− mem[j−1] n´cessite deux acc`s ` la m´moire. On e e a e ne peut donc la r´aliser dans un seul ´tat de la machine s´quentielle. Il faut e e e comme pr´c´demment utiliser une variable, soit temp, permettant de stocker e e mem[j−1] avant de l’affecter ` mem[j] ; ` deux ´tats successifs seront alors a a e associ´es les actions temp ←− mem[j−1] puis mem[j] ←− temp. Comme l’afe fectation temp ←− mem[j−1] se fait juste apr`s le test mem[j−1] > t, temp e contient d´j` la valeur de mem[j−1] ; il est donc inutile de r´aliser cette affecea e tation.

4. Etudes de cas

261

0 i ←− 1 2 ResNul 1 i−M ResNul 3 4 j ResNul 6 mem[j] ←− t ResNul 5 ResNul trouv´ e ResNul 7 i ←− i + 1 13 8 temp ←− mem[j−1] temp - t ResPos mem[j] ←− temp 9 ResPos 11 trouv´ ←− VRAI e j ←− i t ←− mem[i] || trouv´ ←− FAUX e D´livrer(fin) e

12

j ←− j − 1 10 Fig. 11.16 – Machine s´quentielle avec actions de la machine ` trier e a

L’initialisation de trouv´ ` FAUX peut ˆtre faite dans le mˆme ´tat que e a e e e l’affectation t ←− mem[i] en se servant de l’initialisation ` 0 du registre trouv´. a e Le calcul du pr´dicat j > 0 et non (trouv´) se fait dans deux ´tats successifs e e e (voir le m´canisme d’´clatement de conditions complexes dans le chapitre 5). e e La machine s´quentielle avec actions donn´e dans la figure 11.16 tient e e compte de ces remarques. 4.3.2 Obtention de la PO

On part de la PO type d´crite dans le paragraphe 2. La figure 11.17 d´crit e e une PO qui permet toutes les actions apparaissant dans les diff´rents ´tats de e e la machine s´quentielle avec actions donn´e pr´c´demment. e e e e

262

Conception de circuits s´quentiels... e

IBusA

JBusA

TPBusA

Bus A

Op2,Op1 BusAdresses ResetTR SetTR TRBusA UAL TR MBusB SelAdr

I InitI ChI

J

T

T E M P ChTEMP

M

ChJ

ChT

TPBusB Bus B ComptesRendus SelEntr´es e SelSorties

SelUAL

BusR´sultat e BusDonn´es e

Fig. 11.17 – Partie op´rative pour la machine ` trier e a

Il y a 6 registres permettant de stocker les variables de l’algorithme : I, J, T, TR (pour trouv´), M et TEMP (pour la variable interm´diaire introduite). e e Le registre TR ne comporte qu’une seule bascule. Sa liaison sur n fils au bus A est compl´t´e par des 0. ee On se sert d’un op´rateur unique ` deux op´randes A et B qui doit permettre e a e les calculs : A, A−B, A−1, A+1 et d´livrer les comptes-rendus : r´sultat nul et e e r´sultat positif. e Pour r´aliser I ←− 1, TR ←− 0 et TR ←− 1 on se sert des commandes e d’initialisation des bascules des registres correspondants. Les entr´es/sorties sont effectu´es via le bus adresses en sortie et le bus e e donn´es en entr´e et sortie. e e On connecte I, J, TR et TEMP au bus A pour r´aliser les actions J ←− I, J e ←− J−1, I ←− I+1 et les calculs n´cessaires ` l’´valuation des pr´dicats I=M, e a e e J=0, TEMP>T et non (TR). On connecte M et T au bus B pour le calcul des pr´dicats I=M et TEMP>T. e Pour les actions n´cessitant un acc`s m´moire en ´criture ou en lecture : e e e e T ←− mem[I], TEMP ←− mem[J−1], mem[J] ←− T, mem[J] ←− TEMP, on a le choix, soit de connecter le bus A ou B au bus adresses, soit de passer par l’UAL. On choisit la deuxi`me solution puisqu’il faut effectuer un calcul e d’adresses pour l’action TEMP ←− mem[J−1]. On connecte le bus donn´es au bus r´sultat pour les actions comportant une e e lecture en m´moire : T ←− mem[I] et TEMP ←− mem[J−1]. Pour les actions e comportant une ´criture en m´moire : mem[J] ←− T et mem[J] ←− TEMP, e e on transmet J sur le bus adresses en passant par le bus A et l’UAL, et on connecte T et TEMP au bus B puis le bus B au bus donn´es. e En r´sum´, on doit pouvoir avoir sur le bus A le contenu des registres I, e e J, TR et TEMP. On doit pouvoir avoir sur le bus B le contenu des registres

5. Exercices

263

3 4 5 7

j ←− i : IBusA = ChJ = 1, (Op2, Op1) = (0, 1), ChTEMP = ChT = ResetTR = SetTR = φ t ←− mem[i] ; trouv´ = FAUX : IBusA = ChT = ResetTR = l/e = SelMem e = SelAdr = SelEntrees = 1, (Op2, Op1) = (0, 1), ChTEMP = φ j : JBusA = 1, (Op2, Op1) = (0, 1) temp ←− mem[j−1] : JBusA = ChTEMP= l/e = SelMem = SelAdr = SelEntr´es = 1, (Op2, Op1) = (1, 1) e

Fig. 11.18 – Sorties pour quelques ´tats de l’automate de la figure 11.16 ; sont pr´cis´s e e e les signaux ` 1 et ` φ et omis ceux ` 0. a a a

M, T et TEMP. On doit pouvoir charger les registres I, J, TEMP et T par la valeur pr´sente sur le bus r´sultat. On doit pouvoir amener la valeur pr´sente e e e sur le bus donn´es sur le bus r´sultat. On doit enfin pouvoir amener la valeur e e pr´sente sur le bus B sur le bus donn´es. e e 4.3.3 Obtention de l’automate d’´tats fini de la partie contrˆle e o

Le passage de la machine s´quentielle ` l’automate d’´tats fini se fait comme e a e pr´c´demment. On peut utiliser le protocole de poign´e de mains pour l’action e e e D´livrer (fin). On remplace l’´tat correspondant par les deux ´tats de l’´metteur e e e e dans la poign´e de mains (Cf. Paragraphe 3.1). e Nous donnons dans la figure 11.18, pour quelques ´tats, les sorties de l’aue tomate d’´tats fini correspondant ` la machine s´quentielle avec action de e a e la figure 11.16. Nous utilisons les signaux apparaissant sur la PO de la figure 11.17. Pour les ´critures et lectures en m´moire les signaux SelMem et l/e e e a ` destination de la m´moire sont des sorties suppl´mentaires de l’automate. e e Les configurations 00, 01, 10 et 11 des deux signaux Op2 , Op1 qui commandent l’op´ration de l’UAL (OperationUAL) correspondent respectivement e aux op´rations : A + 1, A, A−B, A−1. e 4.3.4 Optimisation

On peut simplifier ce circuit en n’utilisant plus de registre pour stocker le bool´en trouv´. En effet on peut sortir directement de la boucle quand le e e test du pr´dicat mem[j-1] > t donne VRAI (voir la modification sur la machine e s´quentielle de la figure 11.19). e

5.

Exercices

E11.1 : La racine carr´e e Il s’agit de construire un circuit permettant de calculer la partie enti`re de la e racine carr´e d’un entier naturel x. L’algorithme correspondant est donn´ au e e paragraphe 3.2 du chapitre 10. En suivant la m´thode d´crite dans ce chapitre e e

264

Conception de circuits s´quentiels... e

i ←− 1 D´livrer(Fin) e ResNul i−M ResNul j ←− i t ←− mem[i] j ResNul mem[j] ←− t ResPos i ←− i + 1 temp − t ResPos mem[j] ←− temp j ←− j − 1 Fig. 11.19 – Machine s´quentielle avec actions optimis´e de la machine ` trier e e a ResNul temp ←− mem[j−1]

5. Exercices

265

Lexique U : un entier > 0 ; fin : un booleen Algorithme Tantque VRAI : Acqu´rir(U) e tantque U > 1 : si U MODULO 2 = 0 alors U ←− U DIV 2 sinon U ←− 3 * U + 1 D´livrer (U) e D´livrer(fin) e

Fig. 11.20 – Algorithme de la suite de Syracuse

SelSorties Bus A

Sorties

Op

ChU U horloge

UAL SelUAL BitPoidsFaible SelEntr´es e ResNeg

Bus R´sultat e Entr´es e

Fig. 11.21 – Une partie op´rative pour la suite de Syracuse e

donner une PO et une PC permettant de r´aliser cet algorithme ; s’inspirer de e la PO type donn´e ` la section 2. e a E11.2 : La suite de Syracuse La figure 11.20 donne l’algorithme correspondant au calcul de la suite de Syracuse. La figure 11.21 repr´sente une PO issue de la PO type du paragraphe 2. e permettant de r´aliser cet algorithme. Donner la machine s´quentielle avec ace e tions correspondant ` l’algorithme et utilisant cette PO. Les comptes-rendus de a l’UAL sont le bit de poids faible et le signe du r´sultat. En d´duire l’automate e e d’´tats fini correspondant. Faire une synth`se cabl´e de cet automate avec un e e e codage compact. On choisira pour cela un codage pour les trois op´rations de e l’UAL (Op) : 1−X, X DIV 2 et 3*X+1. On effectuera les entr´es/sorties ` l’aide e a du protocole ` poign´e de mains via les bus Entr´es et Sorties pour U. a e e

266

Conception de circuits s´quentiels... e

Troisi`me partie e Techniques de l’algorithmique logicielle

Chapitre 12 Le langage machine et le langage d’assemblage
Nous avons ´tudi´ au chapitre 4 un ensemble de mod`les des traitements e e e qu’on peut vouloir faire effectuer par un dispositif informatique. Toutefois, ni les langages de programmation de haut niveau, ni les machines s´quentielles, e ne sont directement exploitables par un ordinateur, tel que nous l’avons d´fini e en introduction. Le seul langage compr´hensible par un ordinateur est le langage machine e de son processeur. Un programme en langage machine est une suite finie de bits, que le processeur interpr`te. Nous ´tudions au chapitre 14 les circuits e e s´quentiels qui r´alisent cette tˆche d’interpr´tation. Un langage machine, bien e e a e que difficilement lisible par un ˆtre humain, poss`de une structure : il est e e possible d’y voir une suite de paquets de bits, chacun codant une instruction du processeur, c’est-`-dire une op´ration ´l´mentaire r´alisable par le processeur a e ee e (par exemple additionner deux entiers cod´s sur un octet). e Concevoir un langage machine est une tˆche indissociable de la conception a du processeur. On doit choisir un ensemble d’instructions (on dit aussi : jeu d’instructions) de mani`re ` fournir un mod`le de calcul universel, mais ce n’est e a e pas la seule contrainte. On peut avoir ` assurer la compatibilit´ ascendante a e dans une famille de processeurs, c’est-`-dire ` assurer que les programmes en a a langage machine qui fonctionnaient sur un processeur de la g´n´ration n sont e e r´utilisables sur le processeur de la g´n´ration n + 1. e e e Pour d´finir compl`tement un langage machine, il faut ensuite choisir un e e codage de l’ensemble des instructions sur un certain nombre de bits. Si l’on suppose donn´s le processeur et son langage machine, on peut e s’int´resser au probl`me de la programmation de ce dispositif par un ˆtre hue e e main, qui ne saurait s’exprimer directement en termes de s´quences de bits. e Le langage d’assemblage est un langage textuel bˆti sur le mod`le du langage a e machine. Il a la mˆme structure, c’est-`-dire les mˆmes instructions, mais il se e a e note par du texte. Traduire le langage d’assemblage en langage machine suppose : une analyse

270

Le langage machine et le langage d’assemblage

lexicale et syntaxique du texte, pour y rep´rer les structures ; la v´rification e e des contraintes d’utilisation des op´rateurs et op´randes ; un codage des struce e tures en s´quences de bits. Nous ´tudions les principes de cette traduction e e dans le pr´sent chapitre. C’est par ailleurs la tˆche principale de l’outil appel´ e a e assembleur des environnements de programmation. Nous verrons ´galement au e chapitre 18 les aspects de compilation s´par´e ou d’abstraction vis-`-vis de la e e a position en m´moire ` l’ex´cution. Nous verrons au chapitre 13 que le langage e a e d’assemblage est lui-mˆme une cible pour la traduction des langages de haut e niveau. Dans le paragraphe 1. nous exposons la d´marche de conception d’un lane gage machine : choix du jeu d’instructions et codage, en prenant quelques exemples parmi les processeurs existants. Le paragraphe 2. d´crit les cae ract´ristiques d’un langage d’assemblage construit sur le langage mae chine. Les probl`mes de la traduction du langage d’assemblage vers le e langage machine correspondants sont ´tudi´s au paragraphe 3. Enfin nous e e donnons au paragraphe 4. un exemple de programme, sous 5 formes : un algorithme du langage d’actions d´crit au chapitre 4 ; un texte ´crit dans e e un langage d’assemblage pour un processeur 68000 ; un texte d’un langage d’assemblage pour processeur sparc ; un programme en langage machine 68000 ; un programme en langage machine sparc.

1.
1.1

Le langage machine
Description g´n´rique de la machine e e

Pour d´finir la notion de langage machine, et proposer des crit`res de choix e e d’un ensemble d’instructions qui constitue un mod`le de calcul universel, il e faut tout d’abord d´finir pr´cis´ment la machine. e e e Nous nous restreignons ici au mod`le d’architecture de Von Neue mann [BGN63] : une machine comporte une unit´ de calcul (qui r´alise des e e op´rations de base sur les entiers cod´s en binaire) et une m´moire qui contient e e e des op´randes et des codes d’op´rations (les instructions). Les instructions sont e e ex´cut´es dans l’ordre o` elles sont rang´es en m´moire. e e u e e Nous distinguons par la suite : – Une m´moire de grande taille, dont les ´l´ments sont d´sign´s par des e ee e e num´ros qu’on appelle des adresses. C’est la m´moire que nous avons mae e nipul´e en en donnant une abstraction par le tableau MEM au chapitre 4. e Nous parlerons souvent de m´moire principale e – Une m´moire de plus petite taille dont les ´l´ments, appel´s registres, sont e ee e d´sign´s par des noms ou par des num´ros courts. Sur certaines machines e e e on distingue des registres donn´es et des registres adresses, avec des instruce tions travaillant sur l’une des cat´gories de registres seulement. Sur d’autres e

1. Le langage machine

271

machines, au contraire, les registres sont banalis´s. Les machines les plus e anciennes ne comportaient qu’un seul registre, dit accumulateur
Nous d´taillons au chapitre 14 l’influence de ce genre de distinction sur ce qu’on e appelle la partie op´rative du processeur, c’est-`-dire la structure du circuit qui e a connecte l’unit´ de calcul aux bus et aux divers registres. e

La distinction entre ces deux types de m´moire permet de tenir compte, dans le e choix d’un jeu d’instructions, de crit`res tels que le temps d’acc`s ` la m´moire : e e a e les registres sont accessibles plus rapidement que la grande m´moire. Nous vere rons au chapitre 15 que les registres sont en g´n´ral situ´s physiquement dans e e e le processeur, contrairement ` la grande m´moire. D’autre part les adresses a e des octets dans la grande m´moire sont des entiers assez longs (typiquement e 32 bits), qui soit ne peuvent pas apparaˆ tels quels dans le codage d’une insıtre truction (Cf. Paragraphe 1.3), soit en ralentissemnt l’ex´cution ; en revanche, e les adresses ou num´ros des registres sont de petits entiers — 5 bits sur le proe cesseur sparc1 par exemple — et peuvent donc apparaˆ comme d´signation ıtre e d’op´rande dans le codage d’une instruction. e

1.2

El´ments et structure du langage machine e

Un programme ´crit en langage machine est une suite finie de codages e binaires d’instructions ´ventuellement param´tr´es. e e e 1.2.1 Instructions et codage

Une instruction ´l´mentaire peut ˆtre par exemple un transfert m´moire ee e e vers m´moire, dont l’effet peut ˆtre d´crit par une phrase du langage d’actions e e e pr´sent´ au chapitre 4 : MEM[a] ←− 4 MEM[b]. Dans ce cas le codage complet e e de l’instruction comprend : les repr´sentations en binaire pur des adresses a e et b, cod´es sur un certain nombre de bits fix´ ; le codage du type d’op´ration e e e effectu´ : transfert m´moire vers m´moire de taille 4 octets. En langage machine e e e 68000, cette instruction est cod´e sur 16 + 32 + 32 bits. Les 16 premiers bits e codent le type d’op´ration effectu´, la taille du transfert et le fait que l’on doit e e trouver ensuite deux adresses de 32 bits ; les 32+32 bits suivants codent les deux adresses d’op´randes (voir paragraphe 1.3 pour un expos´ des principes e e de codage des instructions). L’ajout d’une constante ` une case m´moire (MEM[a] ←− MEM[a] + k) a e peut ´galement constituer une instruction ´l´mentaire dans un langage e ee machine. Dans ce cas le codage complet de l’instruction comporte : la repr´sentation en binaire pur de l’adresse a ; le codage du type d’op´ration e e effectu´ : incr´mentation de case m´moire d´sign´e par son adresse ; le codage e e e e e binaire de la constante k.
Dans ce chapitre, sparc d´signe le sparc V8 qui a des mots de 32 bits, et non le sparc e V9, qui a des mots de 64 bits.
1

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 s´quentiellement e par le processeur, qui interpr`te chacune d’entre elles, et passe ` celle qui se e a trouve en m´moire ` l’adresse suivante. Le processeur g`re donc ce qu’on ape a e pelle le compteur programme, qui donne le num´ro de la prochaine instruction e a ` lire. Le compteur programme est incr´ment´ ` chaque instruction. e ea Comme cons´quence de l’interpr´tation d’une instruction, le processeur e e peut modifier le contenu de la m´moire ou d’un registre, ou commander une e op´ration de l’unit´ de calcul. Il peut ´galement modifier le num´ro (l’adresse) e e e e de la prochaine instruction ` lire. On parle alors de rupture de s´quence, ou a e branchement. Une instruction de rupture de s´quence doit comporter l’adresse e de destination. Une rupture de s´quence peut ˆtre inconditionnelle, auquel cas e e l’interpr´tation de l’instruction produit toujours le mˆme effet ; elle peut ˆtre e e e conditionn´e, par exemple, par le signe du contenu d’une case m´moire, ine e terpr´t´ comme un entier relatif ou comme le r´sultat d’un calcul. Dans ce ee e cas la rupture effective de s´quence, lors d’une ex´cution, d´pend de l’´tat des e e e e donn´es et donc de la m´moire ` ce moment-l`. e e a a 1.2.3 D´signation d’adresse et modes d’adressage e

Nous traitons dans ce paragraphe de tout ce qui concerne les m´canismes e de d´signation d’emplacements en m´moire (m´moire principale ou registres), e e e utilisables dans toute instruction de calcul si elle a des op´randes en m´moire, e e dans les instructions de transfert depuis ou vers la m´moire, et dans les inse tructions de rupture de s´quence. Ces m´canismes sont appel´s des modes e e e d’adressage. La figure 12.1 en donne une vue synth´tique. e Consid´rons tout d’abord le cas des instructions de calcul. Lorsqu’elles come portent un ou plusieurs op´randes en m´moire, le ou les param`tres correspone e e dants de l’instruction doivent d´signer une adresse d’octet en m´moire. Ce peut e e ˆtre fait en donnant directement dans l’instruction une constante enti`re posie e tive qui est l’adresse voulue (c’est le cas dans l’exemple MEM[a] ←− 4 MEM[b] ´voqu´ ci-dessus). On parle alors d’adressage absolu. Ce peut ˆtre fait e e e ´galement en donnant comme param`tre un num´ro de registre, dont le e e e contenu, lors de l’ex´cution, donnera l’adresse m´moire ; il s’agit dans ce cas e e d’adressage indirect par registre. Il en existe de nombreuses variantes : indirect par registre avec d´placement ; indirect par registre pr´d´cr´ment´ (ou postincr´ment´, ou pr´e e e e e e e e incr´ment´, ou post-d´cr´ment´) avec ou sans d´placement, etc. Le mˆme e e e e e e e raisonnement est valable pour les instructions de transfert depuis ou vers la m´moire. e Dans le cas des instructions de rupture de s´quence, il faut indiquer d’une e mani`re ou d’une autre ` quelle adresse se trouve la prochaine instruction ` e a a ex´cuter, puisque ce n’est pas l’instruction suivante. Il existe deux sortes de e branchements : les branchements relatifs ` la position courante du compteur a

1. Le langage machine

273

programme — l’instruction sp´cifie alors un d´placement en avant ou en arri`re e e e par rapport au compteur programme — et les branchements absolus — l’instruction sp´cifie une nouvelle valeur du compteur programme, qui doit ´craser e e l’ancienne. L’instruction doit donc sp´cifier un d´placement ou une adresse e e absolue. Dans les deux cas, on peut imaginer que cette donn´e est fournie die rectement comme une constante dans l’instruction, ou indirectement dans un registre. Le tableau 12.1 r´sume les diverses mani`res d’indiquer une adresse e e m´moire dans une instruction. Pour nommer les modes d’adressages, nous e avons utilis´ les termes les plus couramment employ´s. Le mode indirect par e e registre avec index est un adressage indirect par registre avec d´placement, e le d´placement ´tant stock´ dans un registre au lieu d’ˆtre donn´ par une e e e e e constante cod´e dans l’instruction. e Noter que pour une mˆme instruction, plusieurs modes d’adressage peuvent e ˆtre possibles. Voir aussi le paragraphe 1.3 qui traite du codage des instruce tions, pour comprendre comment distinguer les diff´rents cas. e 1.2.4 Mod`le de calcul universel, e mod`le de Von Neumann et langage machine type e

La premi`re contrainte ` respecter dans la conception du jeu d’instructions e a d’un processeur est d’assurer un mod`le de calcul universel. La compr´hension e e compl`te de cette contrainte demande quelques connaissances en calculabilit´, e e mais il est facile de se convaincre ` l’aide d’exemples extrˆmes, comme le codage a e des boucles, que le probl`me se pose effectivement. e Il est en effet assez facile de se convaincre qu’un langage de haut niveau qui ne disposerait pas de structures it´ratives, sous quelque forme que ce soit, e ne permettrait pas de coder tout algorithme. Or les structures it´ratives core respondent aux ruptures de s´quence dans le langage machine. Un langage e machine qui ne permettrait pas ainsi de modifier l’adresse de la prochaine instruction ` lire, de mani`re conditionnelle, serait donc incomplet. a e La contrainte de fournir un mod`le de calcul universel est r´alisable avec un e e langage machine ` une seule instruction complexe, du genre : acc`s m´moire a e e en lecture avec adressage indirect, conditionnel. Programmer directement dans un tel langage serait d´j` tr`s difficile, et ´crire un compilateur de langage de ea e e haut niveau — c’est-`-dire un algorithme capable de traduire tout texte de a programme de haut niveau en suite de telles instructions — serait encore plus ardu. Il ne suffit donc pas que le jeu d’op´rations offertes garantisse un mod`le e e de calcul universel. Le mod`le de machine dit de Von Neumann repose sur les e classes d’instructions suivantes : transfert de donn´es (chargement depuis un e registre, chargement depuis la m´moire, stockage dans la m´moire) ; branchee e ments inconditionnels et conditionnels ; op´rations arithm´tiques et logiques. e e Le paragraphe 1.4 pr´sente ces grandes classes d’instructions plus des instruce

274

Le langage machine et le langage d’assemblage

nom usuel

adresse effective (pour r´sultats et e cibles de transferts) Pour les instructions de calcul et les transferts m´moire e imm´diat e une constante rela- k tive k absolu une constante na- MEM[k] k turelle k registre di- un num´ro n e contenu de Regn Regn rect indirect par un num´ro n e MEM[contenu de contenu de registre Regn ] Regn indirect par deux num´ros n et MEM[contenu de contenu de e registre avec d Regn + contenu Regn + index de Regd ] contenu de Regd indirect par un num´ro n, une MEM[contenu de contenu de e registre avec constante relative Regn + d] Regn + d d´placement d e indirect par un num´ro n e MEM[contenu de contenu de registre pr´e Regn - t] Regn - t d´cr´ment´ e e e indirect un num´ro n e MEM[contenu de contenu de par reRegn ] Regn gistre postd´cr´ment´ e e e Pour les instructions de rupture de s´quence e relatif au une constante rela- PC + d × compteur tive d N programme absolu une constante na- k turelle k

Information contenue dans le codage de l’instruction

valeur ` utiliser a (pour op´randes e sources de calcul et sources de transferts)

effet ´ventuel e sur les op´randes e

-

-

Regn ←− Regn -t Regn ←− Regn -t

-

-

Fig. 12.1 – Modes d’adressage usuels. Noter que, pour les adressages indirects par registre avec pr´ (ou post) incr´mentation (ou d´cr´mentation), l’effet sur e e e e le registre d’indirection est de la forme : Regn ←− Regn op t, o` op est u l’op´ration + ou l’op´ration −, et t ne vaut pas n´cessairement 1. t d´pend e e e e de la taille de l’op´ration, c’est-`-dire de la taille des op´randes. Par exemple, e a e si l’instruction travaille sur des mots de 32 bits, t = 4. Pour les adressages relatifs au compteur programme PC, la constante d donn´e dans l’instruction e peut ´ventuellement ˆtre multipli´e par une constante N. Voir un exemple e e e paragraphe 1.4.3.

1. Le langage machine

275

tions sp´cifiques comme l’on en trouve dans toute machine. e On trouve parfois le terme d’architecture de Von Neumann, o` la m´moire u e contient ` la fois les donn´es et les instructions, par opposition ` l’architeca e a ture de Harvard, o` deux m´moires sp´cifiques contiennent, l’une les donn´es, u e e e l’autre les instructions. Les deux architectures ont la mˆme puissance d’exprese sion.

1.3

Codage des instructions

Nous avons donn´ au paragraphe 1.2.1 des exemples d’instructions, en ine diquant bri`vement quelles sont les informations ` coder. Nous pr´cisons cie a e dessous l’ensemble des informations ` coder, avant d’´tudier les contraintes a e qui portent sur la structure du code. Le codage complet d’une instruction est obtenu par juxtaposition des codages des diff´rentes informations qui la e d´finissent ; on dit que le codage d’une instruction est structur´ en champs e e (Cf. Figure 12.2) ; c’est aussi le terme utilis´ pour les noms des diff´rentes e e informations qui composent un type construit n-uplet (Cf. Chapitre 4).

1.3.1

Codage de la nature de l’op´ration e

L’op´ration effectu´e est prise parmi toutes les op´rations de l’unit´ de cale e e e cul, les transferts entre m´moire et registres, les branchements, les instructions e sp´cifiques ´ventuelles (Cf. Paragraphe 1.4 pour une liste d´taill´e d’instruce e e e tions). Si le jeu d’instructions comporte n instructions, le codage compact de la nature de l’op´ration demande b = log2 n bits (l’entier imm´diatement e e sup´rieur a log2 n). Il n’y a aucune raison pour que le nombre d’instructions e ` d’une machine soit exactement une puissance de 2, et il existe donc toujours au moins une configuration d’un vecteur de b bool´ens qui ne correspond ` aucune e a instruction. Cela justifie le cas d’erreur dans l’algorithme d’interpr´tation du e langage machine du paragraphe 1.6.2 ci-dessous, et constitue l’une des causes d’interruption logicielle ´tudi´es dans la partie VI. e e On suppose que la nature d’une instruction comporte implicitement l’information sur le nombre d’op´randes. Mˆme si l’on imagine un langage machine e e offrant par exemple une addition binaire et une addition ternaire, on consid`re e que ce sont deux instructions diff´rentes ` compter dans les n instructions, e a et ` coder globalement. Cela donne un codage plus compact que de s´parer a e le codage de la nature de l’instruction et le codage d’un entier donnant le nombre d’op´randes (qui pour une grande majorit´ des op´rations est toujours e e e le mˆme). De mani`re g´n´rale, le choix de la structure des informations qui e e e e constituent une instruction, c’est-`-dire le choix des champs, a une influence a sur la compacit´ du codage. e

276

Le langage machine et le langage d’assemblage

1.3.2

Codage des modes d’adressage des param`tres e

Si le langage machine est tel qu’une mˆme op´ration accepte la d´signation e e e d’op´randes avec diff´rents modes d’adressage, il faut coder le mode d’adrese e sage de chacun des op´randes. Ce peut ˆtre r´duit ` 1 bit, comme dans le cas des e e e a op´rations arithm´tiques du sparc : une instruction d’addition, par exemple, e e a toujours 3 param`tres, les emplacements des deux op´randes et l’emplacee e ment du r´sultat. Le r´sultat et l’un des op´randes sont forc´ment dans des e e e e registres. Le deuxi`me op´rande peut ˆtre dans un registre ou ˆtre une vae e e e leur imm´diate. Pour distinguer ces deux cas, le codage du mode d’adressage e de ce deuxi`me op´rande comporte 1 bit. Dans le cas du 68000, en revanche, e e toutes les op´rations de calcul acceptent des op´randes dans des registres, ou e e en m´moire avec des modes d’adressage vari´s. Le codage complet du mode e e d’adressage de chaque op´rande comporte 3 bits. e 1.3.3 Codage des informations mises en jeu dans le mode d’adressage

La nature de l’instruction, plus le mode d’adressage des param`tres, e d´termine enti`rement quelle est la taille du reste du code (op´randes), et come e e ment il faut l’interpr´ter. En reprenant la deuxi`me colonne du tableau 12.1, on e e obtient les diff´rentes informations ` coder : des entiers naturels (qui peuvent e a repr´senter des adresses m´moire absolues), des entiers relatifs (qui peuvent e e repr´senter des d´placements de branchements ou des op´randes d’op´rations e e e e arithm´tiques), des num´ros de registres. e e En g´n´ral le nombre de registres est une puissance de 2, ce qui permet un e e codage compact et sans trous d’un num´ro de registre. Sur le sparc, les 32 e registres sont cod´s sur 5 bits. Toute configuration d’un vecteur de 5 bool´ens e e correspond ` un num´ro de registre existant. a e Les entiers sont cod´s (en binaire pur ou compl´ment ` 2) sur une taille e e a pr´d´finie (c’est toujours la mˆme, elle est donc implicite et non cod´e). Le e e e e jeu d’instructions 68000 distingue une addition g´n´rale et une addition dite e e rapide, selon que l’un des op´randes est un entier long (32 bits) ou un entier e court tenant sur un octet. Dans ce cas, la taille de l’entier param`tre est en e fait cod´e dans la nature de l’instruction : il y a deux additions. e 1.3.4 Structure du code

La figure 12.2 donne des exemples de structures de code. Le code d’une instruction compl`te comporte le codage de la nature de l’op´ration, le codage e e des modes d’adressage des op´randes (si n´cessaire), le codage des informae e tions effectives des op´randes (entiers, adresses, num´ros de registres). Ces e e diff´rents codages doivent ˆtre juxtapos´s pour former le codage complet de e e e l’instruction. Sur certaines familles de machines, les codes des diff´rentes inse tructions peuvent avoir des tailles diff´rentes. Lorsque la taille est variable, elle e

1. Le langage machine

277

est enti`rement d´termin´e par la nature de l’instruction et les modes d’adrese e e sage des op´randes. Ces deux informations doivent ˆtre cod´es dans les pree e e 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 informations, plus les informations relatives ` l’un des op´randes, si elles tiennent dans a e la place restante. Le choix du codage pr´cis est guid´ par des consid´rations mat´rielles, e e e e qui portent sur la structure du circuit qui constitue l’interface entre la partie op´rative et la partie contrˆle du processeur (Cf. Chapitre 14). Par exemple e o les portions de code qui correspondent ` des num´ros de registres sont situ´es a e e au mˆme endroit quelle que soit l’instruction, de mani`re ` simplifier la pare e a tie op´rative du processeur : les fils de s´lection de l’ensemble des bascules e e qui r´alise les registres sont toujours branch´s sur les mˆmes bits du registre e e e instruction. Cette contrainte, plus le fait que les valeurs imm´diates sont n´cessairement e e contigu¨s (c’est plus pratique pour la g´n´ration de langage machine depuis e e e le langage d’assemblage, et cela ´vite des chevauchements de nappes de fils e dans le circuit interpr`te), peut amener ` couper le codage de la nature de e a l’instruction. Par exemple, sur le sparc, la nature de l’instruction est cod´e e sur les bits 31, 30, et 19 ` 24. Entre ces deux champs on trouve 5 bits pour le a num´ro de registre destination. e

1.4
1.4.1

Classes d’instructions usuelles
Instructions de calcul

En langage machine il n’y a pas de typage des donn´es, mais les types sont e implicites dans les op´rations offertes. Certaines instructions ne sont utilis´es e e que si le programmeur interpr`te la correspondance entre vecteurs de bool´ens e e et entiers selon un certain code (binaire pur, compl´ment ` 2, virgule flottante, e a d´cimal cod´ binaire, pixels...). Il existe des op´rations qui ont un sens si on e e e interpr`te les vecteurs de bits comme le codage d’entiers (ADD, branchements e sur codes de conditions enti`res, voir ci-dessous), et il existe des op´rations e e qui les interpr`tent comme des vecteurs de bool´ens (AND). En revanche il n’en e e existe pas qui les interpr`tent comme le code ASCII d’un caract`re ; ce serait e e le cas s’il existait une instruction sp´cifique du langage machine capable de e transformer un vecteur de bits repr´sentant le caract`re ’a’ en vecteur de bits e e repr´sentant le caract`re ’A’ ; cette op´ration est ´videmment r´alisable sur e e e e e tout processeur, mais en passant par le codage des caract`res par des entiers e ou des vecteurs de bool´ens. Les seuls types sont donc les entiers et les vecteurs e de bool´ens ; l’extension MMX [Int97] et VIS offrent de plus des op´rations qui e e interpr`tent les vecteurs de 32 bits comme 4 sous-vecteurs de 8 bits. e

278

Le langage machine et le langage d’assemblage

31 3029 25 24 19 18 14 13 12 0 1 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 1 1 0 0 00 0 0 0 1 0 1 0 1 0 num´ro e du reg. dest. : 2 Nature de l’op´ration : Addcc e num´ro e du reg. source : 1 op´rande imm´diat : 42 e e (a) Mode d’adressage du deuxi`me e op´rande : imm´diat. e e Nature de l’op´ration : AddI e Taille de l’op´ration long mot (32 bits) e : 0 0 0 0 0 1 1 0 1 0 0 0 0 1 1 1 0 0 0 0 0 0 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 0 Mode d’adressage pour le r´sultat : e registre donn´e e Num´ro de registre : 7 e Valeur imm´diate op´rande : e e 42424242 cod´ sur 32 bits e (b) (poids forts d’abord). 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 que 4242424210 = 028757B216 ).

Op´rations sur les entiers Tous les processeurs offrent les op´rations d’ade e dition et de soustraction d’entiers. La mˆme instruction est utilisable pour les e op´rations sur les naturels cod´s en binaire bur et sur les entiers cod´s en e e e compl´ment ` deux, grˆce aux bonnes propri´t´s du codage en compl´ment ` e a a ee e a deux (Cf. Chapitre 3). La diff´rence d’interpr´tation du codage des entiers ape e paraˆ dans les instructions de branchement conditionnels (paragraphe 1.4.3). ıt Certains processeurs offrent ´galement la multiplication et la division e enti`re ; mais ce sont des instructions coˆteuses en temps ou en surface du cire u cuit interpr`te. Le sparc offre une instruction mulscc effectivement ex´cutable e e en temps ´gal ` celui d’une addition, mais cette instruction ne constitue qu’un e a pas de la multiplication 32 bits (la version 9 offre une vraie multiplication). Pour r´aliser la multiplication de deux entiers 32 bits, il faut ´crire 32 instruce e tions mulscc en s´quence. Le 68000 offre deux instructions muls et mulu de e multiplication de deux entiers sign´s ou non de 16 bits, dont le r´sultat est sur e e 32 bits ; il offre de mˆme deux instructions divs et divu. e Lorsque la multiplication et la division g´n´rale n’existent pas, on trouve e e toutefois les instructions de d´calage arithm´tique, qui permettent la division e e et la multiplication par des puissances de 2. (Cf. Chapitre 3, paragraphe 2.2.3).

1. Le langage machine

279

Op´rations sur les vecteurs de bool´ens Les op´rations sur les vecteurs e e e de bool´ens sont les extensions bit ` bit des op´rateurs bool´ens usuels et, ou, e a e e non, nand, etc. Elles n’existent pas n´cessairement toutes. Par exemple le sparc e offre AND et ANDN, OR et ORN, XOR et XORN, mais pas de NOT. ANDN (resp. ORN) calcule la conjonction (resp. la disjonction), bit ` bit, du premier op´rande a e et de la n´gation bit ` bit du second. Les propri´t´s de l’alg`bre de Boole e a ee e permettent de fabriquer les op´rateurs manquants en termes des op´rateurs e e disponibles. Pour utiliser les op´rations sur les vecteurs de bool´ens dans la compilae e tion des op´rations bool´ennes des langages de haut niveau, il faut inventer e e un bon codage des bool´ens du langage de haut niveau (Cf. Chapitre 4, parae graphe 2.2.1 et chapitre 13, paragraphe 1.2). Op´rations structurelles Les op´rations structurelles manipulent les vece e teurs de bits sans interpr´tation particuli`re de leur signification. Ce sont les e e d´calages logiques, ` droite ou ` gauche. Un d´calage ` droite, combin´ avec e a a e a e la conjonction bool´enne bit ` bit utilis´e comme masquage, permet d’exae a e miner individuellement tous les bits d’un vecteur de bits, ou d’extraire des sous-champs de longueur quelconque. Par exemple, l’algorithme suivant permet de calculer le nombre de 1 dans a e un vecteur de bits. Il utilise une op´ration ET bit ` bit avec l’op´rande 1 (c’este a `-dire le vecteur de bits qui n’a qu’un 1 en poids faible) pour tester le bit de poids faible de V. A chaque ´tape, le vecteur V est d´cal´ d’un bit vers la e e e droite.
lexique : V : un vecteur de bits ; Nb : un entier ≥ 0 algorithme Nb ←− 0 tantque V = 0 si (V ET bit ` bit 1 = 1) alors Nb ←− Nb+1 a d´caler V d’un bit vers la droite e

Nombre d’op´randes Toutes les op´rations examin´es ci-dessus sont bie e e naires : elles ont deux op´randes et un r´sultat. On pourrait donc penser que e e les instructions du langage machine doivent n´cessairement d´signer 3 emplacee e ments m´moire ou registres. C’est le cas pour les machines dites ` 3 r´f´rences e a ee comme le sparc, o` l’on ´crit par exemple ADD g1, g2, g3 pour r´aliser l’afu e e fectation g3 ←− g1+g2. Une r´f´rence est la d´signation d’un op´rande ou ee e e du r´sultat, que ce soit un num´ro de registre ou une adresse en m´moire. e e e Mais il est possible de r´duire le nombre de r´f´rences, et l’on obtient ainsi des e ee machines dites ` 0, 1 ou 2 r´f´rences (voir exercice E12.1). a ee Le 68000 est une machine ` deux r´f´rences. Les op´rations sont de la forme a ee e dest ←− source op dest, et l’instruction contient donc la d´signation de 2 e emplacements seulement. L’un est utilis´ ` la fois en lecture et en ´criture. ea e

280

Le langage machine et le langage d’assemblage

Si l’on veut maintenant ne d´signer qu’un emplacement, il faut que le e deuxi`me soit implicite. C’est le cas si l’on introduit un registre dit accue mulateur not´ Acc. Les instructions sont alors de la forme : Acc ←− Acc + e source. Le registre accumulateur doit ˆtre charg´ auparavant par un transfert e e m´moire-registre ou registre-registre. e Finalement, on peut imaginer une machine ` 0 r´f´rence, o` les positions a ee u des deux op´randes et du r´sultat sont implicites. On obtient, par exemple, e e une machine ` pile. Toute op´ration d´pile les deux valeurs de sommet de pile a e e comme op´randes, et empile le r´sultat de l’op´ration. Une instruction est donc e e e de la forme : PILE[Sp+1] ←− PILE[Sp] + Pile[Sp+1] ; Sp ←− Sp+1, si Sp pointe sur le dernier emplacement occup´ et si la pile progresse en diminuant e Sp. 1.4.2 Instructions de transfert entre m´moire et registres e

Pour r´aliser un transfert de ou vers la m´moire, il faut pouvoir d´signer un e e e emplacement en m´moire, c’est-`-dire fournir l’adresse de son premier octet, e a et sa taille en nombre d’octets. Taille de transferts La taille n’est pas ` proprement parler un op´rande a e de l’instruction. Les tailles des transferts disponibles sont le plus souvent des constantes, en petit nombre. En g´n´ral les tailles pr´vues vont de 1 octet (la e e e plus petite unit´ adressable sur une machine) jusqu’` la taille du plus long e a mot manipulable par le jeu d’instructions, qui est aussi la taille des registres de donn´es (Cf. Chapitres 9 et 15). Sur sparc on trouve ainsi des transferts de e 1, 2, ou 4 octets ; on trouve aussi un transfert double de 8 octets, qui concerne deux registres de num´ros cons´cutifs. e e Noter toutefois qu’il existe sur le vax une instruction de copie de blocs m´moire, dont la taille est un vrai param`tre, donn´ par exemple par le contenu e e e d’un registre, ` l’ex´cution. Un telle instruction a un effet ´quivalent ` celui a e e a d’une boucle de transferts de taille fixe. Elle peut avoir un int´rˆt si le procesee seur garantit une ex´cution plus rapide de la forme ` instruction unique, par e a rapport ` la forme avec boucle (transferts de taille fixe, comptage et branchea ments explicites). Sp´cification compl`te des transferts Pour r´aliser un transfert de ou e e e vers un (ou plusieurs) registres, il faut d´signer un registre (par son num´ro) e e et ´ventuellement un sous-champ de ce registre. e Prenons l’exemple du jeu d’instructions sparc. Il y a 32 registres de 32 bits. Les transferts m´moire sont de taille 1, 2, 4 ou 8 octets. Une instruction e de transfert m´moire vers registre est de la forme : LOAD t a r o` t est une e u constante parmi 1, 2, 4, 8 ; a est une adresse d’octet (voir tableau 12.1 pour l’obtention de cette adresse) ; r est un num´ro de registre, dans l’intervalle e [0, 31]. Pour un transfert de taille 4, l’op´ration est parfaitement sp´cifi´e, la e e e

1. Le langage machine

281

source et la destination ayant la mˆme taille. Pour des transferts de taille 1 ou e 2, deux questions se posent : puisque la destination (un registre, de 4 octets) est plus grande que le transfert demand´, dans quelle portion du registre doite on ´crire ? Doit-on inscrire une valeur et, si oui, laquelle, dans la portion de e registre inutilis´e ? e Sur le sparc, les transferts ont toujours pour destination la portion de poids faible des registres. La portion de poids fort est compl´t´e, soit par des ee z´ros (on parle alors de transfert non sign´), soit par une recopie du bit de e e poids fort de la portion transf´r´e (on parle alors de transfert sign´). Cette ee e op´ration rappelle bien ´videmment l’op´ration d’extension de format, tenant e e e compte du codage en binaire pur ou compl´ment ` deux, que nous avons ´tudi´e e a e e au chapitre 3, paragraphe 3.2.1. Sur le 68000, la portion d’un registre qui n’est pas destination du transfert est laiss´e intacte. e Sur le sparc, les instructions de transfert m´moire vers registres, de taille e inf´rieure a 4, existent donc en deux versions : la version dite sign´e, et la e ` e version non sign´e. Ces diff´rentes conventions sont illustr´es et d´taill´es dans e e e e e la figure 12.3 (cas du LOAD de sparc). Les noms des instructions sont obtenus en combinant LD (pour LOAD) ou ST (pour STORE), le caract`re sign´ ou non e e du transfert (U pour unsigned, rien pour signed), et un caract`re sp´cifiant e e la taille : B pour byte, c’est-`-dire octet, H pour half, rien pour la taille d’un a mot, D pour double. Dans le cas des transferts doubles, 2 registres R et R’ interviennent. L’instruction n’en d´signe qu’un ; le deuxi`me est implicite, c’est e e le registre de num´ro suivant. De plus, le registre indiqu´ doit avoir un num´ro e e e pair. On retrouve l`, pour l’ensemble des registres, l’´quivalent des contraintes a e d’alignement en m´moire. e Lors d’un transfert registre vers m´moire (cas des STORE du sparc, fie gure 12.3), des questions sym´triques se posent. Si la taille du transfert e est inf´rieure ` celle du registre source, quelle portion du registre doit-on e a transf´rer ? D’autre part, si la taille du transfert est sup´rieure ` l’octet, e e a l’adresse en m´moire doit satisfaire les contraintes de cadrage en m´moire e e mentionn´es au chapitre 4, paragraphe 2.3. Si l’adresse en m´moire est une e e constante, cette contrainte d’alignement est v´rifiable statiquement, c’est-`e a dire avant l’ex´cution, et le programme peut-ˆtre rejet´. En g´n´ral, toutefois, e e e e e l’adresse en m´moire n’est pas une constante ; c’est par exemple le contenu d’un e registre, dans le cas de l’adressage indirect par registre. La contrainte d’alignement est alors v´rifi´e dynamiquement, c’est-`-dire au moment de l’ex´cution e e a e du programme par le processeur.
Nous verrons au chapitre 24 que ces erreurs d’alignement en m´moire lors des e transferts font partie des exceptions ou interruptions logicielles pr´vues dans e un processeur.

282

Le langage machine et le langage d’assemblage

Op´rations LOAD e registre 32 bits R 31 24 23 16 15 87 0 a a+1 a+2 a+3 w x y z M´moire e

Op´rations STORE e 1 octet

transfert MEM → R

taille 4

sign´ e –

inst. LD

MEM → R

2

non

LDUH

MEM → R

2

oui

LDH

MEM → R MEM → R MEM → R, R’

1 1 8

non oui –

LDUB LDB LDD

R → MEM

4

ST

R → MEM R → MEM R, R’ → MEM

2 1 8

– – –

STH STB STD

effet 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] R[7..0] ←− 1 MEM[a+1] R[15..8] ←− 1 MEM[a] ; R[31..16] ←− 2 ext16(0) R[7..0] ←− 1 MEM[a+1] R[15..8] ←− 1 MEM[a] ; R[31..16] ←− 2 ext16(R[15]) R[7..0] ←− 1 MEM[a] ; R[31..8] ←− 3 ext24(0) R[7..0] ←− 1 MEM[a] ; R[31..8] ←− 3 ext24(R[7]) 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] 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] MEM[a] ←− 1 R[15..8] ; MEM[a+1] ←− 1 R[7..0] MEM[a] ←− 1 R[7..0] 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 m´moire et m´moire vers registres du sparc. On e e note ext16(b) (resp. ext24(b)) le mot de 16 (resp. 24) bits obtenu en copiant 16 fois (resp. 24 fois) le bool´en b. e

1. Le langage machine

283

1.4.3

Instructions de rupture de s´quence e

Pour d´finir compl`tement les instructions de rupture de s´quence, il faut e e e sp´cifier, d’une part l’instruction de destination, d’autre part la condition de e branchement. Les branchements sont dits relatifs ou absolus selon la mani`re e d’indiquer l’instruction de destination. Ils sont dits inconditionnels lorsque la condition est la constante bool´enne vrai. Si la condition de branchement a la e valeur faux il y a passage en s´quence. e Branchements relatifs ou absolus Le branchement peut ˆtre relatif ` e a la position courante du compteur programme — l’instruction sp´cifie alors un e d´placement d en avant ou en arri`re par rapport au compteur programme— ou e e absolu — l’instruction sp´cifie une nouvelle valeur v du compteur programme, e qui doit ´craser l’ancienne. L’effet d’une instruction de branchement relatif sur e le compteur programme not´ PC est de la forme : PC ←− PC + d. L’effet d’une e instruction de branchement absolu, au contraire, est de la forme PC ←− v. Que l’on indique un d´placement ou une adresse de destination absolue, il e faut choisir un mode d’adressage : par une constante imm´diate, indirectement e par un registre, avec ou sans d´placement, etc. e Noter que la notion de branchement relatif ou absolu est parfaitement ind´pendante du mode d’adressage direct ou indirect. On peut envisager toutes e les combinaisons. Il existe ainsi sur le sparc une instruction jmpl de branchement inconditionnel, absolu, indirect par registre avec d´placement : le codage e de l’instruction contient deux num´ros de registres n1 et n2 (ou bien un num´ro e e de registre n et une constante relative d). L’effet sur le compteur programme est de la forme PC ←− Regn1 + Regn2 (ou bien PC ←− Regn + d). Il existe aussi une instruction ba de branchement inconditionnel, relatif, imm´diat. e Donn´e du d´placement En cas de branchement relatif, le d´placement est e e e un nombre d’octets, sp´cifiant l’´cart entre la valeur courante de PC et l’adresse e e de l’instruction de destination. Noter que dans la plupart des machines la valeur courante de PC est d´j` sur l’instruction suivante (Cf. Chapitre 14). Le ea d´placement n’est pas un entier tout ` fait quelconque : il est pair si le codage e a des instructions se fait sur un nombre pair d’octets. Sur le processeur sparc, ce d´placement est mˆme toujours multiple de 4, car toutes les instructions e e sont cod´es sur un format fixe de 4 octets (voir paragraphe 1.3). On peut e alors profiter de cette information pour gagner de la place dans le codage des instructions de branchement : au lieu de coder le d´placement exact d, on code e d = d/4, ce qui ´conomise 2 bits. L’effet de l’instruction est alors de la forme : e PC ←− PC + d × 4 (voir tableau r´capitulatif des modes d’adressages 12.1). e Expression d’une condition de branchement Dans un langage de programmation de haut niveau, les conditions des structures conditionnelles ou it´ratives sont des expressions bool´ennes quelconques qui font intervenir des e e

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ˆ difficile de coder ıt une condition quelconque faisant intervenir le contenu des registres ou de la m´moire et d’´ventuels appels de fonctions. e e Une solution consiste ` utiliser les instructions de calcul du langage maa chine pour calculer la valeur bool´enne de l’expression qui conditionne un e branchement. On obtient ainsi, apr`s un certain nombre d’´tapes, une valeur e e bool´enne, rang´e par exemple dans un registre ou une partie de registre. Le e e branchement conditionnel peut ensuite ˆtre effectu´ d’apr`s la valeur de ce e e e registre. On peut donc fabriquer un langage machine suffisant en ajoutant aux instructions de calcul, une unique instruction de branchement conditionnel de la forme BV n a. Cette instruction est un branchement si condition vraie, par exemple absolu, avec adressage absolu. L’effet sur le compteur programme PC est : si Regn = vrai alors PC ←− a sinon PC ←− PC+1. Consid´rons le programme : e
si (A+2*B < 4 et C ≥ 0) alors ... sinon ...

On peut toujours le transformer en :
X : un bool´en { une nouvelle variable, non utilis´e ailleurs } e e X ←− A+2*B < 4 et C ≥ 0 si X alors ... sinon ...

Cette transformation est ais´ment g´n´ralisable ` toutes les structures e e e a conditionnelles ou it´ratives du langage d’actions. Elle permet de comprendre e comment produire une s´quence d’instructions du langage machine correspone dante. Il suffit d’´crire tout d’abord une s´quence d’instructions de calcul et/ou e e de transferts m´moire destin´es ` placer dans un registre, par exemple Reg1 , la e e a valeur bool´enne de la condition (A+2*B < 4 et C ≥ 0). Suit imm´diatement e e une instruction BV 1 a, qui r´alise un branchement d’apr`s la valeur de Reg1 . e e (Pour une explication d´taill´e du codage des structures conditionnelles et e e it´ratives en langage machine, voir chapitre 13, paragraphes 1.3 et 1.4). e En r´alit´ la plupart des processeurs offrent une m´thode interm´diaire e e e e entre l’unique instruction de branchement conditionnel pr´sent´e ici et e e l’hypoth´tique instruction universelle contenant le codage d’une condition e bool´enne quelconque. Ces m´thodes sont bas´es sur l’utilisation des indie e e cateurs arithm´tiques (ou flags en anglais) fournis par le processeur. Dans e certains cas elles s’accompagnent de l’utilisation du mot d’´tat du processeur, e qui permet de stocker temporairement la valeur de ces indicateurs. Indicateurs arithm´tiques et mot d’´tat L’id´e est simple : lors de toute e e e op´ration de calcul, l’unit´ arithm´tique et logique du processeur produit des e e e comptes-rendus sous la forme de 4 bool´ens dits indicateurs arithm´tiques, qui e e peuvent ˆtre stock´s dans une portion de registre interne sp´cialis´, appel´ mot e e e e e d’´tat du processeur. Noter que sur le sparc, les instructions arithm´tiques e e

1. Le langage machine

285

existent en deux exemplaires : une version qui ne touche pas aux indicateurs, et une version qui les met ` jour. a Ces 4 indicateurs sont : Z, qui est vrai si le r´sultat de l’op´ration est 0 ; C, e e qui est vrai si l’op´ration arithm´tique a produit une retenue (C pour Carry) e e et qui, si l’on interpr`te les op´randes et le r´sultat comme des entiers naturels e e e cod´s en binaire pur, signifie que le r´sultat n’est pas codable sur le mˆme e e e nombre de bits que les op´randes ; N, qui est le bit de poids fort du r´sultat e e (si ce r´sultat est interpr´t´ comme le codage en compl´ment ` 2 d’un entier e ee e a relatif, si N vaut 1 alors le r´sultat est n´gatif) ; V, qui n’a de sens que si e e l’on interpr`te les op´randes et le r´sultat comme des entiers relatifs cod´s en e e e e compl´ment ` 2, et qui est vrai si le r´sultat n’est pas repr´sentable sur le mˆme e a e e e nombre de bits que les op´randes (V pour oVerflow). Reprendre le chapitre 3 e pour un expos´ d´taill´ de la signification des divers indicateurs arithm´tiques. e e e e Si l’on consid`re un processeur qui travaille sur des nombres r´els e e repr´sent´s en virgule flottante, il faut tenir compte d’autres indicateurs ; il e e existe pour la repr´sentation en virgule flottante une notion de d´bordement e e pour des valeurs trop petites ou trop grandes, non repr´sentables avec la e pr´cision disponible. e

Expression des conditions de branchement ` base d’indicateurs a arithm´tiques et de mot d’´tat Consid´rons le cas o` les indicateurs e e e u arithm´tiques sont stock´s dans un registre apr`s l’ex´cution de chaque e e e e op´ration arithm´tique. On introduit alors des op´rations de branchement e e e d’apr`s les valeurs de ces indicateurs (mˆme id´e que pour le branchement e e e unique BV pr´sent´ plus haut, mais la condition peut utiliser 4 bool´ens au lieu e e e d’un seul). Sur des processeurs 8 bits comme le 6502, il y a 8 branchements, d’apr`s e la valeur vrai ou faux des 4 bool´ens. e Sur la plupart des processeurs actuels, il y a 16 branchements, selon des fonctions bool´ennes pr´d´finies des indicateurs Z, N, C et V, correspondant e e e aux tests de comparaison usuels entre deux entiers naturels ou relatifs. On trouve ainsi un branchement BLE (Branch on Less or Equal) dont la condition est Z ou (V et non N ou non V et N). Lorsqu’on a effectu´ une soustrace tion entre deux entiers A et B, les bits du registre d’´tat sont tels que cette e condition est vraie si et seulement si A ≤ B, en interpr´tant A et B comme des e entiers relatifs cod´s en compl´ment ` 2, pour faire la comparaison. En effet, e e a Z est vrai quand A = B, et la partie V et non N ou non V et N signifie que A < B, en tenant compte des cas o` la soustraction d´borde. Nous donnons u e les 16 fonctions bool´ennes usuelles au paragraphe 1.5. L’exercice E12.7 ´tudie e e la formule bool´enne associ´e au branchement BLE. e e

286

Le langage machine et le langage d’assemblage

Expression des conditions de branchement ` base d’indicateurs a arithm´tiques sans mot d’´tat Sur certains processeurs, on peut troue e ver des instructions qui combinent un test et un branchement. Par exemple, le processeur mips r10000 fournit une instruction qui combine un test et un branchement conditionnel sur les entiers. La condition est soit l’´galit´ de deux e e registres, soit la comparaison d’un registre par rapport ` z´ro (= 0, < 0, > 0, a e ≤ 0). Consid´rons le fragment de programme : e
A, B : des entiers si A = B alors ... sinon ...

Le code produit est simple : il n’est pas n´cessaire de calculer la valeur de e la condition bool´enne A = B avant d’effectuer un branchement, si les deux e entiers sont dans des registres. On ´crit une seule instruction de la forme e BrEgal 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 soustraction, et en placer le r´sultat dans un registre explicitement manipul´ par le e e programmeur. Sauts ` des sous-programmes Enfin tous les processeurs fournissent un a moyen de transf´rer le contrˆle ` un sous-programme, avec sauvegarde de e o a l’adresse de d´part, pour reprendre le flot normal des instructions quand le e sous-programme se termine. Consid´rons le programme suivant, dans lequel JSR est une intruction de e saut ` un sous-programme, RTS est l’instruction de retour de sous-programme a et Inst-i d´note une instruction de calcul quelconque (ne provoquant pas e de rupture de s´quence). JSR a comme op´rande une ´tiquette qui d´signe e e e e le sous-programme ; l’ex´cution de JSR provoque un branchement (donc e une rupture de s´quence) au sous-programme d´sign´ avec sauvegarde de e e e l’adresse qui suit l’instruction JSR. L’instruction RTS provoque un retour de sous-programme c’est-`-dire un branchement ` l’adresse qui avait ´t´ a a ee pr´c´demment sauvegard´e. En cas de branchements successifs ` des souse e e a programmes, les adresses de retour doivent ˆtre g´r´es en pile. e ee 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’ex´cution de ce programme en terme des instructions Inst-i peut ˆtre e e d´crite par la s´quence : Inst-1 (Inst-5 Inst-6) Inst-2 Inst-3 (Inst-7 e e Inst-8 (Inst-5 Inst-6) Inst-9) Inst-4 dans laquelle nous avons utilis´ une e parenth`se ouvrante chaque fois qu’un appel ` un sous-programme (instruce a tion JSR) est ex´cut´ et une parenth`se fermante lors du retour correspondant e e e

1. Le langage machine

287

(instruction RTS). Lors du premier appel (ex´cution de JSR SP1) l’adresse saue vegard´e est 3 ; l’ex´cution de l’instruction RTS effectue le retour ` cette adresse. e e a L’instruction de branchement avec sauvegarde de l’adresse de d´part est e g´n´ralement sp´cifique : il s’agit d’une instruction de branchement qui n’est e e e pas ordinaire puisqu’il lui faut int´grer une sauvegarde. Or apr`s le saut il est e e trop tard pour sauvegarder l’adresse d’o` l’on vient ; avant le saut il n’est pas u toujours tr`s simple de la calculer. Selon les machines l’adresse sauvegard´e e e est l’adresse qui suit le branchement, ou l’adresse du branchement elle-mˆme ; e le retour de sous-programme doit ˆtre coh´rent avec ce choix. e e Les instructions de branchement ` des sous-programmes peuvent ˆtre aba e solues ou relatives, et l’adressage peut-ˆtre direct ou indirect par registre, avec e ou sans d´placement. Sur le sparc on dispose de deux instructions de brane chement avec sauvegarde, qui peuvent donc ˆtre utilis´es pour coder des sauts e e a ` des sous-programmes : call et jmpl. call est un branchement relatif ` a adressage direct, qui sauvegarde sa propre adresse dans un registre, toujours le mˆme. jmpl est un branchement absolu ` adressage indirect par registre avec e a d´placement, qui sauvegarde sa propre adresse dans un registre sp´cifi´ par e e e l’instruction. Nous d´taillons au chapitre 13 l’utilisation des instructions de saut ` des e a sous-programmes, et la structure de pile sous-jacente, pour le codage des actions et fonctions param´tr´es des langages imp´ratifs usuels, comme celui e e e pr´sent´ au chapitre 4. e e

1.4.4

Combinaison test/instruction sans branchement

On trouve sur certains processeurs, par exemple mips r10000, ultrasparc, PentiumPro, des instructions de transfert de registres conditionnels. Une telle instruction est conditionn´e par le r´sultat de l’op´ration pr´c´dente e e e e e et permet d’´viter des branchements explicites. Nous empruntons ` [SL96] e a l’exemple suivant :
A, B : des entiers A ←− 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-`-dire r3 ←− r1 − r2 } a MOV COND GT r3, r2, r1 { c’est-`-dire : si r3 > 0 alors r1 ←− r2 } a

La question int´ressante avec ce type de langage machine est : comment e ´crire un algorithme de traduction des langages de haut niveau en langage e machine qui profite au mieux de ces instructions sophistiqu´es ? Les compie lateurs pour machines de ce type font appel ` des techniques assez ´labor´es a e e d’optimisation de code.

288

Le langage machine et le langage d’assemblage

1.4.5

Instructions sp´ciales e

La plupart des langages machines comportent, outre les instructions usuelles pr´sent´es jusque l`, des instructions sp´cifiques impos´es par des e e a e e contraintes d’ordres assez divers. • Par exemple, on trouve sur certaines machines de la famille x86 des instructions sp´cifiques in et out pour le contrˆle des p´riph´riques e o e e d’entr´e/sortie. Nous verrons au chapitre 16 un exemple d´taill´ dans lequel e e e la commande du coupleur d’entr´e/sortie est compl`tement assimilable ` une e e a ´criture en m´moire, et peut donc se faire par des instructions de transfert e e vers la m´moire d´j` d´finies. Du point de vue du concepteur du langage mae ea e chine, cela implique que les adresses d’acc`s ` la m´moire, telles qu’elles sont e a e produites par le processeur (qui les lit dans le codage des instructions) ` desa tination des boˆ ıtiers m´moire (Cf. Chapitre 15) sont ensuite aiguill´es vers de e e la m´moire v´ritable ou vers un circuit d’entr´es/sorties, d’apr`s leur valeur ; e e e e typiquement, un intervalle d’adresses est r´serv´ aux circuits d’entr´es/sorties. e e e Si les connexions du processeur ` la m´moire et aux p´riph´riques ne v´rifient a e e e e pas cette contrainte, le processeur doit ´mettre lui-mˆme une indication d’aie e guillage, et cela ne peut se faire que si l’instruction elle-mˆme comporte l’ine formation n´cessaire. D’o` l’existence d’instructions sp´cifiques in et out. e u e • Le processeur sparc comporte une instruction tr`s sp´cifique sethi (pour e e SET High bits) n´cessaire ` l’installation d’une valeur imm´diate de 32 bits e a e dans un registre. En effet, toutes les instructions sparc sont cod´es sur 32 e bits exactement, sans mot d’extension. Une valeur imm´diate v de 32 bits ne e peut donc pas tenir dans ce codage ; il n’y a pas d’instruction de la forme set v, r, o` v est une valeur imm´diate de 32 bits et r un num´ro de registre. u e e Comment r´aliser une telle op´ration ? Le jeu d’instructions sparc propose e e de r´aliser l’affectation d’une constante 32 bits ` un registre en deux inse a tructions du langage machine : la premi`re affecte les 22 bits de poids fort e du registre ; la deuxi`me met ` jour les 10 bits de poids faible sans modifier e a les 22 bits de poids fort (une instruction comme add ou or avec une valeur imm´diate sur 13 bits convient). Pour faciliter l’´criture de tels couples d’inse e tructions, le langage d’assemblage offre des macro-notations %hi et %lo qui permettent d’extraire respectivement les 22 bits de poids fort et les 10 bits de poids faible d’une constante. On ´crit ainsi : sethi %hi(0x0A08CF04), %r1 ; e or %r1, %lo(0x0A08CF04), %r1. En langage machine, la valeur imm´diate e contenue dans l’instruction or est 0x304 et celle contenue dans l’instruction sethi est 0x028433. • On trouve ´galement des instructions d’addition ADDX et de soustrace tion SUBX qui prennent en compte comme troisi`me op´rande la retenue de e e l’op´ration pr´c´dente (pr´sente dans le bit C du mot d’´tat). En enchaˆ e e e e e ınant de telles instructions, on r´alise l’addition d’entiers cod´s en compl´ment ` e e e a 2 ou en binaire pur sur plusieurs mots de 32 bits. L’exercice E12.6 d´taille e l’utilisation de cette instruction.

1. Le langage machine

289

• Finalement, la plupart des langages machines comportent des instructions sp´cialement con¸ues pour faciliter la traduction des langages de haut niveau. e c Nous d´taillons au chapitre 13 l’exemple des instructions link et unlink du e 68000, ou save et restore du sparc.

1.5

Description du langage machine par le lexique d’une machine s´quentielle ` actions e a

Pour un algorithme donn´, pour comprendre le langage machine, on peut e d´finir une machine s´quentielle ` actions (Cf. Chapitre 5) dont : 1) les actions e e a sont les instructions de calcul disponibles du langage machine ; 2) les pr´dicats e sont les conditions de branchement offertes par le langage machine ; 3) les transitions sont les branchements conditionnels ou inconditionnels et le passage en s´quence du langage machine. e Ces machines s´quentielles ont un lexique restreint caract´ris´ par : des e e e branchements uniquement binaires, des op´rations sur des vecteurs de bits de e longueur fixe, pris dans des registres ou dans le tableau MEM repr´sentant la e m´moire ; des pr´dicats de branchement pris dans un ensemble pr´d´fini de e e e e formules bool´ennes ` base d’indicateurs N, Z, C et V. e a La figure 12.4 donne le lexique d’une telle machine s´quentielle ` ace a tions. La figure 12.5 donne un exemple d’algorithme exprim´ comme machine e s´quentielle ` actions. Nous verrons au chapitre 13 comment obtenir facilement e a a ` partir de cette machine un programme en langage machine ou un texte du langage d’assemblage.

1.6

Algorithme d’interpr´tation du langage machine e

Une autre mani`re de comprendre le langage machine est d’en donner un e algorithme d’interpr´tation. e Lorsque l’on travaille sur un ordinateur dont le processeur a pour langage machine pr´cis´ment le langage machine consid´r´, le programme en lane e ee gage machine est directement interpr´t´ par le processeur, qui constitue une ee r´alisation cˆbl´e de l’algorithme d’interpr´tation. Nous pr´cisons cette notion e a e e e au chapitre 14. Lorsque le langage machine est ´mul´ (Cf. Paragraphe 1.7.2) sur un ordinae e teur quelconque, l’algorithme d’interpr´tation est exprim´ dans un langage de e e programmation comme C, compil´ (c’est-`-dire traduit en langage machine de e a l’ordinateur hˆte) puis ex´cut´ sur cet ordinateur (voir chapitre 18 pour plus o e e de d´tails sur la diff´rence entre interpr´tation et compilation). e e e 1.6.1 Un petit langage machine

Nous consid´rons un langage machine ` 5 instructions. La nature de l’inse a truction est cod´e sur un octet. Il y a toujours un octet d’extension contenant e

290

Le langage machine et le langage d’assemblage

{ Types mots de 8, 32 bits : } Vecteur8 : un tableau sur [0..7] de bool´ens e Vecteur32 : un tableau sur [0..31] de bool´ens e { Les 8 registres : } R : un tableau sur [0..7] de Vecteurs32 NumReg : le type entier sur 0..7 { La m´moire : } e MEM : un tableau sur [0..tmem−1] de Vecteurs8 { Les indicateurs d’op´rations arithm´tiques } e e N, Z, C, V : des bool´ens e { Les pr´dicats : } e fonctionA −→ un bool´en e { fonctionA = vrai } fonctionNev −→ un bool´en e { fonctionNev = faux } fonctionN −→ un bool´en e { fonctionN = N } fonctionZ −→ un bool´en e { fonctionZ = Z } fonctionC −→ un bool´en e { fonctionC = C } fonctionV −→ un bool´en e { fonctionV = V } fonctionNbar −→ un bool´en e { fonctionN = non N } fonctionVbar −→ un bool´en e { fonctionVbar = non V } fonctionCbar −→ un bool´en e { fonctionCbar = non C } fonctionZbar −→ un bool´en e { fonctionZbar = non Z } fonctionBGU −→ un bool´en e { fonctionBGU = non (C ou Z) } fonctionBGE −→ un bool´en e { fonctionBGE = non (N ouexcl V) } fonctionBG −→ un bool´en { fonctionBG = non (Z ou (N ouexcl V)) } e fonctionBLEU −→ un bool´en e { fonctionBLEU = C ou Z } fonctionBL −→ un bool´en e { fonctionBL = (N ouexcl V) } fonctionBLE −→ un bool´en e { fonctionBLE = Z ou (N ouexcl V) } { Quelques actions : } SoustReg : une action (les donn´es un, deux, trois : 3 NumReg) e 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 ←− 0 si (non R[un]31 et R[deux]31 ) ou (X31 et (non R[un]31 ou R[deux]31 )) alors C ←− 1 sinon C ←− 0 Z ←− si X31..0 = 0 alors 1 sinon 0 N ←− X31 R[trois] ←− X31..0 Fig. 12.4 – Le langage machine d´crit par le lexique d’une machine s´quentielle avec e e actions. On ne d´crit ici que l’instruction soustraction avec mise ` jour des e a indicateurs arithm´tiques e

1. Le langage machine

291

{ Calcul du pgcd de deux entiers A0 et B0 strictement positifs par soustractions successives } { Posons A = A0 et B = B0 } tantque A = B si A > B alors A ←− A − B sinon B ←− B − A { propri´t´ : A = B = pgcd(A0, B0) } ee

SoustReg (1,2,3) fonctionZ fonctionZbar SoustReg (1, 2, 3) fonctionBGU fonctionBLEU SoustReg(1,2,1) SoustReg(2,1,2) fonctionA

fonctionA

fonctionA Fig. 12.5 – Traduction d’un algorithme en machine s´quentielle ` actions et lexique rese a treint : la machine peut bien sˆr ˆtre simplifi´e. Initialement, A0 et B0 sont u e e respectivement dans les registres 1 et 2.

292

Le langage machine et le langage d’assemblage

un num´ro de registre. Les instructions sont : ADD (addition d’un registre e et d’une valeur imm´diate, donn´e dans un octet d’extension), BT (branchee e ment inconditionnel absolu, adressage direct par registre, dont le num´ro est e donn´ dans un octet d’extension), BZ (branchement si le r´sultat de la derni`re e e e op´ration de calcul ´tait nul, relatif, direct par registre, num´ro dans un octet e e e d’extension), INCRR (incr´mentation d’un registre, num´ro dans un octet d’exe e tension) et INCRM (incr´mentation d’un mot m´moire, adressage indirect par e e registre, num´ro dans un octet d’extension). Une machine proche de celle-ci e est utilis´e au chapitre 14 ; une autre plus compl`te au chapitre 22. e e

1.6.2

Interpr´tation e

Pour d´crire l’interpr´tation d’un programme ´crit dans notre petit langage e e e machine, nous supposons ici que le programme est install´ en m´moire, ` partir e e a de l’adresse d´but. Le probl`me g´n´ral de l’installation du codage binaire d’un e e e e programme en m´moire, ou chargement, est ´tudi´ au chapitre 18. e e e Chaque instruction est cod´e sur 1 octet, plus un ou deux octets d’extene sion. L’algorithme d’interpr´tation est donn´ figure 12.6. e e Noter la complexit´ de certaines actions, par exemple celle n´cessaire ` e e a l’interpr´tation d’une instruction d’incr´mentation en m´moire, avec adrese e e sage indirect par registre : MEM[Reg[NumReg]] ←− MEM[Reg[NumReg]] + 1. Nous verrons au chapitre 14 les contraintes qu’impose une telle action sur ce qu’on appelle la partie op´rative du processeur, c’est-`-dire l’unit´ de calcul, e a e les registres et les bus. Au niveau algorithmique, il est facile de remplacer cette action complexe par une action ´quivalente : e
temp ←− MEM[Reg[NumReg]] temp ←− temp + 1 MEM[Reg[NumReg]] ←− temp

qui fait apparaˆ un nouveau registre temp. Cette nouvelle forme permet de ıtre s´parer l’acc`s en ´criture de l’acc`s en lecture ` la m´moire. e e e e a e Noter ´galement le cas d’erreur lorsque le code d’instruction lu ne correse pond ` aucune instruction valide (il est en effet possible que le codage de a l’ensemble des instructions en vecteurs de n bits ne constitue pas une fonction surjective, comme nous l’avons signal´ au paragraphe 1.3.1). Dans un e programme d’interpr´tation du langage machine, on peut ´mettre un message e e d’erreur. Lorsque le langage machine est directement interpr´t´ par le procesee seur, cette erreur doit ´galement ˆtre d´tect´e, et signal´e au programmeur. e e e e e Nous y revenons au chapitre 24, paragraphe 1.2. En toute rigueur, il faudrait pr´voir une d´tection d’erreur lors de la lecture e e d’un num´ro de registre dans un octet : NumReg ←− MEM[PC], ` moins de e a supposer que toute configuration d’un vecteur de 8 bool´ens correspond effectie vement ` un num´ro de registre existant, c’est-`-dire que la machine comporte a e a 256 registres.

1. Le langage machine

293

lexique Vecteur8 : un tableau sur [0..7] de bool´ens e Vecteur32 : un tableau sur [0..31] de bool´ens e Reg : le tableau sur 0..31 de Vecteurs32 { Les 32 registres } NumReg : le type entier sur 0..7 ; adresse : le type entier sur 0..tmem−1 MEM : un tableau sur [adresse] de Vecteurs8 { La m´moire } e Z : un bool´en e { Indicateur d’op´ration arithm´tique } e e ADD, BT, BZ, INCRR, INCRM : les constantes de type Vecteur8 : 0, 1, 2, 3, 4 Inst : un Vecteur8 ; PC : une adresse d´but : une adresse ; taille : un entier > 0 e { MEM[d´but ... d´but+taille] contient les instructions } e e algorithme PC ←− d´but e tantque PC < d´but + taille e Inst ←− MEM[PC] { premier octet } ; PC ←− PC + 1 { Lire no registre, n´cessaire pour toutes les instructions (1 octet) } e NumReg ←− MEM[PC] ; PC ←− PC + 1 { lecture autres octets selon l’instruction } selon Inst : Inst = ADD : { ajout de la valeur imm´diate, troisi`me octet : } e e Reg[NumReg] ←− Reg[NumReg] + MEM[PC] ; PC ←− PC + 1 si Reg[NumReg] = 0 alors Z ←− 1 sinon Z ←− 0 Inst = BT : { NumReg est le num´ro du registre d’indirection } e PC ←− Reg[NumReg] Inst = BZ : { NumReg est le num´ro du registre d’indirection } e si Z alors { branchement effectif } PC ←− PC + Reg[NumReg] sinon { PC ←− PC + 1 d´j` effectu´ : passage en s´quence } ea e e Inst = INCRR : { NumReg est le num´ro du registre ` incr´menter } e a e Reg[NumReg] ←− Reg[NumReg] + 1 si Reg[NumReg] = 0 alors Z ←− 1 sinon Z ←− 0 Inst = INCRM : { NumReg est le num´ro du registre d’indirection, e qui donne l’adresse de l’emplacement m´moire ` e a incr´menter } e MEM[Reg[NumReg]] ←− MEM[Reg[NumReg]] + 1 si MEM[Reg[NumReg]] = 0 alors Z ←− 1 sinon Z ←− 0 sinon : { code d’instruction invalide. Cf. Chapitre 24 } Fig. 12.6 – Algorithme d’interpr´tation du petit langage machine e

294

Le langage machine et le langage d’assemblage

1.7

Crit`res de choix d’un ensemble d’instructions e

Nous r´sumons ci-dessous quelques-unes des contraintes ` prendre en e a compte globalement pour le choix d’un jeu d’instructions. C’est un probl`me e qui ne se pose qu’aux concepteurs de processeurs, mais l’utilisateur d’un processeur doit en ˆtre conscient. e 1.7.1 Contraintes issues du coˆ t du circuit interpr`te u e

Selon que l’on privil´gie la vari´t´ des instructions offertes par le langage e ee machine, ou bien le coˆt du circuit interpr`te (le processeur), on construit des u e jeux d’instructions assez diff´rents. e L’exemple typique consiste ` comparer un sparc et un 68000. Le sparc est a une machine dite RISC (pour Reduced Instruction Set Computer). En r´alit´ e e l’ensemble des op´rations effectivement disponibles n’est pas si r´duit que cela, e e mais les modes d’adressage sont rudimentaires : toute op´ration arithm´tique e e se fait sur des registres, et il n’existe que deux instructions sp´cifiques Load e et Store pour r´aliser des acc`s m´moire. Les instructions sont codables sur e e e un format fixe, et leur interpr´tation est algorithmiquement simple. Le circuit e interpr`te est donc simple, lui aussi. La simplicit´, en termes de mat´riel, se e e e traduit par la taille du circuit (en nombre de portes par exemple). Il reste donc de la place pour ´quiper le processeur d’un grand nombre de registres (peut e ˆtre de l’ordre de 500, nous verrons au chapitre 13 comment utiliser ce banc de e registres du sparc pour rendre efficace le codage des proc´dures d’un langage e d’actions). D’autre part le format fixe des instructions permet de les ex´cuter e toutes dans le mˆme temps. e Le 68000, en revanche, autorise g´n´ralement 8 modes d’adressage pour les e e op´rations. Les instructions ont un format variable selon qu’elles font r´f´rence e ee ou non ` un op´rande en m´moire, qui doit ˆtre d´sign´ par son adresse. a e e e e e L’algorithme d’interpr´tation est plus complexe. Le processeur est microproe gramm´ (Cf. Chapitre 10) et les interpr´tations des instructions ont des dur´es e e e diff´rentes. e 1.7.2 Probl`mes de compatibilit´ e e

La d´finition d’un langage machine pour une nouvelle machine n’est jae mais totalement libre. Une nouvelle machine est en g´n´ral une ´tape dans e e e une gamme de machines similaires plus anciennes, pour lesquelles il existe de nombreux programmes. Lorsqu’un constructeur propose la machine de g´n´ration n + 1, il doit ase e surer que les programmes qui fonctionnent sur les machines de g´n´ration n e e peuvent ˆtre r´utilis´s. Cette notion cache de nombreux niveaux. Elle peut e e e signifier, simplement, que le constructeur fournit avec sa nouvelle machine un syst`me et un compilateur pour chaque langage qui ´tait disponible auparae e vant. Un utilisateur ayant programm´ en C doit transmettre d’une machine e

1. Le langage machine

295

a ` l’autre les fichiers source de ses programmes, les compiler avec le nouveau compilateur, et les ex´cuter. e Malheureusement les utilisateurs tr`s anciens ont parfois perdu les fichiers e source de leurs programmes, ou bien, ce qui est le cas pour presque tous les logiciels commerciaux, ils n’avaient achet´ le programme que sous sa forme e ex´cutable. Ils ne disposent donc plus que du fichier objet, c’est-`-dire un proe a gramme en langage machine de g´n´ration n. Le constructeur doit alors garane e tir la compatibilit´ ascendante de ses machines, c’est-`-dire faire en sorte que e a le fichier objet de g´n´ration n soit interpr´table sur la machine de g´n´ration e e e e e n + 1. Il y a essentiellement deux solutions. Si les deux machines sont conceptuellement proches l’une de l’autre, le jeu d’instructions de la nouvelle machine est d´fini comme un sur-ensemble du jeu d’instructions de l’ancienne. Les ane ciens programmes sont ex´cutables directement sur la nouvelle machine ; ils e n’utilisent qu’une partie du nouveau jeu d’instructions, et sont donc peut-ˆtre e moins efficaces que ce qu’ils auraient pu ˆtre en profitant au mieux du nouveau e jeu d’instructions. C’est le cas entre sparc et ultrasparc. Si les deux machines sont tr`s diff´rentes, le constructeur fournit un e e ´mulateur du langage machine n sur la machine n + 1. Un ´mulateur est un e e programme, ´crit dans un langage quelconque, par exemple C, et compil´ sur e e la nouvelle machine, avec le nouveau compilateur C. Ce programme est un interpr`te du langage machine n. Le code objet des anciens programmes n’est e donc plus directement interpr´t´ par un processeur, mais par un programme, ee lui-mˆme compil´ et ex´cut´ sur un autre processeur. e e e e C’est le cas des macintosh : les processeurs 68000 et PowerPC sont tr`s e diff´rents et il n’y a pas de compatibilit´ ascendante de leurs jeux d’instruce e tions. Apple fournit donc un ´mulateur de 68000 parmi les programmes du e logiciel de base fourni avec les machines ` PowerPC. a 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’instructions usuelles du mod`le Von Neumann, des instructions tr`s sp´cifiques e e e destin´es ` la traduction des programmes en langage de haut niveau. e a On peut dire ainsi que le 68000 est une machine pour la compilation des langages ` structures de blocs (Pascal, C, Ada, etc.). Le jeu d’instructions a comporte les instructions link et unlink qui ne servent qu’` g´rer l’allocation a e dynamique de m´moire pour les variables d’un tel type de langage (Cf. Chae pitre 13). De la mˆme mani`re, le processeur sparc offre les instructions save et e e restore qui permettent de d´caler une fenˆtre sur le banc de registres. e e Ce m´canisme permet l’allocation de m´moire pour le contexte local d’une e e proc´dure, et le passage de param`tres directement dans les registres, sans e e

296

Le langage machine et le langage d’assemblage

acc`s m´moire. e e De mani`re g´n´rale, la conception des processeurs est de plus en plus e e e indissociable de la compilation des langages de haut niveau. Si l’on pousse le raisonnement ` l’extrˆme, le jeu d’instructions d’une maa e chine peut ˆtre enti`rement con¸u pour l’ex´cution de programmes ´crits dans e e c e e un langage donn´. On a ainsi construit des machines LISP, des machines e PROLOG, etc. On entend parler ´galement de machines JAVA. Dans ce dere nier cas, de quoi s’agit-il exactement ? Les concepteurs du langage JAVA en ont fait la publicit´ avec des arguments de portabilit´ et de s´curit´ : JAVA e e e e est d’abord compil´ en une forme interm´diaire (appel´e byte code) qui est e e e ensuite ex´cutable, par interpr´tation, sur tout ordinateur qui poss`de l’ine e e terpr`te ad´quat. L’ex´cution sous forme d’interpr´tation est cens´ment plus e e e e e sˆre que l’ex´cution par le processeur d’un programme en langage machine ; u e en effet, l’outil d’interpr´tation peut effectuer quelques v´rifications sur les e e op´rations qu’il effectue. Si maintenant on propose un processeur dont le lane gage machine est exactement le format interm´diaire produit par la premi`re e e phase de compilation de Java, on obtient une machine Java. En g´n´ral, la question se pose de savoir s’il vaut mieux concevoir une e e machine d´di´e ` un langage particulier, et capable d’assurer une ex´cution e e a e efficace des programmes ´crits dans ce langage, ou bien concevoir un bon come pilateur de ce langage pour machine universelle.

2.

Le langage d’assemblage

Le langage machine offre d´j` tout ce qui est th´oriquement n´cessaire pour ea e e programmer n’importe quel algorithme. Il lui manque une notation lisible et manipulable par un ˆtre humain. Le langage d’assemblage est introduit ` cet e a effet et offre donc : – tout d’abord une notation textuelle ais´ment lisible du langage mae chine, c’est-`-dire : 1) une notation des op´rations de la machine (les a e mn´moniques) et de leurs op´randes, 2) un ensemble de directives de e e r´servation et d’initialisation de la m´moire e e – la possibilit´ d’introduire des commentaires e – une notion de zones distinctes dans un programme : la zone des instructions (TEXT) et la zone de donn´es (DATA, BSS), ainsi qu’une notation qui e permet de rep´rer facilement les portions de programme appartenant ` l’une e a ou l’autre de ces deux zones. – un m´canisme de nommage des positions dans la zone des instructions ou e dans la zone de donn´es, qui permet de s’abstraire des valeurs explicites e d’adresses m´moire. e Notons qu’il peut exister plusieurs langages d’assemblage pour le mˆme lane gage machine. Les diff´rences r´sident en g´n´ral dans la notation des modes e e e e

2. Le langage d’assemblage

297

d’adressage des op´randes d’instructions, ou dans les mots-cl´s utilis´s pour e e e les directives de r´servation m´moire. Inversement, un constructeur offre soue e vent des langages d’assemblage aussi similaires que possible pour des machines ´quip´es de processeurs diff´rents. Ainsi la syntaxe des assembleurs SUN este e e elle la mˆme, en ce qui concerne la d´finition des zones de donn´es, que le e e e processeur soit un 68000 ou un sparc.

2.1

Aspects de lexicographie et macros

Les langages d’assemblage usuels offrent la possibilit´ d’introduire des come mentaires, d´limit´s par exemple comme en C par : /* et */ ou par un cae e ract`re, par exemple ’ !’ et la fin de ligne qui suit. e Ils offrent ´galement la notation des constantes enti`res dans plusieurs bases e e (typiquement d´cimal, octal — pr´fixe 0 —, hexad´cimal — pr´fixe 0x), ainsi e e e e que la notation des constantes enti`res du code ASCII directement sous forme e de caract`res : ’a’ repr´sente l’entier not´ 97 en d´cimal (voir chapitre 3 pour e e e e des d´tails sur le codage des caract`res). e e Enfin il est en g´n´ral possible, soit dans l’assembleur, soit dans un outil e e situ´ en amont et appel´ macro-assembleur, de d´finir des constantes textuelles. e e e Ce m´canisme permet d’´viter une redondance d’´criture, qui m`ne souvent ` e e e e a des incoh´rences lors des modifications. On ´crit ainsi en d´but de fichier une e e e ligne de la forme tailleMax=400. Lors de l’assemblage, une premi`re passe sur e le texte du programme remplace toute occurrence de la chaˆ de caract`res ıne e tailleMax (sauf dans les commentaires) par la chaˆ 400. Ce m´canisme ıne e est assez limit´, mais d´j` tr`s utile. Un outil comme m4, disponible dans les e ea e environnements unix, permet de d´finir des macros param´tr´es ; il est ainsi e e e possible de nommer une suite d’instructions qui apparaˆ souvent. ıt

2.2

Structuration des programmes

Un programme en langage d’assemblage est destin´ ` ˆtre traduit en laneae gage machine, puis plac´ en m´moire vive pour ex´cution par le processeur. e e e Un programme comprend g´n´ralement des instructions et des donn´es (rese e e pectivement l’algorithme et les descriptions de variables du lexique, dans la terminologie du langage d’actions pr´sent´ au chapitre 4). Le codage binaire e e du programme comporte donc le codage d’instructions, et le codage de donn´es e (des entiers, des caract`res, des donn´es structur´es, etc.). e e e Or en langage machine, rien n’est typ´. Le vecteur de bool´ens 00101010 e e peut ˆtre vu aussi bien comme : un entier naturel cod´ en binaire pur, le e e code ASCII d’un caract`re, 2 champs du codage d’une instruction, la partie e exposant du codage d’un r´el, etc. Si la zone de m´moire sur laquelle on fait e e travailler le processeur contient des chaˆ de bits qui correspondent au codage ınes d’op´rations valides, on peut ex´cuter ces op´rations. Il n’y a pas de diff´rence e e e e intrins`que entre donn´es et programmes. e e

298

Le langage machine et le langage d’assemblage

Pour les besoins de la programmation, le langage d’assemblage fournit une notion de zone dans les programmes, et une notation correspondante. Les zones sont : TEXT pour les instructions ; DATA pour les donn´es statiques, c’est-`e a dire dont la valeur est donn´e directement dans le texte du programme ; BSS e pour les donn´es seulement dynamiques. L’influence de la distinction entre les e zones DATA et BSS est expliqu´e au chapitre 18. e Retenons simplement pour l’instant que la zone TEXT contient les instructions, et la zone DATA un ensemble de donn´es initialis´es que l’on d´sire placer e e e en m´moire vive lors de l’ex´cution du programme. Ces donn´es se comportent e e e comme des variables globales d’un langage de programmation imp´ratif : elles e ont la dur´e de vie du programme. e

2.3

Nommage des adresses ou ´tiquettes e

Pour rep´rer les instructions dans la zone TEXT, ou les donn´es dans la e e zone DATA, le langage d’assemblage fournit la notion d’´tiquette. Ce m´canisme e e permet de faire abstraction des adresses absolues et des d´calages exacts, dans e le cas des branchements par exemple. On ´crit typiquement, dans un langage d’assemblage possible du processeur e sparc (BNE, SUBcc et BA sont des mn´moniques. voir paragraphe suivant) : e
boucle: SUBcc r1, r2, r3 BNE fin ! n instructions ici BA boucle

fin:

Les branchements conditionnels du sparc sont relatifs, et BNE fin exprime donc le d´calage des adresses entre la position de l’instruction elle-mˆme et la e e cible du branchement, situ´e ` l’´tiquette fin. En langage machine, le code e a e de l’instruction BNE fin comprend un entier relatif qui donne le d´placement e en nombre d’octets, divis´ par 4, c’est-`-dire le d´placement en nombre d’inse a e tructions puisque toutes les instructions du sparc sont cod´es sur 4 octets. e Pour BNE fin on trouve un d´placement de n + 2 ; pour BA boucle, on trouve e −(n + 2). La traduction des instructions de la forme BNE fin du langage d’assemblage en instructions du langage machine demande le calcul du d´calage effectif. C’est e un travail r´alis´ par l’assembleur, qui r´alise une analyse lexicale du texte du e e e programme, et associe ` chaque ´tiquette une adresse relative au d´but du a e e programme. Dans l’exemple ci-dessus, on associe 0 ` boucle et (n + 3) × 4 ` a a fin. C’est suffisant pour calculer les d´calages signal´s ci-dessus. e e Lorsque les branchements sont absolus, l’utilisation d’une ´tiquette permet e de mani`re similaire de faire abstraction de l’adresse absolue destination du e branchement. Du point de vue du programmeur en langage d’assemblage, il n’est donc pas n´cessaire de savoir si les branchements sont relatifs ou absolus. e

2. Le langage d’assemblage

299

En revanche l’assembleur doit maintenant traduire les ´tiquettes en adresses e absolues, dans la m´moire vive de la machine, au moment de l’ex´cution. Pour e e cela il faut connaˆ l’adresse de base ` laquelle le programme sera install´ ; ıtre a e cette information n’est pas toujours disponible au moment de l’assemblage du programme. Il se pose alors un nouveau probl`me : comment produire un e programme en langage machine ind´pendant de sa position d’installation en e m´moire ? Un tel objet est appel´ code translatable. Nous ´tudions sa produce e e tion au chapitre 18, paragraphe 2.3. Dans des ordinateurs simples o` les programmes sont toujours install´s ` u e a partir de la mˆme adresse en m´moire, il n’est pas n´cessaire de produire du e e e code translatable.

2.4

Zone des instructions, mn´moniques et notation des e op´randes e

Observons Figure 12.7 un exemple, donn´ dans un langage d’assemblage e possible pour processeur sparc. On associe ` chaque instruction un mn´monique, c’est-`-dire un nom court a e a et ´vocateur. Par exemple LDUH signifie LoaD Unsigned Half, c’est-`-dire chare a gement non sign´, de taille demi-mot. e Une instruction tient en g´n´ral sur une ligne, commen¸ant par un e e c mn´monique d’instruction, suivi de notations d’op´randes s´par´s par des vire e e e gules. Il semble que le terme langage d’assemblage vienne de l` : il s’agit d’asa sembler ces diff´rentes parties pour constituer une instruction. e Les param`tres des instructions peuvent ˆtre : des registres, des constantes, e e des d´signations d’adresses en m´moire par l’interm´diaire de modes d’adrese e e sage plus ou moins sophistiqu´s. e Les registres sont en g´n´ral nomm´s, par des noms dans lesquels apparaˆ e e e ıt une num´rotation, comme r1, r2, .... Il peut exister plusieurs noms pour e un mˆme registre physique : on parle d’alias. Lorsqu’il y a tr`s peu de registres, e e les noms des registres peuvent ˆtre int´gr´s aux mn´moniques. On trouve par e e e e exemple dans un langage d’assemblage pour processeur 6502 les mn´moniques e LDA, LDY et LDX qui correspondent au chargement des registres A, Y et X. Les constantes enti`res sont not´es en utilisant une des bases disponibles, e e ou mˆme par l’interm´diaire du code ASCII (Cf. Paragraphe 2.1). L’utilisation e e des constantes textuelles permet d’´crire ADD r1, MAX, r4 ` la place de ADD e a r1, 4, r4. Noter que l’instruction ADD du sparc exige des registres comme premier et troisi`me op´rande, mais autorise un registre ou une constante (suffisamment e e petite) comme deuxi`me op´rande. La diff´rence entre ces deux cas doit bien e e e sˆr ˆtre cod´e dans l’instruction du langage machine correspondante, puisque u e e l’interpr´tation d’un des champs de l’instruction en d´pend (valeur imm´diate e e e ou num´ro de registre). Or le mn´monique est le mˆme dans les deux cas. La e e e distinction est donc faite par l’assembleur sur des crit`res lexicographiques : e

300

Le langage machine et le langage d’assemblage

MAX=4 ADDcc ADD LDUH BNE CALL JMPL

! d´finition d’une constante textuelle e .text ! d´but de la zone TEXT e r1, r2, r3 r1, MAX, r4 [r1+4], r2 labas fonction r2+r3, r0 Fig. 12.7 – Exemple de zone TEXT

VAL=250 ISE=-125 .data XX : .long 0x15

YY :

ZZ :

! ! ! ! ! .half -12 ! ! .byte VAL ! ! .byte ISE ! ! .skip 12000 ! ! .asciz "toto" ! ! ! .align 4 ! .long XX ! ! !

d´but de zone de donn´es e e e ´tiquette 4 octets initialis´s avec le vecteur de e bits d´crit par 0x15 en hexad´cimal, e e rep´rables par l’´tiquette XX e e 2 octets initialis´s avec le codage e de -12 (n´cessairement en compl´ment ` 2) e e a un octet initialis´ avec le codage e de 250 (n´cessairement en binaire pur) e un octet initialis´ avec le codage e de -125 (n´cessairement en compl´ment ` 2) e e a une zone contigu¨ de 12000 octets, e non initialis´s. e 5 octets, initialis´s avec les codes e ASCII des caract`res ’t’, ’o’, ’t’, ’o’ e et un octet mis ` z´ro pour finir. a e directive d’alignement 4 octets initialis´s avec le codage e binaire de l’adresse absolue repr´sent´e par l’´tiquette XX. e e e

Fig. 12.8 – Exemple de zone DATA

2. Le langage d’assemblage

301

on peut toujours distinguer une chaˆ de caract`res qui constitue la notation ıne e d’une constante enti`re, d’une chaˆ de caract`res qui constitue un nom de e ıne e registre, grˆce ` la lettre ’r’ qui pr´c`de le num´ro. Lorsqu’il risque d’y avoir a a e e e confusion, ou mˆme simplement pour des raisons de lisibilit´, les constantes e e sont pr´fix´es par le caract`re ’#’. On ´crit ainsi dans un langage d’assemblage e e e e pour 68000 : ADDI #4, D0. Les notations les plus compliqu´es viennent des modes d’adressage. Pour e des raisons de lisibilit´ et de compr´hension du programme, le langage d’asseme e blage propose en g´n´ral une notation particuli`re pour les modes d’adressage e e e qui supposent une indirection. Ce peuvent ˆtre des crochets ou des parenth`ses. e e On ´crit ainsi LDUH [r1+4], r2 dans un langage d’assemblage pour sparc, e ou move.l (A1), D1 dans un langage d’assemblage pour 68000 (voir exemple complet, figure 12.9). Les d´placements ´ventuels sont not´s par des additions, e e e comme dans LDUH [r1+4], r2. Enfin un langage d’assemblage peut d´finir des pseudo-instructions. Par e exemple, le jeu d’instruction sparc ´tant limit´, il n’existe pas d’instruction e e de comparaison de deux entiers (l’´quivalent de l’instruction CMP du 68000). e On utilise donc une soustraction de la forme SUBcc r1, r2, r0 pour mettre a ` jour les indicateurs arithm´tiques selon le r´sultat de la comparaison de e e r1 et r2 (r0 est un registre sp´cial, dans lequel l’´criture n’a aucun effet. Voir e e exercice E12.2). L’assembleur permet d’´crire simplement CMP r1, r2, qui sera e traduit en langage machine exactement comme SUBcc r1, r2, r0. CMP est une pseudo-instruction. Notons que certaines pseudo-instructions remplacent parfois plusieurs instructions.

2.5

Zone de donn´es et directives de e r´servation m´moire e e

La zone de donn´es comporte des directives de r´servation d’emplacements e e m´moire, avec d´finition d’une valeur initiale ` y placer avant de d´marrer e e a e l’ex´cution du programme. Le codage de ces donn´es en langage machine est e e simplement le codage binaire des constantes indiqu´es par le programmeur. e Observons l’exemple de la figure 12.8. .long, .half, .byte et .asciz sont des directives de r´servation m´moire e e avec initialisation. Elles sont suivies de la donn´e d’une constante, sous des e formes diverses : nom de constante textuelle (.byte VAL), notation d’entier en hexad´cimal (.long 0x15), en d´cimal (.half -12), etc. La constante peut e e aussi ˆtre donn´e sous la forme d’une ´tiquette (.long XX). Une ´tiquette e e e e repr´sente une adresse, donc un entier positif. La seule difficult´ provient du fait e e que l’adresse absolue associ´e ` l’´tiquette n’est pas connue avant le chargement e a e en m´moire pour ex´cution. On retrouve ici pour les donn´es la notion de code e e e translatable d´j` mentionn´e au paragraphe 2.3. ea e Dans le cas de .asciz, la taille est d´termin´e par la constante chaˆ de e e ıne caract`res associ´e. Ainsi .asciz "toto" r´serve 5 = 4 + 1 octets, dont les e e e

302

Le langage machine et le langage d’assemblage

4 premiers sont initialis´s avec les codes ASCII des caract`res ’t’, ’o, ’t’, e e ’o’ et le dernier avec un caract`re de code 0. On respecte ainsi la convention e de repr´sentation des chaˆ e ınes de caract`res utilis´e en C, c’est-`-dire sous la e e a forme d’une adresse de d´but, sachant que la chaˆ est marqu´e par 0. e ıne e .skip est une directive de r´servation m´moire sans initialisation. On la e e trouve plutˆt en zone BSS que DATA, puisque la zone BSS permet de r´server o e de la m´moire non initialis´e (Cf. Chapitre 18). e e .align est une directive de cadrage m´moire n´cessaire pour tenir compte e e des contraintes d’alignement m´moire dont nous avons parl´ au paragraphe 2.3 e e du chapitre 4. La directive .align 4 (resp. .align 2) tient compte de toutes les r´servations m´moire effectu´es auparavant, et m´nage un espace perdu de e e e e la taille n´cessaire pour atteindre la prochaine adresse multiple de 4 (resp. 2). e

3.

Traduction du langage d’assemblage en langage machine

La traduction du langage d’assemblage en langage machine est effectu´e e par l’outil appel´ assembleur des environnements de programmation. Cet outil e a essentiellement 3 fonctions : – il r´alise l’analyse lexicale et syntaxique du texte ´crit en langage d’asseme e blage, diverses v´rifications comme par exemple l’utilisation correcte des e modes d’adressage et peut rejeter des programmes pour erreurs lexicales ou syntaxiques ; cette phase d’analyse peut s’accompagner de l’expansion des macro-notations et des d´finitions de constantes ; e – il r´alise le codage en binaire des instructions et des donn´es : transfore e mation des mn´moniques d’op´rations et des notations de modes d’adrese e sage en codage des instructions, transformation des directives de r´servation e m´moire en codage binaire des donn´es initialis´es ; e e e – il r´alise la traduction des ´tiquettes (ou symboles) en adresses absolues e e ou d´placements. En maintenant au cours du traitement un compteur ase sociant a chaque instruction une adresse calcul´e par rapport au d´but du ` e e programme, il est facile de calculer les d´placements relatifs. Par contre les e valeurs absolues ne peuvent ˆtre calcul´es tant que l’on ignore l’adresse ` e e a laquelle le programme sera implant´. Nous revenons sur ce point au chae pitre 18 ` propos de code translatable. a Nous montrons dans la section suivante ` travers quelques exemples la a traduction en langage machine sparc et 68000.

4.

Un exemple de programme

Consid´rons l’algorithme qui permet de d´terminer le nombre de bits ` 1 e e a dans la repr´sentation en binaire pur d’un entier : e

4. Un exemple de programme

303

Lexique : x : un entier ≥ 0 { la donn´e } e NombreDeUns : un entier ≥ 0 { le r´sultat ` calculer } e a Algorithme : NombreDeUns ←− 0 tantque x = 0 si x mod 2 = 0 alors NombreDeUns ←− NombreDeUns + 1 x ←− x div 2

Nous donnons ci-dessous des programmes correspondants dans des langages d’assemblage possibles pour les processeurs sparc et 68000, et les programmes en langage machine correspondants. Noter qu’en langage d’assemblage les op´rations arithm´tiques not´es x mod 2 et x div 2 sont remplac´es e e e e par des manipulations explicites de vecteurs de bool´ens (d´calage logique et e e masquage).

4.1

Programme pour 68000

La figure 12.9 donne un programme en langage d’assemblage pour processeur 68000. Nous donnons ci-dessous le codage des instructions, accompagn´ de e l’adresse de rangement, et du texte en langage d’assemblage obtenu par d´codage dans un d´sassembleur. e e
0x0 0x6 0x8 0xA 0xC 0xE 0x10 0x16 0x18 0x1A 0x1C 0x1E 0x24 43f9 00000028 2211 7000 4a81 6710 2401 0282 00000001 6702 5280 e281 60ec 23c0 0000002c 4e75 lea move.l moveq tst.l beq move.l andi.l beq addq.l asr.l bra move.l rts 40,A1 (A1),D1 #0,D0 D1 +16 D1,D2 #1,D2 +2 #1,D0 #1,D1 -20 D0,44

Noter que l’on produit du code comme si le programme d´marrait ` e a l’adresse 0. Les donn´es sont plac´es apr`s la zone texte ; la zone data come e e mence donc ici ` l’adresse 0x28. Le codage de la zone data est : 0000002a, a c’est-`-dire la valeur 42 en d´cimal cod´e sur 16 bits. a e e Lorsque le programme est charg´ em m´moire centrale, les adresses sont e e translat´es en fonction de l’adresse ` laquelle le programme est rang´ en e a e m´moire (Cf. Chapitres 18 et 20). e D´taillons le codage de quelques instructions : e Exemple 1 : 43f9 00000028 lea Donnee, A1

304

Le langage machine et le langage d’assemblage

! Correspondance des variables et des registres : ! x : D1 ! NombreDeUns : D0 .data ! ZONE DE DONNEES INITIALISEES Donnee : .long 42 ! un mot de 4 octets contenant ! le codage binaire de l’entier ! not´ 42 en decimal. e .bss ! ZONE DE DONNEES non INIT. Resultat : .skip 4 ! un mot de 4 octets .text ! ZONE DE PROGRAMME .global main ! n´cessaire (Cf. Chap. 18, §2.) e main : ! le pt d’entr´e s’appelle e ! n´cessairement main. e lea Donnee,A1 !transfert de la m´moire vers un registre e !en adressage indirect par registre adresse. move.l (A1), D1 deb calcul : moveq 0,D0 ! NombreDeUns <-- 0 condition tq : tst.l D1 ! tantque (x !=0) beq fin tq ! branchement lorsque cond. fausse corps tq : si : move.l D1,D2 andi.l 1,D2 ! si (x mod 2 != 0) alors beq fin si alors : addq.l 1,D0 ! NombreDeUns<--NombreDeUns+1 fin si : asr.l D1 ! x <-- x div 2 bra condition tq fin tq : move.l D0, Resultat ! transfert d’un registre vers la m´moire e ! en adressage direct fin prog : rts ! fin de programme. Fig. 12.9 – Nombre de 1 : programme en langage d’assemblage pour 68000

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 num´ro de registre e (A1) et du mode d’adressage utilis´ pour l’autre op´rande (c’est cela qui e e d´termine s’il y a des mots d’extension ` lire, et combien). e a 00000028 : 2 mots d’extension de 16 bits chacun, donnant la valeur d’une adresse. Ici 0x28 en hexad´cimal, c’est-`-dire 40 en d´cimal : c’est la taille e a e en octets de la zone TEXT. Les donn´es sont plac´es en m´moire apr`s e e e e les instructions, et Donnee est le premier objet de la zone DATA. Exemple 2 : 2211 move.l (A1), D1 Tout est cod´ en 16 bits : la nature de l’op´ration, la taille des op´randes e e e sur laquelles elle s’applique, la description des modes d’adressage des deux op´randes (direct ou indirect par registre, num´ro de registre). e e Exemple 3 : 6710 beq +16 Tout est cod´ en 16 bits : la nature de l’op´ration (un branchement si e e Z), le d´placement de 16 octets, par rapport ` l’instruction qui suit celle e a du branchement. L’instruction de branchement est ` l’adresse 0xC : la a suivante ` l’adresse 0xE ; la destination ` l’adresse 0x1E. a a

4.2

Programme pour sparc

La figure 12.10 donne un programme en langage d’assemblage pour processeur sparc. Le codage des donn´es (zone data) est : 0000 002a 0000 0000. Le codage e des instructions (zone text) donne une suite de mots de 32 bits, chacun codant une instruction.
9de3bfc0 90000000 808a6001 93326001 a0142000 21000000 80a24000 02800003 10bffff8 d0240000 a0142000 02800009 01000000 01000000 81c7e008 d2040000 01000000 90022001 21000000 81e80000

Exemple 1 : 21000000 a0142000 set Donnee, %l0 Il s’agit d’une pseudo-instruction permettant l’affectation d’une valeur de 32 bits, l’adresse Donnee en zone data. Elle est remplac´e par deux e instructions sethi %hi(Donnee), %l0 et or %l0, %lo(Donnee), %l0 dont les codages respectifs sont : 21000000 et a0142000. La valeur associ´ ` Donnee n’´tant pas connue lors de la traduction, les champs corea e respondants sont pour l’instant mis ` 0. Ils seront mis ` jour lors du a a chargement du programme en m´moire centrale. L’information concere nant Donnee est pr´sente dans les informations de translation et la table e des symboles (Cf. Chapitre 18). Exemple 2 : 01000000
nop

306

Le langage machine et le langage d’assemblage

! Correspondance des variables et des registres : ! x : o1 ! NombreDeUns : o0 .data ! ZONE DE DONNEES INITIALISEES Donnee : .long 42 ! un mot de 4 octets contenant ! le codage binaire de l’entier ! not´ 42 en decimal. e .bss ! ZONE DE DONNEES non INIT. Resultat : .skip 4 ! un mot de 4 octets ! non initialis´. e .text ! ZONE DE PROGRAMME .global main ! n´cessaire (Cf. Chap. 18, §2.) e main : ! le pt d’entr´e s’appelle e ! n´cessairement main. e save %o6, -64, %o6 ! voir codage des actions. set Donnee, %l0 ! transfert de la m´moire vers un registre : e ld [%l0], %o1 deb calcul : add %g0,%g0,%o0 ! NombreDeUns <-- 0 condition tq : subcc %o1,%g0,%g0 ! tantque (x !=0) be fin tq ! branchement lorsque ! condition fausse nop corps tq : si : andcc %o1,1,%g0 ! si (x mod 2 != 0) alors be fin si nop alors : add %o0,1,%o0 ! NombreDeUns<--NombreDeUns+1 fin si : srl %o1,1,%o1 ! x <-- x div 2 ba condition tq nop fin tq : set Resultat, %l0 ! transfert d’un registre vers la m´moire e st %o0, [%l0] fin prog : ret ! fin du programme restore Fig. 12.10 – Nombre de 1 : programme en langage d’assemblage pour sparc

4. Un exemple de programme

307

L’instruction nop n’existe pas en sparc. Elle est cod´e par une instruce tion ayant un effet nul : une addition ou une disjonction portant sur le registre sp´cial %g0. e Exemple 3 : d2040000 ld [%l0], %o1 Cette instruction peut ˆtre cod´e compl`tement. Le mot de 32 bits se e e e d´compose en : e
code op 1 1 0 0 reg d code op 0 1 0 0 1 0 0 0 0 0 0 inutilis´ e reg s 2 0 0 0 0 0 0 0 0 0 0 0 1 0 reg s 1 0 0 0 i 0

308

Le langage machine et le langage d’assemblage

Exemple 4 : 02800009 be fin_tq L’op´ration est cod´e sur les bits 31 et 30 (resp. 0 et 0) et 24 ` 22 (010). e e a La condition equal est cod´e sur les bits 28 ` 25 (0001). Le d´placement e a e est cod´ sur les bits 21 ` 0 ; la valeur est ici 9, ce qui correspond au e a nombre d’instruction de l’instruction de branchement jusqu’` l’´tiquette a e fin tq.

5.

Exercices

E12.1 : Machines ` 0, 1, 2 ou 3 r´f´rences a ee Nous allons ´tudier l’´criture d’un algorithme simple dans un programme en e e langage d’assemblage de jeux d’instruction de diff´rents types. Dans la suite de e cet exercice nous notons val une valeur imm´diate et adr une adresse. Nous e utilisons les conventions d’´criture du langage d’assemblage similaire au sparc e d´crite dans ce chapitre. ope repr´sente le mn´monique d’une instruction e e e parmi add, mult, sub et div, OP est l’op´ration arithm´tique associ´e. e e e Traduire pour chacune des machines et langages d’assemblage associ´s e d´crits ci-apr`s l’algorithme suivant, en convenant que A est ` l’adresse a, e e a . . .et Y ` l’adresse y : a
Lexique : A, B, C, D, E, F : des entiers { des donn´es } e Y : un entier { le r´sultat ` calculer } e a Algorithme : Y ←− (A + B + C) / (D * E * F - 3)

Mˆme exercice avec le sparc. Pour chaque type de machine, observer la e taille du code obtenu en nombre d’instructions, estimer le nombre d’octets n´cessaires au codage du programme. e 1) Jeu d’instructions ` 1 r´f´rence et 1 seul registre : la machine correspona ee dant ` ce type d’instruction poss`de un registre de calcul appel´ accumulateur a e e (not´ acc) qui est toujours utilis´ dans les instructions de calcul. L’accumulae e teur est un des deux op´randes et le r´sultat est forc´ment stock´ dans celui-ci. e e e e L’ensemble des instructions ne poss`de qu’une r´f´rence : e ee instruction signification ope 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 ` 2 r´f´rences et mode d’adressage restreint : on raa ee joute ` la machine pr´c´dente d’autres registres (not´s Ri). Chacun d’eux a e e e poss`de les mˆmes fonctionnalit´s que acc. La destination du calcul est toue e e jours un registre. Une des deux r´f´rences (servant de source et destination) ee est en mode d’adressage registre direct.

5. Exercices

309

instruction ope Ri val ope Ri [adr] ope Ri Rj store Ri adr load Ri val load Ri [adr]

signification Ri ←− Ri OP val Ri ←− Ri OP MEM[adr] Ri ←− Ri OP Rj MEM[adr] ←− Ri Ri ←− val Ri ←− MEM[adr]

Les processeurs fabriqu´s autour de l’ann´e 1975 (famille 8080 d’intel et 6800 e e de motorola) utilisaient ces deux types d’instructions (1 et 2 r´f´rences). ee Dans le cas de l’utilisation de l’accumulateur l’instruction est plus rapide. 3) Machine ` 2 r´f´rences et modes d’adressage vari´s : on ajoute un mode a ee e d’adressage indirect par registre. Une des deux r´f´rences est forc´ment en ee e mode d’adressage registre direct (mais pas forc´ment la destination). Les inse tructions load et store sont remplac´es par une instruction unique move. e instruction signification R´f. destinations en mode d’adressage registre direct e ope val, Ri Ri ←− val OP Ri ope [adr], Ri Ri ←− Ri OP MEM[adr] ope [Rj], Ri Ri ←− Ri OP MEM[Rj] R´f. destination en mode d’adressage absolu e ope Ri,[adr] MEM[adr] ←− MEM[adr] ope Ri R´f. destination en mode d’adressage reg. indirect e ope 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 (` patir de l’ann´e 1980) a a e un jeu d’instructions de structure similaire avec un jeu de mode d’adressage encore plus large. 4) Machine ` 0 r´f´rence : c’est une machine qui n´cessite une pile. Les a ee e instructions d’op´ration se font toujours avec les deux op´randes qui sont au e e sommet de la pile (et qui sont alors enlev´es de la pile), le r´sultat est stock´ e e e sur la pile. Ces instructions n’ont donc pas besoin de r´f´rences. Il faut pouvoir ee stocker des valeurs sur la pile avant les calculs, on ajoute donc deux instructions particuli`res push et pop. Celles-ci ont une r´f´rence. On suppose ici que le e ee pointeur de pile SP pointe sur le dernier emplacement occup´ et que la pile e progresse en diminuant SP.

310

Le langage machine et le langage d’assemblage

instruction ope push val push [adr] pop [adr]

signification MEM[SP+1] ←− MEM[SP] OP MEM[SP+1] ; SP ←− SP+1 SP ←− SP - 1 ; MEM[SP] ←− val SP ←− SP - 1 ; MEM[SP] ←− MEM[adr] MEM[adr] ←− MEM[SP] ; SP ←− SP + 1

E12.2 : Utilisation du registre %g0 du sparc L’architecture du processeur sparc introduit un objet manipulable comme un registre, mais qui poss`de des propri´t´s particuli`res : l’´criture dans ce ree ee e e gistre, en g´n´ral not´ %g0, n’a pas d’effet, et la lecture de ce registre donne e e e toujours 0. D’autre part le sparc est une machine ` trois r´f´rences. Une insa ee truction de calcul op a trois arguments s1, s2 et d, et r´alise l’affectation d e ←− op(s1, s2). Le dernier argument est toujours un registre, donc toute op´ration ´crase un registre. Utiliser le registre %g0 pour r´aliser une compae e e raison et un test ` 0 en termes de soustraction. a E12.3 : Transferts m´moire/registres en sparc e Dans le jeu d’instructions du processeur sparc on trouve des instructions de chargement d’une portion de registre (octet, B ou demi-mot, H) en m´moire e sign´es (LDB, LDH) ou non sign´es (LDUB, LDUH). Pour l’instruction de rangement e e en m´moire (STB, STH), ce n’est pas le cas. Pourquoi ? Dans le processeur 68000 e on n’a pas le probl`me. Pourquoi ? e E12.4 : Calcul d’un modulo X ´tant un entier naturel, ´crire une ou plusieurs instructions sparc (ou e e de toute autre machine) permettant de calculer X mod 256 et g´n´ralement e e X mod 2n . E12.5 : D´coupage d’un entier en octect e X ´tant un entier cod´ sur 32 bits (4 octets), O1, O2, O3 et O4 d´signant e e e 4 emplacements m´moire de 1 octet pas n´cessairement contigus, ´crire une e e e s´quence d’instructions en langage d’assemblage de n’importe quelle machine e permettant de ranger les octets X31..24 , X23..16 , X15..8 et X7..0 respectivement aux adresses O1, O2, O3 et O4. E12.6 : Addition double longueur Se convaincre que N, C, V ont un sens apr`s la suite d’instructions ADDcc, e r1, r2, r3 ; ADDXcc r4, r5, r6, par rapport aux entiers 64 bits cod´s rese pectivement dans les couples de registres (r3, r6), (r2, r5) et (r1, r4). En particulier comprendre que tout marche bien pour le compl´ment ` 2, bien e a qu’on ne transmette que C dans ADDXcc. Z n’a plus de sens, en revanche. Pour comprendre pourquoi, ´tudier le probl`me suivant : comment tester que la e e somme, r´alis´e en deux instructions, de deux entiers 64 bits occupant chacun e e 2 registres, est nulle ?

5. Exercices

311

E12.7 : Expressions bool´ennes associ´es aux branchements usuels e e A et B sont deux entiers repr´sent´s dans les 2 registres %l0 et %l1 du sparc. e e Apr`s l’ex´cution de l’instruction subcc %l0, %l1, %g0 quelles doivent ˆtre e e e les valeurs de Z, N, C, V pour que A ≤ B si A, B ∈ Z ? Mˆme question pour e que 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’op´ration provoque un d´bordement. Retrouver la e e formule : Z or (N xor V ). Etudier de mˆme les formules associ´es ` toutes les conditions de branchee e a ments. E12.8 : Plus Grand Commun Diviseur Donner en langage d’assemblage sparc ou 68000 une s´quence d’instruce tions permettant de calculer le pgcd de deux entiers. S’inspirer de la machine s´quentielle ` actions d´crite dans le paragraphe 1.5 (Cf. Figure 12.5). Suppoe a e ser que les valeurs initiales A0 et B0 sont dans deux registres. Pour traduire la boucle d’it´ration, s’inspirer de l’exemple trait´ dans le paragraphe 4. du e e pr´sent chapitre. e E12.9 : Observation de code produit On donne ci-dessous un programme en C et le programme en assembleur sparc produit par le compilateur gcc. Analyser le code produit pour y retrouver les structures de contrˆle de l’algorithme d´crit en C. o e
main () { int i ; int T[10] ; i = 0 ; while (i < 10) { T[i] = 2*i + 1 ; i = i + 1 ; } }

La structure de proc´dure du programme C donne les lignes 3, 25 et 26 e (Cf. Chapitre 13, paragraphe 3.5).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 .text main: save %sp,-104,%sp mov 0,%o0 .LL2: cmp %o0,9 ble .LL4 nop b .LL3 nop .LL4: mov %o0,%o2 sll %o2,2,%o1 sethi %hi(T),%o3 or %o3,%lo(T),%o2 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 mov %o0,%o3 sll %o3,1,%o4 add %o4,1,%o3 st %o3,[%o1+%o2] add %o0,1,%o0 b .LL2 nop .LL3: .LL1: ret restore .data T: .skip 40

312

Le langage machine et le langage d’assemblage

Chapitre 13 Traduction des langages ` a structure de blocs en langage d’assemblage
Nous nous int´ressons ici au probl`me de la traduction d’un langage ` e e a structure de blocs en langage machine ou, de mani`re ´quivalente, en langage e e d’assemblage. Le petit langage d’actions pr´sent´ au chapitre 4 est un bon e e repr´sentant de langage imp´ratif ` structure de blocs, qui sont ici les actions e e a et les fonctions param´tr´es, munies de lexiques locaux. e e En ´tudiant la traduction de ce petit langage nous rencontrons les e probl`mes communs pos´s par la traduction d’un langage imp´ratif comme e e e Pascal, Ada, C, C++, Java ... La traduction des constructions de haut niveau de ces langages (objets de C++ ou Java, g´n´ricit´ d’Ada, etc.) ou la traduce e e tion des langages non imp´ratifs, pose de nouveaux probl`mes, qui d´passent e e e le cadre de cet ouvrage. La plupart du temps, les langages dont la structure est tr`s ´loign´e d’un style imp´ratif comme celui pr´sent´ ici, sont traduits en e e e e e e langage d’assemblage en passant par une ´tape interm´diaire (un programme e e C par exemple). Parmi toutes les m´thodes ` mettre en oeuvre pour traduire un programme e a du langage d’actions en langage machine, nous avons d´j` ´tudi´ certains ea e e points : – Au chapitre 4 nous avons montr´ comment repr´senter les types complexes e e en m´moire, et comment transformer les affectations ` des objets complexes e a en suite de transferts m´moire de taille fix´e. e e – Ind´pendamment, nous avons montr´ au chapitre 5 comment traduire les e e structures de contrˆle en ´tats et transitions d’une machine s´quentielle ` o e e a actions, et comment d´finir le lexique de cette machine. e – Au chapitre 12 nous avons d´fini un lexique restreint pour machine e s´quentielle ` actions, qui correspond ` la structure d’un langage machine e a a type : les tests doivent ˆtre uniquement binaires, et les pr´dicats restreints e e a ` un ensemble de fonctions pr´d´finies sur des variables Z, N, C et V qui e e

314

Traduction des langages ` structure de blocs en langage d’assemblage a

mod´lisent les indicateurs arithm´tiques. Les variables du lexique restreint e e repr´sentent la m´moire (le tableau MEM) et les registres. e e Comment utiliser ces transformations pour obtenir le programme en langage d’assemblage correspondant ` un programme du langage d’actions, et que a reste-t-il ` faire ? Deux types de probl`mes se posent. a e Tout d’abord, il faut d´crire la transformation de chaque bloc (action ou e fonction) d’un programme du langage d’actions en machine s´quentielle ` e a lexique restreint, pour se rapprocher d’un langage machine. En particulier, puisque le lexique restreint ne propose que le tableau MEM et quelques variables repr´sentant les registres, il faut d´cider, pour chacune des variables e e d´finies dans le bloc, d’un emplacement m´moire qui lui correspond. La diffie e cult´ de l’installation en m´moire du lexique vient de l’existence des lexiques e e locaux de fonctions et des actions ´ventuellement r´cursives. Il faut d’autre e e part traduire toutes les structures conditionnelles et it´ratives en n’utilisant e que des branchements binaires, portant des pr´dicats pr´d´finis sur Z, N, C et e e e V. Supposons maintenant qu’on a su obtenir, pour chaque bloc (action ou fonction) du langage d’actions, une machine s´quentielle ` lexique restreint. Il e a ne reste plus qu’` traduire ces machines s´quentielles en textes de programmes a e en langage d’assemblage. Cela demande de disposer de mani`re s´quentielle les e e codages des diff´rents ´tats, avec les branchements ad´quats ; il faut finalement e e e coder les appels de proc´dures ou fonctions en utilisant les instructions d’appel e de sous-programmes offertes par le langage machine consid´r´. ee Nous ´tudions tout d’abord dans le paragraphe 1. le cas des programmes e a ` un seul bloc : installation du lexique en m´moire et obtention d’une e machine s´quentielle ` lexique restreint, production du texte en langage e a d’assemblage. Le paragraphe 2. pr´sente les probl`mes sp´cifiques au coe e e dage des programmes ` plusieurs blocs : probl`me du lexique local, des a e proc´dures ou fonctions r´cursives, passage de param`tres et contenu de e e e la m´moire lors de l’ex´cution. En se basant sur les principes ´tudi´s e e e e dans ces deux premiers paragraphes, il est possible de d´velopper au pae ragraphe 3. des solutions globales pour deux types de langages machine : un langage machine ` structure de pile explicite, type 68000 ; un langage a machine ` fenˆtres de registres, type sparc. a e

1.

Cas des programmes ` un seul bloc a

Nous avons ´tudi´ au chapitre 5 la traduction des programmes du lane e gage d’actions en machines s´quentielles avec actions g´n´rales. Il ne reste e e e plus qu’une ´tape pour atteindre des machines s´quentielles ` lexique rese e a treint : il faut installer toutes les variables dans la m´moire ou les registres e (paragraphe 1.1), puis transformer les branchements g´n´raux en branchee e

1. Cas des programmes ` un seul bloc a

315

ments binaires faisant intervenir des conditions pr´d´finies sur les indicateurs e e arithm´tiques (paragraphe 1.3). e A partir des machines s´quentielles ` lexique restreint, on obtient facilement e a des textes de programmes en langage d’assemblage (paragraphe 1.4).

1.1
1.1.1

Installation du lexique en m´moire e
Le probl`me e

Le langage d’actions pr´sent´ offre la notion de lexique : on d´clare des e e e variables en les nommant. La d´claration donne le type, et permet donc de e connaˆ la taille n´cessaire ` la repr´sentation en m´moire des valeurs de cette ıtre e a e e variable. Dans tout ce qui pr´c`de, nous avons ´tudi´ comment repr´senter en e e e e e m´moire une donn´e de type quelconque, en supposant qu’il y a de la place e e libre, en quantit´ suffisante, ` partir d’une certaine adresse donn´e. e a e
Remarque : Notons que nous ne parlons pas ici d’allocation dynamique, d’allocation de variables ` la demande du programme par les actions Allouer a et Lib´rer comme d´fini au paragraphe 4. du chapitre 4. e e

Nous ne nous sommes pas interrog´s sur le m´canisme d’allocation de la e e m´moire, c’est-`-dire sur la mani`re de choisir une adresse pour chaque vae a e riable, en assurant que deux variables distinctes sont install´es dans des pore tions disjointes de la m´moire globale. Plus pr´cis´ment, cette contrainte vaut e e e pour les variables dont les p´riodes de vie (on dit aussi dur´e de vie) ne sont e e pas disjointes (Cf. Paragraphes 1.1.2, 2.1.1 et 2.6). Nous montrons ici comment remplacer syst´matiquement les variables par e des zones du tableau MEM : il faut d’abord choisir la position de chaque variable, ce qui donne une adresse a ; on remplace ensuite toute occurrence du nom de variable dans le programme par MEM[a]. On peut alors oublier le lexique. On obtient ainsi de mani`re syst´matique l’algorithme qu’on aurait e e pu obtenir ` la main en installant soi-mˆme toutes les variables n´cessaires a e e dans le tableau MEM. Les programmes en deviennent bien sˆr illisibles ; cette u transformation est d’habitude le travail du compilateur, pas celui du programmeur. La transformation de programmes que nous proposons ici peut ˆtre vue comme la premi`re ´tape de gestion de ce que l’on appelle courame e e ment syst`me ` l’ex´cution dans les ouvrages traitant de compilation (voir par e a e exemple [CGV80, WM94]). 1.1.2 Solution pour le lexique d’un programme ` un seul bloc a

Pour choisir la position des variables on proc`de de mani`re s´quentielle, e e e par exemple dans l’ordre du lexique, en m´nageant des espaces perdus entre e les variables pour satisfaire aux ´ventuelles contraintes d’alignement. La taille e n´cessaire pour l’installation de toutes les variables du lexique en m´moire est e e donc sup´rieure ou ´gale ` la somme des tailles n´cessaires pour les variables. e e a e

316

Traduction des langages ` structure de blocs en langage d’assemblage a

On parlera par la suite de taille du lexique. Attention, cette taille peut d´pendre e de l’ordre de d´claration des variables, qui a une influence sur la position et e la taille des trous n´cessaires aux contraintes d’alignement. Noter que, dans le e cas d’un programme ` un seul bloc, les variables ont toutes la mˆme dur´e de a e e vie, qui est celle du programme lui-mˆme. e Dans l’exemple ci-dessous, la m´moire est un tableau d’octets, et on dispose e des affectations de tailles 1, 2 et 4 :
N : l’entier 42 Entier32s : 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 caract`res ; a : un Entier32s ; b : un Entier16ns e T : un tableau sur [0..N-1] de Structures

Les variables ` installer en m´moire sont c1, c2, a, b et T. Commen¸ons a e c a ` une adresse A multiple de 4 pour c1 ; c2 peut ˆtre plac´ juste ` cˆt´, ` e e a oe a l’adresse A + 1 ; a doit ˆtre plac´ un peu plus loin, ` l’adresse A + 4 ; b peut e e a ˆtre plac´ a l’adresse A + 8, sans perte de place ; T doit d´marrer ` l’adresse e e` e a multiple de 4 qui suit A + 8 + 2, c’est-`-dire A + 12. Noter que 2 octets sont a perdus entre b et T. Chaque ´l´ment de T occupe 8 octets. T[7].y est ` l’adresse ee a A + 12 + (7 × 8) + 4. On traduit alors l’algorithme
c1 ←− c2 ; T[7].y ←− b

en :
delta c1 : l’entier 0 ; delta c2 : l’entier 1 ; delta a : l’entier 4 ; delta b : l’entier 8 delta T : l’entier 12 ; delta x : l’entier 0 ; delta y : l’entier 4 taille structure : l’entier 8 MEM[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 op´rations de base sur les types de e donn´es e

Nous avons introduit dans le langage d’actions du chapitre 4 des op´rations e sur les types de donn´es de base : entiers, bool´ens, caract`res. Pour les types e e e structur´s, la seule op´ration globale que nous ayons envisag´e est l’affectation, e e e et nous avons d´j` montr´ comment l’exprimer en termes de transferts m´moire ea e e ´l´mentaires (chapitre 4, paragraphe 3.). ee Le lexique restreint qui repr´sente un langage machine type ne propose que e les op´rations arithm´tiques, logiques ou structurelles (Cf. Chapitre 12) dise e ponibles dans un processeur usuel. Il faut donc exprimer toutes les op´rations e sur les types de base en termes de ces op´rations ´l´mentaires. e ee

1. Cas des programmes ` un seul bloc a

317

1.2.1

Cas des op´rations sur les caract`res e e

Toutes les op´rations sur les caract`res sont traduites en op´rations e e e arithm´tiques ou logiques par l’interm´diaire du code ASCII. Nous signalions e e au chapitre 4, paragraphe 1.3.2, que le code ASCII est con¸u de mani`re ` c e a faciliter cette traduction. 1.2.2 Cas des op´rations bool´ennes e e

Il y a trois types d’utilisation des bool´ens : les op´rations internes de e e l’alg`bre de Boole ´tudi´e au chapitre 2 (n´gation, conjonction, disjonction, e e e e etc.) ; les op´rations de comparaison sur des types quelconques, qui produisent e des bool´ens ; les conditions de structures conditionnelles ou it´ratives. Ces e e trois types d’utilisations interf`rent librement comme dans : e
X, Y : des entiers ; B, B’ : des bool´ens e B ←− X < Y et Y ≥ 0 si (non B ou B’) alors ... sinon ...

Il faut choisir un codage des bool´ens compatible avec ces trois types d’utie lisation, et susceptible d’ˆtre manipul´ efficacement en langage machine. Typie e quement, les processeurs offrent des op´rations bool´ennes bit ` bit (Cf. Chae e a pitre 12, paragraphe 1.4.1) qu’on peut utiliser pour coder les op´rations e bool´ennes. En revanche il n’existe pas, en g´n´ral, d’instruction de compae e e raison arithm´tique de deux registres, avec r´sultat bool´en dans un troisi`me, e e e e qui permettrait de coder simplement B ←− X < Y. Le r´sultat bool´en des e e comparaisons est ` recup´rer dans les indicateurs arithm´tiques. D’autre part, a e e comme le mot d’´tat du processeur n’est en g´n´ral pas accessible en lecture e e e explicite, on doit coder B ←− X < Y comme on coderait :
si X < Y alors B ←− vrai sinon B ←− faux

On retrouve donc le probl`me g´n´ral de codage des structures conditione e e nelles. 1.2.3 Cas des entr´es/sorties e

Nous avons introduit dans le langage d’actions des actions Lire et Ecrire g´n´riques (c’est-`-dire valables pour tous types). La manipulation d´taill´e e e a e e des p´riph´riques d’entr´e/sortie ne fait pas partie, en g´n´ral, du codage des e e e e e programmes ´crits en langage de haut niveau. Nous verrons en d´tail au chae e pitre 16 comment sont r´alis´es les communications entre le processeur et des e e p´riph´riques comme le clavier et l’´cran. Les programmes n´cessaires, souvent e e e e ´crits directement en assembleur, font partie du logiciel de base fourni avec un e ordinateur ; nous d´finissons au chapitre 17 l’interface entre ces programmes e de bas niveau rang´s dans une biblioth`que et les programmes en langage d’ase e semblage produits par les compilateurs de langages de haut niveau. On trouve entre autres dans le logiciel de base usuel les primitives de manipulation des fichiers, telles que nous les d´finissons au chapitre 19. e Pour un compilateur, le codage d’une entr´e/sortie est compl`tement simie e

318

Traduction des langages ` structure de blocs en langage d’assemblage a

laire ` l’appel d’une proc´dure param´tr´e. Simplement, cette proc´dure ayant a e e e e ´t´ ´crite directement en assembleur, ou produite ind´pendamment par un ee e e compilateur, il faut adopter les mˆmes conventions de passages de param`tres e e et d’appel de sous-programme, dans les deux contextes. C’est d’ailleurs le probl`me g´n´ral de la compilation s´par´e que nous ´tudions au chapitre 18. e e e e e e Le seul travail du compilateur consiste ` traduire une instruction de la a forme Lire (X), o` X est une variable de type quelconque, en un ensemble u d’op´rations de lecture ´l´mentaires disponibles dans la biblioth`que. On ne e ee e peut pas supposer, en effet, que la biblioth`que d’entr´es/sorties standard foure e nit une primitive de lecture pour tout type susceptible d’ˆtre d´fini dans un e e programme utilisateur. La plupart des langages de programmation n’autorisent les primitives Lire et Ecrire que sur les types num´riques, les caract`res et les chaˆ de caract`res. e e ınes e Pour les types num´riques cela suppose une convention de notation (d´cimal e e pour les entiers, norme IEEE... pour les flottants). Ainsi en Pascal est-il impossible de lire un bool´en, d´fini comme un type ´num´r´, par manque de e e e ee convention sur la notation des bool´ens. En Ada le compilateur traduit les lece tures de bool´ens en lectures de chaˆ e ınes de caract`res, suivies de conversions e des chaˆ ınes valides true et false en repr´sentation interne des bool´ens. e e Dans les exemples de ce chapitre, nous n’utilisons Lire et Ecrire que pour des entiers.

1.3
1.3.1

Traduction des conditions g´n´rales en conditions e e des machines restreintes
Codage de conditionnelles n-aires, type selon

La plupart des langages machine disposent de branchements uniquement binaires. Les structures conditionnelles de la forme selon du langage d’actions utilis´ dans cet ouvrage, ou bien les structures switch de C, case de Pascal e et Ada, sont donc traduites en s´quences de conditionnelles binaires. e 1.3.2 Codage de conditions bool´ennes complexes e

Quel que soit l’ensemble des pr´dicats fonctions de N, Z, C et V disponibles e dans le langage machine cible, il est toujours possible d’´crire dans le langage e d’actions des conditions qui ne se traduisent pas par un seul pr´dicat. e On a donc le mˆme probl`me pour coder : si X < Y et Y > 0 grˆce e e a aux 16 pr´dicats usuels pr´sent´s au chapitre 12, figure 12.4, que pour coe e e der si X ≤ Y grˆce aux 8 pr´dicats du processeur 6502. La solution g´n´rale a e e e consiste ` enchaˆ a ıner des conditionnelles. On traduit donc
si X < Y et Y > 0 alors A1 sinon A2

en :
si X < Y alors (si Y > 0 alors A1 sinon A2) sinon A2.

2. Cas des programmes ` plusieurs blocs a

319

A1 tantque C1 A2 si C2 alors A3 sinon A4 A5 A6

A1 ... : C1 ... : Bicc A6 A2 ... : C2 ... : Bicc A4 A3 ... : ba A5 A4 ... : A5 ... : ba C1 A6 ... :

! ! ! ! ! ! ! ! ! ! ! !

codage de l’action A1 codage de la condition C1 branchement sur non C1 codage de l’action A2 codage de la condition C2 branchement sur non C2 codage de l’action A3 branchement inconditionnel codage de l’action A4 codage de l’action A5 branchement inconditionnel codage de l’action A6

Fig. 13.1 – S´quentialisation des codages en langage d’assemblage des ´tats d’une mae e chine s´quentielle ` actions et lexique restreint. e a

1.4

Traduction des machines s´quentielles e ` lexique restreint en langage d’assemblage a

Grˆce aux transformations de programmes sugg´r´es ci-dessus, on est caa ee pable d’obtenir un programme du langage d’actions dans lequel : 1) toutes les donn´es sont en m´moire ou dans des registres ; 2) on n’a plus que des struce e tures conditionnelles binaires (des si ... alors ... sinon ...) et des it´rations : 3) e toutes les conditions sont ´l´mentaires, au sens o` on peut en obtenir la valeur ee u bool´enne par une ou plusieurs instructions de calcul, suivies d’une consultae tion du mot d’´tat. Ainsi X+2*Y < 4 est ´l´mentaire, alors que X < Y et Y > 0 e ee ne l’est pas. Cette forme de programme donne directement une machine s´quentielle ` lexique restreint, dans laquelle certains ´tats correspondent au e a e calcul des conditions ´l´mentaires. ee La technique consiste ensuite ` coder chaque ´tat par une s´quence d’insa e e tructions du langage d’assemblage, ` laquelle on associe une ´tiquette de d´but. a e e Il ne reste plus qu’` disposer ces diff´rentes s´quences les unes ` la suite des a e e a autres, en ajoutant les branchements n´cessaires. e Cette technique est illustr´e par l’exemple des figures 13.1 et 13.2. e

2.

Cas des programmes ` plusieurs blocs a

La difficult´ de la traduction en langage d’assemblage des programmes ` e a structure de blocs provient de deux aspects de ces programmes : les lexiques locaux et le passage de param`tres, dans le cas le plus g´n´ral o` les actions e e e u et fonctions introduites peuvent ˆtre r´cursives. Nous ´tudions les probl`mes e e e e li´s aux lexiques locaux et aux param`tres dans les paragraphes 2.1 et 2.2 e e ci-dessous, avant de les r´soudre par une gestion de la m´moire en pile, aux e e

320

Traduction des langages ` structure de blocs en langage d’assemblage a

tantque A = B si A > B alors A ←− A − B sinon B ←− B − A

! on suppose A boucle : SUBcc BEQ SUBcc BLEU SUBcc BA sinon : SUBcc finsi : BA fin :

dans r1 r1, r2, fin r1, r2, sinon r1, r2, finsi r2, r1, boucle

et B dans r2 g0 g0 r1 r2

Fig. 13.2 – S´quentialisation des codages en langage d’assemblage des ´tats d’une mae e chine s´quentielle ` actions et lexique restreint : exemple du pgcd, Cf. Chae a pitre 12, figure 12.5. Le programme en langage d’assemblage est obtenu de mani`re syst´matique ; il peut ensuite ˆtre simplifi´ de plusieurs fa¸ons : supe e e e c pression de la deuxi`me comparaison SUBcc r1, r2, g0 ; remplacement du e BA finsi par BA boucle directement.

paragraphes 2.3 et 2.4. Enfin le paragraphe 2.5 introduit le lien dynamique des compilateurs, et le paragraphe 2.6 r´sume l’occupation de la m´moire lors de e e l’ex´cution d’un ensemble de proc´dures et fonctions param´tr´es. e e e e Dans le cas o` une proc´dure A appelle une proc´dure B, nous appelons u e e contexte appelant l’ensemble des variables de A et contexte appel´ l’ensemble e des variables de B.

2.1
2.1.1

Installation en m´moire des lexiques locaux e
Cas des lexiques locaux sans r´cursivit´ e e

Dans le cas d’un ensemble d’actions et fonctions sans r´cursivit´ (mˆme e e e crois´e), on peut reprendre l’approche suivie pr´c´demment pour le lexique e e e d’un programme ` un seul bloc : on installe en m´moire toutes les variables a e globales, puis toutes celles de la premi`re fonction ou action, ` la suite, puis e a toutes celles de la deuxi`me fonction ou action, etc. Si les lexiques locaux e de deux actions ou fonctions A1 et A2 contiennent tous deux le nom i, avec ´ventuellement des types diff´rents, alors ce nom correspond ` deux emplacee e a ments distincts de la m´moire, ´ventuellement de tailles diff´rentes. En trae e e duisant l’algorithme de A1 on utilise l’un des emplacements, et en traduisant l’algorithme de A2 on utilise l’autre. Si deux actions ou fonctions A1 et A2 sont telles que A1 n’appelle jamais A2 et A2 n’appelle jamais A1, on se convainc ais´ment que ces deux blocs e ne seront jamais actifs en mˆme temps : on dit que leurs dur´es de vie sont e e disjointes. Dans ce cas leurs lexiques locaux peuvent occuper la mˆme portion e de la m´moire. e

2. Cas des programmes ` plusieurs blocs a

321

2.1.2

Cas des lexiques locaux avec r´cursivit´ e e

Lorsque les actions et fonctions peuvent ˆtre r´cursives, il n’est plus pose e sible d’appliquer la mˆme m´thode. Observons pour nous en convaincre le e e programme donn´ ` titre d’exemple figure 13.3, qui utilise une action r´cursive ea e de calcul de la suite de Fibonacci (d´finie par : x0 = x1 = 1 puis ∀n ≥ 2 xn = e xn−1 + xn−2 ). La figure 13.4 illustre le d´roulement du calcul si l’entier lu dans e le programme principal est 4. Pour obtenir le r´sultat correct il faut disposer d’autant d’exemplaires de e f1 et f2 (not´s f1’, f1”, etc.) que d’appels imbriqu´s. Il faut donc un espace e e m´moire pour la variable locale f1 (resp. f2) de CalculFibo pour chaque appel e de cette action. Or le nombre d’appels d´pend de la variable d’entr´e A ; sa e e valeur est obtenue par Lire et est donc par d´finition inconnue quand on est en e train de modifier le texte du programme, ind´pendamment de toute ex´cution, e e comme c’est le cas ici. Il nous faut donc trouver un m´canisme permettant e d’allouer une zone de m´moire ` chaque entr´e dans la proc´dure, zone qui e a e e devra ˆtre restitu´e avant la sortie de proc´dure. e e e

2.2

Installation en m´moire des param`tres e e

Lorsqu’un programme comporte plusieurs blocs, il fait ´galement usage de e param`tres donn´es ou r´sultats. Comme les lexiques locaux, le passage de e e e param`tres demande de la m´moire. En effet, un passage de param`tres est un e e e ´change d’information entre le contexte appelant et le contexte appel´. Tout se e e passe comme si ces deux contextes avaient acc`s ` un emplacement dans une e a portion de m´moire partag´e g´r´e de mani`re tr`s particuli`re : l’appelant peut e e ee e e e y ´crire une information ` transmettre ` l’appel´ ; l’appel´ y lit l’information. e a a e e Le passage de param`tres n´cessite donc une sorte de boˆ aux lettres. e e ıte 2.2.1 Conventions de passage des param`tres donn´es ou r´sultats e e e

Examinons tout d’abord comment se passe l’´change d’information entre e appelant et appel´, lors d’un passage de param`tres, selon qu’il s’agit d’une e e donn´e ou d’un r´sultat. Nous traitons ici le param`tre r´sultat avec le mode de e e e e passage par r´f´rence. Il existe d’autres modes de passage de param`tres dont ee e les particularit´s sont expliqu´es dans les ouvrages traitant de compilation (voir e e par exemple [CGV80, WM94]) et dont nous ne parlons pas ici. Consid´rons e l’algorithme de calcul de la somme de deux entiers, donn´ figure 13.5. e Le programme principal appelle CalculSomme en lui passant deux donn´es e dans les param`tres A et B, et en re¸oit un r´sultat dans le param`tre R. Supe c e e posons pour l’instant que l’allocation m´moire soit r´solue pour les param`tres e e e (voir plus loin) et qu’on dispose de 3 emplacements m´moire d’adresses rese pectives aA, aB et aR pour le passage de param`tres. Par ailleurs les variables e du lexique global sont plac´es aux adresses aX, aY et aZ. L’algorithme modifi´ e e est donn´ figure 13.6. e

322

Traduction des langages ` structure de blocs en langage d’assemblage a

CalculFibo : une action (la donn´e n : un entier ≥ 0 ; le r´sultat f : un entier > 0) e e { ´tat final : f = xn } e lexique local : f1, f2 : des entiers > 0 algorithme : si n = 0 ou n = 1 alors f ←− 1 sinon 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 r´cursif de calcul de la suite de Fibonacci e 1. CalculFibo (4, B) 1.1 CalculFibo (3, f1) 1.1.1 CalculFibo (2, f1’) 1.1.1.1 CalculFibo (1, f1”) f1” ←− 1 1.1.1.2 CalculFibo (0, f2”) f2” ←− 1 1.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 – D´roulement du calcul de la suite de Fibonacci, pour l’entr´e 4. e e 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 } ;

2. Cas des programmes ` plusieurs blocs a

323

CalculSomme (les donn´es a, b : deux entiers ; le r´sultat r : un entier) : e e r ←− a+b lexique du programme principal X, Y, Z : trois entiers algorithme du programme principal Lire (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] + 1 MEM[aB] ←− 4 MEM[aY] − 2 MEM[aR] ←− 4 aZ CalculSomme ... { traduction de Ecrire (Z) } Fig. 13.6 – Interpr´tation des natures de param`tres e e

Passage des donn´es par valeur : Les valeurs des expressions qui constie tuent les param`tres donn´es effectifs doivent ˆtre calcul´es puis plac´es en e e e e e m´moire par l’appelant, ` un endroit connu de l’appel´ qui les lira. Ainsi e a e on calcule la valeur de X+1, c’est-`-dire MEM[aX] + 1, et on la recopie dans a MEM[aA]. Passage des r´sultats par r´f´rence : Pour les param`tres r´sultats, e e e e e passer leur valeur n’a aucun int´rˆt. Par d´finition un r´sultat est produit par ee e e l’action appel´e. Quand on ´crit CalculSomme (X+1, Y−2, Z), on s’attend ` e e a ce que la valeur de la variable Z soit modifi´e. Pour cela il faut que l’action e appel´e soit capable d’affecter une nouvelle valeur ` la variable Z. Si l’ace a tion CalculSomme ´tait toujours appel´e depuis le programme principal, avec e e comme troisi`me param`tre la variable Z, il suffirait d’´crire dans le corps de e e e l’action : MEM[aZ] ←− .... Mais elle peut ˆtre appel´e ` divers endroits du e e a programme, avec des param`tres diff´rents. Le corps de l’action doit donc ˆtre e e e capable d’´crire dans la variable qu’on lui indique. Pour assurer ce fonctione nement, l’adresse de la variable qui constitue le param`tre r´sultat effectif est e e fournie ` l’appel´e ; elle est plac´e en m´moire par l’appelant, ` un endroit a e e e a connu de l’appel´e qui la lira. On ´crit donc : MEM[aR] ←− 4 aZ. L’appel´e e e e peut alors r´cup´rer cette adresse dans MEM[aR], et s’en servir pour ´crire e e e dans la bonne variable, par indirection : MEM[MEM[aR]] ←− .... On retrouve

324

Traduction des langages ` structure de blocs en langage d’assemblage a

la contrainte ´nonc´e au paragraphe 1.6 du chapitre 4 : les param`tres effectifs e e e r´sultats doivent ˆtre des expressions qui pourraient figurer en partie gauche e e d’affectation, c’est-`-dire d´signer des emplacements m´moire. a e e Si l’on d´finit la variable : e
T : un tableau sur [0..N] de < y : un caract`re ; x : un entier > e

l’expression T[4].x peut-ˆtre utilis´e comme param`tre r´sultat de e e e e CalculSomme. Dans ce cas le passage de param`tre consiste ` ´crire, e a e dans le programme principal : MEM[aR] ←− 4 aT + 4*8 + 4, o` aT d´signe u e l’adresse de d´but du tableau T. Le corps de CalculSomme est inchang´. e e 2.2.2 Installation en m´moire des boˆ e ıtes aux lettres

Une fois adopt´es ces conventions de passage des param`tres donn´es par e e e valeur et r´sultat par adresse, il reste ` ´tudier la mani`re d’obtenir aA, aB et e ae e aR : c’est le probl`me de l’allocation m´moire pour les param`tres. e e e Cas sans r´cursivit´ : Il faut pr´voir une zone de m´moire pour chaque e e e e param`tre de F1 vers F2, pour chaque couple d’actions ou fonctions F1, F2 e telles qu’un appel de F2 apparaˆ quelque part dans le corps de F1. Un examen ıt du texte complet du programme, ind´pendamment de toute ex´cution, permet e e de rep´rer qui appelle qui, et la place n´cessaire pour la liste de param`tres, e e e dans chaque cas. On choisit alors les adresses dans MEM, par exemple ` la a suite de tous les emplacements allou´s aux variables globales. Il suffit de se e tenir ` ces choix lorsque l’on transforme les algorithmes des appelants et des a appel´s, comme nous l’avons fait pour CalculSomme ci-dessus. e Cas avec r´cursivit´ : Dans le cas avec r´cursivit´, on retombe sur le e e e e probl`me ´voqu´ pour les variables des lexiques locaux : il faut un emplacement e e e d´di´ aux param`tres, pour chaque appel de F1 qui appelle F2, ` l’ex´cution. e e e a e Le choix des adresses des param`tres ne peut donc se faire statiquement, c’este a `-dire au moment de la transformation du programme.

2.3

Allocation dynamique de m´moire pour les lexiques e locaux

Il apparaˆ la n´cessit´ de g´rer dynamiquement l’association d’emplaceıt e e e ments en m´moire aux variables des lexiques locaux. Une solution consiste e a ` utiliser les primitives d’allocation dite dynamique de m´moire ´tudi´es au e e e chapitre 4, paragraphe 4. Supposons que chaque appel de CalculFibo utilise Allouer et Lib´rer pour e r´server momentan´ment la m´moire n´cessaire ` l’installation de ses variables e e e e a e a locales f1 et f2. Notons taille 2 entiers le nombre d’octets n´cessaires ` ces deux entiers. Il nous faut encore une variable locale p qui donne l’adresse de la zone allou´e. On suppose qu’il y a toujours de la place disponible. Cela e donne le programme de la figure 13.7. Noter que l’allocation m´moire pour les e

2. Cas des programmes ` plusieurs blocs a

325

diff´rentes variables du lexique local suit la mˆme d´marche que celle pr´sent´e e e e e e au paragraphe 1.1.2. Une fois obtenue une adresse de base p par allocation dynamique, on dispose les variables les unes apr`s les autres en m´nageant des e e espaces ´ventuels pour tenir compte des contraintes d’alignement. e Cette transformation n’a pas encore permis d’´liminer le lexique local : on e a remplac´ les variables d’origine par une seule : p, mais il en faut toujours e autant d’exemplaires que d’appels de CalculFibo. Toutefois, on peut poursuivre la transformation du programme. En effet, on remarque que, vue la structure des appels d’actions et fonctions, la derni`re e zone allou´e est toujours la premi`re lib´r´e (autrement dit, les appels sont e e ee bien parenth´s´s : on ne peut pas successivement entrer dans A ; entrer dans ee B ; sortir de A, sortir de B). On profite donc de cette situation tr`s particuli`re e e pour ne pas utiliser un m´canisme g´n´ral d’allocation et lib´ration d’espaces e e e e m´moire, dont la complexit´ provient justement de la gestion des trous qui e e apparaissent si l’on ne lib`re pas toujours le dernier allou´. e e On propose de r´aliser l’allocation m´moire par les algorithmes de la fie e gure 13.9. Le corps des actions est tr`s court ; si l’on suppose de plus qu’il e y a toujours de la place, on peut remplacer tout appel Allouer (p, n) par pp ←− pp − n ; p ←− pp et tout appel Lib´rer (p, n) par pp ←− pp + n. On e peut ensuite ´liminer la variable locale p et ne garder que la variable globale e pp. Cela donne l’algorithme de la figure 13.8. On dit que la m´moire est g´r´e e ee en pile, pour rendre compte du fait que les allocations se font selon un ordre dernier allou´/premier lib´r´ (Cf. Chapitre 4, paragraphe 5.). e e e

2.4

Allocation dynamique de m´moire pour e les param`tres e

Pour l’allocation m´moire n´cessaire aux param`tres, il faut pr´voir de e e e e mˆme des appels aux actions Allouer et Lib´rer. L’allocation de m´moire pour e e e les param`tres a la mˆme propri´t´ que celle des variables locales : on lib`re toue e ee e jours les derniers allou´s. On applique donc la mˆme simplification qui consiste e e a ` allouer et lib´rer de la m´moire grˆce aux proc´dures de la figure 13.9. L’alloe e a e cation de m´moire pour le passage de param`tres se fait dans l’appelant, juste e e avant l’appel ; la lib´ration se fait juste apr`s l’appel, toujours dans l’appelant. e e En appliquant toutes les transformations ´tudi´es jusque l` (dont le e e a m´canisme de passage de param`tre r´sultat), on obtient l’algorithme donn´ e e e e figure 13.10. La figure 13.11 illustre l’´volution du contenu de la m´moire lors e e de l’ex´cution du programme qui appelle CalculFibo(4, ...). e Noter que la variable pp est g´r´e grˆce ` des op´rations parfaitement ee a a e sym´triques : pp ←− pp − 8 (pour faire de la place aux variables locales) en e entrant dans CalculFibo et pp ←− pp + 8 en en sortant ; pp ←− pp − 8 juste avant l’appel r´cursif de Calcul Fibo (pour tenir compte de la place occup´e e e par les param`tres), pp ←− pp + 8 juste apr`s. Cette forme de code garantit e e l’invariant suivant : l’´tat de la m´moire (en particulier la position de pp) est e e

326

Traduction des langages ` structure de blocs en langage d’assemblage a

CalculFibo : une action (la donn´e n : un entier ≥ 0 ; le r´sultat f : un entier > 0) e e p : un pointeur de caract`re e { 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 ←− 1 sinon CalculFibo (n − 1, MEM[p+0]) CalculFibo (n − 2, MEM[p+4]) f ←− MEM[p+0]+MEM[p+4] Lib´rer (p, taille 2 entiers) e lexique du programme principal : A, B : des entiers ≥ 0 algorithme du programme principal : Lire (A) ; CalculFibo (A, B) ; Ecrire (B) Fig. 13.7 – Installation du lexique local de CalculFibo en m´moire e CalculFibo : une action (la donn´e n : un entier ≥ 0 ; le r´sultat f : un entier > 0) e e algorithme : { R´servation de place pour les deux entiers du lexique local, qui rend e disponibles les deux emplacements MEM[pp+0] et MEM[pp+4]. Pour simplifier, on ne fait pas le test de d´bordement (Cf. Figure 13.9) } e pp ←− pp − taille 2 entiers { Corps de l’action proprement dite } si n = 0 ou n = 1 alors f ←− 1 sinon CalculFibo (n − 1, MEM[pp+0]) CalculFibo (n − 2, MEM[pp+4]) f ←− MEM[pp+0]+MEM[pp+4] { Lib´ration de la place occup´e par le lexique local } e e pp ←− pp + taille 2 entiers lexique du programme principal : A, B : des entiers ≥ 0 ; pp : un pointeur algorithme du programme principal : Initialiser Lire (A) CalculFibo (A, B) Ecrire (B) Fig. 13.8 – Simplification de l’allocation m´moire e

2. Cas des programmes ` plusieurs blocs a

327

MEM 0

adresses croissantes

pp : un pointeur Initialiser : pp ←− tmem Allouer (p, n) : si pp − n < T+1 alors p ←− NIL sinon pp ←− pp − n p ←− pp Lib´rer (p, n) : e pp ←− pp + n

Zone libre

T+1

Zone occup´e e

pp

tmem − 1 tmem

Fig. 13.9 – Gestion m´moire simplifi´e : pour allouer une nouvelle zone de taille n, on e e d´place le pointeur pp de n octets vers les adresses d´croissantes. La zone e e ainsi rendue disponible est entre les adresses pp incluse et pp+n exclue.

le mˆme ` l’entr´e dans un bloc et ` la sortie. e a e a

2.5

Rep´rage des objets locaux par rapport ` la base de e a l’environnement : lien dynamique

Nous remarquons dans l’exemple CalculFibo (figure 13.10) que la position relative ` pp des objets pr´sents en m´moire est modifi´e lorsque pp bouge. a e e e Ainsi, lors de l’entr´e dans CalculFibo, les param`tres sont accessibles aux e e adresses MEM[pp+4] et MEM[pp+0]. D`s que l’on diminue pp de 8, de mani`re e e a e ` m´nager de la place pour les variables locales f1 et f2 de la proc´dure e CalculFibo d’origine, le rep´rage des param`tres devient : MEM[pp+4+8] et e e MEM[pp+0+8]. Rien de bien difficile ` calculer, mais le nouveau programme a de CalculFibo devient vite illisible sans dessin. Le probl`me vient du fait que les objets plac´s en m´moire (les variables e e e locales et les param`tres) sont rep´r´s par rapport ` une unique adresse pp, e ee a elle-mˆme destin´e ` ´voluer. e e ae L’id´e du lien dynamique que l’on trouve en compilation est tr`s simple : e e au lieu de rep´rer les objets locaux d’un bloc par rapport ` l’adresse du haut, e a qui risque d’ˆtre modifi´e, il suffit de les rep´rer par rapport ` l’adresse du e e e a bas, qui ne bouge pas pendant toute la dur´e de vie du bloc. On introduit une e adresse suppl´mentaire pb, dite pointeur de base de l’environnement (frame e pointer en anglais), destin´e ` pointer sur la base de l’environnement du bloc e a

328

Traduction des langages ` structure de blocs en langage d’assemblage a

CalculFibo : une action { param`tres : on r´cup`re la valeur de la donn´e n en MEM[pp+4] ; on e e e e ´crit la valeur du r´sultat f ` l’adresse indiqu´e dans MEM[pp+0]. } e e a e 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 alors MEM[MEM[pp+0+8]] ←− 1 sinon { Premier appel : (Point i) } MEM[pp−4] ←− 4 MEM[pp+4+8] − 1 MEM[pp−8] ←− 4 p+0 pp ←− pp − 8 { place des param`tres - (Point ii) } e CalculFibo pp ←− pp + 8 { on ˆte les param`tres } o e { Deuxi`me appel : } e MEM[pp−4] ←− 4 MEM[pp+4+8] − 2 MEM[pp−8] ←− 4 pp+4 pp ←− pp − 8 { place des param`tres } e CalculFibo pp ←− pp + 8 { on ˆte les param`tres } o e 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 n´cessaire aux variables du lexique global } e { 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 empil´e } e 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] { param`tre donn´e : valeur de A } e e MEM[pp−8] ←− 4 pp+4 { param`tre r´sultat : adresse de B } e e pp ←− pp − 8 { Allocation m´moire pour les param`tres } e e { (point 2) } CalculFibo pp ←− pp + 8 { Lib´ration de la m´moire des param`tres } e e e { Traduction de l’appel Ecrire (B) : } MEM[pp−4] ←− 4 MEM[pp+4] { valeur de B empil´e } e pp ←− pp − 4 ; Ecrire ; pp ←− pp + 4 { B ´crit } e Fig. 13.10 – Elimination compl`te des lexiques et des param`tres dans CalculFibo (On e e a suppos´ taille 2 entiers = 8). e

2. Cas des programmes ` plusieurs blocs a

329

MEM T T

MEM T

MEM

pp pp @B pp A=4 B @B tmem 4 A=4 B f1 f2 @B 4 A=4 B

(f) (n)

@B tmem

tmem

Prog. principal Point 1 on a lu A=4 MEM T

Prog. principal avant CalculFibo point 2 MEM T

CalculFibo (4, ...) avant le 1er appel r´cursif (point i) e MEM pp T f1”’ f2”’ @f1” 1 f1” f2” @f1’ 2 f1’ f2’ @f1 3 f1 f2 @B 4 A=4 B

@f1”

pp f1’ pp @f1 @f1 3 f1 f2 @B 4 A=4 B @f1 f2’ @f1 3 f1 f2 @B 4 A=4 B (f) (n)

@f1’

@f1

(f) (n) @B tmem

@B tmem

@B tmem

CalculFibo (4, ...) point ii

CalculFibo (3, ...) point i

CalculFibo (1, ...) point i

Fig. 13.11 – Contenu de la m´moire lors de l’ex´cution de CalculFibo e e

var. locales inutilis´es e

330

Traduction des langages ` structure de blocs en langage d’assemblage a

en cours d’ex´cution, c’est-`-dire juste sous les variables locales du bloc. Sur e a la figure 13.12-a, les pointeurs de base d’environnement sont figur´s par des e fl`ches en trait gras ; la notation @x est utilis´e pour signifier l’adresse de x. e e Lorsqu’on passe d’un bloc appelant ` un bloc appel´, il suffit de placer a e la variable pb ` la base de l’environnement du bloc appel´. Lorsque le bloc a e appel´ se termine, il faut replacer pb ` sa position ant´rieure, c’est-`-dire la e a e a base de l’environnement du bloc appelant. Contrairement ` ce qui se passe a pour le pointeur pp, il n’est pas toujours ais´ de calculer l’ancienne position e de pb de mani`re ` d´placer pb par une action de la forme pb ←− pb + k. On e a e introduit donc un m´canisme de sauvegarde de pb, ce qui donne le sch´ma de e e la figure 13.12-b. Chacune des positions de pb pointe sur une case m´moire qui e contient la sauvegarde de l’ancienne valeur (plus bas dans la pile). La suite des ces sauvegardes successives forme ce que l’on appelle le chaˆ ınage dynamique, ou lien dynamique.
Remarque : Il existe ´galement en compilation une notion de lien statique, e a ` ne pas confondre avec le lien dynamique. Le lien dynamique chaˆ entre eux ıne les environnements de deux blocs A et B tels que A appelle B, ` l’ex´cution. a e Le lien statique chaˆ entre eux les environnements de deux blocs A et B tels ıne que B est d´fini dans A, dans le texte du programme. Cela peut arriver en e Pascal, Ada, ANSI C, par exemple, mais pas en C classique.

La figure 13.13 donne le programme de calcul de la suite de Fibonacci dans lequel on a introduit la manipulation de la variable pb.

2.6

R´sum´ de l’occupation de la m´moire et remarques e e e

Nous avons d´j` dit au chapitre 4, paragraphe 4., que la m´moire n´cessaire ea e e aux donn´es d’un programme est form´e de deux zones disjointes : une zone e e n´cessaire ` la gestion des zones m´moire allou´es et lib´r´es dynamiquement e a e e ee a ` la demande du programme, qu’on appelle tas, et une zone n´cessaire ` la e a gestion des variables du lexique global et des lexiques locaux des proc´dures. e Nous venons de voir pr´c´demment que cette deuxi`me zone comporte non e e e seulement les variables et les param`tres mais aussi ´ventuellement des donn´es e e e de liaison entre appelant et appel´ : sauvegarde du lien dynamique dans notre e cas, adresse de retour de sous-programme dans le cas o` l’instruction d’appel u l’empile (cas du 68000, paragraphe 3.4.1), lien statique ´ventuellement. Cette e zone est g´r´e comme une pile et on parle souvent de la pile ` l’ex´cution pour ee a e la d´signer. e Un certain nombre de variables peuvent aussi ˆtre stock´es dans les registres e e du processeur. Il est alors n´cessaire d’assurer que leur valeur ne peut pas e ˆtre modifi´e par un sous-programme appel´. La sauvegarde ´ventuelle de ces e e e e registres est aussi effectu´e dans la zone pile (Cf. Paragraphe 3.1.3). e Noter que les acc`s ` la zone pile sont des acc`s directs dans un tableau, e a e par adresse et d´placement, du genre MEM[pp+4]. Dans une v´ritable pile les e e seules actions autoris´es sont Empiler et D´piler (Cf. Chapitre 4, paragraphe 5.) e e

2. Cas des programmes ` plusieurs blocs a

331

MEM ... f1 f2 param. @f1 param. 3 f1 f2 param. @B param. 4 A=4 B

MEM ... ancien pb param. @f1 param. 3 f1 f2 ancien pb param. @B param. 4 A=4 B

Variables locales de CalculFibo

Variables locales de CalculFibo Variables locales du prog. principal

(a)

(b)

Fig. 13.12 – Pointeur de base d’environnement et lien dynamique. On reprend l’exemple de CalculFibo, figure 13.11. (a) : position des variables locales du programme principal lors de deux appels de CalculFibo emboˆ es ; les fl`ches indiquent la position de la base ıt´ e des 3 environnements ; la variable pb doit prendre successivement ces 3 valeurs lors du d´roulement du programme. e (b) : insertion des sauvegardes de pb.

332

Traduction des langages ` structure de blocs en langage d’assemblage a

CalculFibo : une action pp ←− pp − 4 ; MEM[pp] ←− pb { sauvegarde de pb } pb ←− pp { installation du nouveau pb, l’ancien est en MEM[pb] } { param`tres : n est en MEM[pb+8] ; f est en MEM[pb+4]. } e 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]] ←− 1 sinon { Premier appel : } MEM[pp−4] ←− 4 MEM[pb+8] − 1 MEM[pp−8] ←− 4 pb+4 pp ←− pp − 8 ; CalculFibo ; pp ←− pp + 8 { Deuxi`me appel : } e MEM[pp−4] ←− 4 MEM[pb+8] − 2 MEM[pp−8] ←− 4 pb+4 pp ←− pp − 8 ; CalculFibo ; pp ←− pp + 8 MEM[MEM[pb+4]] ←− MEM[pb−8]+MEM[pb−4] pp ←− pb { lib´ration des variables locales } e 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 n´cessaire aux variables du lexique global } e { A est en MEM[pb−8] et B en MEM[pb−4]. } { Traduction de l’appel Lire (A) : } MEM[pp−4] ←− 4 pb−8 pp ←− pp − 4 ; Lire ; pp ←− pp + 4 { Appel de CalculFibo } MEM[pp−4] ←− 4 MEM[pb−8] MEM[pp−8] ←− 4 pb−4 pp ←− 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 compl`te des lexiques et des param`tres dans CalculFibo et e e introduction du pointeur de base d’environnement pb.

2. Cas des programmes ` plusieurs blocs a

333

et ne pr´jugent pas de l’implantation de la pile, qui peut fort bien ˆtre une e e s´quence chaˆ ee. e ın´ Noter aussi que la gestion en pile de la m´moire permet une r´utilisation e e maximale de la m´moire pour les lexiques locaux de deux blocs qui ne s’ape pellent pas l’un l’autre. 2.6.1 Probl`mes d’initialisation e

Nous verrons plus tard que, lors de l’ex´cution effective, le programme dit e principal dans le texte d’un programme utilisateur n’est pas le premier bloc existant. Il y a toujours un appelant, ne fˆt-ce que l’interpr`te de commandes u e a ` partir duquel on lance l’ex´cution du programme (Cf. Chapitre 20). e Le codage du programme principal suit donc exactement les mˆmes prine cipes que le codage des actions et fonctions param´tr´es. L’initialisation des e e pointeurs pp et pb n’apparaˆ pas dans le code des programmes utilisateurs. ıt En produisant le codage du bloc qui correspond au programme principal, on suppose que ce bloc h´rite, ` l’ex´cution, d’une valeur pertinente de ces deux e a e pointeurs, install´e auparavant. Le codage du programme principal doit en e contrepartie assurer que ce bloc se termine proprement comme une action ou fonction, par un retour au contexte appelant. 2.6.2 Allocation m´moire mixte statique/dynamique e

L’allocation m´moire pour les variables, et la transformation de programme e correspondante, produit des programmes dans lesquels apparaissent des acc`s e m´moire de la forme MEM[b+k], o` b est une adresse de base, et k est une e u constante calcul´e statiquement par le compilateur. En effet, dans le cas des e proc´dures et fonctions r´cursives, il est impossible d’associer statiquement e e (c’est-`-dire pendant la compilation et ind´pendamment des ex´cutions) une a e e adresse m´moire ` chaque nom de variable apparaissant dans le lexique. Plue a sieurs adresses correspondent au mˆme nom, et elles sont en nombre d´pendant e e de l’ex´cution. Nous avons r´solu cet aspect par une gestion de la m´moire en e e e pile, et une allocation mixte statique/dynamique : les adresses de base sont dynamiques, elles d´pendent de l’ex´cution ; les d´placements des diff´rentes e e e e variables par rapport ` l’adresse de base sont calcul´s statiquement, et sont a e ind´pendants de l’ex´cution. e e La plupart des langages machine offrent des acc`s m´moire avec adressage e e indirect par registre et d´placement, qui sont utilisables directement pour coe der nos programmes en langage d’assemblage. Il suffit que l’adresse de base soit rang´e dans un registre. S’il n’existe pas d’adressage avec d´placement, e e l’adresse compl`te de la variable peut ˆtre calcul´e par une addition explicite e e e avant l’acc`s m´moire. e e En revanche le mode d’adressage indirect est indispensable. La gestion en pile de la m´moire n’est pas impl´mentable en langage machine sans adressage e e indirect pour les acc`s m´moire : un adressage direct signifie que toutes les e e

334

Traduction des langages ` structure de blocs en langage d’assemblage a

adresses sont calculables statiquement, et inscrites une fois pour toutes comme des constantes dans le programme en langage machine.

3.

Traduction en langage d’assemblage : solutions globales

On int`gre les solutions ` tous les aspects en pr´sentant deux classes de e a e solutions : la classe des solutions ` base de pile, du type de celle utilis´e pour a e une machine 68000 ; la classe des solutions ` base de fenˆtres de registres, du a e type utilis´ pour une machine sparc. e

3.1
3.1.1

Utilisation des registres et sauvegarde
Utilisation des registres pour les variables globales

Les registres de la machine pour laquelle on produit du code sont bien appropri´s pour ranger les uniques variables globales qui subsistent apr`s toutes e e les transformations de programme envisag´es : les deux pointeurs, ou adresses, e pp et pb. En effet les registres sont par d´finition accessibles dans tout contexte, e et la rapidit´ d’acc`s (m´moire plus rapide que la grande m´moire, nombreuses e e e e instructions du langage machine travaillant directement sur des registres) est int´ressante pour des variables qui sont manipul´es tr`s souvent. e e e 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ˆ des variables temporaires dans les calculs, qui ıtre ne correspondent ` aucun nom explicitement d´fini par l’utilisateur dans le a e lexique. Pour un programme comme :
x, y, z : des entiers x ←− 3*(y + 2*z) − 7*(x+y) z ←− y

Il est impossible de calculer l’expression ` affecter ` x sans utiliser d’autres ema a placements m´moire que ceux allou´s aux noms x, y, z. Dans certains langages e e machine (comme celui du sparc), il est mˆme impossible de coder l’affectation e z ←− y (z et y ´tant en m´moire) sans passer par un registre interm´diaire : e e e il n’y a pas de transfert m´moire vers m´moire directement. e e O` placer ces temporaires de calcul ? Pour des raisons de temps d’ex´cution, u e on aimerait les placer dans les registres de la machine. On peut toujours imaginer, toutefois, une expression suffisamment compliqu´e pour n´cessiter plus e e de variables temporaires qu’il n’y a de registres disponibles. Dans ce cas les compilateurs placent les temporaires dans la pile.

3. Traduction en langage d’assemblage : solutions globales

335

3.1.3

N´cessit´ de sauvegarde des registres e e

Si les registres de la machine servent aux temporaires de calcul, il apparaˆ ıt des cas comme :
lexique x, y, z : des entiers f : un entier −→ un entier algorithme x ←− f( 3*(y + 2*z) − 7*(x+y) )

f(a) : 2 * a*a*a + 4 *a*a + 6*a + 1

Le programme principal et la fonction f doivent tout deux faire appel ` des a registres comme temporaires de calcul. S’ils utilisent les mˆmes registres, il se e peut que les temporaires du programme principal ne soient pas pr´serv´s de e e part et d’autre de l’appel de f. Pour rem´dier ` cet inconv´nient, il faut sauvegarder les valeurs des ree a e gistres utilis´s comme temporaires de calcul, lorsqu’on passe d’un bloc ` un e a autre. Il y a essentiellement deux classes de solutions : 1) la sauvegarde dans l’appelant, de tous les registres qu’il utilise et veut pr´server de part et d’autre e de l’appel d’un autre bloc ; 2) la sauvegarde dans l’appel´, de tous les registres e dans lesquels il ´crit. La deuxi`me solution a tendance ` provoquer moins de e e a sauvegardes : on ne sauvegarde que ce qui est effectivement modifi´. Cela peut e malgr´ tout ˆtre inutile : il est en effet possible qu’un appelant ne l’utilise pas. e e La sauvegarde est r´alis´e dans la pile, par exemple juste au-dessus des e e variables locales. L’exemple d´taill´ au paragraphe 3.4.3 ci-dessous illustre la e e sauvegarde des registres dans l’appel´. e

3.2

Appel de sous-programme : l’aller

Nous avons r´solu les probl`mes d’allocation m´moire pour les lexiques e e e locaux et les param`tres. Dans nos algorithmes modifi´s, il subsiste des appels e e r´duits au nom de la proc´dure ou fonction appel´e. Chaque bloc est cod´ en e e e e langage d’assemblage d’apr`s les principes ´nonc´s au paragraphe 1. Il reste e e e a ` coder les appels de blocs par des instructions de branchement ` des sousa programmes disponibles dans le langage machine consid´r´. Se pose alors le ee probl`me de l’adresse du bloc ` atteindre. e a Le cas le plus simple est celui des structures de blocs statiques : les proc´dures et fonctions sont toutes connues, elles ont des noms, et sont toue jours appel´es directement par l’interm´diaire de leur nom, dans le programme e e en langage de haut niveau. On code chaque bloc P s´par´ment (voir aussi aspects de compilation e e s´par´e, chapitre 18, paragraphe 2.), en lui associant une ´tiquette de d´but e e e e d’apr`s le nom du bloc dans le langage de haut niveau, par exemple P. Les e appels de P sont cod´s par : call P, si call est le nom de l’instruction de e saut ` un sous-programme (Cf. Chapitre 12, paragraphe 1.4.3). a Les textes obtenus par codage des diff´rents blocs sont simplement juxtae

336

Traduction des langages ` structure de blocs en langage d’assemblage a

pos´s, dans un ordre quelconque. Il suffit de se rappeler quelle est l’´tiquette e e qui correspond au bloc du programme principal. On l’appelle le point d’entr´e e du programme. Un cas plus compliqu´ apparaˆ lorsque le langage de haut niveau qu’on e ıt utilise permet de d´finir par exemple un tableau de fonctions. Dans ce cas les e fonctions ne sont plus n´cessairement appel´es par leur nom. On noterait par e e exemple, dans un langage d’actions ´tendu : e
Tf : le tableau sur [1..10] de (un entier −→ un entier) x : un entier sur [1..10] ; y, z : des entiers Lire (x) ; Lire (y) ; z ←− Tf[x] (y)

Le programme en langage d’assemblage correspondant doit manipuler explicitement les adresses des fonctions, c’est-`-dire les adresses associ´es aux a e ´tiquettes de d´but des s´quences d’instructions des fonctions. L’adresse ` e e e a laquelle on doit brancher pour appeler la fonction Tf[x] doit ˆtre calcul´e dye e namiquement, et le langage machine doit offrir un appel de sous-programme par adressage indirect. Dans la suite nous ne nous int´ressons plus ` ce cas. e a

3.3

Appel de sous-programme : le retour

Dans les programmes transform´s du langage d’action obtenus au parae graphe pr´c´dent, nous ´crivons tout simplement dans un bloc P : CalculFibo e e e pour signifier qu’il faut ex´cuter le corps de cette proc´dure ; nous souse e entendons que, lorsque cette proc´dure appel´e sera termin´e, le cours de e e e l’ex´cution reprendra dans P, juste apr`s l’appel. e e Le basculement de contexte ` l’aller est simple, comme nous venons de le a voir. Le basculement de contexte au retour, en revanche, doit ˆtre ´tudi´ de e e e pr`s. e Tout d’abord, il faut terminer le corps de la proc´dure appel´e CalculFibo e e par un branchement explicite au point o` l’on d´sire retourner. Et comme u e ce point d´pend de la position de l’appel de CalculFibo dans le programme, e c’est une adresse variable selon les appels. Le branchement de retour est donc n´cessairement indirect, puisque le code d’une proc´dure est ind´pendant des e e e endroits o` elle est appel´e. u e En quelque sorte, l’adresse o` il faudra retourner en fin de proc´dure est u e un param`tre donn´e suppl´mentaire de toute proc´dure. Le raisonnement sur e e e e les param`tres de fonctions et proc´dures r´cursives que nous avons tenu au e e e paragraphe 2. est encore valable. L’adresse de retour doit donc ˆtre stock´e quelque part (par exemple rang´e e e e dans la pile avec les autres param`tres donn´es) par le bloc appelant, avant e e l’instruction de saut au sous-programme appel´. En effet, cette adresse est e une valeur du compteur programme, et le saut ` un sous-programme consiste a justement a forcer une nouvelle valeur du compteur programme. ` Fort heureusement les langages machines offrent toujours une instruction

3. Traduction en langage d’assemblage : solutions globales

337

de branchement ` un sous-programme avec sauvegarde int´gr´e de l’adresse a e e d´part. Pour le retour, soit on trouve une instruction coh´rente avec la saue e vegarde lors de l’appel (cas du 68000), soit il faut utiliser une instruction de branchement en respectant les conventions de l’instruction d’appel (cas du sparc). Rappelons enfin que le programme principal doit se comporter comme les autres blocs ; on suppose que l’on y est arriv´ par un m´canisme d’appel de e e sous-programme, et il se termine donc par un retour au contexte appelant.
Remarque : Si l’on oublie l’instruction de retour ` la fin d’un sousa programme, le processeur poursuit l’ex´cution en s´quence c’est-`-dire en e e a g´n´ral dans le code d’un autre sous-programme. e e

3.4
3.4.1

Solutions ` base de pile, type 68000 a
Gestion de la zone de pile en assembleur

Les modes d’adressage indirects par registre avec pr´-d´cr´mentation ou e e e post-incr´mentation sont particuli`rement bien adapt´s ` la gestion en pile e e e a d’une portion de la m´moire. Il suffit de r´server un registre pour servir de e e pointeur de pile. Le choix de ce registre n’est pas toujours enti`rement libre. Par exemple, e le jeu d’instructions du 68000 fournit l’instruction jsr de saut ` un sousa programme, avec une sauvegarde automatique de l’adresse qui suit l’instruction jsr de la forme
RegA[7] ←− RegA[7] − 4 ; MEM[RegA[7]] ←− PC

On y reconnaˆ un m´canisme de gestion de pile avec RegA[7] (le registre ıt e d’adresse num´ro 7) comme pointeur de pile, plac´ sur la derni`re case occup´e ; e e e e la pile croˆ en diminuant les adresses. ıt Il suffit donc de g´rer le passage des param`tres et l’allocation de m´moire e e e pour les lexiques locaux en adoptant cette convention impos´e par le jeu d’inse tructions lui-mˆme (et qu’on ne peut donc pas remettre en cause, puisque e l’algorithme d’interpr´tation du langage machine est cˆbl´). e a e Le retour de sous-programme adopte la mˆme convention. L’instruction e rts est un branchement inconditionnel, doublement indirect par registre avec postincr´mentation. L’effet est : e
PC ←− MEM[RegA[7]] ; RegA[7] ←− RegA[7] + 4

Autrement dit rts trouve son adresse en sommet de pile, et la d´pile. e 3.4.2 Instructions link et unlink

Reprenons la s´quence d’instructions n´cessaires ` l’installation de l’envie e a ronnement local de la proc´dure CalculFibo (Cf. Figure 13.13) : e

338

Traduction des langages ` structure de blocs en langage d’assemblage a

pp ←− pp - 4 ; MEM[pp] ←− pb ; pb ←− pp ; pp ←− pp − 8

Et la s´quence d’instructions sym´trique, ` la fin de CalculFibo : e e a
pp ←− pb ; pb ←− MEM[pp] ; pp ←− pp+4

En langage d’assemblage 68000, on ´crit, en supposant que le pointeur pp est e rang´ dans A7 et le pointeur pb dans A6 : e link A6, -8 ! s´quence de d´but e e .... unlink A6 ! s´quence de fin e L’effet de ces instructions est exactement celui d´crit plus haut. Noter que e le choix de A6 comme pointeur de base d’environnement est libre, puisque c’est un param`tre explicite des instructions link et unlink ; c’est une convention e des compilateurs. A7 en revanche est le pointeur de pile oblig´. e 3.4.3 Codage avec lien dynamique, variables locales dans la pile, temporaires dans des registres

Soit les actions A, B et C d´finies Figure 13.14. A est l’action principale, elle e appelle B qui appelle C. Nous donnons figure 13.15 le codage de la proc´dure A e dans un langage d’assemblage pour 68000. Rappelons que l’adresse de retour de sous-programme est sauv´ dans la pile d’ex´cution par l’instruction jsr et e e que la sauvegarde du lien dynamique et la mise en place de l’environnement local du sous-programme sont assur´es par l’instruction link. Par rapport au e sch´ma de pile donn´ figure 13.12-b, la zone des donn´es de liaison comporte e e e non seulement la sauvegarde de pb mais aussi l’adresse de retour (en-dessous), ce qui donne la taille de deux adresses (8 octets) ` cette zone. a

3.5

Solutions ` base de fenˆtres de registres, type sparc a e

Nous ´tudions ici les sch´mas de codage de sous-programmes sugg´r´s e e ee par certaines architectures de processeurs, dites ` fenˆtres de registres. Pour a e pr´ciser les choses, nous traitons l’exemple du sparc. Comme nous l’avons e signal´ au chapitre 12, paragraphe 1.7.1, le processeur sparc est ´quip´ d’un e e e banc de registres, qui sont ` acc`s plus rapide que la grande m´moire. Ces a e e nombreux registres sont utilis´s pour optimiser les m´canismes de passages de e e param`tres et d’appels de sous-programmes. Les techniques ´tudi´es plus haut, e e e et mises en oeuvre directement dans le cas des langages machine type 68000, sont encore applicables. L’id´e consiste ` utiliser le banc de registres comme e a un cache sur la pile. Nous d´taillons ci-dessous les m´canismes permettant de e e comprendre cette affirmation.

3. Traduction en langage d’assemblage : solutions globales

339

A : l’action { sans param`tre, donc. } e lexique : x, y : des entiers algorithme : x ←− 1 ; B (3*x + 1, y) ; x ←− y B : l’action (la donn´e a : un entier, le r´sultat b : un entier) e e lexique : z : un entier algorithme : C (z) ; b ←− z + a C : l’action (le r´sultat u : un entier) e lexique : i : un entier algorithme : i ←− 1 ; u ←− 1 tant que i ≤ 10 u ←− u + i ; i ←− i + 1 Fig. 13.14 – Proc´dures A, B, C e

! Tous les idfs d´signent des entiers de 4 octets e TailleEnvB = 4 ! Acc`s a la variable locale, relatif ` l’adresse de base : e ` a deltaZ = 4 ! Acc`s aux param`tres, relatifs ` l’adresse de base : e e a deltaA = 12 deltaB = 8 .text B :link A6, -TailleEnvB ! l’action A a pr´par´ les param`tres : donn´e a <--> valeur 3*x+1 e e e e ! et r´sultat b <--> adresse de y avant l’appel ` B e a move.l A0, -(SP) ! sauvegarde de 2 registres move.l D0, -(SP) ! appel de C : move.l A6, A0 ! calcul du param, adr de z dans A0 sub.l deltaZ, A0 move.l A0, -(SP) ! empiler A0 jsr C add.l 4, SP ! lib´rer param`tre e e ! fin de l’appel de C ! b <-- z + a move.l (A6+deltaA), D0 ! D0 <-- a add.l (A6-deltaZ), D0 ! D0 <-- D0 + z move.l (A6+deltaB), A0 ! A0 <-- adresse b move.l D0, (A0) ! b <-- D0 move.l (SP)+, D0 ! restauration de 2 registres move.l (SP)+, A0 unlk A6 rts Fig. 13.15 – Codage de l’action B en langage d’assemblage 68000

340

Traduction des langages ` structure de blocs en langage d’assemblage a

3.5.1

Le m´canisme de fenˆtres de registres du sparc e e

Le SPARC dispose d’un ensemble de registres g´r´ en fenˆtres : 8 registres ee e dits globaux sont accessibles en permamence. Les autres registres sont accessibles par groupes de 24 registres dits inputs, locals et outputs. Le groupe, ou fenˆtre, courant, est rep´r´ par le registre CWP (pour Current Window Pointer). e ee Deux instructions sp´cifiques permettent de d´placer la fenˆtre de registres e e e en incr´mentant ou d´cr´mentant le registre CWP : save et restore. Le d´calage e e e e est de 16 registres. Deux fenˆtres cons´cutives co¨ e e ıncident donc sur 8 registres : les registres ouputs de la fenˆtre courante avant l’ex´cution du save core e respondent aux inputs de la fenˆtre courante apr`s l’ex´cution du save. Le e e e restore a l’effet inverse. Le m´canisme des fenˆtres de registres est illustr´ e e e par la figure 13.16.

3.5.2

Sch´ma de codage id´al e e

Le m´canisme des fenˆtres permet d’impl´menter de mani`re efficace la e e e e notion de contexte des langages proc´duraux. Sch´matiquement, lorsqu’une e e proc´dure en appelle une autre, la proc´dure appel´e effectue un save, ce qui e e e lui permet de travailler avec un nouveau contexte. La communication entre proc´dure appelante et proc´dure appel´e (pour le passage des param`tres et la e e e e gestion de l’adresse de retour) est assur´e par les 8 registres communs aux deux e fenˆtres, qui constituent la zone d’´change. En fin d’ex´cution, la proc´dure e e e e appel´e effectue un restore, qui r´tablit le contexte pr´c´dent, puis un saut e e e e a ` l’adresse de retour. Notons que lors de l’appel de sous-programme l’adresse de l’instruction call est sauvegard´e dans le registre %o7, d’o` l’adresse %o7+8 pour le retour e u (nous faisons suivre les instructions de saut par une instruction nop de fa¸on c a ` ne pas se pr´occuper du pipeline). e Le cas id´al le plus simple qu’on puisse envisager est le cas o` les proc´dures e u e n’utilisent jamais plus de 7 param`tres d’entr´e, ni plus de 8 variables locales, e e et o` le nombre d’appels imbriqu´s ne d´passe pas le nombre de fenˆtres phyu e e e siquement disponibles. Dans ce cas le m´canisme des fenˆtres de registres est e e suffisant. Il suffit de consid´rer l’effet de l’instruction CALL pour respecter la e convention sur la m´morisation de l’adresse de retour : dans le registre o7 de e l’appelante, qui correspond au registre i7 de l’appel´e. e Le sch´ma de codage id´al est donn´ figure 13.17. e e e
Remarque : La s´quence restore ; jmpl %o7+8, %g0 ; nop est souvent e transform´e en jmpl %i7+8, %g0 ; restore. En effet, l’adresse de retour est e situ´e dans le registre %o7 de l’appelante, qui s’appelle %i7 dans l’appel´e. Elle e e s’appelle donc %i7 avant le restore, et %o7 apr`s le restore. En profitant du e d´lai de branchement, on peut r´aliser le branchement avant la restauration e e du contexte.

3. Traduction en langage d’assemblage : solutions globales

341

banc de registres i 32 bits

l

o

RESTORE

SAVE

i 7 registres globaux

l

o

Fig. 13.16 – M´canisme des fenˆtres de registres e e

appelee: save ! utilisation des param`tres d’entr´e %i0...%i6 e e ! et des variables locales %l0..%l7 restore jmpl %o7+8, %g0 nop appelante: ! place les param`tres dans %o0..%o6 e call appelee ! sauvegarde de l’adresse de retour dans %o7 nop ... Fig. 13.17 – Sch´ma de codage id´al utilisant le m´canisme de fenˆtres de registres e e e e

342

Traduction des langages ` structure de blocs en langage d’assemblage a

3.5.3

Probl`me : le banc de registres est fini e

En cas de programme cons´quent ou de proc´dure r´cursive, l’hypoth`se sur e e e e le petit nombre d’appels imbriqu´s devient fausse. Pour que le programmeur e puisse consid´rer le banc de registres comme virtuellement infini, il faut pr´voir e e d’utiliser la m´moire en plus du banc de registres. e Une solution simple consiste ` imaginer que, lorsque le banc de registres est a plein, les proc´dures et fonctions se mettent ` utiliser directement la m´moire e a e g´r´e en pile, selon le sch´ma ´tudi´ pour 68000. Comme le codage pour banc ee e e e de registres diff`re du codage pour pile — ne serait-ce que dans l’acc`s aux e e variables locales et param`tres — chaque bloc devrait alors poss´der deux e e codages diff´rents, selon qu’il est appel´ quand le banc de registres est plein e e ou non. C’est hors de question. Il faut donc se d´brouiller pour obtenir cette commutation du banc de e registres vers la pile de mani`re transparente pour les programmes des divers e blocs, qui doivent toujours avoir l’impression que le banc de registres est infini. La mise en oeuvre compl`te de cette solution transparente, plus la prise en e compte du fait que certains programmes ont plus de 8 variables locales ou plus de 8 param`tres, est d´licate. Elle n’est pas r´alisable de mani`re satisfaisante e e e e sans utiliser le m´canisme d’interruption logicielle qui sera pr´sent´ dans la e e e partie VI. Nous donnons ci-dessous quelques indices pour comprendre les sch´mas de e codage de langages ` structure de blocs en langage d’assemblage sparc, tels a qu’on peut les observer en lisant le code produit par un compilateur C par exemple. 3.5.4 Cas r´aliste e

Pour que le programmeur (ou le concepteur de compilateur) puisse consid´rer le banc de registres comme virtuellement infini, il faut pr´voir un e e m´canisme de sauvegarde des fenˆtres de registres, lorsqu’on effectue plus de e e save qu’il n’est physiquement possible d’en g´rer. e Cette sauvegarde est assur´e automatiquement, pendant l’interpr´tation e e de l’instruction save par le processeur, comme traitant d’une interruption interne d´clench´e par le d´passement de capacit´ du banc de registres. Ce e e e e traitant d’interruption r´alise une copie des registres %i0..%i7 et %l0..%l7 e d’une fenˆtre dans la pile. Il adopte des conventions sur la zone de pile utilis´e, e e qui doivent ˆtre connues du programmeur. e L’id´e est d’utiliser un registre comme pointeur de pile. C’est %o6. En e langage d’assemblage %sp est d’ailleurs un synonyme de %o6 (sp pour Stack Pointer). Toute fenˆtre correspondant au contexte d’une proc´dure en cours e e d’ex´cution doit ˆtre telle que son registre %o6 pointe sur une zone de 64 octets e e libres de la pile. Cet invariant est suppos´ v´rifi´ au moment o` la proc´dure e e e u e principale de notre programme est appel´e (il a ´t´ install´ par l’appelant de e ee e cette proc´dure, l’interpr`te de commandes par exemple, Cf. Chapitre 20). e e

4. Exercices

343

Pour que la propri´t´ soit toujours vraie il suffit, lors de tout changement de ee contexte qui installe une nouvelle fenˆtre, d’initialiser le registre %o6 de la e nouvelle fenˆtre. e Or l’instruction save du sparc se comporte comme une addition, qui interpr`te la d´signation de ses op´randes dans la fenˆtre de d´part, et la e e e e e d´signation du r´sultat dans la fenˆtre d’arriv´e. Une instruction save %o6, e e e e -64, %o6 permet donc d’initialiser le registre %o6 de la nouvelle fenˆtre d’apr`s e e la valeur du registre %o6 de l’ancienne : l’instruction d´cale le pointeur vers les e adresses inf´rieures, r´servant ainsi un espace de la pile de taille 4 ∗ 16 = 64 e e pour 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 dans le contexte de l’appel´. %fp, pour Frame Pointer, est un synonyme de %i6 en e assembleur. Le programme de la figure 13.19 illustre ce m´canisme. e 3.5.5 Variables locales dans la pile et param`tres en exc`s e e

Dans le cas o` le nombre de registres ne suffit pas pour stocker les variables u locales et passer les param`tres, il est possible d’utiliser la pile. On peut lors e du save demander plus de place dans la pile que les 64 octets n´cessaires ` la e a sauvegarde des registres %i0..%i7 et %l0..%l7 par le traitant d’interruption g´rant la demande d’une fenˆtre alors qu’il n’en existe plus de libre. e e La figure 13.20 illustre l’organisation de la pile et des fenˆtres de registres e dans ce cas. La seule contrainte qu’il faut respecter est de conserver la place en haut de zone allou´e pour la sauvegarde ´ventuelle de la fenˆtre courante. e e e Les variables locales sont alors rang´es en bas de pile et on y acc`de via e e une adresse de la forme %fp − d, le d´placement d pouvant ˆtre calcul´ stae e e tiquement de la mˆme fa¸on que pour la solution ` base de pile seulement. e c a Les param`tres sont rang´es par l’appelant dans le haut de sa zone locale, e e juste sous la zone de sauvegarde pour le traitant d’interruption. Dans l’appel´ e on acc`de alors aux param`tres effectifs via une adresse de la forme %sp + d’ e e avec d’ ≥ 64, d’ ´tant lui aussi calculable statiquement. e

4.

Exercices

E13.1 : Observation de l’ex´cution d’une action r´cursive e e Consid´rons l’algorithme de calcul de la suite de Fibonacci (Cf. Figure 13.3) e et plus particuili`rement la traduction d´crite dans le paragraphe 2.5 et la e e figure 13.10. Dessiner les diff´rents ´tats du tableau MEM et plus pr´cis´ment e e e e la partie pile au cours de l’ex´cution de l’action calculFibo avec la valeur 4 pour e la variable A. E13.2 : Codage des fonctions Reprendre la d´marche d´crite dans ce chapitre pour les fonctions. Les pae e ram`tres d’une fonction sont des donn´es, pour lesquelles on peut proc´der e e e

344

Traduction des langages ` structure de blocs en langage d’assemblage a

fenˆtre 1 e i save %o6, -64,%o6 Zone de sauvegarde de la fenˆtre 2 e

l fenˆtre 2 e o 6 7 l i 0

PILE

restore 6 7

o

fenˆtre2.SP e 64

fenˆtre1.SP = fenˆtre2.FP e e Fig. 13.18 – Utilisation des fenˆtres de registres avec r´servation de place dans la pile e e pour la sauvegarde des fenˆtres. Noter que dans l’´criture de l’instruction e e save %o6, -64, %o6, le premier %o6 d´signe celui de l’ancienne fenˆtre e e et le second celui de la nouvelle fenˆtre. e appelee: save %o6, -64, %o6 ! ou save %sp, -64, %sp ! r´serve une zone de 64=16*4 octets dans la pile, pour e ! la sauvegarde des registres i et l de ce nouveau contexte. ! ... utilisation des param`tres d’entr´e %i0...%i6 e e ! et des variables locales %l0..%l7 ... ! retour et restauration de la fen^tre e jmpl %i7+8, %g0 restore appelante: ... call appelee ! sauvegarde de l’adresse de retour dans %o7 nop Fig. 13.19 – Programme n´cessitant la sauvegarde des registres e

4. Exercices

345

appelant 0

PILE

i

save %o6, -taille,%o6 taille > 64

appel´.sp e sauvegarde registres i, l Contexte

o 6 7

i

appelant.sp = appel´.fp e

var. locales sauvegarde registres i, l param`tres e >6 Contexte de l’appelant

l

o 6 7 appel´ e appelant.fp var. locales

Fig. 13.20 – Variables locales et param`tres en exc`s dans la pile e e

de l’appel´ e

l

346

Traduction des langages ` structure de blocs en langage d’assemblage a

comme dans le cas des actions : on passe leur valeur. Le r´sultat d’une fonce tion est calcul´ par l’appel´ sans que l’appelant lui ait fourni l’adresse d’une e e de ses variables. Il faut donc choisir un m´canisme qui permet ` la fonction e a appel´e d’ecrire le r´sultat qu’elle calcule dans un emplacement m´moire connu e e e du contexte appelant, qui pourra le lire. On peut examiner deux solutions : le r´sultat est stock´ dans un registre ou dans la pile. Noter que selon le type du e e r´sultat de la fonction (par exemple s’il s’agit d’un produit de types ou d’un e tableau) la solution de la pile est plus facile ` mettre en oeuvre. a E13.3 : Nombre de ’1’ dans la repr´sentation binaire d’un entier e Traduire dans le langage d’assemblage de votre choix l’algorithme pr´sent´ e e au chapitre 12, paragraphe 1.4.1, qui permet de compter les bits ` 1 dans la a repr´sentation binaire d’un entier. e E13.4 : Traduction de boucles imbriqu´es e Traduire en langage d’assemblage l’algorithme suivant :
lexique i, j, x : des entiers ; N : l’entier ... { donn´ } e algorithme x ←− 0 i parcourant 0 .. N j parcourant 0 .. N x ←− x + i * j

Commencer par exprimer chaque boucle ` l’aide de la construction tant que a comme sugg´r´ au paragraphe 1.5 du chapitre 4. ee E13.5 : Algorithme de Bresenham Traduire dans le langage d’assemblage de votre choix l’algorithme pr´sent´ au e e chapitre 5, paragraphe 2.3 qui permet de calculer les coordonn´es des points e d’une droite dans un plan. E13.6 : Suite de Syracuse L’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 = 1 si X reste 2 = 1 X ←− 3 × X + 1 sinon X ←− X quotient 2

{ X est impair } { X est pair }

4. Exercices

347

E13.7 : Suite de Fibonacci Traduire compl`tement les algorithmes de l’exemple suite de Fibonacci (algoe rithme d´crit dans la figure 13.3) dans l’assembleur de votre choix. Envisager e des solutions avec ou sans gestion du lien dynamique, avec ou sans utilisation de fenˆtres de registres. e E13.8 : Parcours d’un tableau d’entiers Soit l’algorithme :
lexique N : l’entier ... { donn´ } e T : un tableau sur [0..N−1] d’entiers S, i : des entiers algorithme { calcul de la somme des ´l´ments du tableau } ee S ←− T[0] i parcourant (1..N−1) : S ←− S + T[i]

Ecrire cet algorithme en langage d’assemblage. Envisager plusieurs solutions en utilisant diverses repr´sentations pour les entiers (2, 4 ou 8 octets) et divers e modes d’adressage pour les acc`s aux ´l´ments du tableau. e ee E13.9 : Parcours d’un tableau de structures Soit l’algorithme :
lexique N : l’entier ... { donn´ } e ST : le type ¡c : un caract`re ; m : un entier e T : un tableau sur [0..N−1] de ST M, i : des entiers algorithme { calcul du maximum des ´l´ments du tableau } ee M ←− T[0].m i parcourant (1..N−1) : Si M < T[i] alors M ←− T[i].m

Proposer une repr´sentation en m´moire du type ST et ´crire en langage d’ase e e semblage l’algorithme ci-dessus. E13.10 : Parcours de matrice carr´e et comparaison double longueur e en compl´ment ` deux e a Reprendre le probl`me E4.8 du chapitre 4, et proposer un programme en ase sembleur sparc (description de la zone de donn´es, suite d’instructions). e E13.11 : Observation de code Observer le code produit par diff´rents compilateurs pour diff´rents proe e grammes ; en g´n´ral une option (-S pour le compilateur gcc sous unix) permet e e d’obtenir une version en langage d’assemblage du code. Retrouver l’implantation des variables globales, locales et des param`tres. e

348

Traduction des langages ` structure de blocs en langage d’assemblage a

Quatri`me partie e A la charni`re du logiciel et du e mat´riel... e

Chapitre 14 Le processeur : l’interpr`te e cˆbl´ du langage machine a e
Ce chapitre d´crit la mise en oeuvre par un circuit de l’algorithme d’ine terpr´tation des instructions d’un processeur. Nous parlons aussi d’interpr`te e e du langage machine. Cet interpr`te est cˆbl´ : ce n’est pas un programme mais e a e un circuit. Etant donn´ le jeu d’instructions d´fini pour un processeur, la description e e de cet algorithme permet de comprendre comment est ex´cut´e une instruce e tion, donc un programme en langage machine. C’est ce point de vue simple et purement p´dagogique que nous adoptons ici, la description des m´thodes de e e conception d’un processeur d´passant le cadre de ce livre. Nous ne parlerons e pas non plus de processeur ` flot de donn´es ou pipelin´ ; pour une description a e e approfondie le lecteur peut consulter [HP94]. Un processeur peut ˆtre consid´r´ comme une machine algorithmique e ee (Cf. Chapitre 11) form´e d’une partie op´rative (une UAL, des bus, des e e ´l´ments de m´morisation, etc.) et d’une partie contrˆle. Le processeur est reli´ ee e o e a ` une m´moire dans laquelle est stock´ un programme en langage machine. La e e question de la liaison entre une machine algorithmique et une m´moire a ´t´ e ee ´tudi´e au chapitre 11. e e Le processeur doit r´cup´rer les instructions en langage machine dans la e e m´moire, dans l’ordre du programme, et les ex´cuter une par une. L’algoe e rithme d’interpr´tation du langage machine consiste ainsi en une boucle ine finie (mais nous verrons dans la partie VI, Chapitre 22, qu’il est possible d’interrompre cette boucle infinie) : lire l’instruction courante, la d´coder, e r´aliser le travail correspondant et d´terminer l’adresse de l’instruction suie e vante (Cf. Paragraphe 1.6 du chapitre 12). Si l’instruction ` ex´cuter est par a e exemple add d0, d1, d2 le processeur doit faire en sorte que les contenus des registres d0 et d1 soient pr´sents aux deux entr´es de l’UAL, activer l’addition e e et envoyer le r´sultat dans le registre d2. e La compr´hension de ce chapitre suppose connus les chapitres 8, 9, 10, 11 e et 12. Apr`s avoir expliqu´ les principes de l’interpr´tation des instruce e e

352

Le processeur : l’interpr`te cˆbl´ du langage machine e a e

Processeur Partie contrˆle o

M´moire e SelMem l/e bus donn´es e programme

RI PC UAL Partie op´rative e Fig. 14.1 – Organisation globale de l’ensemble processeur/m´moire. UAL d´signe l’unit´ e e e arithm´tique et logique, PC le compteur de programme et RI le registre e instruction. bus adresses donn´es e

tions du langage machine (paragraphe 1.), nous pr´sentons un exemple e extrˆmement simple dont le jeu d’instruction est d´crit dans le parae e graphe 2. Nous donnons dans le paragraphe 3. une r´alisation du proe cesseur puis nous montrons comment l’am´liorer (paragraphe 4.). Enfin, e nous ´tudions les cons´quences de quelques extensions du processeur (pae e ragraphe 5.).

1.

Les principes de r´alisation e

La figure 14.1 d´crit la structure de l’ensemble processeur/m´moire. Le proe e cesseur est compos´ d’une partie contrˆle et d’une partie op´rative ; la premi`re e o e e envoie des commandes ` la seconde qui, elle, ´met des comptes-rendus. La a e m´moire n’est ici reli´e qu’` un processeur. e e a
Les aspects pr´cis de communication entre le processeur et la m´moire sont e e d´taill´s dans le chapitre 15. Les aspects de liaison avec le monde ext´rieur e e e pour r´aliser par exemple des entr´es/sorties sont ´tudi´s dans le chapitre 16. e e e e

1.1

Relations du processeur avec la m´moire e

Le processeur est reli´ ` la m´moire par un bus adresses unidirectionnel et ea e un bus donn´es bidirectionnel. e Nous supposons ici que la lecture ou l’´criture s’effectue en un temps e inf´rieur au temps de cycle d’horloge du processeur. L’acc`s ` la m´moire est e e a e alors pilot´ par deux commandes : s´lection de la m´moire SelMem et lecture e e e ou ´criture l/e. Ainsi, pour ´crire la valeur vvv dans la m´moire ` l’adresse e e e a xxx le processeur doit mettre SelMem ` 1 et l/e ` 0 en for¸ant la valeur vvv a a c sur le bus donn´es et la valeur xxx sur le bus adresses ; l’´criture est effective e e

1. Les principes de r´alisation e

353

au prochain front d’horloge du processeur. Pour lire la valeur contenue dans la m´moire ` l’adresse xxx le processeur doit positionner les commandes Sele a c Mem et l/e en for¸ant la valeur xxx sur le bus adresses ; le contenu du mot m´moire est disponible sur le bus donn´es ` partir du prochain front d’horloge e e a du processeur. Le d´roulement d’un acc`s m´moire dans le cas o` la m´moire est plus lente e e e u e a ´t´ d´crit au paragraphe 2.2 du chapitre 9 et les aspects de synchronisation ee e ont ´t´ d´taill´s au paragraphe 3.1 du chapitre 11. ee e e La m´moire contient deux types d’informations : des instructions et des e donn´es. Une instruction machine comporte elle-mˆme deux types d’informae e tions : le code de l’instruction et la d´signation de(s) op´rande(s) de l’instruce e tion. Selon les instructions et le format de leur codage ces informations peuvent ˆtre lues en un seul acc`s ` la m´moire ou non. Lorsque plusieurs acc`s sont e e a e e n´cessaires, ils se d´roulent n´cessairement lors de cycles d’horloge diff´rents et e e e e cons´cutifs, le code de l’instruction ´tant lu en premier. Un registre sp´cialis´ e e e e appel´ compteur programme (PC) rep`re le mot m´moire en cours de traitee e e ment. Il doit ˆtre mis ` jour apr`s chaque acc`s ` une instruction en vue de e a e e a l’acc`s suivant. e On peut envisager un autre type d’organisation dans laquelle la m´moire e est organis´e en deux parties distinctes : une m´moire pour les instructions e e et une m´moire pour les donn´es. Ce type d’organisation n´cessite deux bus e e e adresses et deux bus donn´es diff´rents. Les principes g´n´raux restent tr`s e e e e e proches ; nous n’en parlerons plus dans la suite.

1.2

Principes g´n´raux de la partie op´rative e e e

La partie op´rative d’un processeur doit ˆtre capable d’effectuer toutes les e e op´rations et tous les transferts d’information n´cessaires ` l’ex´cution des e e a e instructions du langage machine. Elle peut donc ˆtre tr`s proche d’une partie op´rative type, d´crite au e e e e chapitre 11. Une particularit´ ` signaler est l’existence d’un registre particulier ea (appel´ registre instruction et not´ RI), non manipulable par les instructions e e du langage machine et qui contient ` chaque instant l’instruction en cours a d’interpr´tation. Le contenu de ce registre sert de compte-rendu pour la partie e contrˆle. o L’UAL a deux types de sorties : une donn´e qui est le r´sultat d’un calcul e e et les codes de conditions arithm´tiques Zu, Nu, Cu, Vu. La donn´e circule e e sur un bus et sera charg´e dans un registre ou un mot m´moire ; les codes e e de conditions sont des informations de contrˆle qui peuvent ˆtre test´es par o e e la partie contrˆle : ce sont des entr´es de la partie contrˆle. Ces codes de o e o conditions peuvent aussi ˆtre charg´s dans 4 bits d’un registre d’´tat. e e e Notons qu’une adresse peut ˆtre une entr´e de l’UAL lorsqu’un calcul est e e n´cessaire sur une adresse ; par exemple, pour traiter un mode d’adressage ine direct avec d´placement, il faut ajouter la valeur de l’adresse et le d´placement. e e

354

Le processeur : l’interpr`te cˆbl´ du langage machine e a e

Les registres sont des ´l´ments de m´morisation internes au processeur. ee e Certains sont connus du programmeur et manipulables explicitement : un mn´monique leur est associ´ dans le langage d’assemblage. Ces registres e e peuvent contenir des donn´es et/ou des adresses. Ils peuvent ˆtre class´s en e e e diff´rentes cat´gories. Par exemple dans la famille des processeurs 68xxx, les e e registres sont typ´s en registres de donn´es et registres d’adresses. Dans le e e sparc, on trouve des registres globaux et des registres locaux, d’entr´e et de e sortie, les trois derniers ´tant organis´s en fenˆtres de registres. e e e D’autres registres, comme le compteur programme (PC), le pointeur de pile (SP), le mot d’´tat (SR) contenant les indicateurs Z, N, C, V, peuvent e ˆtre manipul´s au travers d’instructions sp´cialis´es. Par exemple, les instruce e e e tions de rupture de s´quence ont un effet sur la valeur du registre PC. Les e indicateurs Z, N, C, V du mot d’´tat contiennent les valeurs Zu, Nu, Cu, Vu e calcul´es par l’UAL lors de la derni`re instruction qui a mis ` jour explicitee e a ment ces indicateurs. Dans certains processeurs, comme le sparc par exemple, le jeu d’instructions comporte les instructions arithm´tiques sous deux formes : e Addcc et Add, addition avec ou sans mise ` jour des indicateurs. a Toute action sur un registre provoque un changement d’´tat de la partie e op´rative. La partie op´rative peut ex´cuter un certain nombre d’actions que e e e nous appellerons microactions (Cf. Paragraphe 3.1). Une microaction est un ensemble de modifications simultan´es de l’´tat de la partie op´rative. e e e Rappelons que la partie op´rative peut ˆtre vue comme un automate dont e e l’´tat est l’ensemble des valeurs contenues dans les registres. L’exercice E14.4 e montre ce point de vue.

1.3

Principes g´n´raux de la partie contrˆle e e o

La partie contrˆle doit envoyer les commandes ad´quates ` la partie o e a op´rative, le processeur r´alisant ainsi l’interpr´tation du langage machine. e e e Le sch´ma g´n´ral est le suivant : charger le registre d’instructions (RI) avec e e e l’instruction courante (dont l’adresse est dans PC), d´coder et ex´cuter cette e e instruction, puis pr´parer le compteur programme (PC) pour l’instruction suie vante. La partie contrˆle d’un processeur est ainsi la r´alisation mat´rielle d’un o e e algorithme it´ratif qui peut ˆtre d´crit par une machine s´quentielle avec ace e e e tions. Les sorties sont un ensemble d’ordres envoy´s ` la partie op´rative e a e ou ` l’ext´rieur et les entr´es sont des informations ´manant de la partie a e e e op´rative : valeur d’un code op´ration, valeur d’un code condition et indie e cateurs arithm´tiques. e La machine s´quentielle qui d´crit l’algorithme de la partie contrˆle est e e o aussi appel´e automate (ou graphe) de contrˆle ou s´quenceur. e o e Dans la suite nous d´veloppons un exemple simple pour lequel nous e d´crivons la partie contrˆle tout d’abord de fa¸on fonctionnelle par un algoe o c rithme it´ratif en consid´rant les ressources (registres) du processeur comme e e

2. Exemple : une machine ` 5 instructions a

355

des variables et la m´moire comme un tableau. Nous donnons ensuite une dese cription sous forme de machine s´quentielle avec actions aux ´tats de laquelle e e on associe des microactions : ce sont les op´rations effectivement r´alisables e e par la partie op´rative. L’objectif est de montrer comment on peut concevoir e la partie op´rative et la partie contrˆle d’un processeur, ´tant donn´ le jeu e o e e d’instructions retenu.

2.

Exemple : une machine ` 5 instructions a

Le processeur comporte un seul registre de donn´es, directement visible par e le programmeur, appel´ ACC (pour accumulateur). e Les instructions sont d´crites ci-dessous. On donne pour chacune une e syntaxe de langage d’assemblage et l’effet de l’instruction. mise ` z´ro du registre ACC a e chargement de la valeur imm´diate vi dans ACC e chargement du mot m´moire d’adresse ad avec le e contenu de ACC jmp ad saut ` l’adresse ad a add [ad] chargement de ACC avec la somme du contenu de ACC et du mot m´moire d’adresse ad. e Ce jeu d’instruction est extrˆmement r´duit, l’objectif ´tant de disposer de e e e suffisamment d’´l´ments pour d´tailler la conception du processeur mais de se ee e limiter de fa¸on ` garder une taille raisonnable ` cette description. Remarquons c a a que l’on pourrait rendre le jeu d’instructions plus sym´trique en ajoutant une e instruction de chargement absolu : ld [ad]. La taille n´cessaire au codage d’une adresse ou d’une donn´e est 1 mot. e e Les instructions sont cod´es sur 1 ou 2 mots : le premier mot repr´sente le e e codage de l’op´ration (clr, ld, st, jmp, add) ; le deuxi`me mot, s’il existe, e e contient une adresse ou bien une constante. Le codage des instructions est donn´ figure 14.2-a. Voici un exemple de programme ´crit dans ce langage e e d’assemblage : clr ld #vi st [ad]
ld #3 st [8] etiq: add [8] jmp etiq

En supposant le programme charg´ ` partir de l’adresse 0, les adresses ´tant ea e des adresses de mots, l’adresse associ´e au symbole etiq est 4. En supposant e que la taille d’un mot est de 4 bits, la figure 14.2-b donne la repr´sentation en e m´moire du programme pr´c´dent apr`s assemblage et chargement en m´moire e e e e e a ` partir de l’adresse 0 (Cf. Chapitre 18 pour plus de d´tails). e
Remarque : En fixant la taille d’un mot nous avons fig´ la taille maxie

356

Le processeur : l’interpr`te cˆbl´ du langage machine e a e

m´moire e 0000 0010 0011 0011 1000 0101 1000 0100 0100 code de l’op´ration ld e valeur imm´diate 3 e code de l’op´ration st e adresse 8 code de l’op´ration add e adresse 8 code de l’op´ration jmp e adresse 4

clr ld #vi st [ad] jmp ad add [ad]

1 2 3 4 5

vi ad ad ad

0100

0111

(a)

(b)
Fig. 14.2 – (a) Codage des instructions ; (b) repr´sentation en m´moire d’un programme e e en langage machine

male de la m´moire puisqu’une adresse est cod´e sur un mot. La m´moire du e e e processeur a ainsi une taille maximale de 16 mots.

Dans cet exemple, l’ex´cution du programme commence par l’interpr´tation e e de la premi`re instruction, dont le code est en m´moire ` l’adresse 0. Ce code e e a ´tant celui de l’instruction ld, l’interpr`te lit une information suppl´mentaire e e e dans le mot d’adresse 1. Cette valeur est alors charg´e dans le registre ACC. e Finalement, le compteur programme (PC) est modifi´ de fa¸on ` traiter l’inse c a truction suivante. Nous adoptons un point de vue fonctionnel, en consid´rant les ressources du e processeur comme les variables d’un programme. L’algorithme d’interpr´tation e des instructions est donn´ figure 14.3. e Nous montrons dans la suite comment r´aliser cet algorithme par un circuit. e Nous allons ainsi d´finir la partie op´rative puis la partie contrˆle qui la pilote. e e o

3.

Une r´alisation du processeur e

Pour chaque instruction du langage machine, nous commen¸ons par nous c poser les questions : de quel mat´riel avons-nous besoin ?, comment organiser e le flot des donn´es pour cette instruction ? Nous retrouvons l` des questions e a tr`s proches de celles r´solues dans le chapitre 11. Les r´ponses ` ces quese e e a tions permettent de d´finir la partie op´rative. Puis nous ´tudions la fa¸on e e e c de r´aliser les diff´rentes ´tapes constituant l’ex´cution d’une instruction du e e e e langage machine ; nous d´finissons ainsi la partie contrˆle. e o

3. Une r´alisation du processeur e

357

lexique : entier4 : le type entiers repr´sent´s sur 4 bits e e { les op´rations arithm´tiques sont donc modulo 16 } e e PC, Acc : des entier4 tailleMem : l’entier 16 Mem : un tableau sur [0..tailleMem-1] d’entier4 algorithme d’interpr´tation des instructions : e PC ←− 0 tant que vrai selon Mem[PC] clr : Acc ←− 0 ; PC ←− PC + 1 ld : Acc ←− Mem[PC + 1] ; PC ←− PC + 2 st : Mem[Mem[PC + 1]] ←− Acc ; PC ←− PC + 2 jmp : PC ←− Mem[PC + 1] add : Acc ←− Acc + Mem[Mem[PC + 1 ]] ; PC ←− PC + 2 Fig. 14.3 – Algorithme d’interpr´tation du langage machine e

L’am´lioration d’une r´alisation mat´rielle s’exprime en termes de place e e e occup´e par le circuit et de temps de calcul. Nous donnons ` la fin de ce parae a graphe quelques ´l´ments permettant d’am´liorer le sch´ma obtenu selon ces ee e e crit`res et nous envisageons les cons´quences d’une extension du jeu d’instruce e tions.

3.1

D´finition de la partie op´rative e e

A partir du jeu d’instructions, on d´finit le flux des donn´es n´cessaire, e e e les op´rations que doit r´aliser l’UAL, celles affectant le contenu des registres e e et les op´rations concernant la m´moire. Cette ´tude permet petit ` petit de e e e a construire la partie op´rative et de pr´ciser les op´rations ´l´mentaires qu’elle e e e ee peut r´aliser : les microactions. e Nous notons : A ; B le fait que le contenu de A doit pouvoir ˆtre e transf´r´ en B sans distinguer les cas o` A ou B sont des bus ou des registres ; ee u A ⇐= B op C une microaction qui permet de stocker dans A le r´sultat de e l’op´ration op r´alis´e sur les op´randes B et C. e e e e On arrive ainsi ` la partie op´rative d´crite par la figure 14.4, la table 14.5 a e e r´sumant l’ensemble des microactions ainsi que les transferts mis en jeu et les e commandes associ´es pour la partie op´rative. e e Nous avons indiqu´ que le processeur est reli´ ` la m´moire par le bus e e a e adresses (BusAd) et le bus donn´es (BusDon). On dispose des transferts : Buse Don ; Mem[BusAd] (´criture m´moire) et Mem[BusAd] ; BusDon (lecture e e m´moire). e Tout d’abord, il faut assurer le transfert de l’instruction courante (rep´r´e ee par PC) de la m´moire vers le registre instruction (RI) de la partie op´rative. e e

358

Le processeur : l’interpr`te cˆbl´ du langage machine e a e

Dans notre exemple, une instruction est form´e du code de l’op´ration ` e e a r´aliser, plus ´ventuellement une valeur ou une adresse. Le code op´ration, les e e e valeurs et les adresses sont tous cod´s sur 1 mot. Nous choisissons de d´couper e e le registre RI en deux registres RI1 et RI2, le premier contenant le code op´ration e et le second l’information additionnelle (valeur imm´diate ou adresse). D’o` e u les transferts PC ; BusAd, BusDon ; RI1 (respectivement BusDon ; RI2), coupl´s avec l’op´ration de lecture de la m´moire. Le r´sum´ des microactions e e e e e associ´es se trouve dans les lignes 1 et 2 de la table 14.5. e Pour l’instruction clr, il faut pouvoir forcer la valeur 0 dans le registre ACC : cette op´ration peut ˆtre r´alis´e par une commande de remise ` z´ro e e e e a e du registre (ligne 3 de la table 14.5). L’instruction ld #vi n´cessite un transfert de la valeur imm´diate vi dans e e l’accumulateur. La valeur vi est stock´e dans le registre RI2 ; d’o` le transfert e u RI2 ; ACC (ligne 4 de la table 14.5). L’instruction st [ad] n´cessite un transfert de la valeur de ACC vers la e m´moire ; ce transfert a comme interm´diaire le bus donn´es. Le transfert a e e e lieu ` l’adresse qui a ´t´ stock´e dans RI2. D’o` : RI2 ; BusAd et ACC ; a ee e u BusDon, transferts coupl´s avec l’op´ration d’´criture m´moire (ligne 5 de la e e e e table 14.5). L’instruction jmp ad n´cessite un transfert de la valeur ad dans le registre e PC. L’information ad ´tant dans RI2 : RI2 ; PC (ligne 6 de la table 14.5). e L’instruction add [ad] n´cessite un transfert des valeurs de ACC et du mot e m´moire d’adresse ad (stock´e dans RI2) vers les deux entr´es de l’UAL, et un e e e transfert de la sortie de l’UAL vers l’accumulateur. La valeur provenant de la m´moire passe par le bus donn´es d’o` : ACC ; UAL, RI2 ; BusAd, BusDon ; e e u UAL, UAL ; ACC et l’op´ration de lecture m´moire. Evidemment l’UAL doit e e disposer d’une commande d’addition de deux valeurs (ligne 7 de la table 14.5). De plus, pour assurer le passage au mot suivant, il faut pouvoir incr´menter e le compteur de programme, d’o` : PC ; UAL et UAL ; PC, l’UAL dispou sant d’une commande d’incr´mentation d’une de ses entr´es (ligne 8 de la e e table 14.5). Enfin il faut pouvoir initialiser le compteur de programme avec l’adresse de la premi`re instruction (0 dans notre exemple) : d’o` une commande de remise e u a e ` z´ro du registre PC (ligne 9 de la table 14.5).

3.2

Description de l’automate de contrˆle o

L’ex´cution d’une microaction est provoqu´e par l’activation des come e mandes correspondantes et c’est ` la partie contrˆle que revient le rˆle d’activer a o o ces commandes au bon moment. L’automate de contrˆle du processeur est donn´ dans la figure 14.6. Les o e entr´es de cet automate sont des informations en provenance de la partie e op´rative : conditions portant sur le code op´ration courant c’est-`-dire le e e a contenu du registre RI1.

3. Une r´alisation du processeur e

359

vers la partie contrˆle o chRI2 RI2 0 1 RI1 chRI1 ACC SelAccPC resetAcc chACC sAccUAL sAccDon Mem sRI2Ad Mem BusAd BusDon sPCAd Zu, Nu, Cu, Vu resetPC chPC ADD/INCR sPCUAL UAL

PC

Fig. 14.4 – Une partie op´rative possible pour le processeur e microactions RI1 ⇐= Mem[PC] 1 RI2 ⇐= Mem[PC] 2 3 4 5 6 7 PC ⇐= RI2 Acc ⇐= Acc + Mem[RI2] Acc ⇐= 0 Acc ⇐= RI2 Mem[RI2] ⇐= Acc RI2 ; Acc RI2 ; BusAd Acc ; BusDon BusDon ; Mem[BusAd] RI2 ; PC Acc ; UAL(1) RI2 ; BusAd Mem[BusAd] ; BusDon BusDon ; UAL(2) UAL ; Acc PC ; UAL(1) UAL ; PC transferts utilis´s e PC ; BusAd Mem[BusAd] ; BusDon BusDon ; RI1 PC ; BusAd Mem[BusAd] ; BusDon BusDon ; RI2 commandes pour la P.O. sPCAd, SelMem, l/e chRI1 sPCAd, SelMem, l/e chRI2 resetAcc SelAccPC, chAcc sRI2Ad, sAccDon, SelMem, l/e SelAccPC, chPC sAccUAL, sRI2Ad, SelMem, l/e, add/incr, SelAccPC chAcc sPCUAL, add/incr, SelAccPC, chPC resetPC

8 9

PC ⇐= PC + 1 PC ⇐= 0

Fig. 14.5 – Commandes et transferts associ´s aux microactions. Les notations UAL(1) e et UAL(2) d´signent l’entr´e 1 et l’entr´e 2 de l’UAL. e e e

360

Le processeur : l’interpr`te cˆbl´ du langage machine e a e

Une premi`re version consisterait ` effectuer le test de chacun des codes e a conditions. Apr`s avoir lu le code de l’instruction, nous obtiendrions un choix ` e a 5 cas (clr, ld, st, jmp et add). En remarquant que 4 instructions demandent la lecture du mot suivant (Etats E2, E4) nous pouvons regrouper les traitements. C’est ainsi que nous organisons d’embl´e les tests en 2 cas : instruction clr ou e non. L’automate d´crit dans la figure 14.6 est la traduction de l’algorithme du e paragraphe 2. en param´trant certains traitements. On note que pour toute e instruction sauf jmp le compteur de programme doit ˆtre incr´ment´ (Etat E9) e e e afin que la partie contrˆle puisse passer ` l’instruction suivante ; dans le cas o a de l’instruction jmp, le compteur de programme est charg´ avec l’adresse de la e cible du branchement (Etat E6).

3.3

R´alisation mat´rielle de la partie contrˆle e e o

Maintenant que l’automate de contrˆle a ´t´ d´crit en terme des mio ee e croactions et des valeurs du code op´ration courant, nous allons d´tailler sa e e r´alisation mat´rielle. e e Les entr´es de l’automate sont des informations en provenance de la pare tie op´rative, c’est-`-dire les 4 bits du registre RI1 ; notons ri3 , ri2 , ri1 , ri0 le e a contenu de RI1, ri0 ´tant le bit de poids faible. La transition de l’´tat E1 vers e e l’´tat E3 est conditionn´e par : ri3 .ri2 .ri1 .ri0 car le code de l’instruction clr est e e 0001. Pour un jeu d’instructions plus complet, les entr´es de la partie contrˆle e o peuvent ˆtre plus nombreuses. e Les sorties de l’automate sont les commandes de la partie op´rative. On e peut les repr´senter par une valuation du vecteur bool´en : (SelMem, l/e, e e resetPC, resetAcc, chRI1, chRI2, chAcc, chPC, add/incr, SelAccPC, sAccUAL, sPCUAL, sAccDon, sRI2Ad, sPCAd). A l’´tat E1 est associ´ le vecteur de sore e tie : (1, 1, 0, 0, 1, 0, 0, 0, ϕ, ϕ, ϕ, ϕ, ϕ, 0, 1). L’exercice E14.5 propose de r´aliser la synth`se compl`te de cet automate. e e e Cet automate est cadenc´ par une horloge dont la p´riode correspond au e e temps n´cessaire ` l’ex´cution de la microaction la plus longue ; ce temps e a e est appel´ temps de cycle. Quand on lit qu’un processeur a une horloge ` e a 500 Megahertz, on peut penser que le coeur du processeur a un temps de cycle de 2 nanosecondes. Dans l’exemple, la microaction la plus longue est Acc ⇐= Acc + Mem[RI2], qui comporte une addition et un acc`s m´moire e e alors que les autres microactions ne comportent que l’un des deux.

4.

Critique et am´lioration de la solution e

Apr`s avoir produit une solution, il est judicieux de se demander si elle peut e ˆtre am´lior´e. Il faut alors savoir selon quels crit`res physiques : fr´quence de e e e e e fonctionnement, surface du circuit, puissance ´lectrique dissip´e, etc. e e

4. Critique et am´lioration de la solution e

361

E0

PC ⇐= 0 E1

RI1 ⇐= Mem[PC] RI1=clr E3 ACC ⇐= 0 E2 RI1 = clr

PC ⇐= PC + 1 E4 RI2 ⇐= Mem[PC]

RI1=ld E5 ACC ⇐= RI2 E7 Mem[RI2] ⇐= ACC E8 E9 E6 RI1=st

RI1=jmp PC ⇐= RI2 RI1=add

ACC ⇐= ACC + Mem[RI2]

PC ⇐= PC + 1

Fig. 14.6 – Un premier automate de contrˆle pour le processeur o E1 E2 RI1 ⇐= Mem[PC] RI1=clr E3 ACC ⇐= 0 E5 ACC ⇐= RI2 E7 Mem[RI2] ⇐= ACC E8 ACC ⇐= ACC + Mem[RI2] RI1=ld E6 RI1=st PC ⇐= RI2 RI1=add RI1=jmp PC ⇐= PC + 1 RI1 = clr RI2 ⇐= Mem[PC] PC ⇐= PC + 1 E4 PC ⇐= 0

Fig. 14.7 – Un autre automate de contrˆle pour le processeur o

362

Le processeur : l’interpr`te cˆbl´ du langage machine e a e

En g´n´ral, on essaie de rendre le processeur le plus rapide possible en e e diminuant le temps d’ex´cution des instructions machine. Le temps d’ex´cution e e d’une instruction donn´e est ´gal ` N ×C o` N est le nombre d’´tats n´cessaires e e a u e e a ` l’ex´cution de l’instruction et C est le temps de cycle. On peut donc diminuer e soit le temps de cycle, soit le nombre d’´tats n´cessaires ` l’ex´cution d’une e e a e instruction. Dans notre exemple, l’ex´cution de l’instruction add, par exemple, e prend 5 cycles d’horloge. On peut aussi chercher ` ´conomiser le mat´riel : utiliser le moins possible ae e de registres ou de bus dans la partie op´rative. e Une bonne r´alisation est souvent le r´sultat d’un compromis entre tous e e ces aspects. Nous donnons ici quelques id´es d’am´liorations sur l’exemple e e pr´c´dent. e e

4.1

D´composition des microactions e

Pour diminuer le temps de cycle, on peut ´viter de grouper un acc`s e e a ` la m´moire et une op´ration UAL dans la mˆme microaction. Dans notre e e e exemple, on pourrait imaginer un registre tampon T connect´ au bus donn´es e e et ` l’entr´e de l’UAL. L’´tat E8 pourrait alors ˆtre divis´ en 2 ´tapes corresa e e e e e pondant aux microactions T ⇐= Mem[RI2] et ACC ⇐= ACC + T. Le temps de cycle correspondrait alors au temps d’acc`s ` la m´moire. Cela ne fait pas e a e gagner de temps pour l’ex´cution de l’instruction d’addition mais les autres e instructions sont, elles, ex´cut´es plus rapidement. e e On peut, par ailleurs, se demander si le registre RI2 est bien n´cessaire, e c’est-`-dire se poser la question : peut-on faire transiter directement la valeur a ou l’adresse associ´e ` un code op´ration vers le point o` elle est n´cessaire ? e a e u e Dans le cas de l’instruction ld (respectivement jmp) la microaction Acc ⇐= Mem[PC] (respectivement PC ⇐= Mem[PC]) convient. Pour cela, il faut connecter le bus donn´es directement aux multiplexeurs d’entr´e de chacun e e des registres Acc et PC, ce qui est parfaitement possible. En revanche, dans le cas des instructions st et add, il est indispensable de disposer d’un registre interm´diaire pour stocker l’adresse qui est utilis´e pour l’acc`s m´moire, en e e e e ´criture pour st et en lecture pour add. Cette modification permettrait donc e de gagner un ´tat lors de l’ex´cution des instructions ld et jmp et seulement e e dans ces deux cas.

4.2

Parall´lisation de microactions e

Une autre fa¸on d’am´liorer l’efficacit´ du processeur consiste ` effectuer en c e e a parall`le certains traitements, quitte ` ajouter des op´rateurs de base ou des e a e registres dans la partie op´rative. Par exemple, pour la machine pr´c´dente e e e il est possible de charger un mot de la m´moire dans RI1 et d’incr´menter e e en parall`le PC afin qu’il soit prˆt pour la lecture suivante, les microactions e e RI1 ⇐= Mem[PC] et PC ⇐= PC + 1 n’utilisant pas le mˆme mat´riel. Etant e e

4. Critique et am´lioration de la solution e

363

donn´es deux microactions A1 et A2, A1 A2 d´note leur activation en pae e rall`le, c’est-`-dire l’activation de l’ensemble des commandes associ´es ` l’une e a e a et ` l’autre dans le mˆme cycle d’horloge. a e La figure 14.7 d´crit un nouvel automate de contrˆle pour le processeur. e o L’incr´mentation du compteur de programme est ex´cut´e parall`lement ` la e e e e a lecture d’un mot m´moire puisque le mat´riel (la partie op´rative) le pere e e met. Cela ne pose pas de probl`me pour le traitement de l’instruction jmp car e la valeur ainsi stock´e dans le registre PC est ´cras´e par l’adresse ad´quate e e e e ult´rieurement. Le temps d’ex´cution de l’instruction add est maintenant de 3 e e cycles d’horloge. De fa¸on g´n´rale, le temps d’ex´cution de toutes les instrucc e e e tions machine a diminu´ car le nombre d’´tats travers´s est plus petit. e e e Ce genre d’optimisation doit ˆtre fait avec pr´caution. Supposons que la e e m´moire associ´e au processeur soit lente, qu’un acc`s m´moire dure plus d’un e e e e cycle d’horloge ; la m´moire ´met alors un signal fin-acc`s lorsque la donn´e lue e e e e est disponible sur le bus donn´es. La microaction de lecture RI1 ⇐= Mem[PC] e e est alors r´alis´e dans un ´tat comportant une boucle sur le signal fin-acc`s et e e e le contrˆleur passe ` l’´tat suivant sur l’entr´e fin-acc`s. La mise en parall`le o a e e e e de cette microaction avec PC ⇐= PC + 1 peut ˆtre incorrecte ; le compteur e programme peut avoir ´t´ incr´ment´ avant que la lecture ne soit r´alis´e et ee e e e e Mem[PC] peut alors correspondre ` un mot suivant celui auquel on devait a acc´der. e

4.3

Param´trisation des commandes e

Une autre am´lioration consiste ` essayer de minimiser le nombre d’´tats de e a e la partie contrˆle. Ceci rend la r´alisation de la partie contrˆle plus compacte o e o et peut aussi am´liorer l’efficacit´ du processeur. e e La param´trisation consiste ` ajouter une partie de mat´riel ` la fronti`re e a e a e de la partie contrˆle et de la partie op´rative, ce qui permet de regrouper des o e traitements dans la partie contrˆle. o Par exemple, dans la partie contrˆle de la figure 14.7, les ´tats E5 et E6 se o e ressemblent beaucoup. Nous pouvons les rassembler en un seul ´tat comportant e la microaction ACCouPC ⇐= RI2 dont la commande associ´e est chACCouPC. e Il suffit alors d’ajouter entre la partie contrˆle et la partie op´rative le circuit o e combinatoire donn´ dans la figure 14.8. Lorsque la partie contrˆle active la e o commande chACCouPC la commande de chargement du registre ad´quat est e activ´e selon la valeur du code op´ration, contenue dans RI1. e e L’exemple pr´c´dent est simpliste. En r´alit´, il existe nombre de cas o` la e e e e u param´trisation fait gagner un grand nombre d’´tats. Nous en montrons une e e utilisation dans le paragraphe suivant. Le mat´riel ajout´ peut constituer une partie importante du processeur ; e e par exemple, dans un 68000, la partie contrˆle, la partie op´rative et la paro e tie servant ` la param´trisation constituent chacune de l’ordre d’un tiers du a e mat´riel. e

364

Le processeur : l’interpr`te cˆbl´ du langage machine e a e

Etat 8 ri3.ri2.ri1.ri0 chACC

chACCouPC chPC ri3.ri2.ri1.ri0 Etat 2 ou Etat 4 Fig. 14.8 – Production des commandes chACC et chPC selon la commande chACCouPC, le code op´ration et l’´tat de l’automate de contrˆle. chACCouPC est ´mise e e o e par la partie contrˆle, chACC et chPC sont re¸ues par la partie op´rative. o c e chACC est activ´e lorsque l’automate de contrˆle est dans l’´tat 8 ou lorsque e o e chACCouPC est vraie alors que l’instruction courante est ld (cod´e par 2 en e d´cimal). chPC est activ´e lorsque l’automate de contrˆle est dans un des e e o ´tats 2 ou 4 ou lorsque chACCouPC est vraie alors que l’instruction courante e est jmp (cod´e 4 en d´cimal). e e

5.

Extensions du processeur

Dans ce paragraphe, nous ´tudions des extensions de deux types pour le e processeur : augmentation du nombre de registres utilisables par le programmeur et extension du jeu d’instructions.

5.1

Augmentation du nombre de registres utilisateur

Imaginons que notre processeur ait 16 registres de donn´es ACC0, ACC1, ..., e ACC15 au lieu d’un seul accumulateur. Les instructions clr, ld, st et add ont alors un param`tre suppl´mentaire. e e L’instruction jmp reste inchang´e. La syntaxe de ces instructions peut ˆtre : e e mise ` z´ro du registre ACCi a e chargement de la valeur vi dans le registre ACCi stockage du contenu de ACCi ` l’adresse ad en m´moire a e stockage de la somme du contenu de la m´moire e d’adresse ad et du contenu de ACCi dans ACCi. Le codage des instructions ld, st et add demande 3 mots (toujours de 4 bits) : un pour le code op´ration, un pour la valeur imm´diate ou l’adresse et un e e troisi`me pour le num´ro du registre. Le codage de l’instruction clr en dee e mande 2 (Cf. Figure 14.9). La figure 14.10 d´crit une nouvelle partie op´rative pour le processeur e e clr ACCi ld #vi, ACCi st ACCi, [ad] add [ad], ACCi

5. Extensions du processeur

365

ld vi num´ro de registre e

st ou add ad num´ro de registre e

clr num´ro de registre e

Fig. 14.9 – Codage des instructions pour une extension de la machine

BusA ACC0

sACC0A ACC1 ACC15 UAL BusB sRI2B P C CALC sPCAd Mem

Mem

sACC0Don

BusDon

R I 1

R I 3

R I 2 sRI2Ad

1 0

vers la partie contrˆle o

BusAd

Fig. 14.10 – Partie op´rative compl´t´e pour le processeur ´tendu e ee e

´tendu. On y trouve ´videmment les 16 registres ACCi, i = 0, .., 15, un ree e gistre suppl´mentaire RI3 qui permet de stocker le num´ro du registre lu en e e m´moire lors du traitement d’une instruction clr, ld, st ou add. Les bits de e ce registre sont de nouvelles entr´es pour la partie contrˆle. e o Cette partie op´rative comporte deux parties de calcul : une sur les donn´es e e et une sur les adresses. On pourrait utiliser l’unit´ de calcul sur les adresses e pour g´rer, par exemple, la mise ` jour d’un pointeur de pile. e a Sans utiliser de technique de param´trisation, la partie contrˆle compore o terait un ´tat par registre pour chacune des instructions clr, ld, st et add. e Par exemple, pour l’instruction clr, on aurait les microactions : ACC0 ⇐= 0, ACC1 ⇐= 0, . . ., ACC15 ⇐= 0. L’automate a alors beaucoup d’´tats et le cire cuit ` synth´tiser est complexe et volumineux. a e Lors de l’ex´cution des instructions clr, ld, st et add, le registre RI3 e contient la valeur i, num´ro du registre ACCi concern´. Les 16 ´tats correspone e e dant ` la mise ` z´ro des 16 registres peuvent ˆtre remplac´s par un seul ´tat a a e e e e comportant la microaction ACCRI3 ⇐= 0 qui signifie : le registre ACC dont le

366

Le processeur : l’interpr`te cˆbl´ du langage machine e a e

microaction ACCRI3 ⇐= 0 ACCRI3 ⇐= RI2 Mem[RI2] ⇐= ACCRI3 ACCRI3 ⇐= ACCRI3 + Mem[RI2]

commandes resetACC sRI2B, chACC sACCDon, sRI2Ad, SelMem, Ecr sACCA, sRI2Ad, SelMem, Lec, chACC

Fig. 14.11 – Commandes associ´es aux nouvelles microactions e RI3 resetACC resetACC0 resetACC1 resetACC15 RI3 sACCDon RI3 sACC0Don sACC1Don sACC15Don sACCA sACC0A sACC1A sACC15A chACC RI3 chACC0 chACC1 chACC15

Fig. 14.12 – R´alisation de commandes param´tr´es e e e

num´ro est la valeur contenue dans RI3 est remis ` z´ro. De mˆme, les 16 ´tats e a e e e correspondant au chargement des 16 registres peuvent ˆtre remplac´s par un e e ´tat avec la microaction : ACCRI3 ⇐= RI2. Pour l’instruction st, on va d´finir e e la microaction : Mem[RI2] ⇐= ACCRI3 et pour l’instruction add la microaction : ACCRI3 ⇐= ACCRI3 + Mem[RI2]. La table de la figure 14.11 donne les commandes associ´es ` chacune de ces nouvelles microactions. e a Il faut ajouter le mat´riel n´cessaire pour ´laborer les commandes e e e resetACC0, . . ., resetACC15, chACC0, . . ., chACC15, sACCDon0, . . .sACCDon15, sACC0A, . . ., sACC15A ` partir des commandes resetACC, chACC, sACCDon, a sACCA et du contenu de RI3. La figure 14.12 d´crit ces circuits r´alis´s avec e e e un d´codeur. e La description de la partie contrˆle param´tr´e est ainsi la mˆme que pour o e e e un seul registre ACC.

5.2

Extension du jeu d’instructions

Des extensions simples comme l’ajout d’op´rations (soustraction, conjonce tion logique, incr´mentation d’un registre) sont ais´ment r´alis´es en complie e e e quant l’UAL. La commande de l’UAL peut alors ˆtre r´alis´e directement ` e e e a partir d’un sous-ensemble du registre instruction. Il faut toutefois faire attention aux ´tats o` l’UAL est utilis´e pour des calculs ` usage interne, comme e u e a par exemple : PC ⇐= PC + 1.

6. Exercices

367

RI1 = clr RI2 ⇐= Mem[PC] RI1=brn et N PC ⇐= RI2 * * PC ⇐= PC + 1 RI1=brn et N UAL Nu Registre Etat N vers partie controle

Fig. 14.13 – Extrait de la partie contrˆle pour le traitement de l’instruction brn. Les o fl`ches not´es * ont pour cible l’acquisition de l’instruction suivante, c’este e `-dire l’´tat E2 de la figure 14.7. a e

Supposons que nous voulions maintenant ajouter des branchements conditionnels. Par exemple, on ajoute l’instruction brn ad dont l’effet est : si le r´sultat de l’op´ration pr´c´dente est n´gatif alors effectuer un branchee e e e e ment ` l’adresse ad sinon passer ` l’instruction suivante. Ce genre d’instruca a tion utilise les codes de conditions calcul´s par l’UAL lors de l’ex´cution des e e op´rations ; ici, il s’agit de l’indicateur de r´sultat n´gatif (N) que l’on peut e e e supposer charg´ lors de toute instruction arithm´tique. En revanche, le bit N e e n’est pas charg´ lors d’un calcul de type PC ⇐= PC + 1. e L’UAL est compl´t´e avec un registre ` 1 bit. Ce bit est souvent stock´ dans ee a e le registre d’´tat. Le contenu de ce registre est accessible en permanence par e la partie contrˆle. La figure 14.13 d´crit la portion de partie contrˆle traitant o e o l’instruction brn. Les exercices E14.1, E14.2 et E14.3 sugg`rent des modifications plus e compl`tes pour le processeur ´tudi´ ci-dessus. e e e

6.

Exercices

E14.1 : Branchement conditionnel g´n´ral e e On veut ajouter au langage machine du processeur ´tudi´ dans ce chapitre une e e instruction BRcc o` cc repr´sente l’un des codes de conditions classiques de u e tout processeur. Etudier les cons´quences de cette modification sur la partie e op´rative et la partie contrˆle du processeur. On peut consid´rer un codage e o e des diff´rentes conditions cc sur 4 bits b1, b2, b3, b4 (ou prendre le codage e d’un processeur existant). R´aliser, en particulier, le circuit combinatoire qui e re¸oit en entr´e les bits b1, b2, b3, b4 du code op´ration et les 4 bits Z, N, c e e C, V et d´livre un bit Br disant si la condition donne effectivement lieu ` e a un branchement ou non. Le bit Br est exploit´ par la partie contrˆle pour e o

368

Le processeur : l’interpr`te cˆbl´ du langage machine e a e

´tablir la nouvelle valeur du compteur programme. C’est encore une forme de e param´trisation, sur les comptes-rendus plutˆt que sur les commandes. e o E14.2 : Mode d’adressage relatif Dans le langage machine du processeur ´tudi´ dans le pr´sent chapitre, les e e e branchements sont absolus, l’adresse cible du branchement est donn´e dans e l’instruction. On veut maintenant introduire des branchement relatifs, c’est-`a dire pour lesquels l’adresse cible du branchement est ´gale ` la somme de PC e a et d’une valeur constante donn´e dans l’instruction. On peut modifier la partie e op´rative de la figure 14.10 et remplacer le circuit CALC par un additionneur e ou bien utiliser l’UAL pour r´aliser l’addition. Etudier les modifications de la e partie op´rative et d´crire la partie contrˆle du processeur. e e o E14.3 : Appel de sous-programme Ajouter dans le langage machine des instructions d’appel et de retour de sousprogramme (ajouter les laisons entre PC et le bus donn´es, ajouter un pointeur e de pile). Une instruction d’appel de sous-programme demande la sauvegarde de l’adresse de retour (Cf. Paragraphe 1.4.3 du chapitre 12). Un processeur int´grant entre autres cette possibilit´ est d´crit dans le chapitre 22. e e e E14.4 : Partie op´rative vue comme un automate e Nous avons signal´ au paragraphe 1.2 que la partie op´rative peut ˆtre vue e e e comme un automate. L’objectif de cet exercice est de pr´ciser la d´finition de e e cet automate. Une telle approche pourrait ˆtre utilis´e dans un langage de e e description de mat´riel. e La partie op´rative du processeur (Cf. Paragraphe 3.1) est un automate ` e a 15 fils d’entr´e : chRI1, chRI2, SelAccPC, resetAcc, chACC, sAccUAL, sAccDon, e resetPC, chPC, sPCUAL, sRI2Ad, sPCAd, ADD/INCR, Lire. La commande Lire correspond ` la conjonction : l/e et SelMem. La commande l/e et SelMem a (Ecrire) ne modifie pas l’´tat du processeur, mais seulement celui de la m´moire. e e Elle n’est pas une entr´e de la partie op´rative. e e 15 fils d’entr´es donnent 215 entr´es possibles. On ne peut donc pas d´crire e e e les transitions selon toutes les valeurs des entr´es. On ´crira : si chRI1 alors ... e e pour parler en fait des 214 entr´es pour lesquelles chRI1 vaut 1. e D´finissons maintenant l’ensemble des ´tats de l’automate. Il y a 4 registres e e de 4 bits : RI1, RI2, Acc et PC. Ces 16 bits d´finissent 216 ´tats. On va d´crire le e e e nouvel ´tat en fonction de l’ancien de fa¸on symbolique, en utilisant un algoe c rithme. On peut en effet donner une description fonctionnelle de la fonction de transition a l’aide d’expressions conditionnelles d´finissant la valeur de chaque ` e registre selon sa valeur pr´c´dente et les entr´es courantes. On introduit des e e e variables interm´diaires pour faciliter l’´criture (Cf. Figure 14.14). e e Poursuivre la description fonctionnelle de cette partie op´rative. e E14.5 : Synth`se d’une partie contrˆle e o L’objectif de cet exercice est la synth`se de la partie contrˆle du processeur e o

6. Exercices

369

< RI1, RI2, Acc, PC > : ´tat de la partie op´rative e e < nouvelRI1, nouvelRI2, nouvelAcc, nouveauPC > : nouvel ´tat de la partie op´rative e e sortieUAL, BusDon, BusAd : variables interm´diaires e { Une partie de la fonction de transition de la partie op´rative } e nouvelRI1 = si chRI1 alors BusDon sinon RI1 nouvelRI2 = si chRI2 alors BusDon sinon RI2 nouvelAcc = si resetAcc alors 0 sinon si chACC alors si selAccPC alors sortieUAL sinon RI2 sinon Acc BusDon = si sAccDon alors Acc sinon si Lire alors Mem[BusAd] sinon non d´fini e Fig. 14.14 – Description symbolique d’une fonction de transition ´tat e e2 e1 0 0 0 0 0 0 0 1 0 1 1 0 1 0 1 0 inst e0 0 1 1 0 1 0 0 0 entr´es (RInst) e ri3 ri2 ri1 ri0 x x x x 0 0 0 1 =0 0 0 1 x x x x x x x x 0 0 1 0 0 0 1 1 0 1 0 0 nouvel ´tat e ne2 ne1 ne0 0 0 1 0 1 1 0 1 0 1 0 0 0 0 1 1 0 1 1 1 1 1 1 0

e3 0 0 0 0 0 0 0 0

clr autre

ld st jmp

ne3 0 0 0 0 1 0 0 0

Fig. 14.15 – fonction de transition

donn´e dans la figure 14.6 selon la technique ´tudi´e au chapitre 10. L’automate e e e a 10 ´tats que l’on peut coder sur 4 bits e3 , e2 , e1 , e0 ; l’´tat Ei est repr´sent´ e e e e par le codage binaire de l’entier i. La table de la figure 14.15 donne une partie de la fonction de transition. Terminer cette table et r´aliser la synth`se de cette fonction combinatoire avec e e des portes, ou un PLA (Cf. Chapitre 8). Remarquer au passage que l’automate de contrˆle r´v`le une sous-sp´cification : rien n’est pr´vu si le code de o e e e e l’instruction dans RI1 n’est pas un code valide. En fait, dans le cas de code invalide, lors du d´codage de l’instruction une interruption est g´n´r´e par le e e ee processeur (Cf. Chapitre 22). La partie contrˆle a 16 fils de sorties : SelMem, l/e, resetPC, resetAcc, chRI1, o chRI2, chAcc, chPC, add/incr, SelAccPC, sAccUAL, sPCUAL, sAccDon, sRI2Ad, sPCAd (Cf. Paragraphe 3.2). La partie contrˆle ´tant d´crite par un automate o e e de Moore, les sorties d´pendent uniquement de l’´tat. Nous donnons dans la e e figure 14.16 une partie de la fonction de sortie de l’automate. Compl´ter cette e

370

Le processeur : l’interpr`te cˆbl´ du langage machine e a e

e3 0 0 1

´tat e e2 e1 0 0 0 1 0 0

chRI1 e0 1 0 0 1 0 0

SelAccPC φ 0 1

chAcc 0 0 1

ADD/INCR φ 0(incr) 1(add)

... ... ... ...

Fig. 14.16 – fonction de sortie nom de l’instruction addition soustraction soustraction bis conjonction disjonction ou exclusif charg. d’un registre stockage en m´moire e branchement index´ e branchement relatif charg. bit poids forts assembleur ADD S1, S2, Rd SUB S1, S2, Rd SUBR S1, S2, Rd AND S1, S2, Rd OR S1, S2, Rd XOR S1, S2, Rd LOAD Rx, S2, Rd STORE Rx, S2, Rs JMP COND, S2, Rx JMPR COND, Y LDHI Rd, Y s´mantique e Rd ←− S1 + S2 Rd ←− S1 - S2 Rd ←− S2 - S1 Rd ←− S1 ∧ S2 Rd ←− S1 ∨ S2 Rd ←− S1 ⊕ S2 Rd ←− Mem[Rx+S2] Mem[Rx+S2] ←− Rs PC ←− Rx + S2 si COND PC ←− PC + Y si COND Rd31−13 ←− Y, Rd12−0 ←− 0

Fig. 14.17 – Instructions d’un processeur inspir´ du sparc e

table et synth´tiser la fonction combinatoire avec des portes ou un PLA. e En utilisant des bascules D pour repr´senter l’´tat de l’automate, dessiner e e le circuit synth´tisant la partie contrˆle toute enti`re. e o e E14.6 : Interpr`te d’un langage machine type sparc e Ce probl`me a pour but de d´crire l’interpr`te du langage machine d’un proe e e cesseur imaginaire inspir´ du processeur sparc. e Les adresses et les donn´es sont sur 32 bits. Le processeur comporte 31 e registres (not´s R1, . . ., R31) de 32 bits chacun et un registre sp´cial not´ R0 e e e contenant 0 en op´rande source et non modifiable. e La table 14.17 d´crit le jeu d’instructions du processeur et la figure 14.18 e pr´cise le codage des diff´rentes instructions. S1, Rx, Rd, Rs d´signent des e e e registres : un des registres Ri, i=0, . . ., 31. S2 d´signe un registre ou une valeur e imm´diate (sur 13 bits). Y repr´sente une valeur imm´diate sur 19 bits. On e e e peut ajouter les instructions ADDcc, SUBcc, SUBRcc, ANDcc, ORcc et XORcc qui ont le mˆme effet que ADD, SUB, SUBR, AND, OR et XOR avec mise ` jour des codes e a de conditions. Toute op´ration mettant en jeu des valeurs cod´es sur moins de e e 32 bits (13 pour S2, 19 pour Y) doit prendre en compte l’extension du signe. La figure 14.19 d´crit la partie op´rative. Cette partie op´rative comporte e e e 3 bus internes. Les entr´es de l’UAL sont connect´es aux bus Bus1 et Bus2 e e et sa sortie au bus BusRes. Le circuit combinatoire ext-sign extrait du registre instruction RI la valeur imm´diate et l’´tend sur 32 bits afin de l’envoyer sur e e

6. Exercices

371

(a)

30 25 23 0 code op C

18

14 I

12 S2

0

Rd ou Rs S1 ou Rx =1 si code op suivi de CC 25 30 0 code op 23 18 Y Rd pour LDHI cond pour JMP relatif 30 25 0 code op 23 cond

valeur imm´diate (13bits) e ou no registre (bits 4-0) =1 si S2 est une valeur imm´diate e 0 (b)

(c)

18 14 Rx 0

4 S2

0

Fig. 14.18 – Codage des instructions d’un processeur inspir´ du sparc : a) inse tructions ADD, ADDcc, SUB, SUBcc, SUBRm SUBRcc, AND, OR, XOR, LOAD, STORE ; b) instructions LDHI et JMPR ; c) instruction JMP.

Bus2. Le circuit combinatoire DEC effectue un d´calage d’une valeur circulant e sur Bus2 ; elle est utile pour l’ex´cution de l’instruction LDHI. Le compteur e programme PC peut ˆtre incr´ment´, ou charg´ ` partir du r´sultat d’un calcul e e e ea e (via BusRes). La valeur circulant sur BusAd peut ˆtre le r´sultat d’un calcul e e r´alis´ par l’UAL, une valeur stock´e pr´c´demment dans le registre interne T e e e e e ou le contenu de PC. Voici quelques pistes ` explorer : a 1. Ajouter sur la partie op´rative les commandes n´cessaires. e e 2. D´crire la partie contrˆle du processeur sous forme d’une machine e o s´quentielle avec actions. Pour chaque microaction utilis´e, v´rifier qu’elle e e e est effectivement ex´cutable par la partie op´rative fournie. Pour cela, e e donner en d´tail l’ensemble des commandes qui lui sont associ´es. e e 3. Dessiner les circuits ext-sign, DEC et COND. 4. D´crire le circuit permettant de commander les registres : acc`s aux bus e e et chargement des registres. 5. Choisir un codage pour les op´rations et pour les conditions e arithm´tiques, et r´aliser le s´quenceur. e e e E14.7 : Interpr`te d’un langage machine type 68000 e Ce probl`me a pour but de d´crire l’interpr`te du langage machine d’un proe e e cesseur imaginaire inspir´ du processeur 68000. La principale diff´rence avec e e le probl`me pr´c´dent vient de l’existence d’un nombre important de modes e e e d’adressage pour ce processeur. Le programmeur dispose d’un ensemble de registres not´s Di, i=0, . . ., max. e Le registre Dmax joue un rˆle particulier, celui de pointeur de pile (aussi not´ o e SP). La partie op´rative comporte deux bus internes BusSource et BusR´sultat e e

372

Le processeur : l’interpr`te cˆbl´ du langage machine e a e

Mem

PC

ZNCV

COND

Bus2

19

DEC

T

INCR Bus1 BusRes

vers la partie contrˆle o

ext-sign

32

R I

Fig. 14.19 – Partie op´rative d’un processeur inspir´ du sparc e e

Mem

BusDon

R0

13

R 1

R 31

BusAd

6. Exercices

373

Mem Bus Source ZNCV INCR PC

BusAd

D

Di

T

A

Bus R´sultat e BusDon RI vers la partie contrˆle o Fig. 14.20 – Partie op´rative d’un processeur inspir´ du 68000 e e Mem

et trois registres internes (non visibles par le programmeur) : A, D et T (Cf. Figure 14.20). T est un registre tampon servant ` stocker le r´sultat d’un calcul a e en sortie de l’UAL, les deux autres (A, D) vont permettre de faciliter l’interpr´tation des instructions. Les registres et les bus ont 32 bits. e Une instruction peut ˆtre cod´e sur 1 ou 2 mots de 32 bits. Le deuxi`me e e e mot ´ventuel est appel´ mot d’extension. Le format de codage du premier mot e e d’une instruction est le suivant : code op´ration nRd ModeAdr nRs e C’est une machine ` deux r´f´rences (Cf. Chapitre 12) ; nRd est le num´ro a ee e d’un registre qui constitue le premier op´rande. Les deux informations ModeAdr e et nRs d´signent le deuxi`me op´rande, ModeAdr d´crivant le mode d’adrese e e e sage de cet op´rande et nRs le num´ro du registre concern´. Le r´sultat d’une e e e e op´ration binaire est stock´ dans le registre de num´ro nRd. e e e Les modes d’adressage consid´r´s sont : registre direct (not´ nRs), registre ee e indirect (not´ nRs@), registre indirect avec pr´d´cr´mentation (not´ nRs@-), ree e e e e gistre indirect avec postincr´mentation (not´ nRs@+), imm´diat (not´ #imm), e e e e relatif et absolu. Les modes d’adressage imm´diat, relatif et absolu n´cessitent e e un mot d’extension ; pour l’adressage imm´diat, il s’agit d’une valeur, pour e l’adressage relatif d’un d´placement par rapport ` la valeur courante du compe a teur de programme et pour l’adressage absolu d’une adresse. Pour une description de la s´mantique des modes d’adressage, voir le chapitre 12. e Les instructions consid´r´es sont l’addition (add), la soustraction (sub), le ee et logique (and), le chargement d’une adresse (lea), le chargement d’un registre

374

Le processeur : l’interpr`te cˆbl´ du langage machine e a e

lea jmp jsr store add sub and load

abc 000 001 010 011 100 101 110 111

MaJ ZNCV

000 nRs

X X X X

X X X X

def : mode d’adressage 001 010 011 100 nRs@- nRs@ nRs@+ rel X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X

101

110 #imm

X X X X

111 abs X X X X X X X X

Fig. 14.21 – Modes d’adressage autoris´s selon les instructions e

(load), le stockage d’un registre en m´moire (store), le branchement (jmp) et e le branchement ` un sous-programme (bsr). a La table 14.21 donne un codage des instructions, le code op´ration ´tant e e cod´ sur trois bits (nomm´s a, b, c), et un codage pour le mode d’adressage e e lui aussi sur trois bits (nomm´s d, e, f). Une croix dans une case indique que le e mode d’adressage est autoris´ pour l’instruction. Le tableau indique aussi les e instructions pour lesquelles il y a une mise ` jour du mot d’´tat (bits Z, N, C, a e V). Voici quelques pistes ` explorer : a 1. Etudier le d´roulement de l’instruction add pour chacun des modes e d’adressage. Constater les redondances et remarquer que l’interpr´tation e peut ˆtre faite en deux phases : tout d’abord le calcul de l’adresse du e deuxi`me op´rande (s’il s’agit d’une valeur, on la stockera dans D, et si e e c’est une adresse, dans A), puis le traitement de l’op´ration proprement e dite. 2. Etudier l’interpr´tation de l’instruction de branchement ` un souse a programme (jsr) ; l’adresse de retour est stock´e dans la pile, le registre e pointeur de pile ´tant Dmax. Nous n’avons pas fourni d’instruction de e retour ; comment peut-on la programmer avec les instructions donn´es ? e 3. Ajouter sur la partie op´rative les commandes n´cessaires. e e 4. D´crire la partie contrˆle du processeur sous forme d’une machine e o s´quentielle avec actions. Pour chaque microaction utilis´e, v´rifier qu’elle e e e est effectivement ex´cutable par la partie op´rative fournie ; pour cela, e e donner en d´tail l’ensemble des commandes qui lui sont associ´es. e e 5. Proposer une r´alisation microprogramm´e (Cf. Chapitre 10) de l’autoe e mate pr´c´dent. e e 6. D´crire les circuits de calcul des commandes d’acc`s aux bus et de chare e gement des registres.

Cinqui`me partie e Architecture d’un syst`me e mat´riel e et logiciel simple

Un syst`me mat´riel et logiciel e e simple
Dans ce qui pr´c`de, nous avons ´tudi´ ce qu’est un processeur. Du point de e e e e vue mat´riel il s’agit d’un assemblage de circuits combinatoires et s´quentiels e e dont le rˆle est l’interpr´tation d’un jeu d’instructions particulier. Le jeu d’inso e tructions fourni permet ` un utilisateur d’´crire un programme dans un langage a e de bas niveau : le langage machine. Pour obtenir un ordinateur, il manque encore un certain nombre de composants mat´riels et logiciels. La partie V d´crit le minimum n´cessaire pour e e e obtenir un ordinateur simple, mono-utilisateur. L’ordinateur ainsi ´labor´ ne e e sera pas un ordinateur r´el, notre propos ´tant plutˆt de donner les principes e e o permettant de comprendre le rˆle et la place de chaque composant. Nous vero rons dans la partie VI comment ´tendre ce syst`me simple ` un ordinateur e e a multitˆches, donc ´ventuellement multi-usagers. a e

Processeur/m´moire et entr´es/sorties e e
Le chapitre 15 montre comment connecter le processeur et de la m´moire e centrale (ou principale). Il s’agit de m´moire ` semiconducteurs, ` acc`s e a a e al´atoire. Cette m´moire est organis´e en plusieurs composants dont cere e e tains sont des m´moires mortes programmables (EEPROM) ; d’autres sont e n´cessairement des m´moires vives. Cette m´moire sert ` l’utilisateur : le proe e e a gramme en cours d’ex´cution et les donn´es associ´es sont stock´s en m´moire e e e e e vive. Les informations et le code n´cessaire au d´marrage de l’ordinateur sont e e stock´s en m´moire morte. e e Pour r´aliser des programmes dont la valeur ne se r´duit pas ` une e e a constante, l’ensemble processeur/m´moire doit ˆtre ouvert vers l’ext´rieur. e e e Nous verrons dans le chapitre 16 que la communication avec le monde ext´rieur e comporte des aspects de cˆblage (connexion physique de p´riph´riques a e e d’entr´es/sorties) mais qu’il faut surtout g´rer des probl`mes de synchronie e e sation (Cf. Chapitre 6). Nous reprendrons la description des entr´es/sorties e dans la partie VI et verrons des am´liorations utilisant le m´canisme des ine e terruptions. Les p´riph´riques d’entr´es/sorties sont tr`s divers. On peut distinguer deux e e e e

378

Un syst`me mat´riel et logiciel simple e e

types de fonctionnalit´s : dialogue avec l’environnement et gestion de m´moire e e secondaire. – Certains p´riph´riques permettant un dialogue avec un utilisateur humain e e (clavier/´cran, souris et manettes diverses, scanner, tables tra¸antes, cartes e c son, imprimantes, etc.), les circuits de communication avec un environnement industriel (gestion d’automatismes, de conduite de proc´d´s, de roe e bots, capteurs et actionneurs en tous genres) et enfin les circuits servant ` a ´tablir des communications entre ordinateurs (gestion des r´seaux locaux e e et liaisons grande distance, cartes r´seau, modems). e – La m´moire secondaire est une m´moire non volatile, de grande capacit´ et e e e en g´n´ral de faible coˆt (par rapport ` la capacit´). Les p´riph´riques e e u a e e e de gestion de m´moire secondaire sont les disques et disquettes (acc`s e e al´atoire), et les syst`mes d’archivage et de sauvegarde (bandes, acc`s e e e s´quentiel). e

Notion de syst`me d’exploitation e
Nous avons ` ce stade un squelette d’ordinateur mais celui-ci est inutia lisable sans logiciel permettant de lui faire ex´cuter les travaux auxquels il e est destin´. Ce logiciel constitue ce que l’on appelle le syst`me d’exploitation. e e Une partie r´side en m´moire centrale et la plus grande partie est stock´e en e e e m´moire secondaire. Ce logiciel doit ˆtre adapt´ d’une famille d’ordinateurs ` e e e a l’autre et entre les g´n´rations successives d’ordinateurs d’une mˆme famille. e e e Un syst`me d’exploitation (dont l’essentiel n’est pas ´crit en langage d’asseme e blage d’une famille de processeurs particuli`re, mais dans un langage de haut e niveau) peut fonctionner sur des plate-formes mat´rielles tr`s diverses. Par e e exemple, on trouve le syst`me unix sur des pc, des stations de travail ou le e cray. Inversement, il existe souvent plusieurs choix possibles de syst`mes d’exe ploitation pour un mˆme ordinateur ; sur un pc, on peut installer le syst`me e e unix (version linux, ou version xinu) ou windows ou windows NT. On trouve 3 sortes de logiciel dans un ordinateur : – Des biblioth`ques charg´es de la gestion des principales ressources de l’ore e dinateur, dont les p´riph´riques, la m´moire et les fichiers. Elles constituent e e e le coeur du syst`me d’exploitation (ce que l’on appelle parfois le logiciel de e base). Elles d´finissent des interfaces standardis´es offrant les mˆmes fonce e e tionnalit´s que le mat´riel physique, mais sous une forme normalis´e. Ceci e e e s’applique en particulier ` la manipulation des p´riph´riques. a e e – Diverses biblioth`ques qui ne manipulent pas de ressources particuli`res et e e que les programmeurs peuvent d´cider d’utiliser ou non pour d´velopper e e leurs applications (calcul math´matique, graphique). Elles donnent des e fonctionnalit´s de plus haut niveau sur le mat´riel existant pour d´charger e e e le programmeur d’une partie du travail commun ` de nombreuses applicaa

Un syst`me mat´riel et logiciel simple e e

379

tions (par exemple, la plupart des syt`mes fournissent des biblioth`ques de e e gestion des chaˆ ınes de caract`res, de tri, etc.). e – Les applications qui sont des programmes ex´cutables. Certaines ne font e pas ` proprement parler partie du syst`me d’exploitation mais sont livr´es a e e presque syst´matiquement avec. Elles permettent de d´velopper d’autres e e applications (´diteurs de texte, compilateurs et assembleurs, ´diteurs de e e liens, d´bogueurs) ou d’observer l’activit´ du syst`me (comme par exemple e e e regarder les files d’attente des imprimantes). Les biblioth`ques qui constituent le syst`me d’exploitation ont un stae e tut particulier : les applications ont besoin de services similaires et ces biblioth`ques interagissent avec la gestion des ressources de l’ordinateur dont e nous verrons dans la partie VI qu’elles peuvent ˆtre partag´es entre plusieurs e e utilisateurs et plusieurs applications. Par cons´quent, on essaie de faire de e ces biblioth`ques un point de passage oblig´, prot´g´ et contrˆl´ pour acc´der e e e e oe e aux ressources. De plus, elles sont utilis´es par toutes les applications et donc e r´sidentes en m´moire principale (en EEPROM ou charg´es lors du d´marrage e e e e du syst`me). e Les couches sup´rieures du syst`me d’exploitation sont g´n´ralement e e e e stock´es sur disque, ce qui permet de changer facilement de version ou de e syst`me d’une part et d’installer ´ventuellement plusieurs syst`mes d’exploitae e e tion diff´rents sur des disques (ou des partitions de disques) distincts et choisir e celui que l’on veut lancer au moment du d´marrage. Elles sont charg´es en e e m´moire lors de la phase de d´marrage. e e

Notion de pilote de p´riph´rique e e
Nous ne nous int´ressons dans cette partie qu’` la couche basse du e a syst`me d’exploitation, c’est-`-dire au minimum n´cessaire ` la gestion des e a e a p´riph´riques d’entr´es/sorties, ` la sauvegarde des programmes (et des e e e a donn´es) en m´moire secondaire et ` l’ex´cution des programmes. e e a e En ce qui concerne les p´riph´riques, de nombreux d´tails peuvent changer e e e d’un ordinateur ` l’autre, ou mˆme durant la vie d’une mˆme machine : souris a e e a ` 2 ou 3 boutons, taille du (des) disque(s), adresses et formats des registres des coupleurs, claviers ` la norme fran¸aise azerty ou anglo-saxonne qwerty, a c etc. Lors du d´marrage de l’ordinateur et de l’initialisation de la biblioth`que e e de gestion des p´riph´riques, cette derni`re a besoin de connaˆ e e e ıtre les caract´ristiques exactes de l’ensemble des p´riph´riques pr´sents qu’elle a ` g´rer. e e e e a e Les ordinateurs sont g´n´ralement ´quip´s d’EEPROM qui permettent de stoe e e e cker ces informations de mani`re non volatile, ainsi qu’un petit programme e permettant de les consulter et de les mettre ` jour : le gestionnaire de configua ration. Le syst`me d’exploitation stock´ sur le disque peut contenir ses propres e e pilotes de p´riph´riques. Mais il doit en exister au moins une version rudimene e

380

Un syst`me mat´riel et logiciel simple e e

taire en EEPROM de m´moire centrale pour les p´riph´riques indispensables e e e lors du d´marrage, typiquement clavier ´cran, disque, disquette ou CD. e e Les p´riph´riques ´tant compliqu´s et offrant plusieurs fonctionnalit´s, cere e e e e taines partag´es entre plusieurs p´riph´riques, leur gestion est regroup´e au e e e e sein d’un partie du syst`me qui s’appelle le pilote de p´riph´rique. Ce sera e e e l’objet du chapitre 17.

Syst`me de gestion de fichiers et interface de e commande
Une autre partie du syst`me utilisant les primitives du pilote offre des e services de plus haut niveau comme la gestion d’informations structur´es : le e syst`me de gestion des fichiers (chapitre 19). e Par ailleurs, un programme en langage d’assemblage ne peut s’ex´cuter e qu’apr`s une phase de traduction en langage machine et ´ventuellement de e e liaison avec d’autres programmes ou avec des biblioth`ques. Nous d´crivons e e dans le chapitre 18 les diff´rentes ´tapes de la vie d’un programme. e e La couche interface entre l’utilisateur et tous ces composants est l’interpr`te e du langage de commande. C’est l’objet du chapitre 20. Nous y d´crivons en e particulier le chargement d’un programme en m´moire centrale et son lancee ment. Ensuite, c’est le processeur qui interpr`te les instructions du programme e comme nous l’avons d´crit dans le chapitre 14. e

Chapitre 15 Relations entre un processeur et de la m´moire e
Dans une version minimale, un ordinateur est compos´ d’un processeur e (Cf. Chapitre 14) et d’une m´moire (Cf. Chapitre 9). Le processeur produit e des informations ` stocker dans la m´moire ou bien r´cup`re des informations a e e e pr´c´demment rang´es en m´moire. e e e e Nous avons vu au chapitre 14 qu’un processeur peut ˆtre consid´r´ comme e ee une machine algorithmique, assemblage d’une partie op´rative et d’une partie e contrˆle. o Nous avons expliqu´ au chapitre 9 comment se d´roule un acc`s m´moire e e e e et pr´cis´ au chapitre 11 les aspects de synchronisation lors de la connexion e e d’une machine algorithmique ` une m´moire. Au chapitre 14 nous nous sommes a e plac´s dans l’hypoth`se simplificatrice d’une m´moire rapide. e e e Ce chapitre apporte des informations compl´mentaires concernant la e r´alisation de la connexion entre le processeur et la m´moire. Par ailleurs, e e nous pr´sentons les diff´rents aspects du d´codage d’adresse permettant de e e e g´rer le fait que la m´moire soit organis´e en diff´rents morceaux, et que l’on e e e e puisse la plupart du temps acc´der ` des sous-ensembles du mot m´moire. e a e Le paragraphe 1. est consacr´ ` diff´rents aspects concernant la connexion ea e du processeur et de la m´moire. Le paragraphe 2. montre les cons´quences e e de l’organisation de la m´moire en plusieurs unit´s physiques, ou boˆ e e ıtiers. Enfin dans le paragraphe 3. nous montrons comment g´rer des acc`s ` e e a des donn´es logiques de tailles diff´rentes (Cf. Chapitre 4) alors que les e e acc`s se font ` des donn´es physiques de tailles identiques. e a e

1.

Le bus m´moire e

Nous avons vu au chapitre 9 que le bus m´moire est constitu´ du bus e e de donn´es et du bus d’adresse. Le bus de donn´es est un ensemble de fils e e Dn−1 ` D0 via lesquels transitent les valeurs ´chang´es par le processeur et a e e

382

Relations entre un processeur et de la m´moire e

la m´moire. Ce bus est bidirectionnel (transfert dans les deux sens). Le bus e d’adresse (unidirectionnel) est un ensemble de fils Am−1 ` A0 en sortie du a processeur via lesquels ce dernier indique ` la m´moire le num´ro (l’adresse) a e e du mot auquel il acc`de. e Dans l’hypoth`se o` le temps de cycle de la m´moire est inf´rieur ou ´gal e u e e e au cycle d’horloge du processeur, les seuls signaux Acc`sMem et l/e suffisent e pour g´rer le protocole de communication. Nous nous limitons ` cette situation e a dans ce chapitre pour nous concentrer sur les aspects connexion, organisation en diff´rents boˆ e ıtiers et acc`s ` des sous-ensembles du mot m´moire. e a e Notons toutefois que cette hypoth`se est assez rarement v´rifi´e. Le temps e e e d’acc`s peut d´pendre de la zone m´moire ` laquelle on acc`de (ROM, RAM ou e e e a e entr´es/sorties). Les processeurs g`rent donc un protocole complet (inspir´ du e e e protocole poign´e de mains d´crit dans le chapitre 6) et la dur´e d’un acc`s peut e e e e ˆtre ´tendue d’une ou plusieurs p´riodes d’horloge via un signal d’acquittement e e e pilot´ par la m´moire. Le nom du signal varie avec les familles de processeurs e e (Data Transfert Ack pour le 68000, Memory Hold pour le sparc, Wait ou ready pour d’autres processeurs 8 ou 16 bits ...).

1.1

Connexion simple

Nous avons dit au chapitre 9 que la connexion des fils ´tait simple mais en e r´alit´ il ne suffit pas de relier directement les fils de mˆme nature. e e e Les adresses et les donn´es repr´sentent un grand nombre de sorties du e e processeur (64 pour un processeur ` 32 bits). La puissance dissip´e totale a e et le courant qu’est capable de d´biter un circuit int´gr´ sont limit´s. Cela e e e e limite le courant pour chaque fil de sortie. Chaque sortie ne peut donc piloter qu’un nombre r´duit d’entr´es, alors qu’elle peut ˆtre connect´e ` de nombreux e e e e a boˆ ıtiers de m´moire, d’o` la n´cessit´ d’une amplification externe. e u e e L’amplification des signaux unidirectionnels tels que les adresses ne pose pas de probl`me particulier : la sortie des amplificateurs externes peut rester e active en permanence. Le bus de donn´es, bidirectionnel, implique au contraire le recours ` des e a amplificateurs ` sorties 3 ´tats mont´s tˆte-bˆche. Lors d’une lecture, la coma e e e e mande 3 ´tats dans le sens m´moire/processeur doit ˆtre activ´e et celle dans le e e e e sens processeur/m´moire doit ˆtre au contraire inhib´e ; et r´ciproquement lors e e e e d’une ´criture. Il suffit donc de commander la validation des sorties processeur e e et m´moire respectivement par le signal l/e et son compl´ment. e La figure 15.1 illustre ces connexions ; seul 1 fil de la nappe des fils du bus donn´es (respectivement bus adresses) est repr´sent´, ` savoir Di (respectivee e e a ment Aj). Sur la figure, on voit un signal suppl´mentaire DeconnexionProcesseur dont e nous parlons au paragraphe 1.3.

1. Le bus m´moire e

383

Di

Donn´e(no i) e

l/e AccesMem

l/e

S´lection boˆ e ıtier

Aj

Adresse (no j)

PROCESSEUR

MEMOIRE

D´connexionProcesseur e Fig. 15.1 – Connexion processeur/m´moire. Le signal D´connexionProcesseur est exe e pliqu´ au paragraphe 1.3 e l/e AutD Ai/Di Donn´e (no i) e l/e

D Q En AutAd AccesMem

Adresse (no i)

S´lection boˆ e ıtier

PROCESSEUR

MEMOIRE D´connexionProcesseur e

Fig. 15.2 – Multiplexage des bus adresses et donn´es e

384

Relations entre un processeur et de la m´moire e

Ad/Don

Ad

Don

Ad Don

AutAd AutD l/e T1 T2

Fig. 15.3 – Chronogrammes d´crivant l’acc`s ` la m´moire dans le cas d’un bus multie e a e plex´ : l’intervalle T1 correspond ` une lecture m´moire et l’intervalle T2 ` e a e a une ´criture m´moire. e e

1.2

Multiplexage du bus m´moire e

Pour des n´cessit´s d’amplification des signaux, et pour ´conomiser le e e e nombre de broches sur les boˆ ıtiers, les processeurs sont parfois dot´s d’un e bus m´moire multiplex´. Le principe consiste ` faire transiter successivement e e a les adresses puis les donn´es via les mˆmes broches. e e On trouve g´n´ralement deux sorties suppl´mentaires servant ` e e e a l’´chantillonnage des donn´es (AutD) et ` l’´chantillonnage des adresses (Aue e a e tAd) (data strobe et address strobe en anglais) signalant les instants auxquels les adresses et les donn´es transitent sur le bus. e Sur la figure 15.2 qui montre les connexions, on note la pr´sence d’un verrou e avant la commande 3 ´tats connect´e ` la m´moire. e e a e Un cycle de lecture se d´roule en deux phases. Tout d’abord, le processeur e ´met l’adresse, accompagn´e de son signal de validation AutAd. Cette adresse e e est m´moris´e dans le verrou command´ par le signal AutAd. Durant cette e e e phase du cycle, la sortie de donn´es de l’amplificateur m´moire vers processeur e e doit ˆtre d´sactiv´e. Puis dans une deuxi`me phase, la lecture se d´roule comme e e e e e dans le cas d’un bus non multiplex´, ` ceci pr`s que le transfert de la donn´e e a e e est conditionn´ par le signal d’´chantillonnage des donn´es AutD. e e e Un cycle d’´criture se d´roule de fa¸on similaire ` un cycle de lecture. e e c a La commande des amplificateurs externes associ´s au bus donn´es est moe e difi´e en cons´quence : une solution simple consiste ` utiliser le signal AutD e e a comme condition suppl´mentaire de validation de ces amplificateurs. L’amplie ficateur dans le sens m´moire vers processeur sera ainsi activ´ par la condition e e e e e l/e ET AutD. La figure 15.3 d´crit l’´volution des diff´rents signaux.

2. Utilisation de plusieurs circuits de m´moire e

385

1.3

D´connexion du bus m´moire e e

Dans un ordinateur, le processeur n’est pas le seul composant qui r´alise e des acc`s ` la m´moire. e a e Nous verrons au chapitre 16 consacr´ aux circuits d’entr´es/sorties que e e certains d’entre eux ont vocation ` acc´der ` la m´moire sans passer par le a e a e processeur (optimisation appel´e acc`s direct ` la m´moire). e e a e Plus g´n´ralement, dans le cas o` plusieurs processeurs se partagent la e e u mˆme m´moire (par exemple un processeur g´n´ral et un processeur grae e e e phique), le bus m´moire doit ˆtre partag´, d’o` la n´cessit´ d’un arbitrage e e e u e e de bus. Nous ne d´taillons pas dans ce livre la fa¸on de r´aliser des arbitres e c e de bus. Nous montrons seulement comment d´connecter le processeur du bus e m´moire ce qui est un pr´alable ` toute possibilit´ de partage de ce bus. e e a e e Pour les signaux unidirectionnels d’adresses, l/e et Acc`sMem, il suffit d’ajouter une commande aux amplificateurs 3 ´tats : un signal de d´connexion e e du processeur : D´connexionProcesseur sur les figures 15.1 et 15.2. e En ce qui concerne les signaux bidirectionnels de donn´es, les amplificateurs e 3 ´tats sont d´j` pr´sents, il suffit de rajouter le signal D´connexionProcesseur e ea e e comme condition suppl´mentaire d’activation des sorties. e

2.

Utilisation de plusieurs circuits de m´moire e

Il arrive que la capacit´ m´moire d’un boˆ e e ıtier soit inf´rieure ` la capacit´ e a e souhait´e. En g´n´ral, on veut mˆme que la quantit´ de m´moire associ´e ` un e e e e e e e a processeur soit modifiable ; il est courant de rajouter des boˆ ıtiers de RAM dans un ordinateur. Par ailleurs un ordinateur est dot´ de boˆ e ıtiers de m´moire vive e et de m´moire morte. Aussi pour fabriquer une m´moire on utilise plusieurs e e boˆ ıtiers. Dans un premier temps, consid´rons que les boˆ e ıtiers sont tous de la mˆme taille. e Par ailleurs les processeurs sont con¸us avec un bus adresses d’une certaine c taille α qui lui permet potentiellement d’adresser 2α mots diff´rents. Nous e allons fabriquer une m´moire de taille β (avec un certain nombre de boˆ e ıtiers) et β ≤ 2α . Ce paragraphe montre comment alors associer une adresse ` chaque mot a physique de la m´moire, probl`me appel´ d´codage d’adresses. e e e e Nous consid´rons tout d’abord le cas o` β = 2α puis nous ´tudions le cas e u e α β < 2 et enfin nous parlons d’extension m´moire. e

2.1

D´codage externe et s´lection des m´moires e e e

Le probl`me peut se poser dans les termes suivants : comment former une e m´moire de 2m mots avec 2k boˆ e ıtiers m´moires (num´rot´s de 0 ` 2k − 1), de e e e a m−k 2 mots chacune ? Chacun de ces boˆ ıtiers a ses m − k bits d’adresse et son propre signal de s´lection. e

386

Relations entre un processeur et de la m´moire e

a = b × 2m−k + l

A

b 2m−k k

l m−k B S´lection e du boˆ ıtier D´codeur e externe n Donn´es e (b)

boˆ ıtier 1

l

boˆ ıtier b

2m − 1

boˆ ıtier 2k − 1

(a)

Acc`sMem e

Fig. 15.4 – (a) M´moire de 2m mots organis´e avec 2k boˆ e e ıtiers de 2m−k mots chacun. (b) D´codage d’adresse en cascade. B est l’un des 2k boˆ e ıtiers de taille 2m−k .

Soit a une adresse de mot sur m bits. Soient respectivement b et l (cod´s e m−k sur k et m − k bits) le quotient et le reste de la division de a par 2 : m−k a=b×2 + l (le mot adresse en haut de la figure 15.4-b). Le principe consiste ` stocker le mot d’adresse a dans le mot num´ro l du a e boˆ ıtier ou de la barette de num´ro b (Cf. Figure 15.4-a). e Le raccordement est le suivant : le bus de donn´es, le signal l/e et les e signaux d’adresses Am−k−1 ` A0 sont reli´s aux signaux correspondants des a e 2k circuits. Les signaux d’adresses Am−1 ` Am−k sont reli´s aux entr´es de a e e s´lection d’un d´codeur externe command´ par le signal Acc`sMem et dont e e e e chaque sortie pilote le signal de s´lection de boˆ e ıtier d’un circuit m´moire. Le e d´codeur d’adresse sur m bits, initialement interne aux boˆ e ıtiers, est ici remplac´ e par la mise en cascade du d´codeur externe sur k bits et (dans chaque circuit e m´moire) d’un d´codeur interne sur m − k bits (Cf. Figure 15.4-b). e e Cette organisation regroupe dans le mˆme boˆ e ıtier les mots d’adresses cons´cutives de poids forts identiques. Lorsque l’on ne veut utiliser que x e boˆ ıtiers (x < 2k ), la solution que nous venons de d´crire pr´sente l’avantage e e de permettre la cr´ation d’une m´moire contigu¨ de x × 2m−k mots. e e e Il existe des variantes de d´codage dans lesquelles la s´lection des boˆ e e ıtiers exploite d’autres bits d’adresses que ceux de poids forts. A partir de la d´composition a = l × 2k + b , par exemple, nous pourrions connecter les l e signaux de s´lection de mots des boˆ e ıtiers aux signaux d’adresses Am−1 ` Ak du a bus d’adresses et les b signaux de poids faible Ak−1 ` A0 au d´codeur externe a e pour s´lectionner des boˆ e ıtiers. Contrairement ` la pr´c´dente, cette derni`re ora e e e ganisation disperse les mots d’adresses cons´cutives dans des boˆ e ıtiers diff´rents. e Elle ne supporte pas l’absence d’un boˆ ıtier, les mots manquants cr´ant des e trous diss´min´s dans toute la zone m´moire. Elle est ` la base de certaines e e e a techniques d’optimisation du d´bit de la m´moire (bancs de m´moire). e e e

A

0

A m A −k

m −

m −

k−

1

1

boˆ ıtier 0

0

2. Utilisation de plusieurs circuits de m´moire e

387

2.2

D´codage partiel et synonymie d’adresses e

Il se peut que le nombre m de signaux d’adresses du processeur exc`de e largement le nombre p de bits n´cessaires mis ` sa disposition pour adresser la e a m´moire physique. e Une adresse de mot ´mise par le processeur se d´compose maintenant de e e la fa¸on suivante : a = e × 2m−p + b × 2p−k + l. En partant des poids faibles : c l occupe les bits 0 ` k − 1, b occupe les bits k ` p − 1, e occupe les bits p ` a a a m − 1. Le concepteur doit d´finir quelle plage d’adresses du processeur parmi les e p 2 possibles il attribue ` la m´moire (g´n´ralement de 0 ` 2p−1 , soit e = 0). a e e e a Une premi`re possibilit´ est d’introduire un nouvel ´tage de d´codage e e e e d´finissant Acc`sMem. Dans le cas o` e = 0, Acc`sMem = Am−1 , ...Ap et erreur e e u e e e e = Acc`sMem. Ainsi, Acc`sMem traverse un nouveau d´codeur avant d’atteindre la commande du d´codeur externe du sch´ma pr´c´dent, ce nouveau d´codeur e e e e e ´tant command´ par les bits d’adresses de poids forts rest´s inutilis´s. On parle e e e e alors de d´codage complet. e Lors d’un cycle d’acc`s en lecture en dehors de la plage d’adresses d´volue e e a ` la m´moire, aucune sortie n’imposera de niveau ´lectrique sur les signaux de e e donn´es du bus. Il en r´sulte que les bits peuvent prendre une valeur quelconque e e (qui peut d´pendre entre autres de la technologie des amplificateurs de bus e utilis´s). Un tel acc`s constitue une erreur de programmation. Le programmeur e e ne peut faire aucune hypoth`se sur le r´sultat d’une telle lecture. En pratique, e e on obtiendrait le plus souvent un mot dont tous les bits sont ` 1. a Lorsqu’il d´tecte un cycle d’acc`s en dehors de la plage d’adresses de la e e m´moire, le circuit de d´codage d’adresses peut se contenter de n’activer aucun e e boˆ ıtier. Il est toutefois pr´f´rable de renvoyer un signal d’erreur au processeur ee qui provoquera un d´routement de type erreur de bus (Cf. Chapitre 22), signal e qui sera r´percut´ au niveau de l’utilisateur (le classique bus error). e e Une autre possibilit´ consiste ` conserver le sch´ma pr´c´dent sans tenir e a e e e compte des m − p signaux d’adresses de poids forts : on parle de d´codage e partiel. Tout mot de la m´moire physique poss`de dans ce cas 2m−p adresses e e ´quivalentes ou synonymes : son adresse officielle a et toutes les autres adresses e de la forme (a ± i × 2m−p ) modulo 2m avec i entier.

2.3

Supports de boˆ ıtiers multitaille et extension m´moire e

Les fabricants d’ordinateurs pr´voient g´n´ralement un certain nombre de e e e connecteurs dans lesquels on peut enficher des boˆ ıtiers de m´moires pour en e augmenter la capacit´ (extension de m´moire). La fiche technique pr´cise alors e e e la quantit´ de m´moire d´j` install´e dans l’appareil et la taille maximale qu’il e e ea e est possible d’atteindre en ´quipant tous les connecteurs de boˆ e ıtiers. Il est int´ressant de pr´voir des connecteurs pouvant accepter aussi bien les e e

388

Relations entre un processeur et de la m´moire e

boˆ ıtiers disponibles sur le march´ au moment de la conception que les futurs e boˆ ıtiers de capacit´ double ou quadruple (et plus) que l’utilisateur pourra se e procurer ult´rieurement. e Soit 2k le nombre de connecteurs. Soit 2p la taille de la plus petite barette support´e et 2g celle de la plus grande. La technique consiste ` d´coder les e a e signaux Ap ` Ap+k−1 pour g´n´rer les signaux de s´lection de boˆ a e e e ıtiers. Les autres signaux A0 ` Ap−1 et Ap+k ` Ag−1 sont disponibles sur les connecteurs a a et reli´s aux entr´es de s´lection de mots des boˆ e e e ıtiers.

2.4

Sp´cialisation de zones m´moires e e

Le d´codage prend en compte d’autres ´l´ments que la seule adresse. e ee Certains jeux d’instructions distinguent plusieurs espaces d’adressage. Au moins un des espaces est toujours destin´ aux acc`s m´moire ordinaires via e e e les instructions normales (load/store ou move) d’acc`s ` la m´moire. Le ou e a e les autres espaces sont destin´s ` des usages sp´cifiques et n´cessitent l’usage e a e e d’instructions sp´ciales pour y acc´der. e e Des sorties additionnelles du processeur indiquent le num´ro de l’espace e utilis´. Du point de vue du d´codage, on peut consid´rer ce num´ro comme e e e e des bits de poids fort de l’adresse ` d´coder. a e A titre d’exemple, les processeurs de la famille intel distinguent un espace m´moire ordinaire (instruction move) et un espace d´di´ aux seules e e e entr´es/sorties (instructions in et out, Cf. Chapitre 12, paragraphe 1.4.5). Une e sortie M/IO du processeur indique ` quel espace le cycle d’acc`s s’adresse. a e De plus, le processeur d´livre vers l’ext´rieur des signaux donnant des e e informations sur son ´tat interne ou sur la nature de l’instruction en cours e d’ex´cution. Le d´codeur doit ´mettre un signal d’erreur lorsqu’il d´tecte un e e e e acc`s ` la m´moire non conforme aux informations fournies par le processeur. e a e Ce signal se traduit par l’envoi au processeur d’une requˆte d’interruption e (Cf. Chapitre 22). Par exemple, il est possible au concepteur de la carte de prot´ger en ´criture e e certaines zones de m´moire. Lors d’une demande d’acc`s en ´criture ` une telle e e e a zone, le d´codeur d’adresse d´tecte que l’adresse ne fait pas partie des plages e e m´moires autoris´es en ´criture et ´met donc un signal d’erreur. e e e e Pour obtenir par exemple l’expression du signal de s´lection d’une m´moire e e morte, il suffit de prendre le signal que l’on aurait utilis´ pour une m´moire e e vive et d’en faire le produit avec le signal l/e. Le concepteur de la carte peut installer un d´codeur qui d´tecte les acc`s en ´criture en m´moire morte et e e e e e g´n`re une erreur. e e Par ailleurs, nous verrons dans le chapitre 24 qu’il faut implanter des m´canismes de protection lorsque diff´rentes entit´s utilisent le processeur et e e e la m´moire. Certaines parties de m´moire sont ainsi r´serv´es ` certains types e e e e a d’utilisateurs et l’acc`s par d’autres provoque une erreur detect´e au niveau e e du d´codeur d’adresses. On distingue la notion d’accessibilit´ en mode supere e

3. Acc`s ` des donn´es de tailles diff´rentes e a e e

389

viseur ou en mode utilisateur ; lors de tout acc`s ` la m´moire le processeur e a e sp´cifie le mode d’acc`s courant : ce mode est une entr´e suppl´mentaire pour e e e e le d´codeur d’adresses. Dans ce cas aussi l’acc`s erron´ ` une zone reserv´e e e e a e a ` un certain mode doit ˆtre d´tect´ par le d´codeur qui ´met alors un signal e e e e e d’erreur. L’exercice E15.5 illustre la prise en compte d’un tel cas.

3.

Acc`s ` des donn´es de tailles diff´rentes e a e e

L’unit´ adressable de la majorit´ des processeurs est l’octet : les adresses e e utilis´es pour l’acc`s ` la m´moire sont des adresses d’octet. Mais les proe e a e cesseurs sont ´galement capables d’acc´der ` des multiples de l’octet allant e e a jusqu’` la taille du bus donn´es du processeur. a e Par exemple, dans la famille des processeurs 68xxx, l’instruction en langage d’assemblage comporte la taille de la donn´e manipul´e ; ainsi, les instructions e e move.b D1,D2, move.w D1,D2 et move.l D1,D2 signifient respectivement le transfert d’un octet, d’un mot de 16 bits ou d’un mot long de 32 bits du registre D1 vers le registre D2. Dans le sparc les donn´es sont sur 32 bits sauf e pour certaines instructions ; par exemple, l’instruction ld permet le chargement dans un registre d’un mot m´moire 32 bits, mais on peut aussi lire un e octet (respectivement un demi-mot de 16 bits), sign´ ou non, avec une des e instructions : ldsb ou ldub (respectivement ldsh, lduh). Consid´rons par exemple un processeur 32 bits capable d’acc´der ` des e e a octets, des demi-mots de 16 bits et des mots de 32 bits. Puisque les adresses sont des adresses d’octet, la logique voudrait que le processeur soit dot´ d’une e m´moire d’un octet de large. Pour transf´rer un mot de 32 bits d’adresse e e A, il suffirait d’enchaˆ ıner quatre acc`s m´moire aux adresses cons´cutives A, e e e A + 1, A + 2 et A + 3. Cette solution pr´sente l’inconv´nient d’ˆtre lente. Le e e e processeur est donc dot´ de quatre m´moires juxtapos´es, fournissant chacune e e e un octet du mot de 32 bits, que le processeur peut lire en un seul cycle d’acc`s e m´moire. En revanche, lorsque le processeur effectue un acc`s ` un octet, il e e a suffit de ne s´lectionner qu’une seule de ces m´moires. Cette organisation pose e e des probl`mes : e 1. d’alignement et de d´codage d’adresse pour s´lectionner les quatre e e m´moires d’octet. e 2. de cadrage des donn´es sur le bus de donn´es et dans les registres. On e e pourrait vouloir cadrer la donn´e de diff´rentes fa¸ons (vers les poids e e c forts, vers les poids faibles, au milieu...) ; il faudrait alors plusieurs instructions de chargement ou de lecture d’un registre. En fait, un seul type de cadrage suffit ; en effet, on peut toujours r´aliser les autres avec des e instructions de d´calages, plus g´n´rales. Le principe retenu est de cadrer e e e les donn´es de taille inf´rieure ` 32 bits en poids faible des registres et de e e a recopier le bit de signe (ou des 0 si on veut interpr´ter la donn´e comme e e non sign´e) dans les bits de poids fort des registres. e

390

Relations entre un processeur et de la m´moire e

bus adresses

O3

O2

O1

O0

22 D31 D24 D23 D16 D15 D8 D7 D0

bus donn´es e

32

Fig. 15.5 – M´moire organis´e avec 4 boˆ e e ıtiers de 1 Mo

Si l’on veut acc´der ` des donn´es de taille sup´rieure ` celle du bus donn´es, e a e e a e il faut r´aliser plusieurs acc`s m´moire, le programmeur organisant lui-mˆme e e e e le stockage de ces donn´es en m´moire. e e

3.1

Etude de cas : d´codage d’adresses e

Dans ce paragrapge, nous pr´sentons une ´tude de cas illustrant le d´codage e e e d’adresses pour un processeur ayant un bus de donn´es sur 32 bits et un bus e d’adresses sur 22 bits. 3.1.1 Organisation mat´rielle e

Nous disposons de 4 boˆ ıtiers m´moire de 1Mo (1 Mega-octets), c’est-`-dire e a 20 20 10 10 6 de 2 octets. En effet, 2 = 2 ∗ 2 = 1024 ∗ 1024 ≈ 10 . Pour pouvoir acc´der ` un mot m´moire de 32 bits en 1 cycle, on prend e a e chacun des 4 octets dans un des boˆ ıtiers. La figure 15.5 donne une premi`re e id´e de cette organisation. e Puisqu’il ne peut y avoir qu’une adresse ` la fois sur le bus adresses, les a quatre octets auxquels le processeur acc`de sont ` la mˆme adresse, chacun e a e dans son boˆ ıtier. En cons´quence l’adresse d’un mot de 32 bits doit ˆtre un e e multiple de 4. Supposons, en effet, que l’on veuille acc´der ` 4 octets cons´cutifs e a e a ` partir d’un octet du boˆ ıtier O2 ; il faudrait prendre les 3 premiers octets respectivement dans O2, O1 et O0 et le quatri`me dans O3, mais ` l’adresse e a suivante d’o` une adresse diff´rente pour ce dernier octet . . . u e Nous utilisons les 2 bits de poids faibles de l’adresse ´mise par le processeur e pour distinguer les boˆ ıtiers.
Remarque : L’association entre les m´moires et les octets du bus d´pend de e e la convention utilis´e : gros ou petit boutiste (Cf. Chapitre 4). Nous supposons e ici que la convention est gros-boutiste.

L’adresse d’un octet de O3 est de la forme 4 ∗ X (A1A0 = 00), l’adresse d’un octet de O2 de la forme 4 ∗ X + 1 (A1A0 = 01), l’adresse d’un octet de

3. Acc`s ` des donn´es de tailles diff´rentes e a e e

391

O1 de la forme 4 ∗ X + 2 (A1A0 = 10) et l’adresse d’un octet de O0 de la forme 4 ∗ X + 3 (A1A0 = 11). Les autres bits de l’adresse (A21, . . ., A2) d´signent e une adresse dans un boˆ ıtier. Le bus de donn´es se d´compose ` pr´sent en quatre octets. Les m´moires e e a e e d’octet sont connect´es chacune ` un octet du bus de donn´es. e a e Ainsi, ´tant donn´e une adresse 4k + i ´mise par le processeur, la valeur k e e e cod´e sur les vingt bits de poids fort reli´s aux d´codeurs internes des m´moires e e e e repr´sente un num´ro d’octet dans son boˆ e e ıtier et la valeur i cod´e sur les deux e bits de poids faible est un num´ro de boˆ e ıtier o` trouver l’octet d’adresse 4k + i. u En ´mettant k en poids fort du bus d’adresse, le processeur peut acc´der e e simultan´ment et en un seul cycle m´moire ` : l’octet d’adresse 4k via D24 ` e e a a D31 du bus de donn´es, l’octet d’adresse 4k + 1 via D16 ` D23 , l’octet d’adresse e a 4k + 2 via D8 ` D15 et l’octet d’adresse 4k + 3 via D0 ` D7 . a a Par construction, les octets d’adresses 4k+x et 4(k±1)+y, avec (0 ≤ x ≤ 3 et 0 ≤ y ≤ 3), ne sont pas accessibles dans un mˆme cycle m´moire. e e La combinaison 4k + 2 et 4k + 3 correspond au transfert d’un demi-mot de seize bits d’adresse 4k + 2. En revanche, un demi-mot de seize bits d’adresse 4k + 3, compos´ des octets d’adresses 4k + 3 et 4(k + 1) + 0 n’est pas accessible e en un seul cycle m´moire. e Nous retrouvons l` l’origine des r`gles d’alignement expos´es au chapitre 4 a e e imposant des adresses de demi-mot de seize bits paires, des adresses de mots de 32 bits multiples de 4 et ainsi de suite (notons cependant que le mat´riel e serait capable de transf´rer en un cycle des demi-mots d’adresses 4k + 1). e
Remarque : Les versions 32 bits de certaine familles de processeurs (intel et motorola) h´ritent de logiciels d´velopp´s pour leurs pr´d´cesseurs e e e e e travaillant sur 8 ou 16 bits et pour lesquels les contraintes d’alignement ne se posaient pas. C’est pourquoi ils tol`rent les adresses non align´es au prix e e de deux acc`s m´moire par transfert d’objet non align´ et d’une complexit´ e e e e mat´rielle accrue. Sur les processeurs modernes, l’acc`s ` des donn´es ` des e e a e a adresses non align´es d´clenche une erreur. e e

3.1.2

Le d´codeur d’adresses e

Lors d’un acc`s m´moire, le processeur ´tablit les signaux suivants : e e e – l’adresse A21, . . ., A0. – la taille de la donn´e ; cette information provient du d´codage de l’instruce e tion en cours d’ex´cution. Le chargement ou le rangement se fait sur 1 octet, e 1 demi-mot de 16 bits ou 1 mot de 32 bits ; ces 3 cas peuvent ˆtre cod´s sur e e 2 bits. – les signaux Acc`sMem et l/e. e Le d´codeur d’adresses doit produire les signaux de s´lection de chacun des e e boˆ ıtiers : SelO3, SelO2, SelO1, SelO0. Nous avons vu au paragraphe pr´c´dent que le boˆ e e ıtier de num´ro i, e i ∈ {0, 1, 2, 3} contient le mot d’adresse 4k + i. De plus le d´codeur d’adresses e

392

Relations entre un processeur et de la m´moire e

taille PROCESSEUR AccesMem A1 A0 A21 ... A2 SelO3 SelO2 SelO1 SelO0 erreur DECODEUR D’ADRESSES

l/e

SelO3

SelO2

SelO1

SelO0

Fig. 15.6 – D´codage d’adresse dans le cas d’acc`s ` des sous-ensembles du mot m´moire e e a e

interne de chaque boˆ ıtier re¸oit l’adresse sur 20 bits de l’octet auquel le proc cesseur acc`de. e La figure 15.6 d´crit cette organisation. Le tableau 15.7 donne la table de e v´rit´ de la fonction de d´codage d’adresses. Notons la pr´sence d’un signal e e e e erreur ´mis par le d´codeur ; ce signal correspond ` une demande d’acc`s ` une e e a e a adresse invalide, il pourra ˆtre associ´ ` une interruption (Cf. Chapitre 22). e ea Les exercices E15.4 et E15.5 poursuivent cette ´tude de cas. e Nous avons dit que la taille de la m´moire peut varier dans la vie d’un e ordinateur, les constructeurs pr´voyant en effet la possibilit´ de rajouter des e e boˆ ıtiers m´moire. Le d´codeur d’adresses doit avoir ´t´ pr´vu pour ce faire et e e ee e c’est lors de l’initialisation de l’ordinateur qu’un programme d´tecte la quantit´ e e de m´moire r´ellement pr´sente. e e e

3.2

Etude de cas : gestion du bus donn´es e

Le probl`me qu’il reste ` r´soudre est le cadrage des donn´es de taille e a e e inf´rieure a la taille du bus donn´es sur celui-ci. Nous traitons un exemple e ` e simplifi´ de fa¸on ` ne pas ´crire des tables de v´rit´ trop complexes. e c a e e e Consid´rons un processeur ayant un bus adresses sur m bits (adresse = e Am−1 , ..., A0 ), un bus donn´es sur 16 bits et une m´moire form´e de deux e e e m−1 boˆ ıtiers de 2 octets (Cf. Figure 15.8). Soit X l’entier repr´sent´ en binaire par les bits m−1 ` 1 du bus adresses. La e e a

3. Acc`s ` des donn´es de tailles diff´rentes e a e e

393

A1 0 0 1 1 0 0 1 1 0 0 1 1

A0 0 1 0 1 0 1 0 1 0 1 0 1

taille octet octet octet octet 16 bits 16 bits 16 bits 16 bits 32 bits 32 bits 32 bits 32 bits

SelO3 1 0 0 0 1 0 0 0 1 0 0 0

SelO2 0 1 0 0 1 0 0 0 1 0 0 0

SelO1 0 0 1 0 0 0 1 0 1 0 0 0

SelO0 0 0 0 1 0 0 1 0 1 0 0 0

erreur 0 0 0 0 0 1 0 1 0 1 1 1

Fig. 15.7 – Fonction de d´codage d’adresses e

m´moire not´e 2X stocke les octets d’adresses paires (adresse = Am−1 , ..., A1 , 0) e e et la m´moire not´e 2X + 1 stocke les octets d’adresses impaires (adresse = e e Am−1 , ..., A1 , 1). La m´moire “2X” est connect´e ` l’octet de poids fort du bus donn´es e e a e (D15 , ..., D8 ) et la m´moire “2X + 1” est connect´e ` l’octet de poids faible du e e a bus donn´es (D7 , ..., D0 ). e Le processeur indique au dispositif de d´codage d’adresses la taille de l’ine formation a laquelle il acc`de (octet ou mot de 16 bits) et le bit de poids faible ` e d’adresse (A0 ) indique s’il s’agit d’une adresse paire ou impaire. Le d´codeur d’adresses produit les signaux de s´lection des boˆ e e ıtiers m´moire : Sel2X et Sel2X+1. e Lorsqu’un acc`s ` un mot de 16 bits avec une adresse paire est demand´, e a e il n’y a aucun probl`me : un octet de chacun des boˆ e ıtiers ´tant envoy´ (ou e e r´cup´r´) sur le bus donn´es. e ee e Lorsque le processeur veut ´crire un octet en m´moire le probl`me est e e e simple. Le programmeur sait ` quelle adresse il ´crit et est responsable de a e l’organisation de ses donn´es en m´moire. Il lui suffit donc de pr´ciser la taille e e e de la donn´e ` ´crire. En g´n´ral des instructions sont pr´vues pour cela dans e ae e e e les processeurs ; par exemple, dans le sparc (Cf. Chapitre 12, figure 12.3), l’´criture de 32 bits dans la m´moire est r´alis´e par l’instruction ST et l’´criture e e e e e d’un octet par une instruction diff´rente (STB, store byte). e En revanche, pour transf´rer un octet de m´moire vers un registre R (lecture e e d’un octet en m´moire), il faut savoir quelle partie du registre est affect´e et e e que vaut le reste du registre. Le probl`me est ainsi de s´lectionner la bonne e e partie du bus donn´es. e Pour traiter ce probl`me, un circuit C est ajout´ au processeur : la fie e gure 15.9 montre sa position et la table 15.10 d´crit la fonction qu’il r´alise. e e Les octets ´tant cadr´s dans les poids faibles du registre R, si un octet de e e

394

Relations entre un processeur et de la m´moire e

PROCESSEUR

octet ou mot de 16 bits DECODEUR AccesMem A0 D’ADRESSES Sel2X 2X 0

erreur

Sel2X+1 2X+1 0

Am−1 ... A1

2m−1 − 1 D15...8 l/e

2m−1 − 1 D7...0

Fig. 15.8 – M´moire accessible par octets ou mots de 16 bits e MEMOIRE 2X Bus Donn´es e 16 PROCESSEUR C Registre instruction D15 D8 2X+1 D7 D0

un registre Fig. 15.9 – Recadrage des donn´es lors de lecture de sous-multiples du mot m´moire e e Type Acc`s e 16 16 8 8 8 8 Adresse paire impaire paire impaire paire impaire Type Instruction non sign´ e non sign´ e sign´ e sign´ e R15 ... R8 D15 ... D8 ———0 ... 0 0 ... 0 D15 ... D15 D7 ... D7 R7 ... R0 D7 ... D0 ——— D15 ... D8 D7 ... D0 D15 ... D8 D7 ... D0

Fig. 15.10 – Cadrage des donn´es dans un registre lors d’une op´ration de lecture e e m´moire e

4. Exercices

395

la m´moire “2X + 1” est transf´r´ vers le registre R, il faut ´tendre la valeur e ee e repr´sent´e en remplissant les 8 bits de poids fort du registre R avec des 0 ou le e e bit de signe de la valeur, selon qu’il s’agit d’un chargement non sign´ ou sign´ e e (Cf. Chapitre 3). S’il s’agit d’un octet de la m´moire “2X”, il doit ˆtre plac´ e e e dans les poids faibles de R, les poids forts ´tant trait´s comme pr´c´demment. e e e e Le circuit C re¸oit en entr´e la taille de la donn´e (octet ou mot de 16 c e e bits), la parit´ de l’adresse (bit A0 ) et le type d’instruction (sign´e ou non). e e Par exemple, dans le processeur sparc on trouve une instruction de lecture d’un octet sign´ LDSB ou non sign´ LDUB. Le tableau 15.10 pr´cise quels fils e e e du bus donn´es sont envoy´s vers chaque bit du registre R ; certaines lignes e e ne sont pas pr´cis´es : lorsqu’il y a une demande d’acc`s d’un mot de 16 bits e e e a ` une adresse impaire, le d´codeur d’adresses envoie le signal d’erreur, et la e valeur calcul´e par le circuit C n’a aucune importance. e

4.

Exercices

E15.1 Faire le sch´ma d´taill´ en portes du circuit C de la figure 15.9 en e e e prenant les codages de taille dans la documentation d’un vrai processeur. E15.2 Comment peut ˆtre ´tendu le m´canisme d´crit au paragraphe 3.2 e e e e pour traiter des donn´es de 32, 16 et 8 bits ? e E15.3 Chercher, dans des documentations techniques de processeurs, s’ils ont ou non une contrainte d’alignement des mots de 2n octets sur fronti`re e n multiple de 2 . En profiter pour regarder quelle convention a ´t´ adopt´e : ee e gros-boutiste ou petit-boutiste (Cf. Chapitre 4, paragraphe 2.2.4). E15.4 : Une m´moire simple (Cet exercice fait suite ` l’´tude de cas du e a e paragraphe 3.1) Le processeur a toujours un bus donn´es de 32 bits mais un bus d’adresses e de 24 bits. Nous disposons de 16 boˆ ıtiers de 1Mo. D´crire l’organisation de la e m´moire et le d´codage d’adresses afin de disposer d’une m´moire de 4 ∗ 220 e e e mots de 32 bits, sachant que l’on veut pouvoir acc´der ` des octets, ` des mots e a a de 16 bits ou ` des mots de 32 bits. a E15.5 : Une m´moire g´n´rale e e e On veut g´rer une m´moire dans laquelle l’acc`s ` des octets, des mots de 16 e e e a ou 32 bits est possible. On dispose des boˆ ıtiers suivants : – 4 boˆ ıtiers de ROM de 256Ko accessibles en mode superviseur, – 4 boˆ ıtiers de RAM de 256Ko accessibles en mode superviseur, – 8 boˆ ıtiers de RAM de 1Mo accessibles en mode superviseur et utilisateur, – 1 boˆ ıtier servant aux entr´es/sorties de 3 mots de 8 bits, accessibles en e mode superviseur, le premier mot pouvant ˆtre lu et/ou ´crit, le deuxi`me e e e ne pouvant ˆtre que lu et le troisi`me uniquement ´crit, e e e – 1 boˆ ıtier servant aux entr´es/sorties de 3 mots de 16 bits, accessibles en e

396

Relations entre un processeur et de la m´moire e

0 1M 2M 3M 4M 8M

ROMs

RAMs

3 octets en M+3, M+11, M+15 3 mots de 16 bits en 2M+2, 2M+10, 2M+14

RAMu 12M RAMu 16M Fig. 15.11 – Organisation d’une m´moire g´n´rale e e e

mode superviseur, le premier mot pouvant ˆtre lu et/ou ´crit, le deuxi`me e e e ne pouvant ˆtre que lu et le troisi`me uniquement ´crit. e e e
Remarque : Un boˆ ıtier de 256K est un boˆ ıtier 218 octets, 218 = 28 ∗ 210 = 256 ∗ 1024 ≈ 256 ∗ 103 .

La figure 15.11 d´crit l’implantation de chacun de ces boˆ e ıtiers, ou mots pour la m´moire servant aux entr´es/sorties. Pour cette derni`re, pour l’instant, on e e e peut consid´rer que ce sont des mots m´moire avec seulement des contraintes e e de lecture et/ou d’´criture ; on verra au chapitre 16 comment les utiliser. e
Remarque : Les adresses d’implantation sur la figure 15.11 sont donn´es e 6 = 103 ∗103 ≈ en M (m´ga-octets) pour all´ger le dessin. Notons que 1M = 10 e e 210 ∗ 210 = 220 .

Le processeur a des donn´es sur 32 bits et des adresses sur 32 bits. Il ´met e e les signaux : Acc`sMem, l/e, et le type d’acc`s (octet, 16 bits ou 32 bits). e e De plus, il envoie un signal s/u indiquant s’il est en mode superviseur ou utilisateur. Nous verrons au chapitre 22 que le processeur poss`de diff´rents e e modes d’ex´cution mais pour l’instant on se contentera d’´mettre une erreur e e d’acc`s m´moire dans le cas o` un acc`s ` une zone superviseur est demand´e e e u e a e alors que le processeur n’est pas en mode superviseur. Faire un sch´ma pr´cis de l’organisation de cette m´moire et d´crire le e e e e d´codeur d’adresses. La fonction de d´codage d’adresses doit calculer les sie e gnaux d’acc`s ` chacun des boˆ e a ıtiers utilis´s et le signal d’erreur d’acc`s e e m´moire. e

Chapitre 16 Circuits d’entr´es/sorties e
Nous avons vu au chapitre 15 comment se passent les transferts entre le processeur et la m´moire. Nous voulons maintenant enrichir notre ordinateur e minimal en offrant des moyens de communication entre l’ensemble processeur/m´moire et le monde ext´rieur. Le monde ext´rieur peut ˆtre un autre e e e e ordinateur ou un ensemble d’organes p´riph´riques tels que clavier, lecteur de e e disquettes, imprimante, ´cran, capteurs, etc. e Lorsqu’il y a communication d’information de l’ensemble processeur/m´moire en direction du monde ext´rieur, on parle d’une sortie, et lorsque e e l’´change a lieu depuis le monde ext´rieur vers l’ensemble processeur/m´moire e e e on parle d’une entr´e. e Les circuits d’entr´es/sorties assurent la gestion des ´changes entre le proe e cesseur et les p´riph´riques, et plus particuli`rement g`rent la synchronisation e e e e entre ces dispositifs qui ont des vitesses de fonctionnement diff´rentes. e Le paragraphe 1. pr´sente la notion d’entr´es/sorties et pr´cise ce que e e e l’on appelle un circuit d’entr´es/sorties. Les aspects de synchronisae tion mis en jeu lors d’une communication entre le processeur et des organes p´riph´riques sont abord´s dans le paragraphe 2. Dans le pae e e ragraphe 3. nous montrons comment connecter mat´riellement des ore ganes p´riph´riques ` l’ensemble processeur/m´moire. La programmae e a e tion de sorties et d’entr´es ´l´mentaires ainsi que l’interface mat´rielle e ee e n´cessaire sont pr´sent´es dans les paragraphes 4. et 5. Dans le parae e e graphe 6. nous nous int´ressons ` l’enchaˆ e a ınement d’entr´es/sorties et e pr´sentons des moyens d’optimiser des tranferts de blocs : notions d’acc`s e e direct ` la m´moire (DMA), de canal et de processeur d’entr´es/sorties. a e e

1.

Notion d’entr´es/sorties e

Pour fixer les id´es, consid´rons une configuration simple avec deux ore e ganes p´riph´riques : un clavier pour les entr´es et un afficheur sept segments e e e (Cf. Exemple E8.2) pour les sorties (Cf. Figure 16.1).

398

Circuits d’entr´es/sorties e

PROCESSEUR/MEMOIRE

transcodeur .....

transcodeur

ENTREE

SORTIE

Fig. 16.1 – Entr´e clavier et sortie afficheur sept segments e

La frappe d’une touche du clavier provoque l’envoi de signaux ` un a transcodeur qui fournit un codage de cette valeur sur 7 bits (code ASCII, Cf. Chapitre 3). Cette information doit alors ˆtre trait´e par l’ensemble proe e cesseur/m´moire. Deux types de questions se posent : o` cette information e u est-elle stock´e ? Comment g´rer le flux des caract`res frapp´s ` un rythme e e e e a compl`tement libre par l’utilisateur ? e Imaginons maintenant un programme qui calcule des valeurs enti`res sur e 4 bits ` d´livrer ` l’utilisateur, c’est-`-dire ` afficher sur l’afficheur sept sega e a a a ments. On peut supposer que ces valeurs sont stock´es dans la m´moire associ´e e e e au processeur. Un transcodeur fabrique les signaux permettant d’allumer les bons segments de l’afficheur afin de donner la repr´sentation en hexad´cimal e e de l’entier en question. L` aussi le mˆme type de questions se pose : coma e ment la m´moire est-elle reli´e ` ce transcodeur ? A quel rythme est-il possible e e a (souhaitable) d’envoyer les informations ? Que ce soit pour une entr´e ou une sortie, on voit qu’il y a deux aspects ` e a prendre en compte : la r´alisation de la connexion physique (mat´rielle) entre e e le p´riph´rique et l’ensemble processeur/m´moire et la gestion de la synchronie e e sation des ´changes. Il est ainsi n´cessaire d’intercaler entre tout p´riph´rique e e e e et l’ensemble processeur/m´moire un circuit de commande que l’on appelle e circuit d’entr´es/sorties ou coupleur de p´riph´rique. e e e Dans la suite du chapitre, nous commen¸ons par pr´ciser les aspects li´s ` c e e a la synchronisation des ´changes, puis nous pr´sentons les aspects mat´riels de e e e connexion (quels fils et circuits faut-il ajouter et o` ?). Enfin nous montrons u comment programmer une entr´e ou une sortie, c’est-`-dire comment utiliser e a les circuits d’entr´es/sorties depuis un programme en langage d’assemblage. e

2. Synchronisation entre le processeur et un p´riph´rique e e

399

2.

Synchronisation entre le processeur et un p´riph´rique e e

Les probl`mes qui se posent ici sont inh´rents ` toute communication : e e a perte d’une partie de l’information qui doit ˆtre ´chang´e ; r´p´tition d’une e e e e e mˆme information d´j` ´chang´e (Cf. Chapitre 6). Avant d’´tudier pr´cis´ment e eae e e e e le type de protocole qu’il est n´cessaire d’appliquer, nous allons discuter du e niveau auquel cette synchronisation intervient.

2.1

A quel niveau se passe la synchronisation ?

Les ´changes entre l’ensemble processeur/m´moire et le monde ext´rieur e e e peuvent ˆtre d´compos´s en deux niveaux : ´changes entre processeur/m´moire e e e e e et p´riph´rique et ´changes entre le p´riph´rique et le monde ext´rieur. e e e e e e Lors de la lecture d’un caract`re, l’ensemble processeur/m´moire dialogue e e avec le p´riph´rique clavier mais au-del` du clavier il y a un utilisateur. Cet e e a utilisateur tape des caract`res ` la vitesse qui lui convient, c’est-`-dire de fa¸on e a a c compl`tement arbitraire et non contrˆlable. Le syst`me informatique doit g´rer e o e e la synchronisation entre le processeur et le p´riph´rique car on ne peut rien e e contrˆler entre l’utilisateur et le p´riph´rique. o e e Envisageons maintenant un cas o` la vitesse impos´e n’est pas celle d’un u e utilisateur mais celle d’un organe m´canique. Par exemple, prenons le cas d’une e imprimante. L`, on connaˆ la vitesse ` laquelle l’imprimante peut afficher des a ıt a caract`res et donc assurer une synchronisation de fa¸on ` ne pas en perdre. Il e c a peut toutefois survenir des probl`mes ` des instants non pr´visibles comme par e a e exemple l’absence de papier : le probl`me est en g´n´ral trait´ au niveau du e e e e syst`me qui g`re une liste des fichiers en attente d’impression et qui n’envoie e e une information ` l’imprimante que si celle-ci peut la traiter. a Dans le cas g´n´ral, il convient donc de tenir compte des erreurs et anomae e lies inh´rentes ` toute interaction avec l’environnement ext´rieur. e a e Nous avons vu au chapitre 15 comment g´rer les ´changes entre la m´moire e e e et le processeur. La connexion d’organes p´riph´riques ne peut pas s’en inspirer e e directement ; en effet, les entr´es/sorties pr´sentent des particularit´s qui les e e e distinguent des acc`s m´moire : e e – la vitesse des processeurs et des m´moires ` semiconducteurs est sup´rieure e a e de plusieurs ordres de grandeur ` celle des p´riph´riques mettant en jeu des a e e dispositifs m´caniques. A titre d’illustration une imprimante ` impact (` e a a marguerite, matricielle ` aiguille, etc.) atteignant la dizaine de milliers de a caract`res imprim´s ` la seconde repr´senterait d´j` une prouesse m´canique e e a e ea e alors que tous les processeurs r´cents d´passent la centaine de millions d’inse e tructions par seconde. – le processeur ne peut d´cider seul des instants auxquels les ´changes see e ront effectu´s : il ne peut par exemple deviner ` quel moment l’utilisateur e a va appuyer sur une touche du clavier. Au mieux, il est possible de lisser

400

Circuits d’entr´es/sorties e

les probl`mes en imaginant des m´canismes de m´morisation permettant e e e d’accumuler les caract`res frapp´s au clavier en attendant que le processeur e e les traite. Dans la pratique, il n’y a pas r´ellement de probl`me car la vie e tesse des processeurs est nettement sup´rieure au temps de r´action d’un e e utilisateur.

2.2

Synchronisation par poign´e de mains e

Une entr´e (ou une sortie) met en jeu deux entit´s : un ´metteur et un e e e r´cepteur. Dans le cas d’une entr´e l’´metteur est le p´riph´rique et le r´cepteur e e e e e e est le processeur. Dans le cas d’une sortie c’est l’inverse. Il faut mettre en oeuvre un protocole d’´change qui permette au r´cepteur de d´tecter l’arriv´e e e e e des informations ` consommer et assurer un contrˆle de flux, autrement dit a o ´viter que l’´metteur ne soumette des informations plus vite que le r´cepteur ne e e e peut les traiter ou que le r´cepteur ne traite plusieurs fois la mˆme information. e e Par exemple, consid´rons la sortie de caract`res sur une imprimante ; le e e protocole d’´change doit assurer que le processeur n’´mettra pas un nouveau e e caract`re si le pr´c´dent n’a pas encore ´t´ imprim´ et que l’imprimante n’ime e e ee e prime pas plusieurs fois le mˆme caract`re. e e Dans le cas g´n´ral, l’´change entre un processeur et un p´riph´rique peut e e e e e ˆtre r´gi par le protocole de dialogue dit poign´e de mains pr´sent´ au chae e e e e pitre 6. La mise en oeuvre de ce protocole r´clame la gestion de signaux de synchroe nisation disant si l’information ` ´changer est parvenue ou non au r´cepteur ae e et si le r´cepteur a trait´ ou non l’information qu’il a re¸ue. e e c Dans un programme d’entr´e ou de sortie la valeur de ces signaux de syne chronisation est test´e et tant que le signal attendu n’a pas la bonne valeur il e faut le tester ` nouveau jusqu’` ce qu’il devienne correct. On parle d’attente a a active car le processeur qui ex´cute ce test ne peut rien faire d’autre pendant e ce temps-l`, il est mobilis´ pendant toute la dur´e du transfert. a e e
Nous verrons au chapitre 24, paragraphe 3. que d’autres solutions (utilisant la notion d’interruption) plus efficaces et plus r´alistes sont en fait mises en e oeuvre dans les syst`mes multitˆches. e a

3.
3.1

Connexion d’organes p´riph´riques e e
Notion de coupleur

Le circuit n´cessaire ` la communication s’appelle coupleur. Le procese a seur per¸oit le syst`me d’entr´es-sorties comme un ensemble d’emplacements c e e m´moire reli´s au monde ext´rieur. L’usage a consacr´ le terme de registres du e e e e coupleur pour ces emplacements. Cela signifie que certaines adresses de la m´moire sont r´serv´es ` l’usage e e e a

3. Connexion d’organes p´riph´riques e e

401

l/e Acc`sMem e D´codage e d’adresses s´lection de diff´rents e e boˆ ıtiers m´moire e

S´lection Coupleur e Coupleur P´riph´rique e e

Processeur

bus adresses

bus donn´es e fils sp´cialis´s e e emplacements m´moire e dits registres du coupleur Fig. 16.2 – Connexion d’un processeur et d’un p´riph´rique via un coupleur e e

des entr´es/sorties. C’est le d´codage d’adresses qui prend en compte cette e e nouvelle contrainte. Les donn´es transitant par le bus donn´es (Cf. Chapitres 9 et 15) il faut e e qu’une connexion physique soit r´alis´e entre le p´riph´rique et le bus donn´es e e e e e via le coupleur. La figure 16.2 donne une premi`re id´e des ´l´ments intervee e ee nants dans cette mise en oeuvre. Pour r´aliser une entr´e il faut que des fils provenant de l’unit´ p´riph´rique e e e e e soient connect´s au bus de donn´es via des portes trois ´tats ou des ´l´ments e e e ee de m´morisation. Pour r´aliser une sortie il faut connecter le bus de donn´es e e e au p´riph´rique via des ´l´ments de m´morisation. e e ee e Le montage n’est pas n´cessairement sym´trique pour les entr´es et les e e e sorties. En effet, lors d’une sortie, la valeur ´mise par le processeur apparaˆ e ıt fugitivement sur le bus donn´es pendant le cycle d’´criture et doit donc ˆtre e e e m´moris´e. Par contre, en entr´e, il peut suffire d’´chantillonner la valeur au e e e e moment de la lecture sans besoin de m´morisation. En effet, il est raisonnable e de faire l’hypoth`se qu’en entr´e les valeurs sont stables : le p´riph´rique est e e e e suppos´ maintenir les donn´es pendant l’intervalle de temps sp´cifi´ par le e e e e protocole de synchronisation. Nous nous pla¸ons dans ce cas de figure pour la c suite du chapitre.

3.2

Connexion de p´riph´riques ` des ´l´ments de e e a ee m´morisation e

Pour d´crire les connexions physiques des fils, nous commen¸ons par rape c peler comment une cellule m´moire est connect´e au bus donn´es. Nous e e e

402

Circuits d’entr´es/sorties e

e consid´rons une cellule de 1 bit (repr´sent´ par un verrou) connect´e au i`me fil e e e e du bus de donn´es Di. Le sch´ma 16.3 montre la structure du circuit d’´change e e e d’information entre ce bit et le processeur. Acc`sMem et l/e sont les signaux e de s´lection et de lecture/´criture de la m´moire. e e e Nous voulons maintenant faire communiquer l’ensemble processeur/m´moire avec le monde ext´rieur. Consid´rons, par exemple, un e e e monde ext´rieur tr`s simple dans lequel le processeur doit pouvoir envoyer e e (´crire) une valeur sur des lampes, ou bien r´cup´rer (lire) une valeur sur des e e e interrupteurs. Reprenons le sch´ma 16.3 et supprimons la connexion entre la sortie Q du e verrou et la porte 3 ´tats donnant l’acc`s au fil Di du bus donn´es. Le montage e e e (Cf. Figure 16.4) cr´e un port d’entr´e et un port de sortie reli´s sur l’exemple e e e respectivement ` un interrupteur et une lampe. a Le montage d´crit permet la cr´ation d’une entr´e ´l´mentaire et d’une e e e ee sortie ´l´mentaire. Le port d’entr´e et celui de sortie peuvent occuper la mˆme ee e e adresse, comme ici, ou des adresses diff´rentes. e L’´criture sur un port de sortie ou la lecture sur un port d’entr´e mettent en e e jeu un m´canisme de s´lection d’adresse analogue ` celui que nous avons d´crit e e a e au chapitre 15. Pour une ´criture (respectivement une lecture) sur un port de e sortie (respectivement d’entr´e), le d´codeur d’adresses re¸oit une demande e e c d’acc`s ` la m´moire (Acc`sMem=1) accompagn´e d’une adresse correspondant e a e e e a ` l’un des circuits consacr´s aux entr´es/sorties. Il active alors le signal de e e s´lection de ce circuit : SelCoupleur. e Le coupleur doit lui-mˆme comporter un d´codeur d’adresses. Il fabrique les e e signaux de commande de chargement des bascules associ´es aux ports de sortie e et les signaux de commande des portes 3 ´tats associ´es aux ports d’entr´e, ` e e e a e partir de SelCoupleur, du signal l/e ´mis par le processeur et de l’adresse. Sur la figure 16.4, une seule cellule m´moire est repr´sent´e ; nous n’avons donc pas e e e tenu compte de l’adresse. La figure 16.5 d´crit l’organisation d’un coupleur ` e a deux ports d’entr´e et deux ports de sortie. Nous pouvons y observer la place e des d´codeurs. e Dans la suite de ce chapitre, nous ne repr´senterons plus les diff´rents e e d´codeurs mais dessinerons le processeur, le d´codeur d’adresses et le d´codeur e e e du coupleur comme un ensemble.

4.
4.1

Programmation d’une sortie
Interface simplifi´e e

Nous traitons l’exemple de l’impression d’un texte (suite de caract`res) sur e une imprimante. Le coupleur permet de traiter trois informations : – une donn´e sur 8 bits, le caract`re, qui est une sortie pour le processeur et e e une entr´e pour l’imprimante, e

4. Programmation d’une sortie

403

amplificateur 3 ´tats e 1 bit de bus donn´es e Di D Q En

Acc`sMem e l/e Fig. 16.3 – Echange entre le processeur et la m´moire sur un bit : lorsque le signal e e e Acc`sMem vaut 1 et le signal l/e vaut 0 la bascule m´morise la valeur pr´sente e sur le bus et lorsque Acc`sMem et l/e valent tous deux 1 la valeur m´moris´e e e e dans la bascule est pr´sente sur le bus. e

+5V

interrupteur Di D Q En Ecr SelCoupleur l/e

Lec

lampe

Fig. 16.4 – Echange entre le processeur et l’ext´rieur sur un bit : le signal ´lectrique e e command´ par l’interrupteur apparaˆ sur le fil Di du bus donn´es lors d’un e ıt e cycle de lecture (SelCoupleur=1 et l/e=1). Si l’interrupteur est ferm´ le e processeur lira un 0, s’il est ouvert il lira un 1. Par ailleurs la valeur ´mise e sur le fil Di par le processeur lors d’une ´criture (SelCoupleur=1 et l/e=0) e est m´moris´e par le verrou ; si cette valeur est 1 alors la lampe s’allume, si e e c’est 0 la lampe s’´teint. e

404

Circuits d’entr´es/sorties e

... ... PROCESSEUR Bus donn´es e

Di D Q En A0 EcrS1 EcrS0 LecE1 LecE0 D´codeur du coupleur e

Bus adresses Acc`sMem e

D´codeur e d’adresses l/e

SelCoupleur s´lection de diff´rents e e ... boˆ ıtiers m´moire e

Fig. 16.5 – Coupleur ` deux ports d’entr´es et deux ports de sortie : le d´codeur a e e d’adresses active le signal SelCoupleur lorsqu’il reconnaˆ l’adresse qui lui ıt est fournie comme une adresse du circuit d’entr´es/sorties. En supposant e que le bit d’adresse A0 permet de faire la distinction entre les deux mots du coupleur, le d´codeur du coupleur fabrique les signaux de commande des e 2 ports de sortie EcrS0 et EcrS1 et des 2 ports d’entr´e LecE0 et LecE1, ` e a partie des signaux SelCoupleur, l/e et A0.

– un bool´en processeur prˆt qui signifie qu’un nouveau caract`re est dispoe e e nible et doit ˆtre imprim´, e e – un bool´en imprimante prˆte, qui signifie que l’imprimante est prˆte ` traiter e e e a un caract`re. Apr`s une impression il signifie que le caract`re pr´c´dent a e e e e e ´t´ imprim´. ee e Le coupleur est compos´ d’un registre de donn´es RegD et d’un registre de e e commande RegC auxquels on acc`de en ´criture, et d’un registre d’´tat RegE e e e auquel on acc`de en lecture. Vus du processeur RegD est ` l’adresse RD et e a contient la donn´e, RegC est ` l’adresse RC et contient un seul bit significatif : e a processeur prˆt ; RegE est ` l’adresse RE et contient un seul bit significatif e a imprimante prˆte. e Posons comme convention que le signal processeur prˆt est actif lorque le e registre RegC vaut 1 et que le signal imprimante prˆte est actif lorsque le signal e RegE vaut 1. La figure 16.6 d´crit cette organisation mat´rielle et la figure 16.7 donne les e e programmes d’initialisation du coupleur et d’impression d’un caract`re stock´ e e a ` l’adresse car. Ils sont ´crits en langage d’assemblage 68000 (Cf. Chapitre 12 e pour un exemple de syntaxe de ce langage d’assemblage). L’ex´cution de ces e

MONDE EXTERIEUR

D Q En

4. Programmation d’une sortie

405

programmes met en oeuvre l’algorithme de l’´metteur (voir le protocole poign´e e e de mains dans le chapitre 6). La boucle d’attente sur l’´tiquette att-pret, correspond ` l’´tat o` le procese a e u seur attend que le r´cepteur soit libre ; lorsque c’est le cas, le processeur peut e lui envoyer une valeur. La boucle d’attente sur l’´tiquette att-traite correspond e a ` l’intervalle de temps pendant lequel le processeur attend que le r´cepteur ait e trait´ la donn´e envoy´e. Si le processeur n’attend pas, il risque d’´craser le cae e e e ract`re envoy´. La remise ` z´ro du registre RegC correspond ` la d´sactivation e e a e a e du signal processeur pr^t. e

4.2

Gestion d’erreur

Dans ce paragraphe nous examinons comment prendre en compte les erreurs provenant d’un p´riph´rique. Nous poursuivons avec l’exemple de l’imprimante e e en consid´rant le probl`me de l’absence de papier : l’imprimante ne doit plus e e recevoir de caract`res. e Pour g´rer le probl`me, il faut que le processeur puisse en ˆtre inform´ ; pour e e e e cela le registre d’´tat RegE va ˆtre compl´t´ par un nouveau signal erreur papier. e e ee Pour fixer les id´es nous supposons que ce signal est connect´ au bit 1 du bus e e donn´es (Cf. Figure 16.8). Le programme d’impression d’un caract`re, modifi´ e e e pour prendre en compte la gestion de l’erreur, est donn´ dans la figure 16.9. e En g´n´ral, les informations contenues dans le registre d’´tat d’un coupleur e e e permettent d’effectuer les tests li´s aux aspects de synchronisation de l’´change e e et de g´rer les diff´rents types d’erreurs li´s au fonctionnement du p´riph´rique e e e e e associ´. e

4.3

Interface optimis´e e

Nous ´tudions dans ce paragraphe une version optimis´e du programme de e e sortie d’un caract`re sur une imprimante. On va chercher ` r´duire le nombre e a e d’acc`s m´moire faits par le processeur pour r´aliser le transfert d’une donn´e. e e e e Il faudra ajouter un peu de mat´riel mais celui-ci n’est pas vraiment coˆteux. e u Nous repartons de la version de base ne traitant pas d’erreurs. Tout d’abord, remarquons que lors d’une sortie, l’activation de processeur prˆt va toujours de pair avec l’´criture dans le registre de donn´es. De plus, e e e hors initialisation, sa d´sactivation suit toujours le front descendant du signal e imprimante prˆte. e Le registre de commande RegC peut ˆtre remplac´ par une bascule RS mise e e a ` un par le signal d’´criture dans le registre de donn´es et remise ` z´ro par e e a e e e a le signal imprimante prˆte. Lors de l’initialisation, la bascule doit ˆtre mise ` 0. La bascule remplace le registre de commande et sa sortie se substitue au signal processeur prˆt (Cf. Figure 16.10). e D’autre part, pour pouvoir soumettre un nouveau caract`re, il faut ` la e a fois que l’imprimante soit prˆte (imprimante prˆte actif) et que le pr´c´dent e e e e

406

Circuits d’entr´es/sorties e

Processeur et d´codage e

bus donn´es e D7 D0 RegD Imprimante RegC processeur prˆt e imprimante prˆte e R´cepteur e

ECRS0

´criture donn´e e e

e ECRS1 ´criture commande RegE LECE1 lecture ´tat e Emetteur Fig. 16.6 – Exemple de coupleur d’imprimante. L’´metteur est constitu´ du processeur, e e du coupleur et des d´codeurs, le r´cepteur est l’imprimante. Cette organisae e tion n´cessite 2 ports de sortie (S0 pour les donn´es, S1 pour la commande) e e et un port d’entr´e pour l’´tat (E1). e e IMP-PRETE = 1 PROC-PRET = 1 NON-PROC-PRET = 0 .data car : .ascii ’A’ ! code du caract`re A e .text Init : moveq NON-PROC-PRET, RC !le processeur n’a rien ` ´mettre a e ImpCar : ! attendre que le p´riph´rique soit pr^t e e e att-pret :move.b RE, D1 ! D1 est un reg. donn´e libre e andi.b IMP-PRETE, D1 beq att-pret ! l’imprimante n’est pas pr^te e ! p´riph´rique pr^t : envoyer la valeur ` imprimer e e e a move.b car, RD moveq PROC-PRET, RC att-trt : move.b RE, D1 andi.b IMP-PRETE, D1 bne att-trt ! le p´riph´rique traite e e ! le caract`re a ´t´ imprim´ e e e e moveq NON-PROC-PRET, RC rts Fig. 16.7 – Programme de sortie simple

4. Programmation d’une sortie

407

Processeur et d´codage e

bus donn´es e D7 D1 RegD Imprimante processeur prˆt e

D0 e e ECRS0 ´criture donn´e RegC e ECRS1 ´criture commande RegE

imprimante prˆte e erreur papier LECE1 lecture ´tat e

Fig. 16.8 – Coupleur d’imprimante avec gestion de l’erreur : absence de papier IMP-PRETE = 1 ; PROC-PRET = 1 NON-PROC-PRET = 0 ERREUR = 2 ! bit 1 du registre RE : 21 .data car : .ascii ’A .text ImpCar : ! A la fin du traitement D1 contient 0 si tout ! s’est bien pass´ et 1 s’il y a eu une erreur e att-pret : move.b RE, D1 andi.b ERREUR, D1 bne pb-papier ! plus de papier move.b RE, D1 andi.b IMP-PRETE, D1 beq att-pret move.b car, RD moveq PROC-PRET, RC att-traite :move.b RE, D1 andi.b ERREUR, D1 bne pb-papier move.b RE, D1 andi.b IMP-PRETE, D1 bne att-traite OK : moveq 0, D1 bra fin pb-papier : moveq 1, D1 fin : moveq NON-PROC-PRET, RC rts Fig. 16.9 – Programme de sortie g´rant un type d’erreur e

408

Circuits d’entr´es/sorties e

e Processeur bus donn´es RegD et d´codage e e e ECRS0 ´criture donn´e

Imprimante

S R

Q

processeur prˆt e

RegE transfert possible LECE1 lecture ´tat e

imprimante prˆte e

Fig. 16.10 – Exemple de coupleur d’imprimante optimis´ e

caract`re ait ´t´ r´cup´r´ par l’imprimante, ce qui est d´tectable par le fait que e ee e ee e processeur prˆt soit inactif. Si cette nouvelle double condition (transfert possible e sur la figure 16.10) est test´e ` la place de la simple condition imprimante prˆte, e a e la boucle d’attente qui suit l’´mission d’un caract`re peut ˆtre supprim´e. e e e e Le processeur n’a plus alors qu’` tester transfert possible et ´crire le caa e ract`re ` transf´rer dans le registre de donn´es. Le signal processeur prˆt est e a e e e automatiquement mis ` jour par la bascule. La pr´sence de la bascule RS a e remplace les acc`s au registre de commande. e La figure 16.10 d´crit le mat´riel n´cessaire ` cette nouvelle interface et e e e a le programme d’impression d’un caract`re sur l’imprimante dans ce nouveau e contexte est d´crit dans la figure 16.11 . e
Remarque : Nous verrons, au paragraphe 6. de ce chapitre et au paragraphe 3. du chapitre 24, deux m´thodes pour ´liminer l’attente active sur e e att-pret ex´cut´e par le processeur. e e

5.
5.1

Programmation d’une entr´e e
Interface simplifi´e e

Nous consid´rons l’exemple de la lecture d’un caract`re au clavier. e e Le coupleur du clavier comporte trois informations : la donn´e (adresse e RD) et le bool´en clavier prˆt (adresse RE) accessibles en lecture, et le bool´en e e e processeur prˆt (adresse RC) accessible en ´criture. clavier prˆt signifie qu’un e e e caract`re a ´t´ frapp´ sur le clavier. processeur prˆt signifie que le processeur e ee e e

6. Optimisation des entr´es/sorties group´es e e

409

TRANSFERT-POSSIBLE = 1 .data car : .ascii ’A .text ImpCar : att-pret :move.b RE, D1 andi.b TRANSFERT-POSSIBLE, D1 beq att-pret move.b car, RD ! la bascule RS passe a 1, l’imprimante sait qu’elle ! doit prendre un caractere rts Fig. 16.11 – Programme de sortie optimis´ e

est prˆt ` traiter un caract`re. Apr`s une lecture ant´rieure cela signifie que le e a e e e caract`re pr´c´demment envoy´ a ´t´ r´cup´r´. e e e e ee e ee Les figures 16.12 et 16.13 d´crivent respectivement l’organisation mat´rielle e e et les programmes d’initialisation du coupleur et de lecture d’un caract`re. e

5.2

Interface optimis´e e

L’id´e consiste, comme dans le cas de la sortie, ` remplacer le registre de e a commande par une bascule RS (Cf. Figure 16.14) et ` supprimer la boucle a d’attente apr`s la r´cup´ration du caract`re lu. Pour cela, constatons que la e e e e lecture du caract`re envoy´ par le clavier doit faire passer le signal processeur e e prˆt ` z´ro (entr´e R de la bascule). Lorsque le signal clavier prˆt devient inactif, e a e e e la bascule est alors remise ` 1. La bascule doit ˆtre initialis´e ` 1. D’autre part, a e e a pour pouvoir lire un nouveau caract`re, il faut que le clavier en ait soumis un e (clavier prˆt actif) et que le processeur ne l’ait pas d´j` lu (processeur prˆt e ea e actif) ; cette double condition constitue le nouveau bool´en : transfert possible. e Les figures 16.14 et 16.15 d´crivent respectivement le mat´riel n´cessaire et e e e le programme optimis´ de lecture d’un carat`re au clavier. e e

6.

Optimisation des entr´es/sorties group´es e e

Nous nous int´ressons maintenant ` une situation tr`s classique consistant e a e a ` enchaˆ ıner plusieurs entr´es/sorties. e Par exemple, pour effectuer la sortie des ´l´ments d’un tableau de n caee ract`res (zone de m´moire de n octets cons´cutifs), on peut ins´rer le proe e e e gramme de sortie d’un caract`re dans une boucle de parcours du tableau. e Cette solution n’est pas tr`s efficace car pour chaque caract`re, une attente va e e avoir lieu.

410

Circuits d’entr´es/sorties e

Processeur et d´codage e LECE0

bus donn´es e lecture donn´e e

RegD Clavier RegC processeur prˆt e clavier prˆt e

e ECRS1 ´criture commande RegE LECE1 lecture ´tat e

Emetteur

R´cepteur e Fig. 16.12 – Exemple de coupleur de clavier. L’´metteur est le clavier, le r´cepteur est e e constitu´ du processeur, du coupleur et des d´codeurs. Cette organisation e e n´cessite 2 ports d’entr´es (E0 pour la donn´e, E1 pour l’´tat) et un port e e e e de sortie pour la commande (S1). CLAVIER-PRET = 1 PROC-PRET = 1 NON-PROC-PRET = 0 .data ! un octet initialis´ ` 0 pour stocker le caract`re lu e a e car : .byte 0 .text Init : ! le processeur est pr^t ` recevoir e a moveq PROC-PRET, RC LireCar : att-clavier :ove.b RE, D1 ! attendre p´riph´rique pr^t m e e e andi.b CLAVIER-PRET, D1 beq att-clavier ! le clavier n’a rien envoy´ e ! le p´riph´rique est pr^t : r´cup´rer le caract`re e e e e e e move.b RD, car moveq NON-PROC-PRET, RC att-traite :move.b RE, D1 ! attendre le traitement andi.b CLAVIER-PRET, D1 bne att-traite ! le caractere a ´t´ lu e e moveq PROC-PRET, RC rts Fig. 16.13 – Programme d’entr´e simple e

6. Optimisation des entr´es/sorties group´es e e

411

Processeur et d´codage e ECRS0

bus donn´es e lecture donn´e e

RegD Clavier R processeur prˆt e S clavier prˆt e

RegE LECE1 lecture ´tat e

transfert possible

Fig. 16.14 – Exemple de coupleur de clavier optimis´ e

TRANSFERT-POSSIBLE = 1 .data car : .byte 0 .text LireCar : att-clavier :ove.b RE, D1 m andi.b TRANSFERT-POSSIBLE, D1 beq att-clavier move.b RD, car rts Fig. 16.15 – Programme d’entr´e optimis´ e e

412

Circuits d’entr´es/sorties e

Il est possible de d´charger le processeur d’une partie de ce travail en ajoue tant un circuit qui s’en chargera. Le circuit effectuant les entr´es/sorties est e un automate cˆbl´ dont la r´alisation est peu coˆteuse : un registre contea e e u nant une adresse, un registre contenant le nombre d’´l´ments ` transf´rer, un ee a e incr´menteur, un d´cr´menteur et quelques bascules pour l’automate de come e e mande. Cette technique est appel´e acc`s direct ` la m´moire (en anglais Direct e e a e Memory Access, DMA), l’interface acc´dant directement ` la m´moire. e a e Dans la suite, nous pr´sentons les aspects d’organisation mat´rielle d’un e e syst`me comportant un processeur, de la m´moire, un circuit d’entr´es/sorties e e e et un contrˆleur d’acc`s direct ` la m´moire ; puis nous d´crivons le o e a e e d´roulement d’une sortie. Enfin nous ´voquons l’´volution des syst`mes e e e e d’entr´es/sorties. e

6.1

Acc`s direct ` la m´moire et partage de bus e a e

Cette technique permet de r´aliser par mat´riel le transfert impliqu´ par e e e une entr´e ou une sortie. De plus, elle lib`re le processeur pendant l’attente de e e la disponibilit´ du p´riph´rique. Ainsi, le processeur peut r´cup´rer, pour effece e e e e tuer des calculs, le temps qu’il utilisait pr´c´demment ` ex´cuter une attente e e a e active. La r´alisation de l’acc`s direct ` la m´moire par un contrˆleur ind´pendant e e a e o e du processeur pose un certain nombre de probl`mes que nous examinons cie dessous. La figure 16.16 d´crit l’organisation du dispositif. e Il faut g´rer l’acc`s ` la m´moire (adresses, donn´es, signaux d’acc`s e e a e e e m´moire et lecture/´criture) ` la fois par le processeur et par le contrˆleur e e a o d’acc`s direct ` la m´moire (CDMA). Le principe est de connecter alternae a e tivement les bus au processeur et au CDMA, via des amplificateurs ` sortie a trois ´tats. Le CDMA acc`de ` la m´moire en la pilotant directement ` la e e a e a place du processeur, temporairement d´connect´ du bus (Cf. Paragraphe 1.3 e e du chapitre 15 pour la r´alisation mat´rielle de cette d´connexion). La gestion e e e du bus adresses demande deux signaux de dialogue entre le processeur et le CDMA : une demande de lib´ration du bus ´mise par le CDMA (demande bus) e e et l’autorisation correspondante ´mise par le processeur (lib`re bus). e e Le processeur doit pouvoir autoriser ou non le coupleur ` ´mettre des a e requˆtes de transfert en direction du CDMA. Pour cela, on utilise un bool´en e e autorisation requˆte dma dans le registre de commande du coupleur. Ce bool´en e e est mis ` jour par le processeur lorsqu’il initie un transfert. a Le coupleur doit pouvoir signaler au CDMA qu’il faut faire un transfert lorsque le p´riph´rique est disponible. Cette information est mat´rialis´e par e e e e le signal requˆte transfert qui est un et logique entre tranfert possible (Cf. Pae ragraphe 4.3 et figure 16.10) et autorisation requˆte dma. e Le CDMA doit pouvoir acc´der directement ` la donn´e du coupleur sans e a e passer par le d´codage d’adresses standard. De fa¸on plus pr´cise, le CDMA e c e

6. Optimisation des entr´es/sorties group´es e e

413

CDMA requˆte transfert e acq transfert adresse taille i demande bus

COUPLEUR transfert possible autorisation requˆte dma e ECRS0

´criture donn´e e e RegD s´lection e coupleur s´lection e CDMA D´codeur d’adresse e Adresses s´lection e m´moire e

PROCESSEUR

lib`re bus e

Donn´es e

MEMOIRE

Fig. 16.16 – Acc`s ` la m´moire avec DMA : on observe les 5 composants : processeur, e a e contrˆleur de DMA, coupleur, m´moire et dispositif de d´codage d’adresse o e e qui s´lectionne les boˆ e ıtiers. Le CDMA comporte des registres d´crivant la e zone de m´moire ` transf´rer (adresse et taille) et un registre index (i). Via e a e deux amplificateurs 3 ´tats, le bus d’adresses est pilot´ soit par le processeur, e e soit par le CDMA. Le bus d’adresses est une entr´e pour le CDMA, le e coupleur et la m´moire : il sert ` s´lectionner le registre du CDMA ou du e a e coupleur ou le mot m´moire lors d’un acc`s initi´ par le processeur. Le bus e e e d’adresses est une sortie pour les deux maˆ ıtres : le processeur et le CDMA ; il sert alors ` s´lectionner le registre du coupleur ou le mot m´moire. a e e

414

Circuits d’entr´es/sorties e

soit pouvoir s´lectionner simultan´ment la m´moire en lecture et le coupleur e e e en ´criture. Ceci suppose l’ajout d’un signal acq transfert. La s´lection effective e e du registre de donn´es du coupleur est alors le ou logique entre acq transfert et e le signal de s´lection normal (ECRS0 sur la figure 16.10). e
Remarque : Dans le cas d’une entr´e, le CDMA acc`dera simultan´ment e e e au coupleur en lecture et ` la m´moire en ´criture. a e e

6.2

D´roulement d’une sortie avec acc`s direct e e ` la m´moire a e

Nous pouvons maintenant d´crire plus pr´cis´ment le d´roulement d’une e e e e sortie avec CDMA. Nous consid´rons l’exemple de la sortie d’un tableau tab e de n octets : 1. Le processeur ´crit l’adresse tab et la taille n du tableau ` transf´rer dans e a e les registres adresse et taille du CDMA. Ceci provoque l’initialisation du registre i (compteur d’octets transf´r´s) du CDMA. ee 2. Le processeur autorise le coupleur ` ´mettre une requˆte lorsqu’il est a e e prˆt : il ´crit dans le registre de commande du coupleur pour mettre le e e bool´en autorisation requˆte dma ` vrai. e e a 3. Le processeur vaque ` d’autres occupations. a 4. Lorsque le p´riph´rique a termin´ le travail qu’il effectuait e e e pr´c´demment, il devient prˆt et le coupleur active le signal requˆte e e e e transfert. 5. Le CDMA active le signal demande bus. 6. Le processeur termine l’´ventuel acc`s m´moire en cours et active lib`re e e e e bus pour indiquer que le bus est libre. Le processeur est alors d´connect´ e e du bus. 7. Le CDMA ´met l’adresse de l’octet courant, acc`de ` la m´moire en e e a e lecture et active simultan´ment acq transfert pour ´crire la donn´e dans e e e le coupleur. Pendant ce temps, l’ex´cution de l’instruction courante par e le processeur peut se poursuivre jusqu’` ce qu’un acc`s m´moire soit a e e n´cessaire. e 8. Le p´riph´rique re¸oit le caract`re ` traiter et d´sactive requˆte transfert. e e c e a e e Le CDMA d´sactive ` son tour demande bus et incr´mente le registre i. e a e Le processeur se connecte ` nouveau au bus en d´sactivant lib`re bus et a e e poursuit son travail jusqu’au prochain transfert de caract`re. e La politique de partage des bus m´moire peut ˆtre plus ou moins sophise e tiqu´e. Elle peut ˆtre rudimentaire et pr´-´tablie (par exemple acc`s par le e e ee e processeur durant la demi-p´riode haute d’une horloge, et par le CDMA pene dant l’autre demi-p´riode). Elle peut ˆtre confi´e ` un maˆ privil´gi´ (tel e e e a ıtre e e que le processeur), qui d´cide seul des instants auxquels il va c´der les bus. e e Les bus peuvent ˆtre partag´s entre un nombre quelconque de maˆ e e ıtres, selon des strat´gies d’allocation ´labor´es telles que des priorit´s fixes ou tournantes. e e e e L’attribution des bus est alors g´r´e par un circuit d’arbitrage, trop sophistiqu´ ee e pour ˆtre d´taill´ dans cet ouvrage. e e e

7. Exercices

415

6.3

Canaux et processeurs d’entr´es/sorties e

L’´tape suivante est celle du canal d’entr´es/sorties qui s’est surtout e e d´velopp´ dans les grands syst`mes de gestion transactionnelle connect´s ` e e e e a de nombreux disques et terminaux. Il s’agit d’une unit´ d’acc`s direct ` la m´moire capable d’enchaˆ e e a e ıner automatiquement des transferts de blocs dont les param`tres (adresse et taille e du tableau, p´riph´rique et sens du transfert) sont stock´s en m´moire par e e e e le processeur d’une part, et d’entrelacer des entr´es et sorties avec plusieurs e p´riph´riques d’autre part. La suite d’ordres d’entr´es/sorties que le canal lit e e e en m´moire et ex´cute est quelquefois appel´e programme canal. e e e Le canal peut ˆtre muni de la possibilit´ d’effectuer des it´rations et d’efe e e fectuer ou non certaines entr´es/sorties selon certaines conditions. Cette exe tension du canal aboutit ` la notion de processeur d’entr´es/sorties dot´ de a e e tout un jeu d’instructions de comparaison et de branchement en plus des instructions d’entr´e et de sortie de blocs de caract`res. Citons ` titre d’exemple e e a le processeur 8089 dans la famille 8086 d’intel. A partir de l`, l’´volution du syst`me d’entr´es/sorties peut emprunter plua e e e sieurs directions. On peut disposer de (co)processeurs d’entr´es/sorties d´di´s e e e chacun ` un type de p´riph´rique (processeur graphique, processeur de signaux a e e sonores, etc.). On peut choisir de dupliquer le processeur de calcul, l’un des deux processeurs se substituant au processeur d’entr´es/sorties. On obtient e alors un multiprocesseur ` m´moire commune. a e Actuellement, la plupart des terminaux graphiques sont des p´riph´riques e e dits intelligents qui sont dot´s d’une certaine puissance de traitement, en pare ticulier pour les traitements graphiques.

7.

Exercices

E16.1 : Circuit d’entr´es/sorties e R´cup´rer la documentation d’un circuit d’entr´es/sorties (par exemple RS232, e e e PIA). Rep´rer les registres du coupleur. Retrouver l’implantation des signaux e ´voqu´s dans ce chapitre ; en g´n´ral, ils sont repr´sent´s par certains bits des e e e e e e registres du coupleur. Etudier les types de probl`mes g´r´s par le circuit. Ecrire e ee les programmes d’entr´es/sorties. e E16.2 : Contrˆleur d’acc`s direct ` la m´moire o e a e Etudier la structure interne d’un circuit contrˆleur de DMA. o

416

Circuits d’entr´es/sorties e

Chapitre 17 Pilotes de p´riph´riques e e
En introduction de la partie V nous avons structur´ le syst`me d’exploitae e tion en 2 parties : – Une partie basse fortement d´pendante des caract´ristiques du mat´riel et e e e fournissant des fonctionnalit´s tr`s proches de celui-ci mais sous une forme e e normalis´e. Il s’agit des biblioth`ques de gestion des p´riph´riques, appel´es e e e e e pilotes de p´riph´riques. C’est l’objet de ce chapitre. e e – Une partie haute utilisant les primitives de la pr´c´dente pour offrir des e e services de plus haut niveau s´mantique, en l’occurrence le SGF (Cf. Chae pitre 19), ou le chargeur/lanceur (Cf. Chapitre 20). L’int´rˆt d’une couche interm´diaire entre la programmation de tr`s bas ee e e niveau des entr´es/sorties d´crite au chapitre 16, et les couches sup´rieures du e e e syst`me, repose essentiellement sur deux aspects. e La diversit´ des caract´ristiques physiques des p´riph´riques de mˆme nae e e e e ture, par exemple les disques, conduit ` en faire abstraction pour d´finir une a e interface normalis´e, sur laquelle s’appuient les programmes du syst`me de e e gestion de fichiers. D’autre part, dans un syst`me simple, l’utilisateur dialogue avec les applie cations via le clavier et l’´cran physique de l’ordinateur. Il est commode de e donner aux applications l’illusion qu’il en est encore de mˆme lorsque l’utie lisateur est par exemple connect´ ` distance depuis un autre ordinateur, via ea le r´seau. On peut avoir recours ` des pilotes de p´riph´riques virtuels, qui e a e e simulent l’existence d’un p´riph´rique fictif du type escompt´ par les applicae e e tions. Le pilote d’´cran virtuel se contentera de retransmettre les requˆtes ` e e a l’ordinateur distant o` elles seront trait´es par le pilote de clavier et d’´cran u e e local. Le principe est le mˆme avec les syst`mes de fenˆtrage. e e e Apr`s avoir pr´sent´ la structure d’un pilote de p´riph´rique (parae e e e e graphe 1.), nous montrons par l’exemple comment d´finir une couche e pilote de p´riph´rique. Nous ´tudions en d´tail un pilote de p´riph´rique e e e e e e de type caract`re : le clavier (paragraphe 2.) ; un pilote de p´riph´rique e e e de type bloc : le disque (paragraphe 3.). Les fonctions introduites dans le pilote de disque sont r´utilis´es au chapitre 19. Le paragraphe 4. ´voque e e e

418

Pilotes de p´riph´riques e e

la complexit´ des p´riph´riques actuels, et d´crit bri`vement un pilote e e e e e d’´cran graphique. e

1.
1.1

Structure d’un pilote de p´riph´rique e e
Interface d’un pilote

Un pilote est constitu´ de structures de donn´es et d’un ensemble de e e proc´dures ou fonctions qui sont autant de services utilisables par le syst`me e e d’exploitation ou ´ventuellement les programmes d’application. Les structures e de donn´es d´crivent les caract´ristiques du p´riph´rique et de son coupleur, e e e e e son ´tat et les variables internes du pilote. L’interface comporte en g´n´ral les e e e fonctions suivantes : – Une proc´dure de lecture et/ou d’´criture, selon la nature du p´riph´rique, e e e e d’une suite d’octets. – Des proc´dures dites d’ouverture et de fermeture, appel´es respectivement e e avant et apr`s une suite d’acc`s en lecture ou en ´criture. Par exemple, e e e on ouvre un fichier avant d’en lire ou d’en modifier le contenu ; on doit d´marrer et arrˆter le moteur du lecteur de disquette. e e – Une proc´dure d’initialisation utilis´e lors du d´marrage, suite ` la mise e e e a sous tension, ou lors de la r´initialisation du syst`me. e e – Une fonction de contrˆle permettant de consulter ou de modifier les pao ram`tres de fonctionnement du pilote et du p´riph´rique. e e e – un ensemble de routines particuli`res appel´es traitants d’interruption que e e nous ´tudions aux chapitres 22 et 24. e

1.2

Identification des p´riph´riques et de leur pilote e e

Les adresses des routines des pilotes sont regroup´es dans une table de e branchement ` deux dimensions, indic´e d’une part par le type de p´riph´rique a e e e et d’autre part par la fonction demand´e. e Il peut exister plusieurs exemplaires d’un mˆme type de p´riph´rique, e e e rep´r´s par un num´ro d’exemplaire et g´r´s par le mˆme pilote. Dans ce cas ee e ee e la structure de donn´es du pilote devient un tableau ` autant d’entr´es que e a e d’unit´s connectables ` l’ordinateur. e a Chaque p´riph´rique peut, par exemple, ˆtre identifi´ par son num´ro de e e e e e type et son num´ro d’exemplaire, appel´s num´ros de p´riph´riques respectivee e e e e ment majeur et mineur dans la terminologie du syst`me unix. Les exemplaires e de disques de mˆme type peuvent par exemple diff´rer par leur taille (2,4 ou e e 9 Go). Des p´riph´riques de mˆme nature peuvent avoir des caract´ristiques e e e e suffisamment diff´rentes pour ˆtre consid´r´s comme des types diff´rents et e e ee e g´r´s par des pilotes distincts. On pourra par exemple trouver un pilote de ee disques ` la norme de raccordement ide et un pilote de disques de type scsi. a

2. Pilote pour un clavier

419

2.

Pilote pour un clavier

Le clavier est un p´riph´rique de dialogue. Les ´changes entre le clavier et e e e l’ordinateur sont typiquement caract`res par caract`res. e e

2.1
2.1.1

Description d’un clavier et de son coupleur
Vision externe

Un clavier est un ensemble de touches munies de cabochons indiquant la fonction (caract`re) associ´e ` la touche. Chaque touche est un bouton poussoir e e a dont le contact est ferm´ lorsque la touche est appuy´e et ouvert lorsque la e e touche est relˆch´e. a e Nous supposons pour simplifer l’expos´ que le contact est exempt de rebond e a ` l’ouverture et ` la fermeture. Le lecteur est invit´ ` consulter [AL78, Zak80] a ea pour une pr´sentation plus d´taill´e des techniques d’interfa¸age des claviers. e e e c Chaque touche est rep´r´e par un num´ro indiquant sa position physique ee e dans le clavier. Chaque touche peut avoir plusieurs sens selon l’´tat de die verses touches modificatrices (majuscule, contrˆle, etc) au moment o` elle est o u enfonc´e. e Nous consid´rons ` titre d’exemple un clavier de 64 touches ordinaires plus e a une touche de majuscule. 2.1.2 Interface du clavier physique

Nous supposons que la lecture du coupleur de clavier retourne une structure form´e des champs suivants : un bool´en de pr´sence indiquant si une touche e e e est enfonc´e au moment de la lecture, un ou plusieurs bool´ens indiquant l’´tat e e e des touches modificatrices, un entier donnant la position physique de la touche enfonc´e. e Il est souvent commode de consid´rer la juxtaposition de la position de la e touche et de l’´tat des modificateurs comme un num´ro de touche global dans e e un clavier virtuel dont chaque touche ne serait associ´e qu’` un seul caract`re. e a e A chaque touche physique ordinaire correspondent autant de touches virtuelles que de combinaisons possibles d’´tat des modificateurs au moment o` la touche e u est enfonc´e. Le clavier de notre exemple poss`de 128 touches virtuelles : 64 e e touches × 2 ´tats possibles de la touche majuscule. e 2.1.3 Vision interne

En pratique, les claviers sont organis´s sous forme matricielle pour obtee nir une r´alisation plus ´conomique et plus compacte (moins de fils). Chaque e e touche ordinaire est plac´e ` l’intersection d’une ligne et d’une colonne de la e a matrice. Pour tester l’´tat d’une touche, il suffit d’envoyer un 0 sur sa ligne : e si la touche est appuy´e, le 0 apparaˆ e ıtra sur sa colonne. Le coupleur devient

420

Pilotes de p´riph´riques e e

TOUCHEPRESENTE : l’entier 0x80 { Bit 7 du coupleur } BITSTOUCHE : l’entier 0x7F { pour r´cup´rer le num´ro de la touche } e e e ADRCLAVIER : l’entier ... { adresse du coupleur clavier } ToucheAppuy´e : −→ un entier e { Retourne un entier < 0 si aucune touche n’est enfonc´e ; retourne un e entier ≥ 0 dans le cas contraire, et c’est le code ´mis par la lecture du e coupleur de clavier } c, t : des caract`res e c ←− 1 Mem [ADRCLAVIER] t affect c ET BITSTOUCHE { ET bit ` bit pour masquage } a si c ET TOUCHEPRESENTE = 0 { aucune touche appuy´e } e t ←− -1 ToucheAppuy´e : t e Fig. 17.1 – Fonction de d´tection de touche appuy´e e e

alors un petit circuit s´quentiel qui balaie les lignes ` tour de rˆle et m´morise e a o e la premi`re touche appuy´e rencontr´e. e e e Dans la suite, pour fixer les id´es, nous consid´rons que la lecture du coue e pleur de clavier retourne la position de la touche sur les bits 0 ` 5 du bus de a donn´es, l’´tat de la touche majuscule sur le bit 6 et la pr´sence d’une touche, e e e en bit 7. Nous d´finissons ainsi la fonction ToucheAppuy´e qui donne le num´ro de e e e touche appuy´e par l’utilisateur (Figure 17.1). Attendre l’enfoncement d’une e touche t s’´crira : e
r´p´ter t ←− ToucheAppuy´e() jusqu’` t ≥ 0 e e e a

De mˆme, attendre le relˆchement de la touche t s’´crira : e a e
r´p´ter tt ←− ToucheAppuy´e() jusqu’` tt = t e e e a

2.2
2.2.1

Fonctionnalit´s du pilote de clavier e
Traduction des positions en codes ASCII

Le pilote de clavier pourrait se limiter ` une simple fonction retournant le a code lu sur le coupleur. Toutefois, ` l’exception de certains jeux, les applications a ne s’int´ressent g´n´ralement pas ` la position physique de la touche, mais au e e e a caract`re qui lui est associ´. Or la disposition des caract`res sur les touches e e e d´pend de la langue ` laquelle le clavier est destin´. e a e A titre d’exemple, les types de clavier alphanum´riques sont souvent d´finis e e par les six premiers caract`res de la deuxi`me rang´e : QWERTY (version e e e anglo-saxonne), AZERTY (version francis´e), etc. e Une premi`re fonction du pilote est donc de convertir le num´ro de touche e e

2. Pilote pour un clavier

421

en code ASCII en fonction de la topologie du clavier, que l’on peut par exemple d´crire par un tableau (indic´ par le num´ro global de touche) : e e e
NumVersAscii : un entier −→ un caract`re e { t ´tant le num´ro rendu par la lecture du coupleur de clavier, accompagn´ de l’ine e e formation concernant la touche modificatrice, NumVersAscii (t) est le caract`re e associ´ ` t } ea

La correspondance n’est pas biunivoque : certaines touches retournent le mˆme caract`re quels que soient les modificateurs, comme par exemple la barre e e d’espace, la touche de retour/fin de ligne ou la touche de suppression de caract`re. e 2.2.2 Probl`mes d’´chantillonnage e e

Les applications souhaitent g´n´ralement r´cup´rer un (et un seul) exeme e e e plaire du caract`re par frappe de touche. Chaque frappe correspond pourtant e a ` deux ´v´nements physiques : l’appui d’une touche et son relˆchement. e e a La proc´dure d’acquisition d’un caract`re ne peut donc se limiter ` la seule e e a d´tection d’une touche enfonc´e. Elle doit ´galement attendre le relˆchement de e e e a la touche : le relˆchement est le seul ´v´nement permettant d’´chantillonner a e e e correctement une suite de caract`res identiques. Sans cette pr´caution, une e e touche pourrait ˆtre ´chantillonn´e plusieurs fois par frappe. e e e Le pilote peut ´ventuellement offrir une fonction de r´p´tition automatique. e e e Le principe consiste ` mesurer le d´lai durant lequel la touche reste enfonc´e. a e e Chaque accroissement de ce d´lai d’un temps ´gal ` la p´riode de r´p´tition e e a e e e est assimil´ ` un relˆchement et donne lieu ` la r´´mission du caract`re. Notre ea a a ee e pilote simplif´ ne g`re pas cette fonctionnalit´. e e e 2.2.3 Mode interactif et mode ligne

La primitive de base offerte par le pilote est la lecture au clavier d’une suite de caract`res, les param`tres pass´s par l’application ´tant le nombre n e e e e de caract`res attendus et l’adresse t du tableau de caract`res ` remplir. e e a Le pilote peut se contenter de lire les n caract`res et de les passer ` l’applie a cation sans traitement particulier. Ce mode de fonctionnement est adapt´ aux e applications interactives telles que les ´diteurs de texte, qui g`rent elles-mˆmes e e e la mise ` jour de l’´cran et r´agissent ` chaque frappe de caract`re (n ´tant a e e a e e le plus souvent ´gal ` 1). Nous dirons dans ce cas que le pilote fonctionne en e a mode interactif. Toutefois de nombreuses applications ne lisent pas des caract`res isol´s, e e mais des lignes. Une ligne est une suite de caract`res termin´e par un caract`re e e e de fin de ligne. Le mode ligne est par exemple bien adapt´ au fonctionnement e d’un interpr`te de commande textuel simple (Cf. Chapitre 20). Il est mˆme e e impos´ par certains syst`mes de gestion transactionnelle dot´s de nombreux e e e

422

Pilotes de p´riph´riques e e

terminaux distants. Dans ce contexte, il est important de minimiser le traffic sur les lignes entre les terminaux et l’ordinateur central ainsi que de d´charger e ce dernier des tˆches subalternes. La saisie et l’´dition des lignes sont alors a e g´r´es en local par le terminal qui ne s’adresse au syst`me central que lorsqu’il ee e dispose d’une ligne compl`te. Ceci revient ` int´grer une partie du pilote dans e a e le mat´riel du terminal. e L’application ne connaˆ g´n´ralement pas ` l’avance la longueur de la ligne ıt e e a qui est retourn´e par la routine de lecture du pilote. Pendant l’acquisition d’une e ligne, les caract`res saisis sont affich´s en ´cho ` l’´cran et d´pos´s dans un e e e a e e e tampon de ligne. La routine de lecture retourne un r´sultat lorsque le tampon e contient un caract`re de fin de ligne. Durant la saisie, l’utilisateur peut effectuer e diverses corrections, telles que supprimer le dernier caract`re de la ligne en e appuyant sur la touche d’effacement. Lors de l’appel de la routine de lecture du pilote, le tampon de ligne peut contenir une chaˆ de caract`res termin´e par une fin de ligne, ou ˆtre vide. ıne e e e Dans ce dernier cas, le pilote attend les caract`res saisis par l’utilisateur et les e recopie dans le tampon, jusqu’` ce que ce dernier contienne une fin de ligne. a Le param`tre n permet de limiter le nombre de caract`res transf´r´s par e e ee appel du pilote. Si n ≥ , la ligne est transf´r´e en entier et le tampon de ligne ee est vid´. Si n< , seuls les n premiers caract`res de la ligne sont consomm´s et e e e retir´s du tampon de ligne. Le reste de la ligne sera consomm´ lors d’appels e e ult´rieurs du pilote. e Il existe une taille de ligne maximale, de l’ordre de la centaine de caract`res. e Lorsque le tampon de ligne ne contient plus qu’une case libre, le pilote refuse tous les caract`res except´ la fin de ligne. L’´cho ignore les caract`res refus´s et e e e e e les remplace par le pseudo-caract`re ”sonnerie” que le pilote d’´cran traduit en e e un signal sonore ou en un bref clignotement de l’´cran pour avertir l’utilisateur e du probl`me. e Le param`tre n est g´n´ralement ´gal ` la taille maximale de la ligne, ce qui e e e e a garantit aux applications de lire une ligne compl`te ` chaque appel du pilote. e a 2.2.4 Mode avec ou sans echo

Par d´faut, la ligne en cours de saisie apparaˆ ` l’´cran, ce qui permet ` e ıt a e a l’utilisateur de d´tecter et de corriger d’´ventuelles fautes de frappe. Il existe e e cependant des cas de figures justifiant la saisie d’une ligne sans ´cho ` l’´cran e a e pour ´viter qu’une personne indiscr`te ou ind´licate ne lise la saisie par dessus e e e l’´paule de l’utilisateur. L’exemple typique de cette situation est la saisie d’un e mot de passe.

2.3

Programmation du pilote de clavier

Le fonctionnement de notre pilote est r´gi par deux variables bool´ennes : e e mode ligne ou interactif, et mode avec ou sans ´cho ` l’´cran. e a e

3. Pilote pour un disque

423

{ Donn´es du pilote } e ModeLigne : un bool´en e ModeEcho : un bool´en e MaxLigne : un entier > 0 Ligne : un tableau sur 0..MaxLigne − 1 de caract`res { le tampon } e tailleligne : un entier ≥ 0 DebLigne : un entier sur 0..MaxLigne − 1 { pointeur } { Initialisation du pilote de clavier } InitClavier : une action ModeLigne ←− vrai ModeEcho ←− vrai tailleligne ←− 0 Fig. 17.2 – Programmation du pilote de clavier - Variables et initialisation

La fonction de contrˆle du pilote permet de fixer le mode de fonctionnement o et de consulter la taille maximale de ligne. On pourrait ´galement pr´voir la possibilit´ d’acc´der au tableau de core e e e respondance entre num´ro de touche et code ASCII du caract`re associ´, pour e e e changer la signification de certaines touches ; par exemple pour r´affecter des e touches de fonctions qui n’ont pas de signification pr´d´finie ` des caract`res e e a e accentu´s manquant sur le clavier. e Les programmes sont donn´s Figures 17.2, 17.3 et 17.4. Outre les variables e globales du pilote. la fonction de lecture d’une ligne fait appel ` l’´criture d’un a e caract`re ` l’´cran lorsqu’elle doit appliquer l’´cho. e a e e

3.

Pilote pour un disque

Un disque est un p´riph´rique de stockage de type bloc, c’est-`-dire que les e e a ´changes se font par ensembles de plusieurs octets : les secteurs. e

3.1

Types de supports magn´tiques e

Les p´riph´riques de stockage magn´tique utilisent un support dont la sure e e face est enduite d’une fine pellicule de mat´riau magn´tisable, qui d´file sous e e e un ´lectroaimant : la tˆte de lecture/´criture. La trajectoire de cette tˆte par e e e e rapport ` la surface du support est appel´e piste magn´tique. a e e L’information est transf´r´e en s´rie, bit apr`s bit, pendant que la piste ee e e d´file ` vitesse constante sous la tˆte. Elle est repr´sent´e sur le support par une e a e e e succession d’inversions de polarit´ du champ magn´tique, que l’´lectroaimant e e e d´tecte (lecture) ou impose (´criture). e e Les disques durs, comme leur nom l’indique, utilisent un plateau circulaire

424

Pilotes de p´riph´riques e e

{ Quelques types et constantes } Fonction : le type (MODELIGNE, MODEECHO, TAILLEMAX) Auxiliaire : le type entier CompteRendu : le type entier FONCTION INCONNUE : le CompteRendu -1 PARAM INCORRECT : le CompteRendu -2 OK : le CompteRendu 0 ContrˆleClavier : une Fonction, un Auxiliaire −→ un CompteRendu o { ContrˆleClavier (f, a) permet de fixer des param`tres du pilote ou de les o e interroger, selon la valeur du param`tre f. Elle fournit un compte-rendu, e qui est soit un code d’erreur (valeur n´gative), soit une valeur demand´e e e lorsqu’on l’utilise pour interroger les donn´es internes du pilote. } e lexique code : un CompteRendu ContrˆleClavier (f, a) : o code ←− OK selon f : f = MODELIGNE : selon a : a = 0 : ModeLigne ←− faux a = 1 : ModeLigne ←− vrai sinon : code ←− PARAM INCORRECT f = MODEECHO : selon a : a = 0 : ModeEcho ←− faux a = 1 : ModeEcho ←− vrai sinon : code ←− PARAM INCORRECT f = TAILLEMAX : code ←− MaxLigne sinon : code ←− FONCTION INCONNUE

EcrireEcran : l’action (la donn´e : un caract`re) e e { affichage ` l’´cran, ` la position courante du curseur, du caract`re donn´ en a e a e e param`tre } e Fig. 17.3 – Programmation du pilote de clavier - Modification et consultation de l’´tat e du pilote de clavier : ´criture ` l’´cran. e a e

3. Pilote pour un disque

425

LectureClavier : une action ( la donn´e MaxCar : un entier > 0, e le r´sultat Chaˆ : un tableau sur [0..MaxCar-1] de caract`res, e ıne e le r´sultat NbCar : un entier) e { MaxCar est le nombre de caract`res ` lire, Chaˆ est le tableau ` remplir et e a ıne a NbCar est le nombre de caract`res effectivement lus } e lexique : c : un caract`re ; t, tt : des entiers ; termine : un bool´en e e algorithme si n ≤ 0 alors NbCar ←− −1 sinon si non ModeLigne { Lecture des MaxCar caract`res demand´s } e e i parcourant 0..MaxCar − 1 r´p´ter t ←− ToucheAppuy´e() jusqu’` t ≥ 0 e e e a c ←− NumVersAscii (t) { Conversion en caract`re } e si ModeEcho alors EcrireEcran (c) r´p´ter tt ←− ToucheAppuy´e() jusqu’` tt = t e e e a sinon { Mode ligne } si tailleligne = 0 { tampon non vide. on consomme la ligne ` partir du d´but. } a e NbCar ←− Min (TailleLigne, MaxCar) i parcourant 0 .. NbCar − 1 : Chaˆ ıne[i] ←− Ligne[DebLigne+i] { le reste sera consomm´ lors du prochain appel } e DebLigne ←− DebLigne + NbCar ; TailleLigne ←− TailleLigne − NbCar sinon { tailleligne = 0, tampon vide - Saisie d’une ligne } DebLigne ←− 0 ; Termin´ ←− faux e tantque non Termin´ e r´p´ter t ←− ToucheAppuy´e() jusqu’` t ≥ 0 e e e a selon t : t = EFFACEMENT { ˆter le dernier caract`re du tampon, s’il existe. } o e si tailleligne >0 tailleligne ←− tailleligne − 1 ; NbCar ←− NbCar - 1 si ModeEcho : EcrireEcran (t) t = FINENTREE si ModeEcho : EcrireEcran (t) Ligne[tailleligne] ←− NumVersAscii(t) tailleligne ←− tailleligne + 1 ; NbCar ←− NbCar + 1 Termin´ ←− vrai e sinon { garder une place pour la fin de ligne } si tailleligne ≥ MaxLigne − 1 alors EcrireEcran (SONNERIE) sinon si ModeEcho alors EcrireEcran (NumVersAscii(t)) Ligne[tailleligne] ←− NumVersAscii(t) tailleligne ←− tailleligne + 1 ; NbCar ←− NbCar + 1 r´p´ter tt ←− ToucheAppuy´e() jusqu’` tt = t e e e a Fig. 17.4 – Programmation du pilote de clavier - Fonction de lecture d’une ligne

426

Pilotes de p´riph´riques e e

rigide anim´ d’un mouvement de rotation uniforme. La tˆte mobile flotte ` e e a la surface du disque (l’altitude de vol de la tˆte est de l’ordre du micron) e et se d´place radialement pour acc´der aux diff´rentes pistes, circulaires et e e e concentriques. Les disquettes sont un support mince et souple. Pour ´viter une usure e inutile, les tˆtes ne sont plaqu´es sur la surface du m´dia magn´tique que e e e e durant les acc`s ` la disquette. Apr`s quelques secondes d’inactivit´, les tˆtes e a e e e sont ´cart´es du support et la rotation de ce dernier est stopp´e. e e e Il existe un ordre de grandeur de diff´rence entre les performances (d´bit e e et temps d’acc`s) des disquettes et celles des disques durs, l’´cart ´tant encore e e e plus important en ce qui concerne la capacit´. e

3.2

Description d’un disque dur

Un disque dur comporte des pistes circulaires et concentriques. Les pistes sont d´coup´es en arcs de cercles appel´s secteurs. e e e 3.2.1 Notion d’unit´ de transfert et secteurs e

Le secteur correspond ` l’unit´ de transfert entre le disque et la m´moire, a e e de mˆme que l’octet est g´n´ralement l’unit´ d’´change entre la m´moire et le e e e e e e processeur. Les secteurs sont g´n´ralement de 256 ou 512 octets ; il existe ´galement e e e des formats de disquettes avec des secteurs de 128 octets. Les donn´es stock´es le long d’une piste sont s´par´es par des intervalles e e e e permettant d’absorber les petites fluctuations de vitesse de rotation. L’acc`s individuel aux octets sur le disque consommerait trop de place e pour les intervalles de s´paration. Consid´rons ` titre d’illustration une tr`s e e a e faible variation de vitesse de rotation (0,1%) et de tr`s courte dur´e (1% de la e e dur´e d’un tour) du disque de 18 Go dont les caract´ristiques sont d´taill´es au e e e e paragraphe 3.2.4. Un centi`me de tour correspond ` 10 Kbits et une fluctuation e a de 0,1% repr´sente 10 bits, soit 1,25 octet. Les intervalles entre 2 octets pour e absorber une telle fluctuation repr´senteraient d´j` plus de la moiti´ de la e ea e longueur des pistes. La modification d’un octet d’un secteur directement sur le disque n’´tant e pas r´aliste, les donn´es sont lues et ´crites par secteurs complets : le secteur e e e est lu en entier, l’octet est modifi´ dans la copie du secteur en m´moire, et le e e secteur est r´´crit sur le disque. ee 3.2.2 Nombre de secteurs par piste

Nous supposons pour simplifier l’expos´ que le nombre de secteurs par e piste est constant. Ceci signifie que la fr´quence de transfert des informations e a ` la tˆte de lecture/´criture est constante et que la densit´ d’enregistrement e e e

3. Pilote pour un disque

427

maximale autoris´e par le support n’est atteinte que pour la piste int´rieure e e (la plus courte). La fr´quence de transfert pourrait ˆtre adapt´e ` la longueur des pistes pour e e e a exploiter au mieux le support, les pistes les plus externes ayant plus de secteurs. Le prix ` payer est une ´lectronique de lecture/´criture plus sophistiqu´e et une a e e e l´g`re complication des algorithmes de localisation des donn´es sur le disque, e e e le num´ro de piste ne pouvant plus ˆtre obtenu par simple division. e e 3.2.3 Plateaux, cylindres et temps d’acc`s e

Pour augmenter la capacit´ des disques de mani`re ´conomique, on utilise e e e les deux faces des plateaux. On monte ´galement un ensemble de d plateaux e sur le mˆme axe de rotation. Les 2d tˆtes sont port´es par un bras unique, elles e e e se d´placent solidairement, et se partagent ` tour de rˆle l’unique ´lectronique e a o e de lecture/´criture : on ne peut acc´der qu’` une face de plateau ` la fois. e e a a L’ensemble des pistes accessibles dans une position donn´e du bras portant e les tˆtes est appel´ cylindre. Un cylindre contient 2d pistes (une par tˆte). Le e e e temps d’acc`s piste ` piste est le d´lai n´cessaire pour d´placer les tˆtes d’un e a e e e e cylindre ` un cylindre adjacent. Le temps d’acc`s piste est le d´lai n´cessaire a e e e pour amener les tˆtes ` un cylindre donn´. On peut en d´finir la valeur maxie a e e male (trajet entre les 2 cylindres extrˆmes) et une valeur moyenne en supposant e une r´partition ´quiprobable des cylindres de d´part et d’arriv´e sur le disque. e e e e Le temps d’acc`s secteur est le temps de rotation n´cessaire pour amener e e le secteur voulu sous la tˆte. Sa borne sup´rieure est la dur´e d’une rotation e e e compl`te et la moyenne le temps d’un demi-tour. e 3.2.4 Caract´ristiques des disques durs et performances e

L’´volution technologique des disques am´liore trois caract´ristiques : e e e – la densit´ lin´aire d’enregistrement le long des pistes, d’o` une augmentae e u tion de la capacit´ de stockage (par piste), e – la densit´ radiale d’enregistrement (autrement dit l’´cart entre deux pistes), e e ce qui ` capacit´ ´gale r´duit l’encombrement du disque et le d´battement a ee e e des tˆtes et donc le temps d’acc`s aux pistes, e e – la fr´quence de fonctionnement de l’ensemble tˆte et ´lectronique de lece e e ture/´criture, ce qui permet d’augmenter le d´bit et la vitesse de rotation, e e par r´duction du temps d’acc`s secteur. e e Le diam`tre courant des disques est successivement pass´ de huit pouces ` e e a cinq pouce un quart puis ` trois pouces et demi (standard actuel, soit environ a neuf centim`tres). L’´tape suivante la plus probable est deux pouces et demi. e e Voici les principales caract´ristiques d’un disque dur de 1998 : six plateaux e de trois pouces et demi tournant ` 10000 tours/minute, 6996 cylindres (pistes a par plateau), 35566480 secteurs de 512 octets chacun, soit une capacit´ toe tale de 18 Go, une fr´quence de transfert de 152 ` 211 Mbits/s, soit environ e a 1Mbit/tr, un temps d’acc`s secteur de 2,99 ms, et un temps d’acc`s piste ` e e a piste de 0,9 ms (temps acc`s piste moyen = 6 ms, maximal = 13 ms). e

428

Pilotes de p´riph´riques e e

3.3

Structure des informations sur un disque dur

Nous supposons par convention que le cylindre de num´ro 0 correspond ` e a la piste la plus externe. Dans la gestion du mouvement des tˆtes, nous assimie lerons piste et cylindre. 3.3.1 Structure d’une piste

Une piste a un d´but. Le rayon marquant le d´but d’une piste est rep´r´ e e ee par un index. Dans le cas des disquettes, cet index est un simple trou dans le support, d´tect´ par une fourche opto´lectronique. e e e Le contenu d’une piste est une suite d’autant d’enregistrements que de secteurs. Chaque enregistrement se compose d’une en-tˆte et d’un bloc de e donn´es (le contenu du secteur). Lors d’une ´criture, seul le bloc de donn´es e e e est ´crit sur le disque, l’en-tˆte ´tant utilis´e pour rep´rer le d´but du secteur. e e e e e e L’´criture des en-tˆtes est effectu´e une fois pour toutes lors d’une op´ration e e e e d’initialisation appel´e formatage physique du disque. e Une en-tˆte contiendra vraisemblablement le num´ro de piste et le num´ro e e e de secteur dans la piste. On pourrait en principe se contenter d’une simple marque de d´but d’enregistrement. La piste peut ˆtre connue en comptant les e e d´placements de la tˆte depuis la piste 0, mais le m´canisme qui d´place la tˆte e e e e e doit ˆtre parfaitement pr´cis et fiable. De mˆme, le num´ro de secteur pourrait e e e e ˆtre d´termin´ en comptant les d´buts d’enregistrement depuis le d´but de e e e e e piste. 3.3.2 Protection contre les erreurs de lecture/´criture e

Les informations stock´es sont munies d’octets dits de CRC qui permettent e de d´tecter d’´ventuelles erreurs de recopie des donn´es. Cette technique de e e e d´tection d’erreur, qui ne permet pas de les corriger, est appel´e contrˆle de e e o redondance cyclique. Les intervalles avant et apr`s les donn´es sont remplis par des motifs bie e naires pr´d´finis tels qu’une suite de bits ` 1 (sur laquelle l’enregistrement e e a pr´c´dent peut d´border l´g`rement) suivie d’une s´quence plus courte de bits e e e e e e a ` 0 qui permet de d´tecter la fin de l’intervalle. e La valeur de CRC est calcul´e ` partir de celle des donn´es transf´r´es. Elle e a e ee est ajout´e aux donn´es lors de l’´criture et, lors d’une lecture, compar´e aux e e e e octets de CRC pr´sents sur le disque. Toute diff´rence indique bien entendu e e une erreur.

3.4
3.4.1

Fonctionnalit´s du pilote de disque e
Interface entre le disque et le contrˆleur de disque o

Les principaux signaux de commande envoy´s au disque par le contrˆleur de e o disque sont les suivants : 1) sens du transfert des donn´es : lecture ou ´criture, e e

3. Pilote pour un disque

429

si l’´lectronique de pilotage de la tˆte ne fait pas partie du contrˆleur ; 2) e e o signal donn´e ` ´crire et signal d’´chantillonnage ; 3)s´lection de la tˆte de e a e e e e lecture/´criture ` utiliser : face inf´rieure ou sup´rieure du plateau et num´ro e a e e e de plateau ; 4) d´placement de la tˆte d’une piste ; 5) sens du d´placement de e e e la tˆte ; 6) remise ` 0. e a Les principaux signaux re¸us par le contrˆleur sont : 1) signal donn´e lue c o e et signal d’´chantillonnage ; 2) signal de pr´sence en piste 0 ; 3) index/d´but e e e de piste ; 4) disque prˆt ; 5) erreur, comme par exemple, d´placement de tˆte e e e au-del` des pistes extrˆmes. a e Pour une disquette, on trouve de plus une commande de rotation du moteur et de chargement/d´chargement des tˆtes ainsi qu’un signal d’entr´e indiquant e e e une ´ventuelle protection contre l’´criture. e e L’initialisation ` la mise sous tension consiste essentiellement ` envoyer un a a signal de remise ` 0 ` l’unit´ de disque, attendre que la vitesse de rotation soit a a e stabilis´e (signal prˆt du disque), ` ramener la tˆte sur la piste 0 et ` remettre e e a e a a ` 0 la variable piste courante du pilote. Les param`tres d´crivant le disque (nombre de plateaux, taille d’un secteur, e e nombre de secteurs par piste, nombre de pistes) sont ´galement initialis´s ` e e a partir de l’EEPROM d´crivant la configuration. La taille de bloc sera initialis´e e e a ` sa valeur par d´faut (par exemple 1 secteur). e 3.4.2 Interface du pilote de disque vers les couches sup´rieures e

Vu du syst`me de gestion de fichiers (SGF), le disque pr´sent´ par le pilote e e e est une suite de blocs num´rot´s ; c’est une structure lin´aire. Un bloc n’est pas e e e n´cessairement r´duit au secteur physique. En g´n´ral, un bloc est une suite e e e e de secteurs, et le nombre de secteurs par bloc est une puissance de 2. Nous appelons adresse physique le num´ro de bloc. Le nombre de secteurs e (≥ 1) par bloc est une information du pilote. Vu de la couche sup´rieure, il est indiff´rent que l’unit´ d’acc`s (le bloc) e e e e offerte par le pilote de disque soit effectivement un secteur. Il suffit de connaˆ ıtre la taille du bloc en nombre d’octets. Les proc´dures de lecture et d’´criture du pilote permettent au SGF de e e transf´rer une suite de blocs d’adresses physiques cons´cutives entre le disque e e et un tableau ou tampon en m´moire. e 3.4.3 Correspondance entre les adresses physiques de blocs et les num´ros de secteurs et de pistes e

Les proc´dures de lecture et d’´criture de bloc offertes aux couches e e sup´rieures font appel aux proc´dures de lecture et d’´criture d’un secteur e e e fournies par le contrˆleur de disque. o La premi`re ´tape consiste ` convertir le num´ro de bloc en num´ro global S e e a e e de secteur. Il suffit pour cela de le multiplier par la taille T d’un bloc exprim´e e en nombre de secteurs.

430

Pilotes de p´riph´riques e e

Le num´ro global de secteur doit alors ˆtre d´compos´ en un num´ro de e e e e e piste (ou plus exactement de cylindre), un num´ro de tˆte et un num´ro de e e e secteur dans la piste s´lectionn´e. Le pilote contrˆle au passage que le num´ro e e o e global de secteur appartient ` l’intervalle l´gal de num´ros de secteurs corresa e e pondant ` la capacit´ du disque. a e En supposant que toutes les pistes ont le mˆme nombre de secteurs, il suffit e de diviser S par le nombre de secteurs par cylindre. Le quotient de la division donne le num´ro de piste. Le reste est ` son tour divis´ par le nombre de e a e secteurs par piste. Le quotient donne le num´ro de tˆte et le reste, le num´ro e e e local de secteur dans la piste. Cette organisation r´duit le d´placement des tˆtes et les temps d’acc`s en e e e e groupant les secteurs et les blocs de num´ros cons´cutifs sur le mˆme cylindre e e e ou sur des cylindres adjacents. Le probl`me revient alors ` effectuer une suite de copies entre le secteur de e a num´ro global S + i et le tampon d’adresse A ` l’adresse A + i*TailleSecteur e a avec 0 ≤ i ≤ T .

3.5

Programmation des fonctions du pilote

Les coupleurs ont ´volu´ avec les g´n´rations de circuits et int´gr´ une part e e e e e e croissante de la gestion des disques. Les coupleurs rudimentaires sont devenus des contrˆleurs de disques qui d´chargent le processeur de l’essentiel du travail o e (formatage physique des disques, s´rialisation des octets de donn´es, calcul de e e CRC et acc`s aux pistes et aux secteurs). Ce sont des circuits complexes dont e la documentation technique est souvent aussi volumineuse (plusieurs dizaines de pages) que celle des processeurs qui les utilisent. Il est donc hors de question de pr´senter ici un contrˆleur de disque : la e o description de la norme de raccordement scsi peut occuper ` elle seule un livre a entier. Nous nous contenterons donc de donner les grandes lignes de l’algorithme de lecture et d’´criture d’un secteur, sans pr´ciser la r´partition des rˆles entre e e e o le logiciel du pilote et le mat´riel du contrˆleur. e o 3.5.1 Communication avec le coupleur

On peut s’attendre en pratique ` ce que le pilote se contente de transmettre a au contrˆleur la nature de l’op´ration ` r´aliser : formatage, acc`s ` une piste, o e a e e a retour ` la piste 0, lecture ou ´criture d’un secteur et les param`tres correspona e e dants, d’attendre la fin de l’op´ration en testant le registre d’´tat du contrˆleur e e o et de g´rer la reprise du processus en cas d’erreur. e Dans le cas g´n´ral, le secteur appartient ` une piste diff´rente de la piste e e a e courante survol´e par la tˆte. La diff´rence entre les deux pistes est calcul´e et e e e e convertie en autant d’impulsions de d´placement du signal d´placement piste e e dans la direction correspondante. La fr´quence des impulsions est fonction du e

3. Pilote pour un disque

431

temps d’acc`s piste du disque. La variable piste courante est mise ` jour. La tˆte e a e est ensuite s´lectionn´e en lecture pour consulter les en-tˆtes d’enregistrement. e e e Le num´ro de piste ´ventuellement contenu dans la premi`re en-tˆte passant e e e e sous la tˆte apr`s le d´placement est compar´ avec la valeur de la variable piste e e e e courante. Un d´saccord indique une erreur de calibrage du compteur de piste. e Le rem`de consiste ` ramener la tˆte sur la piste 0, ` remettre ` 0 la variable e a e a a piste courante et ` recommencer le processus depuis le d´but. a e L’´tape suivante consiste ` attendre le passage des en-tˆtes qui d´filent sous e a e e la tˆte et d’en comparer le num´ro de secteur avec celui du secteur recherch´. e e e Si cette information est absente de l’en-tˆte, il suffit d’attendre le passage du e d´but de piste et de compter les en-tˆtes ` partir de celui-ci. e e a La d´tection de la bonne en-tˆte pr´c`de imm´diatement le passage du e e e e e bloc de donn´es du secteur sous la tˆte. La tˆte est commut´e en ´criture si e e e e e n´cessaire, et le transfert commence. Les donn´es sont transf´r´es bit par bit e e ee a ` la cadence impos´e par la rotation du disque. e La s´rialisation de chaque octet est effectu´e par un registre ` d´calage du e e a e contrˆleur de disque, le processeur se contentant de d´poser ou de r´cup´rer o e e e l’octet dans le registre de donn´es du contrˆleur. e o La valeur de CRC est calcul´e pendant le transfert, une erreur pouvant e ˆtre ´ventuellement d´tect´e. L’´criture d’un secteur peut ˆtre suivie d’une e e e e e e relecture de v´rification au tour de piste suivant. e En lecture, l’erreur ´ventuelle peut ˆtre due ` une petite erreur de posie e a tionnement de la tˆte ou dans le cas d’une disquette ` une poussi`re sur le e a e m´dia. L’erreur peut ˆtre transitoire et corrig´e en d´pla¸ant la tˆte puis en la e e e e c e ramenant a nouveau sur la piste pour une nouvelle tentative d’acc`s. Au-del` ` e a d’une dizaine de tentatives infructueuses, l’erreur peut ˆtre consid´r´e comme e ee fatale, et la donn´e irr´cup´rable. e e e Si un nouveau cycle ´criture-lecture donne ` nouveau une erreur, le secteur e a (voire toute la piste) est probablement d´faillant et devra ˆtre marqu´ comme e e e tel et retir´ de la liste de secteurs utilisables. e Le cadencement des acc`s aux secteurs est d´fini par la rotation du disque et e e la fr´quence de transfert des octets s’impose ` l’ensemble processeur/m´moire. e a e Si la cadence de transfert n’est pas scrupuleusement respect´e, un ou plusieurs e octets seront perdus et le transfert se terminera par une erreur. L’ex´cution d’une boucle de transfert par le processeur peut s’av´rer trop e e lente pour le d´bit du disque. Par exemple, une fr´quence de transfert approxie e mative de 160 Mbits/s repr´sente 20 Mo/s, soit 50 ns par octet ; c’est ` peu e a pr`s le temps de cycle d’une m´moire centrale. e e Pour augmenter le d´bit, on transf`re les donn´es par mots de 32 ou 64 bits e e e plutˆt qu’octet par octet moyennant les contraintes d’alignement d’adresses des o tampons, a exploiter les acc`s en mode rafale (Cf. Chapitre 9), et ` confier la ` e a boucle de transfert ` une unit´ d’acc`s direct ` la m´moire (Cf. Chapitre 16). a e e a e

432

Pilotes de p´riph´riques e e

3.5.2

Fonctions offertes par le pilote

Nous avons vu au paragraphe 3.4.2 que le disque est organis´ en blocs, e chaque bloc ´tant une suite de secteurs. Un bloc est d´fini par un num´ro et sa e e e taille. Le pilote offre aux couches sup´rieures des fonctions d’acc`s ` un bloc : e e a
TailleBloc : l’entier ... { Taille d’un bloc en nombre d’octets } NbBlocs : l’entier ... { Nombre de blocs du disque } AdPhysique : un entier sur 0 .. NbBlocs − 1 Bloc : un tableau sur [0 .. TailleBloc − 1] d’octets LireBloc : une action (NoB : une AdPhysique, Tampon : un Bloc) { lecture du bloc de num´ro NoB dans le tableau Tampon } e EcrireBloc : une action (NoB : une AdPhysique, Tampon : un Bloc) { Ecriture du tableau Tampon dans le bloc de num´ro NoB } e

D’autre part les fonctions de contrˆle du pilote pourraient ˆtre les suio e vantes : acc`s aux param`tres : taille d’un secteur, du disque, nombre de e e secteurs par bloc ; formatage physique du disque ; etc. Certaines fonctions sont sp´cifiques des unit´s ` support amovible : marche/arrˆt rotation, chargee e a e ment/d´chargement des tˆtes, d´tection de protection contre l’´criture, ´jection e e e e e du m´dia (disquette, CDROM). e

4.

Pour aller plus loin...

Les p´riph´riques ont ´volu´ en prenant directement en charge une part e e e e croissante du travail de gestion des entr´es/sorties assur´ initialement par le e e processeur. L’interface mat´rielle de raccordement et la complexit´ de la proe e grammation des entr´es/sorties varient ´norm´ment selon le degr´ de sophise e e e tication du p´riph´rique raccord´. e e e Sous le mˆme nom et pour les mˆmes fonctions, on trouve aujourd’hui e e des dispositifs m´caniques dot´s d’une interface ´lectronique rudimentaire ` e e e a laquelle le processeur donne des ordres tr`s ´l´mentaires, tels que : d´placer la e ee e tˆte de l’imprimante d’un dixi`me de millim`tre ` droite, et d’autres disposant e e e a en interne de v´ritables petits ordinateurs de gestion capable d’interpr´ter des e e requˆtes de niveau s´mantique ´lev´, telles que : tracer un cercle et peindre e e e e l’int´rieur en jaune. On parle dans ce dernier cas de p´riph´riques intelligents. e e e Au coeur de nombreux p´riph´riques on rencontre une puce ´lectronique e e e int´grant tous les ingr´dients (processeur, m´moire vive et m´moire morte) e e e e d’un petit ordinateur. L’´ventail de p´riph´riques concern´s est tr`s large, des e e e e e syst`mes de disques jusqu’aux ensembles clavier/souris. e

4. Pour aller plus loin...

433

0x00 0x3E 0x20 0x20 0x3C 0x20 0x20 0x3E 0x00 Fig. 17.5 – Repr´sentation de la lettre “E” dans un carr´ de 9 par 8 pixels e e

4.1

Pilote pour un ´cran graphique e

Un ´cran graphique est un ´cran cathodique constitu´ par une matrice de e e e points. Dans un ´cran noir et blanc, ` chaque point est associ´e une information e a e bool´enne signifiant si le point est allum´ ou ´teint. Pour un ´cran couleur, ` e e e e a chaque point est associ´ le codage de sa couleur (sur 8, 16, 24 ou 32 bits). e L’ensemble des informations d´finissant la valeur de chaque point est stock´e e e dans une m´moire appel´e m´moire d’´cran. La gestion d’une image se fait e e e e ainsi par lecture et ´criture dans la m´moire d’´cran. Nous avons parl´ au e e e e paragraphe 4.5 du chapitre 9 de la gestion optimis´e de cette m´moire. e e Pour afficher un caract`re, le processeur doit passer de son code ASCII ` sa e a repr´sentation matricielle, ` recopier dans la m´moire d’´cran. La figure 17.5 e a e e illustre la repr´sentation d’un E majuscule dans un carr´ de neuf par huit e e pixels de cˆt´. oe La forme matricielle a l’inconv´nient d’ˆtre volumineuse (neufs octets par e e caract`re dans cet exemple) mais elle permet de m´langer du texte et des dese e sins. Lorsque l’´cran n’affiche que du texte, la conversion peut ˆtre effectu´e ` e e e a la vol´e par le dispositif de rafraˆ e ıchissement. Cela r´duit la taille de la m´moire e e d’´cran qui ne contient plus alors que les codes des caract`res affich´s, la table e e e de conversion ASCII vers la forme matricielle ´tant fig´e dans une m´moire e e e morte. On parle d’´cran alphanum´rique. e e La connexion de l’´cran est illustr´e figure 17.6. La m´moire principale, la e e e m´moire ´cran et les autres interfaces d’entr´es/sorties sont reli´es par le bus e e e e m´moire. En bas de la figure se trouvent les maˆ e ıtres qui se partagent l’acc`s ` e a la m´moire d’´cran : le processeur et l’unit´ de rafraˆ e e e ıchissement.

434

Pilotes de p´riph´riques e e

Ecran cathodique

P´riph´riques e e caract`re e

M´moire d’´cran e e

Entr´es/Sorties e

M´moire principale e

Bus M´moire e

DMA de Rafraˆ ıchissement

Acc´l´rateur ee graphique

Processeur

Fig. 17.6 – connexion d’un ´cran avec ses m´moires e e

Pour un affichage plus performant, les primitives grahiques les plus courantes (dont le trac´ de segments de droites et de figures g´om´triques) peuvent e e e ˆtre cˆbl´es (Cf. Chapitre 11) et d´l´gu´es ` un circuit acc´l´rateur. Le bus peut e a e ee e a ee ´galement ˆtre scind´ en deux parties (c´sure en pointill´) par des connexions e e e e e de type trois ´tats, pour autoriser des acc`s simultan´s de l’acc´l´rateur grae e e ee phique ` la m´moire d’´cran et du processeur ` la m´moire principale ou aux a e e a e autres entr´es/sorties. e Le processeur principal qui g´n`re l’information ` afficher peut donc adrese e a ser de la mˆme mani`re la m´moire d’´cran et la m´moire principale. e e e e e A l’oppos´, l’ensemble de la figure 17.6 peut constituer un terminal grae phique intelligent. Le dialogue avec le terminal sera en r´alit´ un ´change e e e entre deux ordinateurs : le syst`me informatique central qui d´cide d’afficher e e quelque chose et l’ordinateur interne d´di´ du terminal. Ces deux ordinateurs e e se consid`reront l’un l’autre comme des p´riph´riques ordinaires de sortie et e e e d’entr´e, transf´rant des caract`res. e e e Le processeur du terminal ex´cute une boucle infinie consistant ` attendre e a un ordre d’affichage venant de l’ordinateur principal et ` effectuer ensuite a l’op´ration correspondante : dessiner un rectangle, allumer tel pixel, effae cer tout l’´cran, etc. Le processeur principal se contente alors d’envoyer les e quelques octets repr´sentant l’ordre graphique correspondant. e La syntaxe de commande des p´riph´riques de sortie graphique peut ˆtre e e e tr`s ´labor´e : la complexit´ et la puissance d’expression du langage poste e e e script, reconnu par de nombreuses imprimantes, sont celles des langages de programmation.

Chapitre 18 Vie des programmes
Dans ce chapitre, nous examinons toutes les questions relatives ` la vie a d’un programme, depuis sa cr´ation sous forme de fichier texte dans un langage e particulier, jusqu’` son ex´cution par le processeur d’une machine donn´e. a e e La notion d’ex´cution d’un programme recouvre deux techniques e diff´rentes, dont nous verrons qu’elles ne sont finalement que deux formes de e la mˆme approche : l’interpr´tation et la compilation. e e En ce qui concerne l’interpr´tation, nous n’avons vu pour l’instant que le e cas du processeur qui interpr`te le langage machine. Il s’agit d’une r´alisation e e mat´rielle — cˆbl´e — de l’algorithme d’interpr´tation du langage machine e a e e pr´sent´ au chapitre 12. Cette id´e d’´crire un algorithme pour interpr´ter e e e e e les constructions d’un langage de programmation est utilis´e par les envie ronnements d’ex´cution de tous les langages dits interpr´t´s, comme tcl, e ee perl, scheme, etc. Ces algorithmes d’interpr´tation sont alors simplement e programm´s au lieu d’ˆtre cˆbl´s. e e a e En ce qui concerne la compilation, l’ex´cution d’un programme consiste e en une interpr´tation, par le processeur, d’un programme en langage machine e obtenu d’apr`s le texte du programme par des ´tapes de traduction plus ou e e moins nombreuses et sophistiqu´es. Nous avons d´fini au chapitre 4 les struce e tures principales des langages de programmation imp´ratifs et ´tudi´, au chae e e pitre 13, la traduction de ce type de langage en langage d’assemblage. Ces techniques constituent le coeur des techniques de compilation des langages de haut niveau. La notion de vie d’un programme tient compte ´galement du fait qu’un e programme est rarement d´finitif d`s sa premi`re ´criture : les ´tapes d’´criture, e e e e e e traduction, ex´cution et correction peuvent ˆtre r´p´t´es de nombreuses fois, e e e ee et il convient de r´duire le temps n´cessaire ` un tel cycle en introduisant e e a la possibilit´ de traiter s´par´ment les diff´rents fichiers qui composent un e e e e mˆme programme. Nous avons toujours consid´r´ jusque l` qu’un programme e ee a est constitu´ d’un texte unique, trait´ de mani`re globale par les outils de e e e traduction successifs. La r´alit´ est plus complexe, et nous d´taillons ici les e e e notions de compilation s´par´e et de code translatable. Dans le paragraphe 3., e e

436

Vie des programmes

nous pr´sentons l’´dition de liens et nous d´crivons pr´cis´ment le format d’un e e e e e fichier objet translatable. Enfin nous abordons la notion de code translatable et le probl`me de sa e production syst´matique depuis un programme en langage d’assemblage. Il e s’agit de produire un programme en langage machine sans pr´juger de l’adresse e absolue ` laquelle le programme sera plac´ en m´moire vive pour ex´cution. a e e e Dans le paragraphe 1. nous d´finissons pr´cis´ment les termes ine e e terpr´tation et compilation, en donnant des exemples de langages e ex´cut´s selon l’une ou l’autre technique. Dans le paragraphe 2. nous e e rappelons les ´tapes de traduction des langages de haut niveau vers un e langage machine, et nous introduisons les notions de compilation s´par´e, e e code translatable et ´dition de liens. e

1.

Interpr´tation et compilation e

Pour ´tudier les deux principes d’ex´cution de programmes, par ine e terpr´tation ou par compilation, nous utilisons un petit langage imp´ratif tr`s e e e simple. Ce langage est toutefois plus riche que les langages machine dont nous avons vu l’interpr´tation aux chapitres 12 et 14. Il comporte en particulier des e structures it´ratives et conditionnelles. e

1.1

L : un langage imp´ratif simple e

Le langage n’offre que le type entier relatif, d’une seule taille. Il y a trois noms de variables pr´d´finis : "X", "Y" et "Z", et aucun moyen d’en d´clarer e e e de nouvelles. La port´e et la dur´e de vie de ces 3 variables sont globales (le e e langage n’a pas de structure de blocs). On dispose de trois op´rations binaires e not´es "+", "*" et "−" avec le sens usuel. On peut utiliser dans les op´rations e e des constantes enti`res positives. e Comme actions ´l´mentaires, le langage dispose de primitives ee d’entr´e/sortie ` un seul param`tre, et de l’affectation. Les composie a e tions d’actions sont la s´quence, la boucle while et la structure conditionnelle e if-then-else. Les conditions bool´ennes du while sont toujours de la forme e variable = 0. Celles du if sont de la forme variable > 0. Les boucles ne sont pas imbriqu´es, les structures conditionnelles non plus. En revanche on peut e trouver une boucle dans une structure conditionnelle ou vice-versa. La s´quence d’actions est implicite : chaque action occupe une ligne. On e a droit ` des lignes de commentaires, dont le premier mot est rem. Les a entr´es/sorties se notent : Read ... et Write ..., o` les pointill´s doivent e u e ˆtre remplac´s par le nom d’une des variables pr´d´finies. La structure while e e e e comporte un marqueur de fin : le mot-cl´ endwhile tout seul sur sa ligne. De e mˆme la structure conditionnelle comporte une ligne endif (voir l’exemple de e la figure 18.1 pour la notation des conditions. L’affectation est not´e par une e

1. Interpr´tation et compilation e

437

read X read Y Z <-- X - Y while Z rem signifie : rem tant que Z non nul if Z rem signifie Z > 0 then X <-- X - Y else Y <-- Y - X endif Z <-- X - Y endwhile write X

! X dans l0, Y dans l1, Z dans l2 call read ; nop add g0, o0, l0 call read ; nop add g0, o0, l1 while : subcc l0, l1, l2 be endwhile ; nop ble else ; nop subcc l0, l1, l0 ba endif ; nop else : subcc l1, l0, l1 endif : ba while ; nop endwhile : add g0, l0, o0 call write ; nop

Fig. 18.1 – (a) Exemple de programme L (b) Programme sparc correspondant.

instruction de la forme : ... ←− expr, o` les pointill´s doivent ˆtre remu e e plac´s par le nom d’une des variables pr´d´finies, et o` l’expression expr est e e e u form´e d’un seul op´rateur, appliqu´ ` des op´randes qui sont soit des noms e e ea e de variables, soit des notations de constantes enti`res positives en d´cimal. e e La figure 18.1 donne un exemple de texte du langage L et un programme en langage d’assemblage sparc correspondant.

1.2

Ex´cution par compilation e

Si l’on utilise la technique de compilation, on doit traduire le texte d’un programme en langage machine d’un processeur dont on dispose. Supposons que l’on compile notre langage simple vers du langage machine sparc. Le compilateur r´alise l’analyse lexicale et syntaxique du texte du programme e (d´coupage en mots et v´rification de la conformit´ des phrases ` l’ordre ime e e a pos´), puis traduit les structures de haut niveau en branchements. On obtient e un programme du type d´crit figure 18.1-(b). Ce programme est ensuite trae duit en langage machine sparc par l’outil d’assemblage. Le r´sultat est stock´ e e dans un fichier objet (Cf. Chapitre 19) qui est ensuite charg´ en m´moire vive e e pour ex´cution (Cf. Chapitre 20), et lanc´, c’est-`-dire interpr´t´ directement e e a ee par le processeur de la machine (Cf. Chapitre 14). Ecrire un compilateur, c’est-`-dire le programme qui r´alise les phases a e d’analyse et de traduction, est une tˆche tr`s bien ´tudi´e maintenant, au a e e e moins pour les langages ` structure classique comme celui que nous avons a ´tudi´ au chapitre 4. On trouvera dans [CGV80, WM94] un expos´ complet e e e des techniques de compilation.

438

Vie des programmes

1.3
1.3.1

Ex´cution par interpr´tation e e
Solution de base

Nous donnons figures 18.2 et 18.3 l’algorithme d’interpr´tation du langage e L. Pour programmer en langage L sur une machine ` processeur M, il faut a programmer l’algorithme d’interpr´tation, par exemple dans un langage de e haut niveau comme ada, puis compiler ce programme pour le langage machine du processeur M, le charger et le lancer. A l’ex´cution, ce programme e d’interpr´tation travaille sur un programme du langage L, pris dans un fichier e ou tap´ directement au clavier par le programmeur. Pendant cette ex´cution, e e le texte de programme en langage L est trait´ comme une donn´e par le proe e gramme interpr`te, alors qu’il est per¸u comme un programme par l’utilisateur e c humain qui l’a ´crit. On voit ici que la distinction entre programmes et donn´es e e n’est pas intrins`que. e Nous avons omis dans l’algorithme d’interpr´tation la phase de lecture du e fichier texte du programme. Cette phase de lecture, dans un fichier ou au clavier, est suppos´e effectu´e compl`tement avant que ne commence l’ex´cution. e e e e Elle fournit le programme sous la forme d’un tableau de lignes, chaque ligne ´tant d´coup´e en mots (il y a au plus 5 mots sur une ligne dans la syntaxe du e e e langage que nous ´tudions ; un commentaire peut ˆtre consid´r´ comme ayant e e ee 2 mots). Les textes comportant des lignes de plus de 5 mots ont ´t´ rejet´s. ee e On suppose que le programme lu tient dans le tableau de MAXLIGNE lignes. Par exemple, la lecture de la ligne X <-- X - Y du programme d’exemple donn´ ci-dessus fournit : Prog[10] = < ”X”, ”<--”, ”X”, ”-”, ”Y” > . e Une telle phase de lecture s’apparente ` la phase d’analyse lexicale et syna taxique dans un compilateur. Noter toutefois que le travail est perdu d’une ex´cution ` l’autre. L’algorithme fourni figure 18.3 est la phase d’ex´cution e a e proprement dite, par parcours du tableau de lignes. 1.3.2 Prise en compte des boucles imbriqu´es e

Dans le langage L pr´sent´ ci-dessus, nous avons suppos´ que les structures e e e it´ratives ne sont pas imbriqu´es. Cette hypoth`se justifie l’algorithme tr`s e e e e simple d’interpr´tation des structures it´ratives, pour lequel une seule adresse e e de d´but de boucle DebBoucle suffit. Si les structures it´ratives peuvent ˆtre e e e imbriqu´es ` un niveau quelconque, il faut pr´voir une pile d’adresses de ree a e tour. D’autre part la recherche du mot-cl´ "endwhile" (lorsque la condition de e boucle devient fausse) est plus compliqu´e. Il faut en effet parcourir les lignes e du texte en comptant les while et en d´comptant les endwhile. e 1.3.3 Pr´traitements divers e

La lecture du fichier et le stockage dans un tableau des lignes d´coup´es e e en mots constitue d´j` un traitement pr´alable ` l’ex´cution. Le d´coupage en ea e a e e mots des lignes qui constituent le corps d’une boucle est effectu´ une seule fois. e

1. Interpr´tation et compilation e

439

Un autre pr´traitement int´ressant consiste ` associer ` chaque instruce e a a tion "while" le num´ro de la ligne du "endwhile" correspondant. Cela ´vite e e la boucle tantque Mot1 de Prog[CP] = ”endwhile” : CP ←− CP + 1 de l’algorithme d’interpr´tation. e On pourrait bien sˆr ´liminer les commentaires d`s la phase de lecture du u e e fichier, et imaginer de nombreux autres pr´traitements, qui ´vitent de r´p´ter e e e e du travail lors des multiples ex´cutions d’une ou plusieurs instructions du proe gramme.

1.4
1.4.1

D´finitions et exemples e
Compilation

On appelle compilation un m´canisme d’ex´cution de programmes dans e e lequel les analyses lexicale, syntaxique et de typage, ainsi que la transformation du programme en un langage de plus bas niveau, sont effectu´es par e des pr´traitements, avec r´sultats interm´diaires stock´s dans des fichiers pere e e e sistants. En compilation, les fichiers produits contiennent toute l’information n´cessaire a l’ex´cution du programme d’origine. On peut ex´cuter un proe ` e e gramme si l’on a perdu le fichier source, ou mˆme si on ne l’a jamais eu. e En g´n´ral on r´serve aussi ce mot au cas o` la forme finale produite par e e e u l’outil dit de compilation est un langage machine destin´ ` ˆtre ex´cut´ par le eae e e processeur correspondant. Les langages Pascal, ada, C, C++ sont habituellement compil´s ; rien e n’empˆche toutefois de programmer pour ces langages des algorithmes d’ine terpr´tation. e 1.4.2 Interpr´tation et programmation incr´mentale e e

On appelle interpr´tation un m´canisme d’ex´cution de programmes dans e e e lequel on repart du texte source ` chaque ex´cution (et donc il ne faut sura e tout pas le perdre !) ; il y a ´ventuellement des pr´traitements effectu´s sur le e e e texte du programme avant ex´cution, et des formes interm´diaires stock´es en e e e m´moire vive pendant l’ex´cution. e e On confond souvent le fait que le langage soit interpr´t´ avec le fait que ee l’environnement de programmation autorise la programmation incr´mentale. e Dans un environnement de programmation scheme ou lisp, par exemple, on ajoute des fonctions de mani`re interactive avant de les appeler. De mˆme, les e e langages de commandes ´tudi´s au chapitre 20 sont pr´vus pour la programe e e mation incr´mentale, le langage PostScript ´galement (l’outil d’affichage e e ghostview est bas´ sur l’interpr`te ghostscript qui permet de programe e mer directement en langage PostScript et d’observer le r´sultat). e La programmation incr´mentale implique l’ex´cution par interpr´tation, e e e mais l’inverse est faux. Les langages scheme, lisp, tcl, postscript, html, ml, prolog sont

440

Vie des programmes

lexique MAXLIGNE : l’entier 100 numligne : le type entier sur 1..MAXLIGNE Texte : le type s´quence de caract`res e e { On suppose l’existence d’op´rations manipulant des textes, comme e l’´galit´ not´e =, la diff´rence not´e =, etc. De plus on note les e e e e e constantes texte avec des guillemets. } Ligne : le type < Mot1, Mot2, Mot3, Mot4, Mot5 : des Textes > Prog : un tableau sur [1..MAXLIGNE] de Lignes M1, M2, M3, M4, M5 : des Textes CP : un entier sur 1..MAXLIGNE+1 { Le compteur programme, c’est-`-dire le num´ro de la ligne de l’insa e truction en cours d’interpr´tation. } e DebBoucle : un entier sur 1..MAXLIGNE vX, vY, vZ : des entiers tmp1, tmp2 : des entiers ; cond : un bool´en e N : le num