Technische Informatik

 

DLX-Pipeline

Kontakt  

DLX-Pipeline Simulator: Dokumentation



Die Pipeline:


Das Programm visualisiert die Abarbeitung der Befehle in der DLX Pipline, die die folgenden Stufen hat:

    Stufe 1 : Instruction Fetch (IF)
    Stufe 2 : Operant Fetch (OF) [hier: in zweiter Takthälfte]
    Stufe 3 : Execute (EXE)
    Stufe 4 : Memory (MEM)
    Stufe 5 : Write Back (WB) [hier: in erster Takthälfte]

Dadurch kann die Datenabhängingkeit  true-dependency (read-after-write) zu einem Datenkonflikt führen.

Hierzu ein kleines Beispiel zur Erläuterung:

    1: ADDI R1,R0,1 // R1 = 0+1
    2: ADDI R2,R0,2 // R2 = 0+2
    3: NOOP
    4: ADD  R3,R2,R1 // R3 = R2+R1

------hier noch ein Bild ------
Stufen der Pipline versetzt untereinander
        I IF I OF I EXE I MEM I WB
            I IF I OF I EXE I MEM I WB
                                   Pfeil Konflikt!!
                            I IF I OF I EXE I MEM I WB
---------------Ende Bild-----------------------

Ist Befehl 4 in Stufe 2 (OF), muss er R1 und R2 laden. Zu derselben Zeit ist aber Befehl 1 in Stufe 5 und will  sein Ergebnis in R1 schreiben. Da aber in der ersten Takthälfte geschrieben wird und in der zweiten Takthälfte die Operanden geholt werden, tritt hier bei R1 kein Konflikt auf.
Anders ist es mit dem Register R2. Dieses Register wird nicht mehr rechtzeitg geschrieben und deshalb auch nicht richtig gelesen.

Die Visualisierung der Pipeline soll diesen Konflikt veranschaulichen.

Wenn man dann Forwarding anschaltet, sieht man, dass dieser Konflikt nicht mehr auftritt.



Wie benutze ich das Programm


Zuerst müssen die Befehle ausgewählt werden:

auswahl

Hat man die Befehle in der gewünschten Reihenfolge eingegeben, dann kann die Visualisierung durch Drücken des Button "Finished" gestartet werden.

Pipeline<

Durch Bewegen der Maus über die einzelnen Symbole der Pipeline wird eine Beschreibung des entsprechenden Symobls angezeigt.



Die Befehle der Pipeline:


  • ADD:



    Dieser Befehl addiert Register R2 und R3 und speichert das Ergebnis in Register R1.

  • NOOP:



    Dieser Befehl existiert eigentlich nicht, sondern ist durch ADD: R0 = R0 + R0 realisiert. Wobei im Register R0 Null steht.

  • ADDI:



    ADDI addiert zu R2 den konkreten Wert 3 und speichert das Ergebnis in R1.

  • LW:

    lw

    Zu dem Inhalt, der in R3  steht, wird der konkrete Wert 2 addiert, das Ergebnis ist die Adresse für den Wert, der dann in R1 gespeichert wird.

  • SW:

    sw

    Der Inhalt von R1 wird an die Adresse gespeichert, die sich durch Addition von dem Inhalt von R3 und dem konkreten Wert 2 ergibt.

  • J:

    j

    Als nächstes wird der Befehl, der an der Zeile 1 steht ausgeführt.

  • JR:

    jr

    Der Wert, der in R1 steht, ist die Zeilennummer, in die gesprungen wird.

  • BEQZ:

    beqz

    Wenn der Wert, der in R0 Null ist, dann wird in die Zeile 1 gesprungen, sonst wird der nächste Befehl ausgefürt.

  • SLT:

    slt

    Die Inhalte von R2 und R3 werden vergliechen. Wenn sie gleich sind dann wird eine 1 in R1 geschrieben, ansonsten eine 0.

  • SLTI:

    slti

    Der Inhalt von R2 wird mit dem konkreten Wert 3 vergliechen. Wenn sie gleich sind dann wird eine 1 in R1 geschrieben, ansonsten eine 0.

KIT Logo Logo Informatikfakultät top-link top