Académique Documents
Professionnel Documents
Culture Documents
*Factorisation de MRMOVL/RMMOVL
Pour le fonctionnement de rmmovl et rmmovl on distingue la différence dans l’étage
DECODE ,pour le rmmovl : valA et valB vont avoir des registres par contre le mrmovl y’aura
uniquement un seul registre ,et dans l’etage Memory ,le rmmovl transforme un registre en mémoire
contrairement à mrmovl,du coup dans le résultat écrit (étage Write back) pour le mrmovl va donner
ce qui a dans la mémoire en revanche le rmmovl va pas contenir un registre pour le récrire en dans
cet étage les modification opérées dans le code HCL de la version séquentiel sont les mêmes avec
ceux de la version pipelinée mise à part les instructions suivantes :
La définition de l’intsing
Il faut d’abord ajouter l’instruction ifun
intsing ifun
#A l’etage FETCH
bool need_regids =
icode in {RRMOVL, OPL, IOPL, PUSHL, POPL, IRMOVL, RMMOVL || (icode ==
MRMOVL && ifun==1)};#Modification apporte la spécification du MRMOVL
#A l’etage memory
##Set read control signal
EXERCICE 2
Instruction LOOP :
L’instruction loop label est équivalente à la combinaison des deux instructions isubl 1,%ecx ; jne
label sauf qu’elle ne modifie pas les cc. Elle décrémente donc le registre %ecx puis branche à
l’étiquette label si %ecx n’a pas atteint 0. Elle est donc typiquement utilisée pour effectuer des
boucles for.
L'implémentation du LOOP dans la version pipepliné est très similaire à ce qui a été réalisé en
séquentiel. Néanmoins on aura à rajouter certaines instructions notamment :
On ajoute d’abord :
intsing loop et intsing RECX
bool need_valC =
icode in {IRMOVL, RMMOVL || (icode == MRMOVL && ifun==1), JXX, CALL, IOPL,
LOOP};#branchement conditionnelle pour LOOP par défaut on branchera à l'adresse fourni par
VALC
Le traitement de LOOP à l’étage EXCUTE est presque le même sauf qu’on introduit le loop:
################ Execute Stage ###################################
int new_pc =
[
# Call. Use instruction constant
icode == CALL : valC;
# Taken branch. Use instruction constant
icode == JXX && valE != 0. : valC;
# Completion of RET instruction. Use value from stack
icode == RET : valM;
# Default: Use incremented PC
1 : valP;
];
Ajout de jreg
Etage jreg ra
Execute
Memory
Write Back
PC update PC = valA
Les caractéristiques de jreg sont donc : L’utilisation d’un registre, les instructions valides, le
registre utilisé comme source (registre A) et new-pc = valA
Pour l’ajout de jreg aux parties need_regids, instr_valid, srcA (rA), new_pc, voir le fichier HCL.
Ajout de jmem
Write Back
PC update PC = valM
Pour l’ajout de jmem aux parties need_regids, need_valC, instr_valid, srcB (rb), aluA (valC), aluB
(valB), mem_addr (valE), mem_read, new_pc, voir le fichier HCL modifié.