TP 2 (Hiver 2005)
IFT3380/IFT6380
Par groupe de 2 étudiants
En utilisant le logiciel LISATek Processor Designer, vous devrez modifier le projet SimpleMIPS (qui implémente le pipeline MIPS 5 étages décrit dans le livre du cours aux pages 947-957) en transférant le test à zéro et le calcul de l'adresse du branchement dans la phase DI du pipeline, comme expliqué aux pages 958-959. Vous devrez également ajouter quelques instructions au modèle fourni.
Première partie: à remettre mardi 15 mars à 23h59
Les instructions à ajouter sont les suivantes:
1. L'instruction DMUL (Multiplication de deux entiers). Syntaxe: DMUL rd, rs, rt
2. L'instruction LUI (les 16 bits de poids fort du registre destination sont écrasés par la valeur immédiate codée dans l'instruction tandis que les 16 bits de poids faible du registre destination sont remis à 0). Syntaxe: LUI rd, imm
Deuxième partie: à remettre
mardi 22 mars à 23h59
La résolution du branchement se faisant en DI, il vous faudra modifier la façon dont l'envoi est effectué pour les instructions de branchement (l'instruction BEQZ). Aussi, un nouveau cas nécessitant une suspension du pipeline surviendra: par exemple, si une instruction ALU et un branchement se suivent, il faudra suspendre le pipeline durant 1 cycle si la résolution du branchement dépend du résultat de l'instruction ALU. Même chose dans le cas d'une instruction de branchement dépendant du résultat d'un chargement (2 cycles de suspension). Pour les branchements inconditionnels (l'instruction J), le calcul de l'adresse effective doit également se faire dans l'étage DI.
Avant de commencer:
1. Télécharger le projet fourni à l'adresse http://www.iro.umontreal.ca/~gagnevi/lisatek/tp2.tar
2. Décompresser tp2.tar (tar xvf tp2.tar)
3. Ouvrir le logiciel ldesigner en tapant /u/gagnevi/ldesigner &
4. Cliquer sur File, Open Project, puis aller chercher le fichier SimpleMIPS.lpf
Pour compiler:
1. Cliquer sur Build, Build All
Pour compiler un programme assembleur:
1. Dans une console, aller dans [chemin où tp2.tar a été décompressé]/app
2. Taper make example (le fichier contenant le code source, example.asm, sera compilé)
Pour simuler un programme assembleur:
1. Cliquer sur Tools, Processor Debugger
2. Cliquer sur Files, Load Executable
3. Ouvrez l'exécutable app/votreProgramme.out
4. Simuler (F5 pour single step)
Pour lire la documentation:
1. Toute la documentation se trouve sur http://www.iro.umontreal.ca/~gagnevi/lisatek
Pour tester la version fournie:
1. Compiler le projet fourni
2. Compiler le programme example.asm (make example)
3. Ouvrir le Processor Debugger et charger example.out
4. Cliquer sur View, Memories
5. Placer les valeurs 1, 2 et 7 dans les cases mémoires 0, 3 et 6 respectivement
6. Simuler le programme en entier
7. Vérifier que les valeurs des registres et des cases mémoire soient conformes aux tableaux ci-dessous
Case mémoire |
Valeur initiale |
Valeur finale |
0 |
1 |
16 |
3 |
2 |
2 |
6 |
7 |
7 |
14 |
0 |
-14 |
15 |
0 |
-38 |
R0 |
2 |
R1 |
7 |
R2 |
9 |
R3 |
16 |
R4 |
2 |
R5 |
-14 |
R6 |
0 |
R7 |
-12 |
R8 |
-26 |
R9 |
-14 |
R10 |
14 |
R11 |
-38 |
R12 |
9 |
R13 |
0 |
R14 |
0 |
R15 |
0 |
Pour tester la version modifiée:
1. Une fois les modifications apportées, compiler le projet.
2. Compiler le programme example2.asm (make example2)
3. Ouvrir le Processor Debugger
4. Cliquer sur View, Memories
5. Placer les valeurs 1, 2 et 7 dans les cases mémoires 0, 3 et 6 respectivement
6. Simuler le programme en entier
7. Vérifier que les valeurs des registres et des cases mémoire soient conformes au tableau ci-dessous
Case mémoire |
Valeur initiale |
Valeur finale |
0 |
1 |
16 |
3 |
2 |
2 |
6 |
7 |
7 |
14 |
0 |
1176 |
15 |
0 |
-70 |
R0 |
2 |
R1 |
7 |
R2 |
9 |
R3 |
16 |
R4 |
2 |
R5 |
-14 |
R6 |
0 |
R7 |
-28 |
R8 |
-42 |
R9 |
1176 |
R10 |
14 |
R11 |
-70 |
R12 |
9 |
R13 |
0 |
R14 |
0 |
R15 |
-1412628482 |