Laboratoire 4 MEMORY - 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 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-
Téléchargement