Laboratoire 3 EXECUTE - REDS - HEIG-VD

publicité
Architecture des ordinateurs ARO2
Profs : C. Andrés Pena, R. Mosqueron
Assistants : Flavio Capitao, Anthony Convers, Alexandre Malki, Gaëtan Matthey
Laboratoire Microarchitecture EXECUTE
20/03/2017 – V1.8
Informations générales
Le laboratoire Microarchitecture dure 16 périodes et comprend 4 parties de 4 périodes chacune. Le
travail s’effectue par groupe de deux.
Le rapport à rendre portera sur deux labos (8 périodes au total) :
1) le laboratoire Microarchitecture EXECUTE (4 périodes).
2) le laboratoire Microarchitecture MEMORY (4 périodes).
Le rendu s’effectue sous forme de dossier compressé contenant le workspace complet (projets
Logisim, codes assembleur), et le rapport (.pdf) envoyé à l’assistant de votre groupe.

Code partie EXECUTE et partie MEMORY avec rapport à rendre avant :
o
ARO2-1-A : le 03.05.2017, 23h59 à [email protected]
o
ARO2-1-B : le 04.05.2017, 23h59 à [email protected]
o
ARO2-1-C : le 25.04.2017, 23h59 à [email protected]
o
ARO2-1-D : le 25.04.2017, 23h59 à [email protected]
N’oubliez pas de sauvegarder et d’archiver votre projet à chaque séance de laboratoire
Objectif du laboratoire
L’objectif principale est la réalisation simplifiée de la partie EXECUTE d’un processeur en ajoutant les
opérations arithmétiques et logiques, ainsi que les shifts. Vous recevrez les blocs FETCH et
DECODE du processeur PRODIS et un programme à exécuter.
Ce laboratoire est noté. Vous devez rendre les projets Logisim, les codes assembleur et un rapport.
Le rapport doit montrer votre compréhension de l’architecture du bloc EXECUTE et de la technique
de décodage des instructions.
Outils
Pour ce laboratoire, vous devez utiliser les outils disponibles sur les machines de laboratoire
(A07/A09) ou votre ordinateur personnel avec la machine virtuelle fournie au premier labo.
-1
-
ARO2 – Architecture des Ordinateurs 2 - Laboratoire Microarchitecture EXECUTE
Fichiers
Vous devez télécharger à partir du site REDS un .zip contenant un répertoire « workspace_lab3 »
avec :

Le fichier de travail Logisim Labo_execute.circ (contenant le bloc FETCH, la banque de
registre et le bloc DECODE de PRODIS)

Le fichier source du code assembleur main.S (contenant un programme)

Le fichier Makefile (ne doit pas être modifié) contenant les directives d’assemblage
Attention : Vous ne devez pas utiliser les fichiers du précédent laboratoire. Créez un nouveau
répertoire.
PRODIS, processeur didactique :






Architecture ARM9 modifiée
Bus adresses et bus données 16 bits
8 registres
Quatre interruptions matérielles
Pas de modes, pas d’exceptions
Jeu d’instruction (réduit) 16 bits ARM Thumb
Donnée : 4 périodes en laboratoire + travail personnel
Créez un répertoire de travail ARO2_Ma_Execute à partir du répertoire « workspace_lab3 »
fourni. Ce répertoire doit contenir les fichiers Labo_execute.circ et WinArm (main.S, Makefile).
N’oubliez pas de relire votre cours ARO2 « Micro-architecture d’un processeur - La partie
EXECUTE » qui contient toutes les informations et exemples de circuit nécessaires pour
réaliser ce laboratoire.
Etape 1 : Le bloc FETCH, la banque de registre, et le bloc DECODE sont fournis (dans le bloc
PRODIS).
Le programme assembleur suivant est fourni :
MOV
MOV
ADD
ADD
AND
LSL
SUB
r0,
r2,
r3,
r5,
r3,
r1,
r0,
#3
r0
r2,
r3,
r5
r5,
r3,
#7
r0
#2
r1
@shift logique à gauche (infos ci-dessous)
-2-
ARO2 – Architecture des Ordinateurs 2 - Laboratoire Microarchitecture EXECUTE
En exécutant pas à pas le programme, relevez un chronogramme des signaux suivants en sortie du
bloc DECODE :
adr_reg_n, adr_reg_m, adr_reg_d
reg_dat_out_n, reg_data_out_m
sel_op_alu:
sel_operand1
sel_operand2
immed_3, immed_5, immed_8
numéros des registres
contenus des registres(0 avant initialisation des registres)
code indiquant l’opération de l’alu (voir ci-dessous)
indique sur quel bus est placé l’opérande 1(voir ci-dessous)
indique sur quel bus est placé l’opérande 2 (voir ci-dessous)
valeurs immédiates
Etudiez la façon dont sont générés ces signaux dans le bloc DECODE fourni.
Expliquez les valeurs relevées dans le chronogramme pour les instructions :
ADD r3, r2, #7
ADD r5, r3, r0
Information: Le bloc DECODE fournit au bloc EXECUTE avec le bus « Execute_control_bus » les
informations suivantes : les numéros de registres, les types d’opérations à faire, les opérandes à
utiliser. Le format des informations de ce bus est donné ci-dessous :
Execute_control_bus [0..22] => [0..2] = sel_op_shift 000 : Bypass du bloc 001 : Operand 1 shift arithmétique à droite avec Operand 2 010 : Operand 1 shift logique à gauche avec Operand 2 011 : Operand 1 shift logique à droite avec Operand 2 100 : Operand 1 shift rotatif à droite avec Operand 2 [3..6] = sel_op_alu 0000 : Bypass du bloc (Operand 1 en sortie) 0001 : Operand 1 + Operand 2 0010 : Operand 1 ‐ Operand 2 0011 : Operand 1 AND Operand 2 0100 : Operand 1 OR Operand 2 0101 : Operand 1 XOR Operand 2 0110 : NOT Operand 1 0111 : Operand 1 AND (NOT Operand 2) 1000 : Operand 1 * Operand 2 [7..8] = sel_operand_2 00 : reg_data_out_m 01 : immediate3 10 : not used 11 : immediate8 [9..10] = sel_operand_1 00 : reg_data_out_n 01 : 0x0000 10 : Branch with link 11 : not used [20] = sel_shift 0 : immediate5 1 : reg_data_out_m -3-
ARO2 – Architecture des Ordinateurs 2 - Laboratoire Microarchitecture EXECUTE
Etape 2 : Réalisez le circuit nécessaire pour traiter toutes les instructions du programme assembleur
fourni. Ce circuit doit être placé dans un bloc EXECUTE à l’intérieur du bloc Prodis. Relevez un
chronogramme qui prouve la bonne exécution de ces instructions.
Etape 3 : Modifiez votre circuit pour qu’il puisse traiter les instructions :
Logical Shift Left (nombre de shift en immédiat)
Logical Shift Left (nombre de shift dans un registre)
LSL(1)
LSL(2)
Logical Shift Right (nombre de shift en immédiat)
Logical Shift Right (nombre de shift dans un registre)
LSR(1)
LSR(2)
Opération logique AND
Opération logique OR
Opération logique XOR
Opération logique NOT
AND
ORR
EOR
MVN
Addition (valeur immediate)
Addition (registres)
ADD(1)
ADD(3)
Soustraction (valeur immediate)
Soustraction (registres)
SUB(1)
SUB(3)
Note : Le document décrivant toutes les instructions ARM Thumb est disponible sur le site.
Modifiez votre programme assembleur afin de tester toutes les instructions ci-dessus. Relevez un
chronogramme qui prouve la bonne exécution de ces instructions.
-4-
Téléchargement