You are on page 1of 20

Chapitre3: Le processeur MIPS R3000

« Architecture interne »
1. Interface du processeur :

Le processeur MIPS « nous verrons ici une version simplifiée de ce


processeur » possède une interface avec 7 ports :

· CLK est l’entrée d’horloge. Les registres internes de MIPS


«simplifié» réagissent au front montant de CLK.
· NRESET est le signal d’initialisation, du processeur. NRESET est
une entrée synchrone active à l’état bas, qui doit être positionnée à 0
pendant au moins un cycle.
· ADDRESS est l’adresse sur 32 bits de la case mémoire sélectionnée
par le processeur.

Comme dans la plupart des processeurs, cette adresse est une


adresse octet, puisque l’espace adressable est vu comme un tableau
de 232 octets.
Ceci permet en principe au processeur MIPS R3000 de manipuler des
chaînes de caractères, puisque chaque caractère est codé sur un octet.

On ne prendra en considération, ici, que les mots 32 bits.

· 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

L’architecture interne du processeur se décompose en:

une partie contrôle


les registres
La partie opérative contient: les ports d’accès à la mémoire externe.
les opérateurs

On l’appelle aussi chemin de données « Datapath ».

La partie opérative réalise des transferts élémentaires de données entre un ou plusieurs registres sources et un registre destination.

Un transfert élémentaire est exécuté en un cycle.

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.

Ils ne sont pas visibles du logiciel.

PC: Registre sur 32 bits contenant l’adresse de la


prochaine instruction à aller chercher en
mémoire.
DATA_IN
Ce registre dispose d’une entrée particulière
permettant la remise à zéro du registre lors
d’une réinitialisation de MIPS «simplifié» au
moyen de son entrée NRESET. P R A D I U
A
C F D T R L

Si NRESET est positionné à 0, au prochain


front montant de CLK le contenu de PC est
remis à 0 (constante 0x00000000 sur 32 bits).

· AD : registre sur 32 bits utilisé pour contenir


NRESET

des résultats de calcul intermédiaires ou


ADDRESS
l’adresse effective d’une donnée en mémoire.

· DT : registre sur 32 bits utilisé pour contenir


temporairement la donnée 32 bits lue depuis la
mémoire avant de la stocker dans un des · RF[32] : banc de 32 Le banc de registre RF ne possède que
registres du banc de registres. registres de 32 bits, nommés 2 accès simultanés (un en lecture et un
R0 à R31. en écriture).
· IR : registre sur 32 bits utilisé pour contenir
temporairement l’instruction 32 bits lue depuis
la mémoire en vue de son utilisation et Le registre R0 contient systématiquement la
décodage futurs par le séquenceur. valeur 0.
Le processeur possède une « boîte à opérations », aussi appelée « Unité Arithmétique et Logique » (Arithmetic Logic Unit, ou
ALU en anglais) capable d’effectuer des opérations logiques, arithmétiques à partir de ses deux entrées X et Y.

Toutes les opérations s’exécutent de manière combinatoire, dans le cycle.


Un mot de 32 bits provenant de la mémoire peut être écrit dans les registres DT ou IR.

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.

Des pseudo-registres, contenant respectivement


les valeurs 0 et 4 permettent de forcer des
valeurs constantes sur les entrées X et Y de
l’ALU.
DATA_IN

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_ADDR permet de sélectionner parmi une


valeur parmi 2 : PC et AD. Seuls les registres PC
et AD permettent d’adresser la mémoire externe.
Le registre IR a deux utilisations :
✓ La première, sur 32 bits, va vers la partie contrôle,
✓ la deuxième regroupe les 16 bits de poids faible
de ce registre.
• Ces 16 bits IR[15:0] sont connectés à l’entrée DATA_IN
d’une unité d’extension non signée NSE32, et MUX_X
d’une autre unité d’extension signée SE32.
NSE32
• NSE32 est chargée de convertir un mot de 16 0 4 P R A D I U
A
F D T R SE32
bits en un mot de 32 bits équivalent, en insérant C L

16 zéros logiques à gauche de IR[15:0]. SH2

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

• L’unité SHF2, quant à elle, décale de deux bits ADDRESS

vers la gauche le mot de 32 bits issu de SE32.

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.

Il est utilisé dans le cas des instructions de branchement conditionnel.


2.2 Partie contrôle : micro-séquenceur

A chaque cycle, la partie contrôle FSM envoie vers la partie opérative des signaux de commande qui constituent une micro-instruction.

Une micro-instruction possède 12 champs. DATA_IN

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

0 (ne pas faire l’action), soit 1 (faire l’action).

NRESET
Dans certains cas, et particulièrement quand une

Write_PC
MUX_AD

commande peut prendre plus de deux valeurs, on

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 : 3 bits. Ce signal indique la source de l’entrée X de l’unité arithmétique et logique.

Les valeurs possibles sont:


MUX_X_CST0 (la constante 0 sur 32 bits CST0), DATA_IN

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

MUX_X_AD (la valeur courante du registre AD), MUX_Y

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

Les valeurs possibles sont:

MUX_Y_CST0 (la constante 0 sur 32 bits CST0),

MUX_Y_CST4 (la constante 4 sur 32 bits CST4),

MUX_Y_AD (la valeur courante du registre AD),

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.

Les valeurs possibles sont :


DATA_IN

MUX_X

✓ ALU_OP_ADD (l’ALU effectue l’opération sur NSE32


32 bits X+Y), 0 4 P R A D I U
F D T R SE32 A
C L

✓ ALU_OP_SUB (l’ALU effectue l’opération SH2


sur 32 bits X-Y), MUX_Y

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

l’opération sur 32 bits X | Y).

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.

Les trois valeurs possibles sont :

READ : accès en lecture,

WRITE : accès en écriture,


NOP : ni lecture, ni écriture.
Structure du séquenceur

Soit la structure du séquenceur du processeur MIPS «simplifié».

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

Chaque état correspond à l’exécution d’une micro- RT!DT RD!AD RD!AD


instruction.

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 :

Signal Valeur Pourquoi

WRITE_PC 0 On n’écrit pas dans le registre PC


MUX_RF_W W_RT La valeur est ici indifférente
WRITE_RF 0 On n’écrit pas dans RF
MUX_RF_R R_RS On n’écrit pas dans RF

WRITE_AD 0 On n’écrit pas dans le registre AD

WRITE_DT 0 On n’écrit pas dans le registre DT

WRITE_IR 1 On écrit ce qui vient de la mémoire dans IR

MUX_X MUX_X_CST0 La valeur est ici indifférente

MUX_Y MUX_Y_CST0 La valeur est ici indifférente

ALU_OP ALU_OP_ADD La valeur est ici indifférente

MUX_ADDR MUX_ADDR_PC PC sert à adresser la mémoire

MEMRW READ On veut lire la mémoire

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.

✓ La détection d'une exception entraîne l'arrêt immédiat de l'exécution de l'instruction fautive.

Ainsi, on assure que l'instruction fautive ne modifie pas la valeur d'un registre visible ou de la mémoire.

✓ Les exceptions ne sont évidemment pas masquables.

✓ Il y a 7 types d'exception dans cette version simplifiée du processeur R3000 :

• 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.

✓ Lorsqu'une exception est détectée, le processeur :

- sauvegarde l'adresse de l'instruction fautive dans le registre EPC - sauvegarde l'ancienne valeur du registre d'état SR

- passe en mode superviseur et masque les interruptions dans SR

- écrit le type de l'exception dans le registre CR

- branche à l'adresse "0x80000080".


3.2 Interruptions

✓ Les requêtes d'interruption matérielles sont des évènements asynchrones provenant généralement de périphériques externes.

✓ Elles peuvent être masquées.

✓ 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.

Lorsqu'une requête d'interruption non-masquée est détectée, le processeur :

- sauvegarde l'adresse de retour (PC + 4) dans le registre EPC - sauvegarde l'ancienne valeur du registre d'état SR

- passe en mode superviseur et masque les interruptions dans SR

- écrit qu'il s'agit d'une interruption dans le registre CR

- branche à l'adresse "0x80000080".

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

- passage en mode superviseur et masquage des interruptions dans SR

- écriture de la cause du déroutement dans le registre CR

- branchement à l'adresse "0x80000080".


3.4 Signal RESET :
Le processeur possède également une ligne RESET dont l'activation, pendant au moins un cycle, entraîne le branchement
inconditionnel au logiciel d'initialisation.
Cette requête est très semblable à une septième ligne d'interruption externe avec les différences importantes suivantes :
- elle n'est pas masquable. - il n'est pas nécessaire de sauvegarder une adresse de retour.
- le gestionnaire de reset est implanté à l'adresse "0xBFC00000".
Dans ce cas, le processeur
- passe en mode superviseur et masque les interruptions dans SR - branche à l'adresse "0xBFC00000".

3.5 Retour d'interruption :


Avant de reprendre l'exécution d'un programme qui a effectué un appel système (instructions SYSCALL ou BREAK)
ou qui a été interrompu, il est nécessaire d'exécuter l'instruction RFE.

Cette instruction effectue la restitution de l'état précédent dans le registre SR.


15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
3.6 Gestion du registre d'état SR : MIRQ MSWI 0 0 KUO IEO KUP IEP KUC IEC

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

KUO IEO KUP IEP 0 0

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

KUP IEP KUC IEC

3.7 Gestion du registre de cause CR :

Le registre CR contient trois champs.

Les 4 bits du champs XCODE(3:0) définissent la cause de l'appel au gestionnaire d'exceptions.


Les 6 bits du champs IRQ(5:0) représentent l'état des lignes d'interruption externes au moment de l'appel au gestionnaire d'exception.

Les 2 bits SWI(1:0) représentent les requêtes d'interruption logicielle.

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 :

0000 INT Interruption


0001 Inutilisé
0010 Inutilisé
0011 Inutilisé
0100 ADEL Adresse illégale en lecture
0101 ADES Adresse illégale en écriture
0110 IBE Bus erreur sur accès instruction
0111 DBE Bus erreur sur accès donnée
1000 SYS Appel système (SYSCALL)
1001 BP Point d'arrêt (BREAK)
1010 RI Codop illégal
1011 CPU Coprocesseur inaccessible
1100 OVF Overflow arithmétique
1101 Inutilisé
1110 Inutilisé
1111 Inutilisé
4. Tableau comparatif RISC/CISC:

RISC CISC

Réduit Jeu D'instructions Important


- 100 + 200

Standard Format Instructions Variable

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

You might also like