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 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 o o o ARO2-1-A : le 29.03.2017, 23h59 à flavio.capitaocantante@heig-vd.ch ARO2-1-B : le 30.03.2017, 23h59 à gaetan.matthey@heig-vd.ch ARO2-1-C : le 28.03.2017, 23h59 à anthony.convers@heig-vd.ch ARO2-1-D : le 28.03.2017, 23h59 à alexandre.malki@heig-vd.ch 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 -
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 -
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 -
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 -
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 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 D PC Q mémoire d'instruction 0xFB40 A Dout 0xFB42 + 2-5 -
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 -
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 0x2024 1 0 D PC Q mémoire d'instruction 0xFB40 A Dout Instruction 0xFB42 + 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.org 0x30 ADR_SAUT_1: @ instructions (2 ou 3) B ADR_SAUT_2 @ saut inconditionnel en avant @ 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 -
(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 3) B BOUCLE.org 0x30 INTERRUPTION: @ instructions (2 ou 3) MOV r4,r5 @ boucle sans fin @ retour 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 -