1. Définitions et description
La microprogrammation
Dans la suite, les expressions telles que «T0: PC_out, MAR_in» signifient que :
![]() |
de groupes de signaux de commande. |
![]() |
ACC accumulateur;
CO compteur
ordinal;
RAM registre d'adresse
de mémoire;
RDM registre de
donnée de mémoire;
RI registre
d'instruction;
Temp registre temporaire;
UAL unité
arithmétique et logique.
Exemple : le premier groupe de signaux de commande d'une macroinstruction réalisera la lecture de l'instruction par l'ouverture du compteur ordinal vers le registre d'adresse de mémoire, via un bus interne. Dans ce groupe ou plus tard, le compteur ordinal sera incrémenté et l'interface de mémoire enverra un signal de lecture. Dans les étapes suivantes, seront faites les micro opérations nécessaires pour lire les opérandes, exécuter la fonction spécifiée dans le code d'opération et ranger les résultats. Une instruction ou macroinstruction simple peut nécessiter 5 à 10 étapes et mettre en jeu plusieurs douzaines de signaux de commande.
Liste des étapes
étapes T0-T3 pour toute instruction:L'expression logique d'un signal de commande isolé peut être écrite en somme de produits comme dans les exemples ci-dessous où figurent dans chaque produit l'opération élémentaire ET le numéro d'étape de l'horloge, sauf si la référence de temps est seule nécessaire. La somme est interprétée comme : faire successivement...
T0: PC_out, MAR_in
T1: lecture, pcincr
T2: MDR_out, IR_in
T3: décodage du code d'opération dans IRétapes T4-T6 pour une instruction de lecture (code d'opération 00):
T4: IR_out(addr part), MAR_in
T5: lecture
T6: MDR_out, ACC_in, retour à T0étapes T4-T7 pour une instruction d'addition (code d'opération 01):
T4: IR_out(addr part), MAR_in
T5: lecture
T6: ACC_out, aluadd
T7: TEMP_out, ACC_in, retour à T0étapes T4-T6 pour une instruction d'écriture (code d'opération 10):
T4: IR_out(addr part), MAR_in
T5: ACC_out, MDR_in
T6: écriture, retour à T0étapes T4-T5 pour une instruction brz (brancher si zéro) (code d'opération 11):
T4: if (acceq0) then { IR_out(addr part), PC_in }
T5: retour à T0
Définitions des signaux de commande en termes de sommes de produits :
ACC_in = (load & T6) + (add & T7)
ACC_out = (store & T5) + (add & T6)
aluadd = add & T6
IR_in = T2
IR_out(addr part) = (load & T4) + (add & T4) + (store & T4) + (brz & acceq0 & T4)
MAR_in = T0 + (load & T4) + (add & T4) + (store & T4)
MDR_in = store & T5
MDR_out = T2 + (load & T6)
PC_in = brz & acceq0 & T4
PC_out = T0
pcincr = T1
read = T1 + (load & T5) + (add & T5)
TEMP_out = add & T7
write = store & T6
L'unité de commande peut être entièrement câblée (hardwired). Cette réalisation directe était faite au moyen de portes logiques isolées. Ce type de circuits peut être complexe, et cela explique les innombrables travaux consacrés à la «simplification» des expressions booléennes.
Dans une réalisation
microprogrammée, les signaux de commande sont stockés sous
la forme de mots de commande nommés microinstructions. Ils
doivent être émis aux instants adéquats à partir
de la mémoire dans laquelle ils sont. La collection de mots de commande
qui réalise une macroinstruction est nommée microprogramme;
tous les microprogrammes sont stockés dans la mémoire
de commande ou mémoire de microprogrammes.
Figure 4. Mémoire
de commande d'une machine à quatre instructions,
les bits à zéro
ne sont pas figurés.
Ainsi, avec une unité de commande microprogrammée, la séquence de microopérations nécessaire pour exécuter une macroinstruction se réduit à une suite de lectures de microinstructions au lieu d'opérations faites dans un circuit de logique combinatoire et séquentielle. Il faut y ajouter le circuit de séquencement. Le résultat est une conception plus aisée de la commande.
Observant que les microprogrammes sont placées entre le matériel (hardware) et le programme à exécuter (software), les anglo-saxons les ont nommés «firmware». Ce mot avait été employé pour la première fois pas Ascher Opler [1] pour une mémoire de microinstructions chargeable à volonté pour spécialiser la machine. Dans la suite il a été employé autant pour des microinstructions en mémoire morte qu'en mémoire vive. Plus récemment l'usage de ce mot a été étendu à d'autres parties de logiciels en mémoire morte comme le chargeur initial et les programmes d'entrée-sortie résidants.
On pourra consulter les chapitres 4 and 5 de Hamacher, Vranesic, et Zaky [2] et le chapitre 5 de Patterson et Hennessy [3] pour la conception des chemins de données, les signaux de commande, etc. Les textes de Agrawala et Rauscher [4], Andrews [5], Habib [6] et Husson [7] traitent plus spécialement de la seule microprogrammation. L'ancien «Annual Workshop on Microprogramming» de l'ACM et des IEEE a été renommé «International Symposium on Microarchitecture», il traite aujourd'hui d'autres sujets comme les pipelines, la prédiction de branchement, etc. http://portal.acm.org/browse_dl.cfm?linked=1&part=series&idx=SERIES366&coll=portal&dl=ACM&CFID=1463605&CFTOKEN=17119880
Il y décrivait la réalisation d'une mémoire de commande sous la forme d'une matrice de diodes. Les microinstructions avaient un format simple : les signaux de commande non codés étaient enregistrés avec un champ d'adresse suivante. Le choix initial du microprogramme approprié était fait en utilisant la valeur du code d'opération plus des zéros de remplissage, le séquencement utilisait le champ d'adresse suivante. Les sauts conditionnels étaient faits au moyen de conditions qui modifiaient des bits du champ d'adresse suivante.
Dans une publication de 1953 [9] faite avec Stringer, la technique de la microprogrammation était approfondie. Elle traitait de la complexité, du test et de la vérification de la logique de commande, de jeux de microinstructions différents, de l'exploitation du parallélisme dans les chemins de données, des changements d'environnement, des microsousprogrammes et de l'accès par pipeline à la mémoire de commande. La première machine microprogrammée fut l'EDSAC 2 en 1957.
À cause de la
difficulté de fabrication des mémoires de commande rapides
dans les années 1950, la microprogrammation est restée en
sommeil. John Fairclough a fait des travaux à la fin des années
1950 au laboratoire d'IBM à Hursley, en Grande-Bretagne, sur les
mémoires magnétiques comme matrices de mémoire de
commande pour des petits ordinateurs. Cette expérience a été
utilisée à plein dans la construction de la gamme de machines
compatibles 360 [10]. Tous les modèles de cette gamme étaient
microprogrammés sauf les deux machines de haut de gamme 75 and 91.
Caractéristique | 360-30 | 360-40 | 360-50 | 360-65 |
---|---|---|---|---|
prix de location en milliers de dollars par mo | 4 | 7 | 15 | 35 |
Index Knight - scientifique (Kops) | 7.94 | 33.4 | 187 | 1390 |
Index Knight - commercial (Kops) | 17.1 | 50.1 | 149 | 810 |
largeur du chemin de données interne en bits | 8 | 16 | 32 | 64 |
taille de la mémoire de commande en K microinstructions | 4 | 4 | 2.75 | 2.75 |
longueur de la microinstruction en bits | 50 | 52 | 85 | 87 |
technique de la mémoire de commande | CCROS | TROS | BCROS | BCROS |
temps de cycle de la mémoire de commande en ns | 750 | 625 | 500 | 200 |
temps de cycle de la mémoire centrale en ns | 1500 | 2500 | 2000 | 750 |
Table 1. Comparaison des modèles 360-30 à 65 (vers 1965) [10,12,13].
Dans les premiers temps, trois types de mémoires [10] de commande ont été utilisés dans les modèles de la série 360 :
Les concurrents comme Honeywell avaient des produits pour exécuter des programmes tournant sur les machines précédentes d'IBM, par exemple le programme «Liberator» transformait les programmes des IBM 1401 en programmes du H-200. IBM a contré cette fuite de clientèle avec une deuxième mémoire de microinstructions qui, par basculement manuel, faisait exécuter les instructions du 1401 sur le modèle 30 [16]. La même chose a été faite pour la série 7000 [17]. C'est à cette occasion que le mot émulation est apparu. Ces émulateurs ont fait que très longtemps d'innombrables programmes n'ont pas été récrits ni même recompilés.
Dans les vingt ans qui
suivirent les machines microprogrammées devinrent la règle
: les IBM 370, tous les PDP de DEC sauf le PDP 11-20, etc. Le sommet de
la popularité de la microprogrammation a été atteint
par le DEC VAX 11/780 de 1978 avec 4K mots de 96 bits de mémoire
morte de commande et 1K mots de zone réinsriptible pour les modifications
et les diagnostics.
Plusieurs des premiers
microprocesseurs étaient à logique câblée mais
cela a duré peu de temps. Dans les années 1974-1976, le MC6800
était câblé, les Intel
8080 et Zilog Z80 [18] étaient microprogrammés. En 1978,
le Z8000 [19] était câblé et l'Intel
8086 [20] microprogrammé avec une mémoire à 504
entrées, chacune contenant une microinstruction de 21 bits. La
microprogrammation du 68000 a été décrite en 1978
[18,21,22].
Elle était à deux niveaux. Chaque microinstruction de 17
bits contenait, soit une adresse de saut sur 10 bits, soit l'adresse d'une
«nanoinstruction» sur 9 bits. Les nanoinstructions étaient
stockées dans des mots de 68 bits.
Nick Tredennick [23] a identifié quatre utilisations principales de la microprogrammation qu'il nommait «cultures» en 1982.
La mémoire de commande du B1700 contenait les microprogrammes pour SDL, langage d'écriture du système d'exploitation, pour Fortran et pour Cobol et RPG, langages d'écriture de ses programmes d'application. Les basculements entre jeux de microprogrammes étaient faits par interruptions. Baron et Higbie [30] pensent que le peu de succès commercial de cette machine est dû à sa documentation mauvaise ou insuffisante.
Les jeux de microinstructions
ont grandi considérablement à la fin des années 1970
avec le superminiordinateur VAX-11/780 ou le MC68020, et l'expression CISC
est apparue. L'expression à la mode était : «combler
l'écart sémantique» entre le matériel et les
langages. On le faisait par des instructions complexes qui devaient simplifier
la compilation. Voir pour cela le chapitre
1 de [29].
Pour le VAX, l'objectif
premier était la facilité de
la compilation [27]. En contrepartie il y eut une grande complexité
qui contraria
les performances [31].
Dans le MC68020 (vers
1984), par rapport au MC68000, ont été ajoutés la
mémoire virtuelle, l'accès aux données non alignées,
des pointeurs de piles pour six formats de piles supplémentaires,
deux douzaines d'instructions nouvelles, deux nouveaux modes d'adressage
(14 au total), et 18 nouveaux formats de déplacements (25 en tout)
pour les modes d'adressage. Le microcode est passé de 36 ko à
85 ko [22]. Le résultat était
que quelques lectures d'instructions en mémoire lançaient
des traitements complexes entre registres.
Une réaction est venue dans les années 1980. Elle a eu deux causes :
Ce basculement des années 1980 a fait que la plupart des instructions du MC68000 ont été câblées [32]. Même les derniers processeurs des IBM 390 sont câblés [33]. La définition du matériel ne passe plus par la microprogrammation mais par les ASIC et les FPGA (field programmable gate array).
Le microcode est encore utilisé dans les Pentium II et AMD K6. Toutefois, les plus simples des instructions sont traduites en une à quatre microinstructions (nommées respectivement mops pour microopérations et rops pour risc opérations) produites par le décodeur sans accès à une mémoire de commande. Seules les instructions les plus complexes ont besoin d'un flot de microinstructions venant d'une ROM sur la puce. Voir pour cela Shriver et Smith [34].
La microinstruction verticale est courte et ressemble à une macroinstruction; elle contient parfois un champ d'opération et un ou deux opérandes (ex. Microdata 1600, 16 bits dans les Multi-6). Chaque microinstruction concerne un seul chemin de données. Les branchements dans un microprogramme sont faits par des microinstructions spécialisées qui ont un code d'opération de branchement. Ce style de microprogrammation ressemble fortement à la programmation en langage d'assemblage. Le nombre de microinstructions nécessaires pour une tâche est grand.
La microinstruction horizontale peut être entièrement explicite, chaque bit peut correspondre à un seul signal de commande, selon la proposition initiale de M. Wilkes. Cette microprogrammation est très complexe dès lors que des groupes de bits sont mutuellement exclusifs; la microinstruction à 85 bits du 360-50 avait 25 champs distincts. Ces champs spécifiaient des opérations simultanées pour exploiter le parallélisme installé dans le chemin de données. Les branchements étaient compliqués; chaque microinstruction contenait la plupart du temps un branchement et son adresse. Cette complexité est source d'erreurs.
Une combinaison des deux styles est la nanoprogrammation à deux niveaux comme dans le Nanodata QM-1 et le Motorola 68000. Le QM-1 avait 16 kmots de microinstuctions verticales de 18 bits et 1 kmot de nanoinstructions horizontales de 360 bits. Les microinstructions étaient pour l'essentiel des appels aux nanoinstructions. Une nanoinstruction avait cinq champs principaux de 72 bits. Le premier pour une adresse de branchement de 10 bits et les champs de condition et de commandes. Les quatre autres champs (T1-T4) contenaient des microopérations sous la forme de 41 autres champs.
[2] V.C. Hamacher, Z.G. Vranesic et S.G. Zaky, Computer organization, 3e édition, New York: McGraw-Hill, 1990.
[3] D.A. Patterson et J.L. Hennessy, Computer organization and design: the hardware/software interface, San Mateo, CA, Morgan Kaufmann, 1998 (2e édition).
[4] A.K. Agrawala et T.G. Rauscher, Foundations of microprogramming, New York: Academic Press, 1976.
[5] M. Andrews, Principles of firmware engineering in microprogram control, Potomac, MD, Computer Science Press, 1980.
[6] S. Habib (éditeur), Microprogramming and firmware engineering methods, New York, van Nostrand, 1988.
[7] S.H. Husson, Microprogramming: principles and practice, Englewood Cliffs, NJ, Prentice Hall, 1970.
[8] M.V.
Wilkes, The best way to design an automated calculating machine,
université de Manchester, Computer inaugural conference, 1951, pp.
16-18.
- Repris dans: M.V.
Wilkes, The genesis of microprogramming, Annals hist computing
vol 8 n°3, pp. 116-126, 1986.
[9] M.V.
Wilkes et J.B. Stringer, Microprogramming and the design of the
control circuits in an electronic digital computer, Proc Cambridge
Phil Soc 49, pp. 230-238, 1953.
- Repris comme chapitre
11 dans: D.P. Siewiorek, C.G. Bell et A. Newell, Computer structures:
principles and examples, New York: McGraw-Hill, 1982.
- Repris aussi dans:
M.V.
Wilkes, The genesis of microprogramming, Annals Hist Computing
vol 8 n°3, pp. 116-126, 1986.
[10] E.W. Pugh, LR Johnson et JH Palmer, IBM's 360 and early 370 systems, Cambridge, MA, MIT Press, 1991.
[11] S.G. Tucker, Microprogram control for system/360, IBM System Journal vol 6 n°4, pp. 222-241, 1967.
[12] A. Padegs, System/360 and beyond, IBM Journal Res Dev vol 25 n°5, pp. 377-390, 1981.
[13] M. Phister Jr, Data processing technology and economics, 2nd ed. Bedford, MA: Digital Press, 1979.
[14] A.M. Johnson, The Microdiagnostics for the IBM system 360 model 30, IEEE Trans Comp C-20 n° 7, pp. 798-803, 1971.
[15] S.G. Tucker, Personal communication. February 1999.
[16] M.A. McCormack, TT Schansman et KK Womack, 1401 Compatibility Feature on the IBM System/360 Model 30. Communications ACM col 8 n°12, pp. 773-776, 1965.
[17] S.G. Tucker, Emulation of large systems, CACM vol 8 n°12, pp. 753-761, 1965.
[18] F. Anceau, The architecture of microprocessors, Workingham, England: Addison-Wesley, 1986.
[19] M. Shima, Demystifying microprocessor design, IEEE Spectrum vol 16 n°7, pp. 2-30, 1979.
[20] J. McKevitt et J. Bayliss, New options from big chips, IEEE Spectrum vol 16 n°3, pp. 28-34, 1979.
[21] S. Stritter et N. Tredennick, Microprogrammed implementation of a single chip microprocessor, Proc 11th Annual Microprogramming workshop, 1978, pp. 8-16.
[22] N. Tredennick, Experiences in commercial VLSI microprocessor design, Microprocessor Microsystems 12 n° 8, pp. 419-432, 1988.
[23] N. Tredennick, The cultures of microprogramming, Proc 15th Ann Microprogramming Workshop, 1982, pp. 79-83.
[24] T. Atkinson, Architecture of series 60/level 64, Honeywell Computer Journal vol 8 n°2, pp. 94-106, 1974.
[25] J. Mick et J. Brick, Bit-slice microprocessor design, New York, McGraw-Hill, 1980.
[26] J.R. Larus, A comparison of microcode, assembly code, and high-level languages on the VAX-11 and RISC I, Computer Architecture News vol 10 n°5, pp. 10-15, 1982.
[27] C.G. Bell, J.C. Mudge et J.E. McNamara, Computer engineering: a DEC view of hardware systems design, Bedford, MA, Digital Press, 1978.
[28] A.B. Salisbury, Microprogrammable computer architectures, New York, Elsevier, 1976.
[29] G.J. Myers, Advances in computer architecture, 2e édition, New York, Wiley, 1978.
[30] R.J. Baron et L. Higbie, Computer architecture: case studies, Reading, MA, Addison-Wesley, 1992.
[31] D. Bhandarkar et D.W. Clark, Performance from architecture: comparing a RISC and a CISC with similar hardware oprganization, Proc 4th Intl Conference on Architectural Support for Programming Langage and Operating Systems [ASPLOS], 1991, pp. 310-319.
[32] Motorola ColdFire, en ligne à http://www.motorola.com/ColdFire
[33] C.F. Webb et J.S. Liptay, A high-frequency custom CMOS S/390 microprocessor, IBM Journal Res Dev vol 41 n°4/5, pp.463-473, 1997.
[34]
B.
Shriver et B. Smith, The anatomy of a high-performance microprocessor:
a systems perspective, Los Alamitos, CA, IEEE Computer Society Press,
1998.