Professional Documents
Culture Documents
« Architecture interne »
1. Interface du processeur :
· MEMRW est une commande sur deux bits définissant le type d’accès
à la mémoire externe : Elle peut prendre 3 valeurs : lecture d’un mot de
32 bits, écriture d’un mot de 32 bits, ou ni écriture ni lecture.
· DATAOUT est le mot de 32 bits que MIPS «simplifié» souhaite écrite en mémoire.
· DATAIN est le mot de 32 bits contenant la donnée ou l’instruction lue en mémoire.
Pour réaliser un système minimal opérationnel, il faut connecter MIPS «simplifié» avec une mémoire externe selon la figure.
L’espace adressable par le processeur MIPS R3000 a une extension maximale de 4 Go.
2. Architecture interne :
une partie opérative
La partie opérative réalise des transferts élémentaires de données entre un ou plusieurs registres sources et un registre destination.
La partie opérative est commandée par la partie contrôle, qui n’est rien d’autre qu’un séquenceur réalisé au moyen d’un
automate d’états finis (automate de MOORE).
Cet automate est chargé de définir, pour chaque cycle d’horloge, les transferts élémentaires qui doivent être réalisés par la
partie opérative.
D’une façon générale, l’interface entre la partie opérative et la partie contrôle est définie par deux nappes de fils :
✓ On appelle « micro-instruction » l’ensemble des signaux de commande envoyés par le séquenceur au chemin de données.
✓ On appelle « indicateurs » les signaux envoyés par le chemin de données au séquenceur, pour lui permettre de prendre
ses décisions.
Dans le cas de l’architecture MIPS «simplifié», la micro-instruction est structurée en 12 commandes qui définissent le
format de la micro-instruction.
Ce format ainsi que les valeurs possibles des différentes commandes constituent le « langage de micro-programmation ».
Les indicateurs comportent principalement les 32 bits contenus dans le registre IR, pour permettre au séquenceur
d’effectuer le décodage de l’instruction.
2.1 Partie opérative : chemin de données :
Le chemin de données contient quatre registres indépendants PC, AD, DT et IR, et un banc de 32 registres généraux Ri.
Les registres PC et les 32 registres Ri sont visibles du logiciel, et correspondent aux registres définis par l’architecture externe
du processeur.
Les trois registres IR, DT, et AD sont des registres temporaires correspondant à une réalisation matérielle particulière.
Un mot de 32 bits provenant de la boîte à opérations peut être écrit dans PC, AD, ou dans un registre du banc de registre RF.
MUX_X
Le chemin de données contient aussi trois
multiplexeurs:
0 4 P R A D I U
A
C F D T R L
· MUX_X permet de sélectionner une donnée sur
32 bits parmi plusieurs sources CST0, PC, RF, AD
MUX_Y
ou DT et de l’appliquer sur l’entrée X de l’ALU.
NRESET
MUX_AD
ADDRESS
· MUX_Y permet de sélectionner une donnée sur
32 bits parmi plusieurs sources CST0, CST4,
AD, et de l’appliquer sur l’entrée Y de l’ALU.
MUX_Y
• SE32 effectue le même travail mais recopie 16 fois
à gauche le bit de signe IR[15] du mot IR[15:0].
NRESET
MUX_AD
ZERO
IR
• Ces trois unités servent respectivement lors de calcul logique, de calcul arithmétique ou de calcul d’adresse, ou de
calcul d’adresse de saut conditionnel.
La partie opérative est donc capable d’effectuer deux transferts élémentaires à chaque cycle:
un transfert interne (qui utilise deux registres sources, la boîte à opérations et un registre résultat),
un transfert externe (lecture d’un mot en mémoire externe et écriture dans IR ou DT).
Les 32 bits du registre d’instruction IR sont envoyés à la partie contrôle pour lui permettre de prendre des décisions.
Par ailleurs, la partie opérative envoie vers la partie contrôle le signal ZERO qui vaut 1 quand DATAOUT est égal à 0.
Ce signal, calculé au cycle i peut être utilisé par le séquenceur pour déterminer la commande qui sera envoyée à la partie
opérative au cycle i+1.
A chaque cycle, la partie contrôle FSM envoie vers la partie opérative des signaux de commande qui constituent une micro-instruction.
MUX_X
L’ensemble des valeurs possibles pour ces 12
NSE32
champs définit le langage de
P R A D I U
microprogrammation. 0 4
F D T R SE32 A
C L
Ces valeurs peuvent être codées sur 1 ou plusieurs bits. SH2
Dans le cas d’un seul bit la valeur associée est soit MUX_Y
NRESET
Dans certains cas, et particulièrement quand une
Write_PC
MUX_AD
MUX_RF_R
ADDRESS
Write_RF
Write_AD
utilise des mnémoniques pour représenter les
ZERO
différentes valeurs possibles.
IR
MUX_RF_W
· WRITE_PC : 1 bit. Ce signal indique si à la fin du cycle courant le registre PC doit échantillonner la donnée
32 bits présente sur son entrée de données.
· MUX_RF_W : 1 bit. Ce signal indique l’adresse du registre dans le banc de registres RF dans lequel il faut éventuellement
écrire à la fin du cycle courant. Les valeurs possibles sont
W_RT : le numéro du registre est indiqué par les bits 20 à 16 de l’instruction courante stockée dans IR[20 :16],
W_RD : le numéro du registre est indiqué par les bits 15 à 11 de l’instruction courante stockée dans IR[15 :11].
· WRITE_RF : 1 bit. Ce signal indique si à la fin du cycle courant le banc de registres RF doit échantillonner la donnée 32 bits
présente sur son entrée.
· MUX_RF_R : 1 bit. Ce signal indique l’adresse du registre que l’on souhaite lire dans le banc de registres RF. Ses valeurs possibles:
R_RS : le numéro du registre à lire est indiqué par les bits 25 à 21 de l’instruction courante stockée dans IR[25 :21],
R_RT : le numéro du registre est indiqué par les bits 20 à 16 de l’instruction courante stockée dans IR[20 :16].
· WRITE_AD : 1 bit. Ce signal indique si à la fin du cycle courant le registre AD doit échantillonner la donnée 32 bits présente
sur son entrée de données.
· WRITE_DT : 1 bit. Ce signal indique si à la fin du cycle courant le registre DT doit échantillonner la donnée 32 bits
présente sur son entrée de données.
· WRITE_IR : 1 bit. Ce signal indique si à la fin du cycle courant le registre IR doit échantillonner la donnée 32 bits présente
sur son entrée de données.
MUX_X
MUX_X_PC (la valeur courante du registre PC),
NSE32
R A D I
MUX_X_RF (la valeur courante lue dans le banc 0 4 P
SE32
U
A
C F D T R
de registres), L
SH2
NRESET
MUX_X_DT (la valeur courante du registre DT).
Write_PC
MUX_AD
MUX_RF_R
ADDRESS
Write_RF
Write_AD
Write_DT
Write_IR
· MUX_Y : 3 bits. Ce signal indique la source de l’entrée
MUX_Y
MUX_X
Y de l’unité arithmétique et logique.
ZERO
IR
MUX_RF_W
MUX_Y_NSE32 (les 16 bits de l’instruction IR[15 :0] étendus sur 32 bits, non signé, SANS extension de signe),
MUX_Y_SE32 (les 16 bits de l‘instruction IR[15 :0] étendus sur 32 bits, signé, AVEC extension de signe),
SHF2 (les 16 bits de l’instruction IR[15 :0] étendus sur 32 bits AVEC extension de signe et décalés de 2 bits vers la gauche.
· MUX_ADDR : 1 bit. Ce signal indique l’adresse servant à adresser la mémoire.
Les valeurs possibles sont :
✓ MUX_ADDR_AD (le registre AD sert à adresser la mémoire, on cherche à exécuter une instruction lw ou sw),
✓ MUX_ADDR_PC (le registre PC sert à adresser la mémoire, on cherche à lire une nouvelle instruction).
· ALU_OP : 3 bits. Ce signal indique le type d’opération effectué par l’unité arithmétique et logique.
MUX_X
MEM_RW
✓ A L U _ O P _ O R ( l ’ A L U e ff e c t u e NRESET
Write_PC
MUX_AD
MUX_RF_R
ADDRESS
Write_RF
Write_AD
Write_DT
Write_IR
MUX_Y
MUX_X
ALU_OP
MUX_ADDR
ZERO
MUX_RF_W
IR
· MEMRW : 2 bits. Ce signal définit le type d’accès à la mémoire externe.
Le nom des états du graphe suggère les instructions que MIPS «simplifié» Reset
est en mesure de traiter : ADD, SUB, LW, SW, J.
PC + 4
L’état principal de l’automate est l’état PCPLUS4 qui agit
comme un aiguillage pour l’exécution d’instructions. R ! M (PC)
LW SW SUB ADD
J
Pour exécuter une instruction MIPS «simplifié», on va AD!RS + Im AD!RS + Im AD! Im AD!RT AD!RT
donc passer par une séquence d’états spécifiques à cette
instruction. DT!M(AD) M(AD)!RT PC!AD AD!RS-AD AD!RS+AD
Comme pour tout automate, le comportement du séquenceur est défini par deux fonctions :
✓ une fonction de transition (FT) permettant de déterminer l’état suivant en fonction de l’état courant et des entrées de l’automate,
✓ et une fonction de génération (FGM) définissant les valeurs des douze commandes envoyées vers la partie opérative.
Lorsque le signal d’entrée NRESET est activée (NRESET=0), l’automate passe inconditionnellement dans l’état RESET, et
simultanément le registre PC prend la valeur 0x00000000.
Dans cet état RESET, le processeur MIPS «simplifié» doit donc envoyer vers la partie opérative les commandes
permettant de charger le registre IR avec la première instruction du programme, située à l’adresse 0x00000000.
Micro-instructions pour charger une instruction: IR ← Mem (PC)
Pour obtenir ce comportement, la fonction FGM de l’état RESET doit positionner les douze commandes de l’automate comme suit :
Le graphe de l’automate montre une transition sans condition de l’état RESET vers l’état PCPLUS4 :
la condition est toujours vraie, c’est un branchement inconditionnel.
Comme cela a été dit précédemment, l’état PCPLUS4 agit comme un aiguillage.
En fonction du contenu de IR, on va effectuer tel ou tel traitement correspondant à telle ou telle instruction.
Dans cet état PCPLUS4, on décode l’instruction contenue dans lR, mais on ne connaît pas encore le résultat du décodage.
On envoie donc vers la partie opérative une commande de transfert qui est utile quel que soit le résultat du décodage, c’est à dire
l’incrémentation du PC :
PC <= PC +4.
Le décodage d’une instruction se traduit par l’examen des bits 31 à 26 de IR (le code opération).
Dans le cas d’une instruction spéciale (codop=OP_SPECIAL), il faut aussi examiner les bits 5 à 0 de IR (le code fonction, ou func
code).
Comme le jeu d’instructions du processeur MIPS «simplifié» se réduit à 5 instructions, il existe 5 transitions sortantes de l’état
PCPLUS4.
Résumons, pour l’état PCPLUS4 : FGM={
WRITE_PC=1,
MUX_RF_W=W_RT,
FT= {
WRITE_RF=0,
ADD1 si IR[31:26] = OP_SPECIAL et IR[5:0] = FUNC_ADD
MUX_RF_R=R_RS,
SUB1 si IR[31:26] = OP_SPECIAL et IR[5:0] = FUNC_SUB
WRITE_AD=0,
LW1 si IR[31:26] = OP_LW
WRITE_DT=0,
SW1 si IR[31:26] = OP_SW
WRITE_IR=0,
J1 si IR[31:26] = OP_J
MUX_X=MUX_X_PC,
}
MUX_Y=MUX_Y_CST4,
ALU_OP=ALU_OP_ADD,
MUX_ADDR=MUX_ADDR_AD,
MEMRW=NOP
}
Au prochain front montant d’horloge, la machine d’états FSM va donc aller dans un des 8 états correspondant à l’exécution d’une
des 8 instructions.
Rappelons seulement que le dernier état associé à l’exécution d’une instruction (les états au bas de la figure 4) doit nécessairement
comporter dans sa FGM les commandes
WRITE_IR=1 et MUX_ADDR=MUX_ADDR_PC et MEMRW= READ, qui permettent au processeur de lire
l’instruction suivante en mémoire et de la ranger dans le registre IR.
3. Exceptions et interruptions
• Il existe quatre types d'évènements qui peuvent interrompre l'exécution "normale" d'un programme:
- Les exceptions - Les interruptions - Les appels système (instructions SYSCALL et BREAK) - Le signal RESET
• Dans tous ces cas, le principe général consiste à passer la main à une procédure logicielle spécialisée qui s'exécute en
mode superviseur, à qui il faut transmettre les informations minimales lui permettant de traiter le problème.
3.1 Exceptions
✓ Les exceptions sont des évènements "anormaux", le plus souvent liés à une erreur de programmation, qui empêchent
l'exécution correcte de l'instruction en cours.
Ainsi, on assure que l'instruction fautive ne modifie pas la valeur d'un registre visible ou de la mémoire.
• ADEL Adresse illégale en lecture : adresse non alignée ou se trouvant dans le segment système alors que le processeur
est en mode utilisateur.
• ADES Adresse illégale en écriture : adresse non alignée ou accès à une donnée dans le segment système alors que
le processeur est en mode utilisateur.
• DBE Data bus erreur : le système mémoire signale une erreur en activant le signal BERR à la suite d'un accès de
donnée.
• IBE Instruction bus erreur : le système mémoire signale une erreur en activant le signal BERR à l'occasion d'une lecture
instruction.
• OVF Dépassement de capacité : lors de l'exécution d'une instruction arithmétique (ADD ou SUB), le résultat ne
peut être représenté sur 32 bits.
• RI Codop illégal : Le codop ne correspond à aucune instruction connue (il s'agit probablement d'un branchement dans une
zone mémoire ne contenant pas du code exécutable.
• CPU Coprocesseur inaccessible : tentative d'exécution d'une instruction privilégiée (MTC0, MFC0, RFE) alors que le
processeur est en mode utilisateur.
✓ Le processeur doit alors passer en mode superviseur, et se brancher au gestionnaire d'exceptions qui est une routine
logicielle implantée conventionnellement à l'adresse "0x80000080".
✓ Toutes les exceptions étant fatales dans la version du processeur R3000, il n'est pas nécessaire de sauvegarder une
adresse de retour car il n'y a pas de reprise de l'exécution du programme contenant l'instruction fautive.
✓ Le processeur doit cependant transmettre au gestionnaire d'exceptions l'adresse de l'instruction fautive et indiquer dans
le registre de cause le type d'exception détectée.
- sauvegarde l'adresse de l'instruction fautive dans le registre EPC - sauvegarde l'ancienne valeur du registre d'état SR
✓ Les requêtes d'interruption matérielles sont des évènements asynchrones provenant généralement de périphériques externes.
✓ Le processeur possède 6 lignes d'interruptions externes qui peuvent être masquées globalement ou individuellement.
L'activation d'une de ces lignes est une requête d'interruption.
✓ Elles sont inconditionnellement écrites dans le registre CR, et elles sont prises en compte à la fin de l'exécution de
l'instruction en cours si elles ne sont pas masquées.
✓ Cette requête doit être maintenue active par le périphérique tant qu'elle n'a pas été prise en compte par le processeur.
✓ Le processeur passe alors en mode superviseur et se branche ici encore au gestionnaire d'exceptions.
✓ Comme il faut reprendre l'exécution du programme en cours à la fin du traitement de l'interruption, il faut sauvegarder une ad
retour.
- sauvegarde l'adresse de retour (PC + 4) dans le registre EPC - sauvegarde l'ancienne valeur du registre d'état SR
En plus des 6 lignes d'interruption matérielles, le processeur R3000 possède un mécanisme d'interruption logicielle:
Il existe 2 bits dans le registre de cause CR qui peuvent être écrits par le logiciel au moyen de l'instruction privilégiée MTC0.
La mise à 1 de ces bits déclenche le même traitement que les requêtes d'interruptions externes, s'ils ne sont pas masqués.
3.3 Appels système: instructions SYSCALL et BREAK :
L'instruction SYSCALL permet à une tâche (utilisateur ou système) de demander un service au système d'exploitation,
comme par exemple effectuer une entrée/sortie.
Le code définissant le type de service demandé au système, et un éventuel paramètre doivent avoir été préalablement
rangés dans des registres généraux.
L'instruction BREAK est utilisée plus spécifiquement pour poser un point d'arrêt (dans un but de déverminage du
logiciel): on remplace brutalement une instruction du programme à déverminer par l'instruction BREAK.
Dans les deux cas, le processeur passe en mode superviseur et se branche au gestionnaire d'exceptions. Ces deux
instructions sont exécutables en mode utilisateur. Elles effectuent les opérations suivantes :
- sauvegarde de l'adresse de retour (PC + 4) dans le registre EPC - sauvegarde de l'ancienne valeur du registre d'état SR
Le registre d'état contient l'état courant du processeur, défini par le bit de mode KUC et par le bit de masque global des
interruptions IEC.
La valeur 00 pour les bits KUC et IEC correspond à l'état superviseur et interruptions masquées.
Le registre SR contient aussi l'état précédent (bits KUP et IEP) et l'état antérieur (bits KUO et IEO).
Il constitue donc une petite pile matérielle capable d'empiler 3 états successifs du processeur.
Le registre SR contient par ailleurs 6 bits MIRQ(5:0) permettant de masquer individuellement les 6 interruptions externes
et 2 bits MSWI(1:0) permettant de masquer les deux interruptions logicielles.
Les 16 bits de poids fort et les deux bits 6 et 7 du registre SR ne sont pas utilisés: On récupère la valeur 0 en lecture et ils
ne sont pas modifiés par les écritures. La figure suivante montre le format du registre d'état SR:
Lors d'un appel au gestionnaire d'exception, la sauvegarde de l'ancien état et le passage dans l'état "superviseur avec
interruptions masquées" peuvent s'effectuer en une seule opération par décalage de deux bits vers la gauche des six bits de poids
faible du registre SR (les 8 bits MIRQ et MSWI ne sont pas modifiés) :
5 4 3 2 1 0
KUO IEO KUP IEP KUC IEC
La restitution de l'ancien état, réalisée par l'instruction RFE, est obtenue par un simple décalage de deux bits vers la droite des
six bits de poids faible du registre SR (les 8 bits MIRQ et MSWI ne sont pas modifiés) :
5 4 3 2 1 0
KUO IEO KUP IEP 0 0
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
IRQ SWI 0 0 XCODE 0 0
Les codes d'exceptions sont les suivants :
RISC CISC
Gravées sur le silicium Seules les instrs. simples sont gravées sur le
Pas de microcodes Implémentation silicium
Les tâches complexes sont Instructions Les autres instrs. Prgrmées. Sous forme de
décodées par le compilateur microcodes
Traitement pipeline Pipeline Peut exister
Typiquement 1 instr./cyc.horl. Vitesse Exécution Typiquement 1 instr./3 à 10 Cy.Horloge
Puce + petite
Freq. D'horloge + élevée Avantages Développement + simple des systèmes
Vitesse d'exéc. + grande
Nécessité des compilateurs +
complexes et + performants Technologie gourmande en silicium
Inconvénients
Pgm d'application + long Puce + compliquée à développer
occupant + de mémoire