2016-05-13 4 views
0

Wenn ich 2 Zeilen Montage wie:WAR-Gefahr verursacht Blasen in der Pipeline (MIPS)?

add $s1, $s3, $s5 
sub $s3, $s6, $s8 

dies sollte eine WAR verursachen (schreiben, nachdem Lese) Gefahr, richtig?

Das Problem ist, dass ich nicht verstehe, ob es das Einfügen von Blasen in der Pipeline verursachen wird, da ich die Pipelinetabelle zeichnen muss.

Gibt es einen anderen Fall, wenn dies eine Gefahr verursachen kann oder nicht?

+0

Wie viele Stufen sind in Ihrer Pipeline? Wenn es 5 Stufen gibt, ist dies keine Gefahr. –

+0

Ja, dies ist eine 5-stufige Pipeline (holen, dekodieren, lesen, ausführen, schreiben). Also keine Blasen benötigt? –

+1

Dies ist in der Tat eine Anti-Abhängigkeit, aber in der klassischen Pipeline, die keine Gefahr schafft. Das Lesen passiert wirklich früh und das schreiben wirklich spät, da gibt es kein Problem. – harold

Antwort

2

IST Gefahr ist ungewöhnlich/unmöglich in einer vernünftigen (in Ordnung) Pipeline

Pipeline Hazards, Page 2

Hier ist eine Tabelle zu zeigen, warum in einem 5-stufigen CPU pipelined. Geben wir ihnen Befehle 1 und 2.

IF | ID | EX | MEM | WB 
------------------------- 
1 | | |  | 
------------------------- 
2 |(1) | |  |  Instruction 1 is obtaining $s3 
------------------------- 
    | 2 | 1 |  |  
------------------------- 
    | | 2 | 1 | 
------------------------- 
    | | | 2 | 1 
------------------------- 
    | | |  |(2) Instruction 2 is writing $s3 back 

Anweisungen erhalten Operanden aus der Registerdatei während der ID (Instruction Decode) Stufe bezeichnen, aber das Ergebnis ist nicht zurück in die Registerdatei, bis der WB (write-back geschrieben) Bühne. Der Befehl 1 befindet sich in der ID-Stufe 4 Taktzyklen, bevor der Befehl 2 in der WB-Stufe ist, so dass es keine Möglichkeit gibt, dass $s3 überschrieben wird, bevor es verwendet wird.