next up previous contents
Next: Fetcheinheit Up: Implementierung Previous: Implementierung   Inhalt


Testumgebung

Die Testumgebung simuliert den Ablauf in einer Pipeline für den Prioritäten-Manager. Die einzelnen Schritte, die dafür nötig sind, werden im Folgenden kurz beschrieben. Jeder Schritt entspricht einem Takt. Abbildung 4.5 zeigt die Zusammenhänge noch einmal grafisch auf.

1.
Takt an die Fetch-Logik auf high setzen.
2.
Takt an die Fetch-Logik auf low setzen. Am Ausgang der Fetch-Einheit liegt damit der Thread an, in dessen Fenster Befehle nachgeladen werden sollen. Zu dem Füllstand dieses Fensters wird die Fetch-Bandbreite (im Fall des Komodo-Mikrocontrollers also vier Bytes) hinzuaddiert. Die neuen Füllstände werden mit den anderen Signalen an den Scheduler angelegt und dessen Takt auf high gesetzt.
3.
Takt an den Scheduler auf low setzen. Er hat den Thread berechnet, der als nächstes ausgeführt wird. Dessen Befehlszähler wird als Adresse zusammen mit einem Lesebefehl an den Speicher angelegt.
4.
Der Speicher liefert ein 32-Bit-Wort zurück, in das die Befehlsklasse hineincodiert ist. Aus diesen Daten werden die Eingangssignale für den Scheduler neu berechnet, der Zyklus kann von neuem beginnen.

Abbildung 4.5: Ablauf der Simulation

Dadurch, daß das Holen der Befehle erst nach der Aktivierung des Schedulers erfolgt, was in einer echten Pipeline nicht möglich wäre, erspart man sich die komplexe Verwaltung von verschiedenen Befehlsfenstern, die man zudem mit mehreren 32-Bit-Worten füllen und aus den jeweiligen Befehlen den Füllstand berechnen müßte. Für den Scheduler macht diese Änderung in der Reihenfolge aber keinen Unterschied, da er nur die Füllstände der Fenster betrachtet, jedoch nicht deren Inhalt.

Zusätzlich berechnet die Testumgebung die jeweiligen Befehlszähler der Threads und die Zieladresse, an die Debug-Informationen in den Speicher geschrieben werden.

Jedes 32-Bit-Wort, das aus dem Speicher eingelesen wird, entspricht einem Bytecode-Befehl. Die Kodierung der Eigenschaften in die Speicherworte ist in Tabelle 4.1 zusammengefaßt. Die Bits 7:4 geben die Anzahl der Mikrobefehle an, die für die Ausführung dieses Bytecode benötigt wird. Mit den Aktiv-Bits kann ein Befehl einzelne Threads suspendieren oder wieder aufwecken. Bit 24 zeigt an, daß es sich um einen Sprung handelt, also das Befehlsfenster geleert werden muß.


Tabelle 4.1: Kodierung der Bytecode-Befehle
Bits Länge Bedeutung
1:0 2 Länge des Bytecode
3:2 2 Latenz
7:4 4 Laufzeit
23:8 16 Aktiv-Bits
24 1 Sprung


next up previous contents
Next: Fetcheinheit Up: Implementierung Previous: Implementierung   Inhalt
Alexander Schulz
2000-06-18