Architecture des ordinateurs ARO2 Profs : C. Andrés Pena, R. Mosqueron Assistants : Flavio Capitao, Anthony Convers, Alexandre Malki, Gaëtan Matthey Laboratoire Microarchitecture MEMORY 24/03/2017 – V1.9 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 laboratoires (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 Objectifs du laboratoire Les objectifs sont : • Comprendre et démontrer la partie MEMORY ACCESS • Comprendre et démontrer le fonctionnement d’une pile en mémoire • Ajouter une instruction personnalisée Vous recevrez le processeur PRODIS complet (version non-pipeliné) et des programmes à 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 MEMORY ACCESS 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 laboratoire. -1 - ARO2 – Architecture des Ordinateurs 2 - Laboratoire Microarchitecture MEMORY Fichiers Vous devez charger à partir du site REDS un .zip contenant un répertoire « workspace_labo4 » avec : • Le fichier de travail Logisim (contenant tous les blocs 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 labo. 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_Memory à partir du répertoire « workspace_labo4 » fourni. Ce répertoire doit contenir le fichier *.circ et les fichiers main.S, Makefile. N’oubliez pas de relire votre cours ARO2 « Micro-architecture d’un processeur - La partie MEMORY ACCESS » qui contient toutes les informations et exemples de circuit nécessaires pour réaliser ce labo. Etape 1 : Le processeur PRODIS complet est fourni. La mémoire qui vous est fournie est divisée en deux blocs de 8bits, chacun adressé en mots de 16 bits. Il faut donc lire, pour une adresse donnée, les 8 bits de poids fort sur la mémoire Mem_High, et les 8 bits de poids faible sur la mémoire Mem_Low. a) - Ecrivez un programme en assembleur qui effectue une écriture de deux mots aux adresses 0x0004 et 0x0006, puis effectuez une lecture, en utilisant les instructions LDRH et STRH. - Que constatez-vous pour les adresses des mémoires Mem_High et Mem_Low où ont été écrits ces 2 mots ? Pourquoi l’adresse donnée dans l’instruction ne correspond pas ? - Relevez le chronogramme avec tous les bus et signaux de contrôle de la mémoire de données. Astuce : Pour écrire une valeur de 16 bits dans un registre, chargez une valeur immédiate de 8 bits dans le registre, « shifter » la valeur du registre puis effectuer un OR avec un autre registre. -2- ARO2 – Architecture des Ordinateurs 2 - Laboratoire Microarchitecture MEMORY b) - Modifiez votre programme assembleur pour effectuer une copie des deux mots écrits précédemment aux adresses 0x0004 et 0x0006 vers les adresses 0x0014 et 0x0016 en utilisant uniquement les instructions LDRB et STRB. - Relevez le chronogramme avec tous les bus et signaux de contrôle de la mémoire de données. - Expliquez le fonctionnement des signaux de contrôle mémoire High_Byte et Low_Byte. - PRODIS est-il « little endian » ou « big endian » ? Astuce : Pour mieux vous repérer dans les opérations d’écriture mémoire, utilisez des valeurs de données particulières telles que 0x1234, 0xABCD, 0xAABB …. Etape 2 : Testez le programme assembleur fourni. Note : Dans cette version du PRODIS r7 corresponds au registre PC et r6 au registre LR. MOV BL ADD r1,#0x26 FONCTION_A r4,r2,#3 .org 0x20 FONCTION_A: BL MOV AND MOV FONCTION_B r2, #0xFF r2, r1 r7,r6 @ return .org 0x40 FONCTION_B: LSL BL MOV r2, r1, #4 FONCTION_C r7,r6 @ return .org 0x60 FONCTION_C: MoV ORR MOV r1,#1 r2, r1 r7,r6 @ return - Ce programme ne fonctionne pas correctement. Pourquoi ? - Faites fonctionner ce programme correctement en le modifiant. Vous devez utiliser une pile descendante à l’adresse 0x00FE pour effectuer des sauvegardes (voir le cours) et utiliser le registre r5 comme Stack Pointer. Commentez votre code assembleur. - Relevez un chronogramme des opérations dans la pile. Note 1 : A cette étape, vous ne devez pas modifier le circuit PRODIS. Faites uniquement des modifications du programme assembleur. (ne pas utiliser d’instructions PUSH ou POP – qui ne sont pas supportées) Note 2 : L’instruction BL s’effectue en 2 cycles -3- ARO2 – Architecture des Ordinateurs 2 - Laboratoire Microarchitecture MEMORY Etape 3 : En modifiant comme vous le souhaitez le circuit du processeur, ajoutez le traitement de l’instruction « custom » DISP (display). Les modifications doivent être minimales, et bien sûr, sans altération du fonctionnement normal de PRODIS. L’instruction DISP doit permettre d’afficher un motif quelconque de points sur le composant Logisim « Led Matrix ». Le composant est organisé en 5 colonnes de 8 points. Attention : ce composant ne contient pas de registres et ne conserve pas l’affichage quand les données en entrée changent. DISP comporte un champ immédiat de 5 bits et un numéro de registres. A vous de définir la syntaxe de DISP, c’est-à-dire comment vous aller utiliser cette instruction pour contrôler l’afficheur. 1 1 0 1 1 1 1 1 imm 5 Rm Note : L’instruction DISP n’étant pas une instruction officielle de ARM, l’outil d’assemblage ne la reconnait pas et vous ne pouvez pas utiliser de mnémonique. Vous devez utiliser à la place le «.short» avec le code de l’instruction dans le programme en assembleur. Par exemple : MOV r2, #4 .short 0xDF13 @ DISP avec immédiat de 0x02 et numéro de registre 3. ADD r4,r2,r1 - Expliquez dans le rapport vos modifications et ajouts au circuit du processeur. - Modifiez votre programme pour tester la nouvelle instruction DISP. - Relevez un chronogramme des opérations. - Vous pourrez ensuite écrire un programme en assembleur, qui effectue une petite animation sur l’afficheur, et nous montrer le résultat à la fin du laboratoire. -4-