Résumé CK MÉMOIRE PRINCIPALE Cache Instructions Unité de Contrôle CPU Unité de Traitement ALU Unité CK Flottante Fanions PC Registres IO SLC RAM IO Cache Données Contrôle Décodeur IO Opérandes BUS SYSTÈME n BASCULES Opcode Opérandes Instruction Séquenceur Adresse Résumé Fanions RAM Contrôle CK PC +1 CK Offset Opcode Condition Fanions + SLC Opérandes n BASCULES Opcode Opérandes Instruction Adresse Séquenceur CK Adresse SLC Résumé PC+ adresse initiale Mémoire Fanions PC CK RAM Opérandes SLC décodification de IR Contrôle CK MAR Séquenceur CK IR Opcode Opérandes MDR MAR PC+ MDR M[MAR] IR+ MDR OUI OUI saut? NON contrôle? NON NON adresse? OUI chargement exécution PC+PC+ offset PC+PC+1 Complication #1 Comment peut fonctionner un processeur 8 ou 16 bits quand les instructions doivent coder tellement d'informations? ou Comment réaliser des instructions qui nécessitent plus d'opérandes que ne peut coder un seul mot mémoire? ou Comment exécuter des instructions qui nécessitent plusieurs coups d'horloge? Une solution possible: la microprogrammation. Décodage - Processeurs câblés Mémoire PC Opérandes Fanions SLC RAM Contrôle CK RAM 2NxC MAR Séquenceur CK IR Opcode Opérandes MDR OPCODE = ADRESSE ...000 ...001 ...011 ...010 ...100 ...101 ...111 ...110 ...... O S W E E E N L ALC SHC RRA RRB N WRA 0 0 ØØØ ØØØ ØØØ ØØØ 0 ØØØ 0 1 101 1ØØ ØØØ 000 1 001 0 0 111 1ØØ 000 ØØØ 1 010 0 0 101 1ØØ 000 000 1 011 0 0 001 1ØØ 001 010 1 100 0 0 101 1ØØ 011 100 1 011 1 0 101 1ØØ 011 000 0 ØØØ 0 0 101 010 001 000 1 001 ......................... Décodage - Microprogrammation Mémoire Fanions Opérandes Séquenceur PC Contrôle CK OPCODE ...000 MAR Microprogrammes CK IR Opcode Opérandes MDR ...001 ...011 ...010 ...... Microinstruction 1 Microinstruction 2 ... Microinstruction N Microinstruction 1 Microinstruction 2 ... Microinstruction N Microinstruction 1 Microinstruction 1 ......................... Décodage - Microprogrammation Mémoire Fanions Opérandes Séquenceur PC Contrôle CK OPCODE ...000 MAR Microprogrammes CK IR Opcode Opérandes MDR S0 S1 S2 S0 S1 S2 Sn ...001 ...011 ...010 ...... S3 Sn ......................... ......................... ......................... Exemple - Motorola 68000 • • • • Mémoire Fanions Opérandes Séquenceur PC Contrôle CK MAR Microprogrammes CK IR Opcode Opérandes MDR Architecture 16 bits (extensions 32 bits) 12 modes d'adressage 16 fanions 8 registres de 16 (32) bits de large Exemple 1: addition (en BCD) des contenus de deux adresses stockées dans deux registres, avec pré-décrément des adresses abcd -(A1),-(A2) Exemple 2: soustraction d'un nombre immédiat (16 bits) au contenu d'une position mémoire (adresse 16 bits) subi.0 #0f0fH,2d52H Exemple 1 - Codage de l'instruction abcd -(A1),-(A2) Mémoire Fanions PC Opérandes Séquenceur #1: 1100 010100 001001 Contrôle CK 1 mot de 16 bits est suffisant pour coder cette instruction: MAR Microprogrammes CK IR Opcode Opérandes MDR Destination Source Il faut remarquer que le contenu de la destination est écrasé par le résultat. On peut supposer que le processeur contient une seule ALU. Exemple 1 - Décodage de l'instruction Mémoire Fanions Opérandes Séquenceur PC Contrôle CK MAR Microprogrammes CK IR 1100010100001001 MDR abcd -(A1),-(A2) S0 A1A1-1 S1 A2A2-1 S2 M[A1]M[A2]+M[A1] PC+PC+1 IR+M[PC+] Exemple 2 - Codage de l'instruction subi.0 #0f0fH,2d52H Mémoire Séquenceur PC Opérandes Fanions #1: 0000 010001 111000 Taille des données Mode d'adressage Contrôle CK 3 mots de 16 bits sont nécessaires pour coder cette instruction: MAR Microprogrammes CK IR Opcode Opérandes MDR Immédiat #2: 0000111100001111 #3: 0010110101010010 Adresse Exemple 2 - Décodage de l'instruction Mémoire Fanions Opérandes Séquenceur PC Contrôle CK MAR Microprogrammes CK IR 0000010001111000 MDR subi.0 #0f0fH,2d52H S0 PC+PC+1 IR+M[PC+] S1 A1IR PC+PC+1 IR+M[PC+] S2 M[IR]M[IR]-A1 PC+PC+1 IR+M[PC+] Complication #2 Existe-t-il des architectures alternatives pour l'unité de traitement permettant de réduire la complexité des instructions? La réponse est (évidemment) oui. Malheureusement, une telle réduction implique une perte de performance: si les instructions sont plus simples, il faut plus d'instructions pour une tâche donnée. On échange une complexité matérielle contre une complexité logicielle. Architecture "standard" - Structure OUTPORT INPORT OEN Z≠0 RA 3 RB 3 WEN WA 3 SEL 1 0 AL2 AL1 AL0 I0 SH2 SH1 SH0 I1 Z SHIFTER R0 R1 R2 R3 R4 R5 R6 R7 Architectures "standards" - Exemple Langage de haut niveau: P := (Q*R + S*T)*(U + V) Compilation pour une architecture "standard": MULT Q,R MULT S,T ADD T,R ADD U,V MULT R,V MOVE V,P : : : : : : R T R V V P Q*R S*T Q*R + S*T U + V (Q*R + S*T)*(U + V) (Q*R + S*T)*(U + V) I - Architectures load/store Une première possibilité a déjà été mentionnée. Il s'agit de limiter toute référence à la mémoire principale aux seules instructions de transfert de données (move, load, store). Par exemple, l'instruction: abcd -(As),-(Ad) peut être transformée en: dec As dec Ad move (As),Ax move (Ad),Ay abcd Ax,Ay move Ay,(Ad) Ce type d'architecture est appelé load/store (chargementrangement). Architectures load/store - Structure INPORT OUTPORT OEN Z≠0 SEL AL2 AL1 AL0 SH2 SH1 SH0 I0 I1 Z SHIFTER 1 0 RA 3 RB 3 WEN WA 3 R0 R1 R2 R3 R4 R5 R6 R7 Architectures load/store - Exemple Langage de haut niveau: P := (Q*R + S*T)*(U + V) Compilation pour une architecture load/store: LOAD R1, Q LOAD R2, R MULT R1,R2 LOAD R1, S LOAD R3, T MULT R1,R3 ADD R2,R3 LOAD R1, U LOAD R2, V ADD R1,R2 MULT R2,R3 STORE R3,P : R2 Q*R : R3 S*T : R3 Q*R + S*T : R2 U+V : R3 (Q*R + S*T)*(U+V) : P (Q*R + S*T)*(U+V) II - Processeurs à accumulateur Dans ce type d'architecture les résultats de toutes les opérations sont stockés dans un registre particulier (l'accumulateur) et toutes les variable sont stockées dans la mémoire principale. Par exemple, l'opération x y + z est réalisée par: load y add z store x : ACC y : ACC ACC + z : x ACC Chaque instruction doit donc contenir deux champs: l'opcode et l'adresse de l'opérande (l'accumulateur est toujours un opérande par défaut). Exemples: DEC PDP-8, Intel 8080, Motorola 6800. Processeurs à accumulateur - Structure OUTPORT INPORT OEN AL2 AL1 AL0 Z≠0 SH2 SH1 SH0 I0 I1 Z SHIFTER SEL 0 1 Accumulateur Processeurs à accumulateur - Exemple Langage de haut niveau: P := (Q*R + S*T)*(U + V) Compilation pour une architecture à accumulateur: LOAD Q MULT R STORE P LOAD S MULT T ADD P STORE P LOAD U ADD V MULT P STORE P : : : : : : : : : : : ACC Q ACC Q*R P Q*R ACC S ACC S*T ACC Q*R + S*T P Q*R + S*T ACC U ACC U+V ACC (Q*R + S*T)*(U+V) P (Q*R + S*T)*(U+V) III - Processeurs à pile (stack) Dans ce type d'architecture les opérandes se trouvent toujours au sommet d'une pile (stack), typiquement dans la mémoire, et le résultat est ensuite toujours stocké au sommet de la pile. En conséquence, une instruction typique ne contient pas d'adresse d'opérande. Un registre dédié, le stack pointer (SP), pointe toujours le sommet de la pile. Par exemple, l'opération x y + z est réalisée par: push y push z add pop x : SP+ SP+1; M[SP+] y : SP+ SP+1; M[SP+] z : SP+ SP-1; M[SP+] M[SP+] + M[SP] : SP+ SP-1; x M[SP] Exemples: Burroughs B5000, HP 300. Processeurs à pile - Structure M[SP+] Adresse PUSH +1 0 -1 0 1 + SP+ Stack Pointer SP OUTPORT M[SP] POP AL2 AL1 AL0 Z≠0 SH2 SH1 SH0 I0 I1 Z SHIFTER SEL 0 1 INPORT Processeurs à pile - Exemple Langage de haut niveau: P := (Q*R + S*T)*(U + V) Compilation pour une architecture à pile: PUSH Q PUSH R MULT PUSH S PUSH T MULT ADD PUSH U PUSH V ADD MULT POP P : : : : : : : : : : : : SP+ SP+ SP+ SP+ SP+ SP+ SP+ SP+ SP+ SP+ SP+ SP+ SP+1; SP+1; SP-1; SP+1; SP+1; SP-1; SP-1; SP+1; SP+1; SP-1; SP-1; SP-1; M[SP+] M[SP+] M[SP+] M[SP+] M[SP+] M[SP+] M[SP+] M[SP+] M[SP+] M[SP+] M[SP+] P (Q*R Q R Q*R S T S*T Q*R + S*T U V U+V (Q*R + S*T)*(U+V) + S*T)*(U+V)