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-