2015-02-26 1 views
1

J'ai travaillé sur une programmation de niveau bas avec pipelines à 5 étages. Mais j'ai frappé un accroc.Correction d'un problème de risque de charge-utilisation dans un pipeline (MIPS)

En supposant que ce schéma http://i.imgur.com/7kTFi.png et le code de MIPS:

pv 4,1000 $ (6 $)

sw 4,2000 $ (6 $)

ce qui arriverait réellement? J'ai supposé qu'il y aurait des bulles, j'ai compté deux bulles procédant à l'étape d'identification. Pouvons-nous le réparer en ajoutant des entrées à la nouvelle unité d'expédition?

Où puis-je ajouter des mux et de nouveaux chemins de données pour éviter les erreurs de bulle +?

Répondre

0

Vous avez raison, il y aurait deux bulles.

supposant envoi de données:

1. IF ID EX MM WB 

2. IF S S ID EX MM WB 

(S signifie décrochage ou bulles).

Il n'y a aucun moyen vous pouvez « réparer » ce parce que dans tous les cas, vous devez attendre la fin de l'étape MM avoir la valeur à 1000 (6 $). Il pourrait même être pire sans transfert de données où vous devrez attendre jusqu'à l'étape WB, ce qui signifie 3 stands.

Seule façon éviter un tel comportement est d'avoir des compilateurs intelligents permettant de planifier ces deux instructions d'une manière différente (i.e. espace en ajoutant les autres entre les deux).

Notez que comme il est, le programme a pas de véritable but (valeur get à l'adresse mémoire [1000 + Regs [6 $]], et le copier à l'adresse [2000 + Regs [6 $]])

+0

Vous pouvez utiliser le transfert du registre intermédiaire MM/WB vers le registre intermédiaire ID/EX. Le vous auriez besoin seulement de 1 stalle droite? – Pranav

0

Vous avez besoin de la transmission MEM à ALU