Laboratoire 1 FETCH - 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 FETCH
14/02/2017 – V2.0
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 FETCH (4 périodes).
2) le laboratoire Microarchitecture DECODE (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 FETCH et partie DECODE avec rapport à rendre avant :
o
ARO2-1-A : le 29.03.2017, 23h59 à [email protected]
o
ARO2-1-B : le 30.03.2017, 23h59 à [email protected]
o
ARO2-1-C : le 28.03.2017, 23h59 à [email protected]
o
ARO2-1-D : le 28.03.2017, 23h59 à [email protected]
N’oubliez pas de sauvegarder et d’archiver votre projet à chaque séance de laboratoire
Objectifs du laboratoire
L’objectif principal est la réalisation simplifiée de la partie FETCH d’un processeur RISC avec
l’incrémentation du PC (Program Counter) et la lecture d’instructions. Vous apprendrez à assembler
un programme et à le charger dans la mémoire d’instruction. Ensuite, vous ajouterez un mécanisme
de saut et un mécanisme de gestion d’interruption.
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 FETCH, des instructions de
saut et des interruptions.
-1
-
ARO2 – Architecture des Ordinateurs 2 - Laboratoire Microarchitecture FETCH
Outils
Pour ce laboratoire, vous devez utiliser les outils disponibles sur les machines de laboratoire
(A07/A09). Pour utiliser votre propre ordinateur portable, vous pouvez vous procurer une copie
allégée d’une machine de laboratoire sous forme d’une machine virtuelle. Elle est normalement
fonctionnelle avec tous les environnements de virtualisation standard supportant le format OVF. Mais,
seul VirtualBox a été testé et validé.
Attention : L’installation de la machine virtuelle doit être faite en dehors des périodes de
laboratoire encadrés
Installation pas à pas de la machine virtuelle
1. Installer VirtualBox en suivant la documentation officielle
URL de téléchargement:
https://www.virtualbox.org/wiki/Downloads
Documentation :
https://www.virtualbox.org/manual/ch02.html
Installer Virtualbox et l'extension pack. L'installation de l'extension pack se fait simplement en
double-cliquant sur le fichier .vbox-extpack téléchargeable à partir de la page Dowloads
donnée plus haut.
Si Virtualbox est installé sur un hôte Linux, ne pas oublier de rajouter l'utilisateur au groupe
vboxusers pour permettre l'accès aux périphériques USB depuis la machine virtuelle. Voir la
page de documentation (section 2.3.4 The vboxusers group) pour ce point.
Télécharger le fichier correspondant à la machine à l’adresse suivante
http://reds-data.heig-vd.ch/VMs/reds2017.ova
Il est préférable de se connecter au réseau de l’école via le réseau câblé plutôt qu’en wifi
pour ce gros téléchargement.
2. Démarrer VirtualBox Manager et choisir "Fichier > Importer une application virtuelle…" et
sélectionner le fichier téléchargé au point 2.
3. Valider l’importation de la machine virtuelle en cliquant sur Importer
⇒ La mise en place de la machine virtuelle démarre. Celle-ci peut durer plusieurs minutes
en fonction de la performance du PC hôte !
4. La machine virtuelle est créée et apparaît comme machine disponible dans VirtualBox
Manager.
-2-
ARO2 – Architecture des Ordinateurs 2 - Laboratoire Microarchitecture FETCH
5. Configurer le réseau de la manière suivante : Cliquer sur l’icône “Configuration”, puis, dans la
fenêtre qui vient de s’ouvrir, sélectionner accès par pont et votre carte réseau dans la liste.
6. Configurer un dossier partagé de la manière suivante : Cliquer sur l’icône “Configuration”
puis, dans la fenêtre qui s’est ouverte, sélectionner “Dossiers partagés”.
7. Cliquer sur l’icône avec un “+”, à droite, puis dans “Chemin du dossier”, sélectionner autre
et indiquer l’emplacement de votre dossier partagé hors VM. Donner un nom sous “Nom
du dossier” et cocher la case “Montage automatique”. Ce dossier sera trouvable dans la
colonne de gauche de l’explorateur de fichier dans la VM.
8. La VM peut maintenant être démarrée. Vous pouvez supprimer le fichier .ova du point 2.
-3-
ARO2 – Architecture des Ordinateurs 2 - Laboratoire Microarchitecture FETCH
Les utilisateurs de machines Apple (Mac OS) doivent reconfigurer la disposition du clavier dans la
machine virtuelle en allant dans le menu Applications > Settings Manager > Keyboard de la
machine virtuelle Linux et choisir le layout MacBook/MacBook Pro. La nouvelle disposition du clavier
ne prendra effet qu'au prochain login.
-4-
ARO2 – Architecture des Ordinateurs 2 - Laboratoire Microarchitecture FETCH
Déroulement du laboratoire
Pour ce laboratoire, vous devez télécharger les fichiers nécessaires avant de commencer votre
implantation.
Fichiers nécessaires
Vous devez télécharger à partir du site REDS un .zip contenant un template de répertoire
« workspace » contenant :
•
Le fichier de travail Logisim template.circ avec deux horloges clk et sysclk
•
Le fichier source du code assembleur main.S (le nom ne doit pas être modifié)
•
Le fichier Makefile (ne doit pas être modifié) contenant les directives d’assemblage
Travail à effectuer
Créez un répertoire de travail ARO2_Ma_Fetch à partir du template « workspace » fourni. Ce
répertoire doit contenir les fichiers Logisim (.circ), main.S et Makefile.
Démarrez Logisim (menu->Education->Logisim). Effectuez la mise à jour si une fenêtre vous la
propose. Ouvrez le fichier .circ précédemment téléchargé.
Etape 1 : Réaliser le circuit d’incrémentation du PC et de lecture du code d’instruction
•
Prévoir un reset du registre PC avec un bouton.
•
Placer des pins de sortie avec des noms significatifs (affichage hexa) sur le bus d’adresse et
la sortie de la mémoire.
•
Utiliser une ROM pour la mémoire d’instruction, et non une RAM.
Attention : la ROM est adressée par mots de 16 bits, le bit 0 d’adresse du processeur ne doit pas
être câblé à la ROM (adresse divisée par 2).
Note : Vous devez utiliser uniquement l’horloge clk pour les circuits séquentiels. Attention de ne pas
supprimer l’horloge sysclk.
compteur de
programme
mémoire
d'instruction
PC
16
D
16
0xFB42
0xFB40
Q
+
2
-5-
16
A
Dout
ARO2 – Architecture des Ordinateurs 2 - Laboratoire Microarchitecture FETCH
Etape 2 : Ecrire un programme simple, assembler et mettre le code dans la mémoire
d’instruction
Le programme en assembleur doit contenir 4 instructions et être placé dans le fichier main.S (ne pas
changer le nom). L’éditeur geany (menu -> development -> geany) est à utiliser dans ce laboratoire.
Utiliser uniquement les instructions mov, add et and comme par exemple :
mov r0,#0
add r3,r1,r2
•
Compiler le programme (menu Build -> Make).
•
Vérifier que vous n’avez pas d’erreur d’assemblage. Noter que les fichiers main.lss et
main.raw ont été générés.
•
Regarder attentivement le contenu du fichier main.lss qui donne en hexa les adresses et les
codes des instructions.
Etape 3 : Faire du pas à pas dans le programme
Dans Logisim, il faut :
•
Charger le fichier main.raw dans la mémoire d’instruction (pop-up menu).
•
Faire un reset du PC.
•
Avancer pas à pas dans le programme en utilisant la touche F2 pour changer l’état de clk.
Assurez-vous que F2 fait des sauts d’une période, et pas d’une demi période en allant dans
Project > Options > Duration of Main tick (F2) Full period.
•
Comparer les valeurs affichées sur les ports adresse et code instruction avec les valeurs
données par le fichier main.lss.
•
Corriger votre design si le fonctionnement n’est pas correct.
Note : Logisim possède un outil « Assembly viewer » (menu Simulate) qui permet d’afficher le fichier
main.lss dans Logisim avec l’instruction courante automatiquement surlignée. Pour cela chargez le
fichier main.lss (menu file de l’outil) et sélectionnez votre registre PC (votre registre doit avoir un
nom). Vous devez être dans le bloc contenant le registre PC (pas dans le main). Essayez cet outil
très pratique en faisant du pas à pas.
Etape 4 : Relevez le chronogramme
•
Ouvrir l’outil « Chronogram » (menu Simulate).
•
Sélectionner les horloges sysclk et clk, les bus d’entrée du registre PC, sortie de PC et sortie
de la mémoire.
•
Placer les signaux dans l’ordre (clk en haut).
•
Exécuter votre programme en pas à pas.
•
Faire une copie d’écran pour votre rapport.
Utilisez le même répertoire de travail workspace_labo1. Sauvegardez le fichier.circ de la partie
1 avant de le modifier.
-6-
ARO2 – Architecture des Ordinateurs 2 - Laboratoire Microarchitecture FETCH
Etape 5 : Ajouter un mécanisme de saut à votre design précédent
•
Tester le saut à une adresse choisie (constante) avec un bouton.
commande
de saut
mémoire
d'instruction
0x2024
1
PC
16
16
D
Q
0
0xFB40
16
A
Dout
Instruction
0xFB42
16
+
2
Etape 6: Ecrire un programme avec des sauts inconditionnels
•
Ecrire votre programme dans le fichier main.S.
•
Mettre deux sauts inconditionnels dans votre programme pour le faire tourner en boucle.
ADR_SAUT_2 :
@ instructions (2 ou 3)
……
B ADR_SAUT_1
@ saut inconditionnel en avant
.org 0x30
ADR_SAUT_1:
@ instructions (2 ou 3)
……
B ADR_SAUT_2
@ saut inconditionnel en arrière
Note : la directive d’assemblage .org permet de choisir l’adresse où sera placée dans la mémoire la
partie du programme qui suit la directive.
•
Assembler votre programme et vérifier-le en lisant le fichier main.lss que le résultat est
correct.
Etape 7 : Ajouter l’exécution des sauts à votre circuit
•
Ajouter un mécanisme qui
1) Détecte l’instruction branch B,
2) Calcule l’adresse de saut à partir de l’offset dans l’instruction
3) Change l’adresse dans le PC
•
Tester pas à pas votre design. Relevez le chronogramme pour votre rapport
Etape 8 : Ecrire un programme avec une routine d’interruption
•
Ecrire le programme suivant avec une petite boucle sans fin et une routine d’interruption à
l’adresse 0x30. Pour ce programme, nous considérons que le PC est le registre 4, et le LR
-7-
ARO2 – Architecture des Ordinateurs 2 - Laboratoire Microarchitecture FETCH
(link du registre) le registre 5. Le retour de l’interruption se fera par l’instruction mov r4, r5
dont le code est 1c2c.
BOUCLE :
@ instructions (2 ou
……
B BOUCLE
@ boucle
.org 0x30
INTERRUPTION:
@ instructions (2 ou
……
MOV r4,r5
@ retour
•
3)
sans fin
3)
de l’instruction
Assembler votre programme et vérifier-le en lisant le fichier main.lss. Vous pouvez aussi le
tester pas à pas (vous allez juste rester dans la boucle sans fin).
Etape 9 : Ajouter un mécanisme de traitement des interruptions
•
•
•
Ajouter un bouton qui simule une interruption. A l’appui de ce bouton (à n’importe quel
moment pendant l’exécution de la boucle):
1) La valeur du PC chargée au prochain coup d’horloge doit être chargée dans un registre
(LR).
2) Le PC doit être chargé avec l’adresse 0x30
Ajouter ensuite un mécanisme qui détecte le code 1c2c de l’instruction mov r4, r5 et charge le
PC avec le l’adresse de retour contenue dans LR.
Tester pas à pas votre design. Relever le chronogramme pour votre rapport.
-8-
Téléchargement