Der PowerPC 601 von IBM/Motorola

Der PowerPC 601 ist das erste greifbare Ergebnis der Zusammenarbeit zwischen IBM und Motorola. Obwohl die PowerPC- Architektur 64bittig definiert ist, arbeitet ihr erster Vertreter nicht durchgängig mit dieser Busbreite. Die Integer-Unit (IU) ist nur 32 Bit breit. Die maximale Taktfrequenz der PowerPCs wird neuerdings mit 80 MHz angegeben. Unterschiede zwischen internem und externem Takt, wie sie etwa die MIPS-Prozessoren kennen, gibt es beim 601 nicht.

Der physikalische Adreßraum des PowerPC beträgt wie beim Pentium 4 GByte. Logisch lassen sich bis zu 4 TByte ansprechen. Die Memory-Mamagement-Unit (MMU) überwacht die Zugriffsrechte auf den Speicher page- oder blockweise.

Cache

Ein weiterer Unterschied zu anderen modernen Prozessoren besteht in der Organisation des integrierten 1st-Level-Cache. Der PowerPC unterscheidet nicht zwischen Daten- und Instruktions- Cache, sein 32 KByte großer Zwischenspeicher ist für beides zuständig. Dies erfordert eine aufwendigere Struktur. IBM hat sich für einen Acht-Wege-Set- Line-Größe beträgt 512 Byte, wobei jede Line in zwei Blöcke zu 256 Byte geteilt ist. Invalidation-, Snoop-, Cast-Out- und Load-Zyklen können auf jeden Block unabhängig vom anderen angewandt werden.

Das Nachladen einer Cache-Line erfolgt im Burst Mode über den 64 Bit breiten Datenbus. Ein Load4Store-Buffer speichert die angelieferten Daten zwischen und gibt sie intern auf einem 128 Bit breiten Datenpfad (zwischen Buffer und Cache) in nur zwei Takten weiter. Dies bedeutet, daß ein extern als 2-l-l-l-Burst erscheinender Zugriff intern in nur 3 Takten abläuft. Die eingesparten zwei Takte kann der Chip nutzen, um bereits in der Queue befindliche Befehle zu verarbeiten. Dies ist dadurch möglich, daß der PowerPC mit den ersten Takten des Bursts zunächst die Daten aus dem Hauptspeicher oder 2nd-Level-Cache lädt, die er benötigt. Die weiteren Elemente der Cache-Line lädt er später nach. Der Load-Buffer besitzt zwei Stufen, beim Store-Buffer sind drei Zwischenspeicher vorgesehen. Einen integrierten Controller für den 2nd-Level-Cache, wie ihn die ,besseren' Versionen des R4400 enthalten, gibt es beim 601 nicht.

Wie der Pentium unterstützt auch der PowerpC das Datenkohärenz-Protokoll MESI auf Hardware-Ebene. Der Aufbau von Multiprozessorsystemen wird damit wesentlich erleichtert.

Registerset und Branch Prediction

Der PowerPC 601 besitzt jeweils 32 Rechenregister für die Floatingpoint- und die Integer-Einheiten. Seine superskalare Architektur erlaubt es, maximal drei Befehle gleichzeitig auszuführen - vorausgesetzt, sie beziehen sich auf verschiedene Funktionsblöcke der CPU. IBM und Motorola zählen die FPU, die Integer-Unit und die Branch Prediction Unit (BPU) als eigenständige Funktionsblöcke.

Die Verteilung der Befehle auf diese Blöcke übernimmt die In- struction Unit. Sie besteht aus einer achtstufigen Instruction Queue, auf deren untere vier Stufen (Q0-Q3) sowohl die FPU als auch die BPU parallel zugreifen können. Beide Einheiten haben so die Möglichkeit, für sie bestimmte Befehle auszufiltern und diese intern auch ,außer der Reihe zu bearbeiten. Zusätzliche Logik sorgt dafür, daß die Ergebnisse dieser Operationen nach außen hin in der vorgesehenen Reihenfolge erscheinen.

Die Branch Preduction Unit im 601 arbeitet statisch. Ein Flag legt fest, ob der abweisende oder der normale Pfad einer bedingten Verzweigung berechnet wird. Im Normalfall berechnet die BPU den nichtabweisenden Teil einer bedingten Verzweigung. Der Programmierer kann das Verhalten der BPU an die eigene Software anpassen.

Die Zuständigkeit der Integer-Unit beschränkt sich beim PowerPC nicht nur auf arithmetische Instruktionen, wie beim Mips R4400, sie ist auch für die Abwicklung von Load- und Store-Befehlen verantwortlich. Das Nachladen von FPU-Registern gehört ebenfalls zu ihren Aufgaben. Über den genauen Aufbau der Integer- und Floatingpoint-Pipeline schweigen sich IBM und Motorola allerdings aus. Verraten wird nur, daß beide Einheiten voll pipelined arbeiten, also mit jedem Takt einen neuen Befehl laden können.


krupp@unix-ag.uni-kl.de