2017-03-12 3 views
0

Exemple dans le livre: Afficher les chemins d'expédition pour exécuter ce code:MIPS - Pourquoi cinq bulles sont-elles insérées dans ce pipeline?

add $3, $4, $6 
sub $5, $3, $2 
lw $7, 100($5) 
add $8, $7, $2 

diagramme Pipeline du livre:

I1: IF ID EX MEM WB 
I2: IF ID EX MEM WB 
I3:  IF ID EX MEM WB 
      NOP NOP NOP NOP NOP 
I4    IF ID EX MEM WB 

Pourquoi 5 bulles insérées là plutôt que quelque chose comme:

I1: IF ID EX MEM WB 
I2: IF ID EX MEM WB 
I3:  IF ID EX MEM WB 
I4   IF ID ID EX MEM WB 

Répondre

0

Ce n'est pas cinq bulles, c'est une bulle insérée après la troisième instruction et a progressé à travers tout le pipelin e étapes, donc vous voyez une bulle à chaque étape de l'oléoduc.

La raison pour laquelle une bulle est insérée est que la quatrième instruction nécessite la sortie de la troisième instruction ($ 7). Ceci ne sera disponible qu'après l'étape 'mem' de la troisième instruction et une valeur de $ 7 est nécessaire pour l'étape 'ex' de l'instruction 4. Là pour insérer une bulle entre les 3ème et 4ème instructions, la sortie de l'étape mémoire de l'instruction 3 est disponible pour l'entrée de l'étape d'instruction «ex» 4.

+0

Pourquoi la bulle n'est-elle pas insérée après l'étape IF de l'instruction 4? –

+0

Les deux ont le même effet dans le timing, juste une notation différente. J'utiliserais aussi la même notation que toi, mais je ne ferais pas l'ID deux fois, je mettrais juste le nop là. –

+0

Donc, techniquement, les deux sont les mêmes? Je suis vraiment confus parce que j'ai vu des exemples où ils utilisent NOP, '-', ou simplement répéter l'étape d'ID pour représenter des stands. –