2016-04-11 9 views
-1

Auf eine Ladewortanweisung folgt unmittelbar eine Verzweigungsanweisung (von Mips 32).Entscheidungsfindung in Pipeline-Ständen

lw r2, (0)r1;-- I swap registers here as opposed to my previous question 
Beq r2, r3, target; 

Um einen Ausführungsplan, IF ID EX MEM WB zu erzeugen. Jetzt, wo sollte der Stall für BEQ

IF ID EX MEM WB 
    IF * * ID EX 

or 

IF ID EX MEM WB 
    * * IF ID EX 

Ich möchte nur verstehen, wenn beide Wege möglich sind. Auch, welche Hardware-Manipulation ist für solche Stände beteiligt?

+1

Soll dies einen MIPS 2201 Befehlssatz darstellen? –

Antwort

1

In der einfachen Pipeline, die Sie anzeigen, wird lw noch dekodiert, während das nächste insn geholt wird. Die Pipeline kann nicht feststellen, dass ein Konflikt auftritt, bis beide dekodiert sind.

Denken Sie genau durch, was Ihr 2. Stall macht: Die CPU verzögert das Holen des nächsten Befehls, bevor der aktuelle sogar decodiert wird. Es weiß nicht, welcher Befehl zu diesem Zeitpunkt ist.

IF ID EX MEM WB  lw 
    * IF ID EX  beq // lw isn't even decoded yet, and neither is this one, so no way to tell if they conflict. 

re: Ihr Update: IF ist kein Befehl, es ist eine Pipeline-Stufe.


BTW, war die Frage viel klarer, bevor Sie die Pipeline-Diagramme entfernt. Sie sollten sie wieder einfügen, mit Code-Formatierung (wählen Sie den Text und klicken Sie auf das Symbol {}, oder drücken Sie Strg-k.)

+0

Danke, ich habe festgestellt, dass ich in meiner Frage einige Fehler gemacht habe. Sollte die Pipeline nach dem Instruktionsabruf nicht einen Konflikt anzeigen? –

+0

@ZacUwyoH: Es kann nichts sagen, bis * beide * Anweisungen dekodiert sind. Was wäre, wenn die zweite Anweisung 'add $ r10, $ r11, $ r12' wäre? Das weiß es erst, nachdem der 2. Befehl decodiert wurde. Daher sind beide Diagramme in der Frage falsch, in Ihrer aktuellen Bearbeitung. –

+0

würden zwei Stände nach ID arbeiten oder was sollte die Lösung sein? –