2016-04-02 27 views
1

Ich versuche, über MIPS-Rohrauskleidung und die damit verbundenen Gefahren zu lernen. Ich habe Probleme, sich vorzustellen, was eine strukturelle Gefahr aussieht wie in MIPS-Anweisungen.MIPS Structural Hazard

Ich habe gelesen, dass es eine Situation ist, wo zwei (oder mehr) Anweisungen die Verwendung einer bestimmten Hardware-Ressource zur gleichen Zeit erfordern. Und ich habe Beispiele gesehen, die vorher in Taktzyklen gezeigt wurden. Aber kann jemand einfach ein einfaches MIPS-Anweisungssatzbeispiel für mich zur Verfügung stellen? Ich habe Schwierigkeiten, einen online zu finden. Sehen Sie sich einfach viele Beispiele für Datengefahren an und das ist nicht das, wonach ich suche. Vielen Dank!

Antwort

0

Es ist schwer für Sie von diesem Problem zu kommen, weil es in der HW-Architektur in der Regel gelöst ist ...

hier sind zwei Beispiele:

  1. eine Schreib Angenommen wird in die Registerdatei (RF), während der ersten Stufe 5 (WB) und eine Lese gemacht wird auf das gleiche Register auf der RF auf der Bühne 2 (ID) aus gleichzeitig. Dies ist eine strukturelle Gefahr, da zwei Befehle versuchen, im selben Taktzyklus auf dieselbe Ressource zuzugreifen (welcher Wert wird gelesen?). Dies kann (in der HW) z. B. durch Aufteilen des HF-Zugriffs auf zwei Taktphasen, Schreiben auf HIGH und Lesen auf LOW gelöst werden. Wenn Sie darüber nachdenken, besteht eine strukturelle Gefahr darin, dass es zwei separate Lese- und einen Schreibport in der RF gibt.

  2. Es sei angenommen, eine Anweisung von Speicher sein Abruf (Stufe 1, IF) und einem weiteren Schreib/Lese-Speicher zum auf Stufe 4 (MEM) erfolgt. Wiederum dieselbe Ressource, auf die im selben Zyklus zugegriffen wird. Dies wurde gelöst durch Trennen der Daten- und Befehlsspeicher (Harvard-Architektur). Es mag für Sie offensichtlich erscheinen, aber Sie können Princeton Architecture nachschlagen und ein Beispiel für ein einheitliches Gedächtnis sehen.

Also, wenn wir das erste Beispiel nehmen Sie zum Beispiel: eine beliebige Menge von Anweisungen, die mit einer Last (lw) Befehl an das gleiche Register wie in einem R-Typ-Befehl (wie add), die nach zwei anderen Anweisungen folgt, wird Mach den Trick:

lw $8, 100($9) 
add $10, $11, $12 
add $10, $11, $12 
add $10, $8, $12 

Hoffe, dass hilft.

0

Dies könnte funktionieren, aber ich bin keine große Person MIPS:

add $t0, $t1, $t2 
sw $t3, 0($t4) 
sub $t5, $t6, $t7 
sub $t8, $t9, $t0 
sw $t0, 0($s0) 
+0

wo wäre die gefahr? –

+0

in Zeile 4 mit dem $ t0 denke ich. – GoogieBeeps