DE69130495T2 - Umwandlung der Befehle von internen Prozessorregistern in I/O-Adressraum - Google Patents
Umwandlung der Befehle von internen Prozessorregistern in I/O-AdressraumInfo
- Publication number
- DE69130495T2 DE69130495T2 DE69130495T DE69130495T DE69130495T2 DE 69130495 T2 DE69130495 T2 DE 69130495T2 DE 69130495 T DE69130495 T DE 69130495T DE 69130495 T DE69130495 T DE 69130495T DE 69130495 T2 DE69130495 T2 DE 69130495T2
- Authority
- DE
- Germany
- Prior art keywords
- bus
- address
- data
- unit
- instruction
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Lifetime
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
- G06F9/30038—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/3012—Organisation of register space, e.g. banked or distributed register file
- G06F9/30134—Register stacks; shift registers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/3012—Organisation of register space, e.g. banked or distributed register file
- G06F9/30138—Extension of register space, e.g. register cache
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
- G06F9/3016—Decoding the operand specifier, e.g. specifier format
- G06F9/30167—Decoding the operand specifier, e.g. specifier format of immediate specifier, e.g. constants
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3802—Instruction prefetching
- G06F9/3804—Instruction prefetching for branches, e.g. hedging, branch folding
- G06F9/3806—Instruction prefetching for branches, e.g. hedging, branch folding using address prediction, e.g. return stack, branch history buffer
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3838—Dependency mechanisms, e.g. register scoreboarding
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3854—Instruction completion, e.g. retiring, committing or graduating
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3854—Instruction completion, e.g. retiring, committing or graduating
- G06F9/3856—Reordering of instructions, e.g. using queues or age tags
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3854—Instruction completion, e.g. retiring, committing or graduating
- G06F9/3858—Result writeback, i.e. updating the architectural state or memory
-
- F—MECHANICAL ENGINEERING; LIGHTING; HEATING; WEAPONS; BLASTING
- F02—COMBUSTION ENGINES; HOT-GAS OR COMBUSTION-PRODUCT ENGINE PLANTS
- F02B—INTERNAL-COMBUSTION PISTON ENGINES; COMBUSTION ENGINES IN GENERAL
- F02B75/00—Other engines
- F02B75/02—Engines characterised by their cycles, e.g. six-stroke
- F02B2075/022—Engines characterised by their cycles, e.g. six-stroke having less than six strokes per cycle
- F02B2075/025—Engines characterised by their cycles, e.g. six-stroke having less than six strokes per cycle two
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/08—Error detection or correction by redundancy in data representation, e.g. by using checking codes
- G06F11/10—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
- G06F11/1008—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
- G06F11/1064—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices in cache or content addressable memories
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/22—Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Advance Control (AREA)
- Executing Machine-Instructions (AREA)
Description
- Diese Anmeldung offenbart einen Gegenstand, der auch in den folgenden zugehörigen Anmeldungen offenbart ist, die mit dieser eingereicht wurden und Digital Equipment Corporation, dem Zessionar dieser Erfindung, gehören:
- Die Anmeldung mit der NR. 07/547,824, eingereicht am 29. Juni 1990, mit dem Titel CACHE SET SELECTION FOR HIGH-PERFORMANCE PROCESSOR, von den Erfindern William Wheeler und Jeanne Meyer, die der EP-A-0 463 967 entspricht;
- die Anmeldung mit der Nr. 07/547,804, eingereicht am 29. Juni 1990, mit dem Titel BRANCH PREDICTION UNIT FOR HIGH-PERFORMANCE PROCESSOR, von den Erfindern John Brown, III, Jeanne Meyer and Shawn Persels, die der EP-A-0 463 965 entspricht;
- die Anmeldung mit der Nr. 07/547,603, eingereicht am 29. Juni 1990, mit dem Titel HIGH-PERFORMANCE MULTI-PROCESSOR HAVING FLOATING POINT UNIT, von den Erfindern Anil Jain, David Deverell und Gilbert Wolrich, die der EP-A-0 463 966 entspricht;
- die Anmeldung mit der Nr. 07/547,944, eingereicht am 29. Juni 1990, mit dem Titel MASK PROCESSING UNIT FOR HIGH-PERFORMANCE PROCESSOR, von den Erfindern Elizabeth Cooper und Robert Supnik, die der EP-A-0 468 937 entspricht;
- die Anmeldung mit der Nr. 07/547,699, eingereicht am 29. Juni 1990, mit dem Titel BUS PROTOCOL FOR HIGH-PERFORMANCE PROCESSOR, von den Erfindern Rebecca Stamm, David Archer, John Edmondson, Samyojita Nadkarni und Raymond Strouble, die der EP-A-0 468 831 entspricht;
- die Anmeldung mit der Nr. 071547,995, eingereicht am 29. Juni 1990, mit dem Titel CONVERSION OF INTERNAL PROCESSOR REGISTER COMMANDS TO I/O SPACE ADDRESSES, von den Erfindern Rebecca Stamm und G. Michael Uhler, die der EP-A-0 466 550 entspricht;
- die Anmeldung mit der Nr. 07/547,597, eingereicht am 29. Juni 1990, mit dem Titel ERROR TRANSITION MODE FOR MULTI-PROCESSOR SYSTEM, von den Erfindern Rebecca Stamm, Iris Bahar, Michael Callander, Linda Chao, Dirk Meyer, Douglas Sanders, Richard Sites, Raymond Strouble & Nicholas Wade, die der EP- A-0 465 319 entspricht; und
- die Anmeldung mit der Nr. 07/547,850, eingereicht am 29. Juni 1990, mit dem Titel COMBINED QUEUE FOR INVALIDATES AND RETURN DATA IN MULTIPROCESSOR SYSTEM, von den Erfindern Gregg Bouchard und Lawrence Chisvin, die der EP-A-0 465 320 entspricht.
- Diese Erfindung betrifft digitale Computer, und insbesondere verbesserte CPU- Vorrichtungen von dem Typ, die als integrierte Einchip-Schaltungen aufgebaut sind.
- Ein großer Teil der existierenden Software-Basis, die eine sehr große Investition in bezug auf ein Schreiben eines Codes, Datenbankstrukturen und eine Ausbildung von Personal darstellt, ist für Prozessoren vom Typ mit komplexem Befehlssatz oder vom CISC-Typ. Diese Typen von Prozessoren sind dadurch charakterisiert, daß sie eine große Anzahl von Befehlen in ihrem Befehlssatz haben, die oft Speicher-zu-Speicher-Befehle mit komplexen Speicherzugriffsmoden enthalten. Die Befehle sind für gewöhnlich von variabler Länge, wobei einfache Befehle eine Länge von vielleicht nur einem Byte haben, die Länge aber bis zu Dutzenden von Bytes reicht. Der VAXTM-Befehlssatz ist ein primäres Beispiel für CISC und verwendet Befehle mit Operationscodes mit einem bis zwei Bytes plus null bis sechs Operandenspezifizierern, wobei jeder Operandenspezifizierer eine Länge von einem Byte bis zu vielen Bytes hat. Die Größe des Operandenspezifizierers hängt vom Adressierungsmode, der Größe eines Versatzes bzw. einer Distanzadresse (Byte, Wort oder Langwort), etc. ab. Das erste Byte des Operandenspezifizierers beschreibt den Adressierungsmode für jenen Operanden, während der Operationscode die Anzahl von Operanden definiert: Eins, Zwei oder Drei. Wenn der Operationscode selbst decodiert wird, ist dem Prozessor jedoch die Gesamtlänge des Befehls noch nicht bekannt, weil die Operandenspezifizierer noch nicht decodiert worden sind. Eine weitere Eigenschaft von Prozessoren vom VAX-Typ besteht in der Verwendung von Byte- oder Byteketten-Speicherreferenzen zusätzlich zu Quadwort- oder Langwort-Referenzen; das bedeutet, daß eine Speicherreferenz eine Länge haben kann, die von einem Byte bis zu mehreren Worten variabel ist, einschließlich nicht ausgerichteter Byte-Referenzen.
- Die Vielfältigkeit von mächtigen Befehlen, Speicherzugriffsmoden und Datentypen, die bei einer VAX-Typ-Architektur verfügbar sind, sollte darin resultieren, daß mehr Arbeit für jede Zeile eines Codes durchgeführt wird (tatsächlich erzeugen Compiler keinen Code, der diesen Vorteil vollständig ausnutzt). Welcher Gewinn auch immer bei einer Kompaktheit eines Quellencodes erreicht wird, geht auf die Kosten der Ausführungszeit. Insbesondere deshalb, weil eine pipelinemäßige Anordnung einer Befehlsausführung notwendig geworden ist, um ein Ausmaß an Leistungsfähigkeit zu erreichen, das gegenwärtig von Systemen gefordert wird, erzeugen die Daten- oder Zustandsabhängigkeiten von aufeinanderfolgenden Befehlen und die sehr großen Unterschiede in bezug auf eine Speicherzugriffszeit gegenüber einer Maschinenzykluszeit überaus große Verzögerungen und Ausnahmen, was eine Ausführung verlangsamt.
- Wenn CPUs sehr viel langsamer als ein Speicher wären, wäre es vorteilhaft, mehr Arbeit pro Befehl durchzuführen, weil die CPU sonst immer darauf zu warten hätte, daß der Speicher Befehle ausgibt - dieser Faktor führt zu komplexeren Befehlen, die zusammenfaßten, was sonst als Unterprogramme implementiert werden würde. Wenn die CPU- und Speicher-Geschwindigkeiten ausgeglichener würden, werden die Vorteile komplexer Befehle verringert, wenn angenommen wird, daß das Speichersystem einen Befehl und einige Daten in jedem Zyklus ausgeben kann. Hierarchische Speichertechniken sowie schnellere Zugriffszyklen und eine größere Speicherzugriffs-Bandbreite stellen diese schnelleren Speichergeschwindigkeiten zur Verfügung. Ein weiterer Faktor, der die Wahl eines komplexen Befehlstyps gegenüber einem einfachen Befehlstyp beeinflußt hat, ist die Änderung in bezug auf relative Kosten für eine Verwendung außerhalb des Chips gegenüber einer Verwendung auf dem Chip, was aus einem VLSI-Aufbau von CPUs resultiert. Ein Aufbau auf Chips statt auf Leiterplatten ändert die Wirtschaftlichkeit; zuerst lohnt es sich, die Architektur einfach genug zu machen, um auf einem Chip zu sein, und dann ist ein Mehr an Einchip-Speicher möglich (und wird benötigt), um zu vermeiden, daß man für Speicherreferenzen vom Chip nach außen geht. Ein weiterer Faktor bei dem Vergleich ist, daß ein Hinzufügen von mehr komplexen Befehlen und Adressierungsmoden, wie bei einer CISC-Lösung, Stufen des Befehlsausführungsprozesses kompliziert (und somit verlangsamt). Die komplexe Funktion könnte die Funktion schneller ausführen lassen als eine äquivalente Sequenz einfacher Befeh le, aber sie kann die Befehlszykluszeit verlängern, was alle Befehle langsamer ausführen läßt; somit muß eine hinzugefügte Funktion die Gesamtleistungsfähigkeit genügend erhöhen, um die Verschlechterung in bezug auf die Befehlsausführungs-Geschwindigkeit zu kompensieren.
- Trotz der Leistungsfähigkeitsfaktoren, die die theoretischen Vorteile von CISC- Prozessoren schmälern, sorgt die existierende Software-Basis, wie sie oben diskutiert ist, für eine langzeitige Nachfrage nach diesen Typen von Prozessoren und natürlich fordert der Markt ein immer größeres Ausmaß an Leistungsfähigkeit. Geschäftsunternehmen haben viele Jahre des betrieblichen Werdegangs, einschließlich einer Bedienerausbildung sowie der Kosten des Codes selbst, in Anwenderprogramme und Datenstrukturen investiert, die die CISC-Typ-Prozessoren verwenden, die in den vergangenen zehn oder fünfzehn Jahren am weitesten verbreitet verwendet wurden. Die Kosten und die Unterbrechung für Arbeiten zum Neuschreiben aller Code- und Datenstrukturen zur Anpassung an eine neue Prozessorarchitektur kann selbst dann nicht gerechtfertigt sein, wenn die Vorteile bezüglich der Leistungsfähigkeit wesentlich wären, von denen letztlich erwartet wird, daß sie erreicht werden. Demgemäß ist es das Ziel, eine hohe Leistungsfähigkeit bei einer CPU zu schaffen, die einen Befehlssatz von dem Typ ausführt, der Befehle variabler Länge und variable Datenbreiten beim Zugreifen auf einen Speicher verwendet.
- Die typische VAX-Implementierung hat drei Hauptteile, nämlich die I-Box oder Befehlseinheit, die Befehle holt und decodiert, die E-Box oder Ausführungseinheit, die die Operationen durchführt, die durch die Befehle definiert sind, und die M-Box oder Speichermanagementeinheit, die Speicher und I/O-Funktionen behandelt. Ein Beispiel dieser VAX-Systeme ist im US-Patent 4,875,160 gezeigt, das John F. Brown am 17. Oktober 1989 erteilt wurde und Digital Equipment Corporation übertragen ist. Diese Maschinen sind unter Verwendung einer Einchip-CPU-Vorrichtung aufgebaut, die mit sehr hohen Raten getaktet sind, und sind mikrocodiert und pipelinemäßig angeordnet.
- Theoretisch kann ein Prozessor dann, wenn die Pipeline voll gehalten werden kann und in jedem Zyklus ein Befehl ausgegeben werden kann, einen Befehl pro Zyklus ausführen. In einer Maschine mit komplexen Befehlen gibt es mehrere Beschränkungen, die einem Erreichen dieses Ideals entgegenstehen. Als erstes ist bei Befehlen variabler Größe bis vielleicht nach mehreren Zyklen in seine Decodierung hinein die Länge des Befehls nicht bekannt. Die Anzahl von Operationscode-Bytes kann variieren, die Anzahl von Operanden kann variieren und die Anzahl von zum Spezifizieren eines Operanden verwendeten Bytes kann variieren. Die Befehle müssen eher in Aufeinanderfolge decodiert werden, als daß ein paralleles Decodieren praktisch ist. Als zweites erzeugen Datenabhängigkeiten Blasen in der Pipeline, wenn Ergebnisse, die durch einen Befehl erzeugt werden, aber noch nicht verfügbar sind, durch einen nachfolgenden Befehl benötigt werden, der zur Ausführung bereit ist. Als drittes macht es die weite Vielfalt in bezug auf die Befehlskomplexität unpraktisch, die Ausführung zu implementieren, ohne entweder die Pipeline für jeden Befehl zu verlängern (was das Datenabhängigkeitsproblem verschlechtert) oder einen Eintrag zu verzögern (was Blasen erzeugt).
- Somit behindern die der Architektur eigenen Eigenschaften, trotz der Verwendung einer gleichzeitigen Halbleiterverarbeitung und hoher Taktraten zum Erreichen der dynamischsten Leistungsfähigkeit auf der Vorrichtungsebene, die Gesamtleistungsfähigkeit, und so muß eine Anzahl von Merkmalen bei einer Anstrengung zum Bereitstellen einer Systemleistungsfähigkeit, wie sie gefordert wird, ausgenutzt werden.
- Gemäß einem Ausführungsbeispiel der Erfindung, das eine Anzahl charakteristischer Merkmale zeigt, ist eine Pipeline-CPU vorgesehen, die Befehle variabler Länge ausführen kann und die auf einen Speicher unter Verwendung verschiedener Datenbreiten Bezug nehmen kann. Die Leistungsfähigkeit wird durch eine Anzahl der Merkmale erhöht.
- Eine pipelinemäßige Verarbeitung von Makrobefehlen bzw. eine Makrobefehls- Überlappung wird verwendet (anstelle einer Mikrobefehls-Überlappung), so daß zu einer gegebenen Zeit eine Anzahl von Makrobefehlen bei verschiedenen Stufen der Pipeline sein kann. Ein Anordnen in einer Warteschlange ist zwischen Einheiten der CPU vorgesehen, so daß es ein gewisses Maß an Flexibilität in bezug auf Befehlsausführungszeiten gibt; die Ausführung von Stufen eines Befehls muß nicht immer auf die Beendigung dieser Stufen durch einen vorangehenden Befehl warten. Statt dessen können die durch eine Stufe erzeugten Informationen in einer Warteschlange angeordnet werden, bis die nächste Stufe bereit ist.
- Ein weiteres Merkmal besteht in der Verwendung einer breiten Bandbreite für einen Speicherzugriff; ein Holen von 64-Bit-Datenblöcken bei jedem Zyklus des System busses oder der Caches, bei schnelleren Zykluszeiten, stellt eine erhöhte Leistungsfähigkeit zur Verfügung. Nichtsdestoweniger sind noch ein Byte und ein Bytekettentyp von Speicherreferenzen verfügbar, so daß eine existierende Software und existierende Datenstrukturen nicht veraltet sind. Jedoch erhöhen die breiteren Datenpfade und die breitere Speicherbandbreite sowie eine hierarchische Speicherorganisation die Wahrscheinlichkeit von Cache-Treffern und reduzieren so die Belastung, die dem Speicher durch die Byte-Operationen auferlegt wird.
- Die in der CPU des offenbarten Beispiels verwendete hierarchische Cache- Anordnung sowie ein verbessertes Verfahren einer Cache-Gruppenauswahl erhöhen die Wahrscheinlichkeit, daß alle Speicherreferenzen zu Daten sind, die im Cache anstatt im Speicher sind. Insbesondere verwendet eine Gruppenauswahltechnik einen Nicht-Zuletzt-Verwendet-Auffüllalgorithmus, der verbessert ist, um ein Auffüllen zu einem Block im Cache zu richten, der das Ziel einer Ungültigkeit gewesen ist, und so bleiben die Datenblöcke, für die es am wahrscheinlichsten ist, daß sie verwendet werden, eher im Cache, als daß sie durch eine Auffüllung überschrieben werden.
- Ein zusätzliches Merkmal ist die Verwendung eines Rückschreib-Caches für wenigstens einen Teil des hierarchischen Speichers (anstelle eines Durchschreibens, das mehr Speicherreferenzen benötigt) und ein Zulassen, daß ein Zurückschreiben selbst dann fortfährt, wenn andere Zugriffe deshalb unterdrückt werden, weil Warteschlangen voll sind. Somit ist ein Merkmal die Fähigkeit, Rückschreiboperationen zu separieren, um in einer Rückschreib-Cacheumgebung fortzufahren, während andere Typen von Datenzugriffen bei der CPU-zu-Bus-Schnittstelle verzögert werden.
- Eine besondere Verbesserung wird durch ein in der CPU bei einem Ausführungsbeispiel enthaltenes Verzweigungsvorhersageverfahren erhalten. Verzweigungen verschlechtern von einem Zyklen-pro-Befehl-Standpunkt aus die Leistungsfähigkeit bei einem Pipeline-Prozessor, weil, wann immer eine Verzweigung genommen wird, die zuvor geholten Befehle in der Pipeline ausgeräumt werden müssen und ein neuer Befehlsstrom gestartet werden muß. Durch Verwenden einer Verzweigungs-Vorgeschichtentabelle, die die Vorgeschichte für genommen gegenüber nicht genommen von zuletzt verwendeten Verzweigungs-Operationscodes aufzeichnet, und durch Verwenden eines empirischen Algorithmus zum Vorhersagen, welchen Weg das nächste Auftreten dieser Verzweigung gehen wird, basierend auf der Vorgeschichtentabelle, wird ein verbessertes Vorhersageergebnis erhalten. Daher wird die Leistungsfähigkeit durch Verringern der Möglichkeiten verbessert, daß der Befehlsstrom umzuleiten bzw. erneut auszurichten ist.
- Eine Gleitkomma-Prozessorfunktion ist bei einem Ausführungsbeispiel eher auf dem Chip integriert, als daß sie außerhalb des Chips ist. Die Geschwindigkeit einer Ausführung eines Gleitkomma-Befehls wird somit erhöht, da die Belastung eines Gehens durch zwei Bus-Schnittstellen und einen externen Bus eliminiert wird und für diesen Zweck keine Bandbreite des externen Busses verwendet wird. Zusätzlich wird die Anzahl von Zyklen einer Verzögerung von der Zeit an, zu der eine Operation zu einer Gleitkomma-Einheit auf dem Chip gesendet wird, bevor ein Ergebnis zurückgesendet wird, durch eine Umgehungstechnik reduziert. Es ist zu beachten, daß die Rundungsoperation bei den normalerweise am häufigsten verwendeten Funktionen nur an den niederwertigen Bits durchgeführt werden muß, anstatt in bezug auf die gesamte Datenbreite, so daß ein versuchsweises minimales Runden durchgeführt werden kann, um zu sehen, ob das Ergebnis richtig ist, und wenn es so ist, kann die letzte Stufe des Gleitkomma-Prozessors umgangen werden, was einen Zyklus einer Latenzzeit einspart.
- Eines der Ereignisse, das eine Verzögerung bei einer Ausführung in einer CPU einführt, ist das Auftreten eines Befehls, wie beispielsweise von AUFRUF bzw. CALL, wobei ein Zustand der CPU für einen Rücksprung gesichert werden muß. Insbesondere haben die CPUs nach dem Stand der Technik von dem Typ, der hierin offenbart ist, wie es im Patent 4,875,160 gezeigt ist, Mikrocode-Sequenzen verwendet, um jedes der notwendigen Register einer Registergruppe bzw. eines Registersatzes zu einem Stapel zu sichern bzw. zu speichern. Zum genauen Bestimmen, welche Register gesichert werden müssen, ist es die Praxis gewesen, Mikrocode-Routinen aufzurufen, um jede Position einer Register-Maske zu prüfen, was wenigstens einen Zyklus für jedes Register des Registersatzes benötigt. Anstelle des länger dauernden Verfahrens ist ein Merkmal der hierin präsentierten CPU die Möglichkeit, in einer minimalen Anzahl von Zyklen zu bestimmen, welche Register gesichert werden müssen, und zwar durch gleichzeitiges Untersuchen von Gruppen der Register-Maskenbits. In den am häufigsten vorkommenden Situationen müssen nur einige wenige Register gesichert werden, und so ist das meiste der Register-Maske Nullen und kann in äußerst wenigen Zyklen abgetastet werden.
- Die vorliegende Erfindung ist eine weitere Technik zum günstigen Beeinflussen der Leistungsfähigkeit (Geschwindigkeit), der Leistungsdissipation, der Kosten und der Zuverlässigkeit einer Einchip-CPU-Vorrichtung. Dies wird durch Minimieren des Chipbereichs durch eine Reduzierung der Anzahl und der Länge von internen Bussen und Signalpfaden erreicht. Die CPU greift auf ihre internen Verarbeitungsregister mit kurzen (byte-breiten) Adressen zu, anstatt mit vollständigen physikalischen Adressen, wie sie für Speicher- und I/O-Referenzen verwendet werden. Es gibt eine Anzahl von Prozessor-Registern (Speicher für einen Status und ähnliches) und zwar einige interne (auf dem Chip) und einige externe (außerhalb des Chips). Vorzugsweise sind die externen Prozessor-Register speicher-abgebildet, und auf sie wird durch dieselben Busse und unter Verwendung derselben Steuerungen wie für die Speicher- und I/O-Vorrichtungen zugegriffen, so daß für jene Register kein anderer Platz für Steuersignale implementiert werden muß. Jedoch deshalb, weil es eine relativ kleine Anzahl von internen Prozessor-Registern gibt, ist ein kleiner Adressenraum adäquat, d. h. ein voller I/O-Adressenraum kann vermieden werden. Demgemäß werden eine kurze Adresse und einige wenige zusätzliche Steuerleitungen verwendet, um auf die internen Prozessor-Register zuzugreifen. Somit wird eine Reduzierung der Anzahl interner Leitungen erreicht.
- Wenn ein Rückschreib-Cache in einem hierarchischen Speichersystem verwendet wird, kann der Cache zeitweilig die einzige gültige Kopie bestimmter Daten enthalten. Wenn der Cache ausfällt, wie es durch einen durch ECC-Schaltungen oder ähnliches erfaßten nicht behebbaren Fehler demonstriert wird, ist es nötig, daß die Daten, die dem Cache gehören, für das System verfügbar sind, da dies die einzige Kopie sein kann. Weiterhin werden die Daten im Cache für Diagnosezwecke vorzugsweise in einem nicht zerstörten Zustand gehalten. Somit kann der Cache weder lediglich ausgeschaltet werden, noch kann er weiterhin auf normale Weise betrieben werden. Demgemäß ist ein Fehlerübergangsmode vorgesehen, wobei der Cache unter beschränkten Zugriffsregeln arbeitet, was ein Maximum von Zugriffen durch das System zuläßt, um Datenblöcke zu verwenden, die dem Cache gehören, aber dennoch Änderungen in bezug auf die Cache-Daten minimiert.
- Im hierin vorgestellten Computersystem werden Daten gepuffert oder in einer Warteschlange angeordnet, wann immer es möglich ist, so daß die verschiedenen Bauteile unabhängig voneinander arbeiten können, wann immer es möglich ist, was beispielsweise zuläßt, daß viele Bustransaktionen initiiert werden, ohne notwendigerweise zu warten, bis vor dem Beginn einer anderen eine gegebene (Bustransaktion) beendet ist. Ein Beispiel von Bustransaktionen, die in einer Warteschlange angeordnet sind, sind die ankommenden gelesenen zurückgebrachten Daten und Cache-Ungültigkeitsoperationen. Der Systembus bringt gelesene Daten zurück, wann immer der Speicher einen Zugriffszyklus beendet, und eine Schnittstelle ist vorgesehen, um diese gelesenen zurückgebrachten Daten in einer Warteschlange anzuordnen, bis die CPU sie annehmen kann. Zwischenzeitlich wird das gesamte Schreiben, das auf dem Systembus auftritt, durch eine CPU in einer Multiprozessorumgebung überwacht, um ihren Cache in einem Zustand nach einem Updaten zu halten; jede derartige Transaktion wird Ungültigkeitserklärung genannt und besteht aus der Adressen-Kennung (nicht die gesamte Adresse wird benötigt) für einen Datenblock, für den ein Schreiben zum Speicher durch einen anderen Prozessor ausgeführt wird. Zum Beibehalten einer Cachekohärenz müssen die gelesenen zurückgebrachten Daten und Ungültigkeitserklärungen in einer chronologischen Reihenfolge gehalten werden, d. h. im Cache in der Reihenfolge ausgeführt werden, in der sie auf dem Systembus erscheinen. Somit müssen sie in einem FIFO-Typ eines Puffers in einer Warteschlange angeordnet werden. Jedoch ist die Datenbreite für eine Ungültigkeitserklärung viel kleiner als diejenige für gelesene zurückgebrachte Daten, und es gibt viel mehr Ungültigkeitserklärungen als gelesene zurückgebrachte Daten, so daß durch Verwenden einer Warteschlangenbreite, die für die gelesenen zurückgebrachten Daten erforderlich ist, Chip-Platz verschwendet wird, wenn ein geringer Teil der Breite für den Großteil des Verkehrsaufkommens benötigt wird. Dafür sind separate Warteschlangen für die unterschiedlichen Typen von Transaktionen vorgesehen, aber die Reihenfolge wird durch eine Zeigeranordnung dennoch beibehalten.
- Das durch die CPU verwendete Bus-Protokoll zum Kommunizieren mit dem Systembus ist darin vom anhängigen Typ, daß mehrere Transaktionen zu einer gegebenen Zeit auf dem Bus anhängig sein können. Die Lese- und Schreib- Transaktionen auf dem Bus werden durch ein ID-Feld identifiziert, das die Ursprungseinheit oder die ursprüngliche Bus-Befehlseinheit für jede Transaktion spezifiziert. Daher wird dann, wenn die gelesenen zurückgebrachten Daten einige Zyklen nach einer Anfrage erscheinen, das ID-Feld durch eine CPU erkannt, so daß sie die Daten vom Bus annehmen kann. Eine weitere charakteristische Eigenschaft des Busses besteht darin, daß eine Zuteilung für eine Bus-Gewährung gleichzeitig mit Adressen/Daten-Transaktionen auf dem Bus einhergeht, und somit ist jeder Zyklus ein aktiver Zyklus, wenn der Verkehr es fordert.
- Die neuen Merkmale, von denen angenommen wird, daß sie charakteristisch für die Erfindung sind, sind in den beigefügten Ansprüchen gezeigt. Jedoch wird die Erfindung selbst, sowie andere Merkmale und Vorteile von ihr, am besten durch Bezugnahme auf die detaillierte Beschreibung eines spezifischen Ausführungsbeispiels verstanden, wenn sie in Zusammenhang mit den beigefügten Zeichnungen gelesen wird, wobei:
- Fig. 1 ein elektrisches Diagramm eines Computersystems in Blockform ist, das eine zentrale Verarbeitungseinheit gemäß einem Ausführungsbeispiel der Erfindung enthält;
- Fig. 2 ein elektrisches Diagramm eines Computersystems wie in Fig. 1 in Blockform gemäß einer alternativen Konfiguration ist;
- Fig. 3 ein Diagramm von Datentypen ist, die im System der Fig. 1 verwendet werden;
- Fig. 4 ein Zeitdiagramm der Vier-Phasen-Takte ist, die durch einen Taktgenerator in der CPU der Fig. 1 oder 2 erzeugt werden und die innerhalb der CPU verwendet werden, zusammen mit einem Zeitdiagramm des Buszyklus und der Takte, die zum Definieren des Buszyklus im System der Fig. 1 verwendet werden;
- Fig. 5 ein elektrisches Diagramm der zentralen Verarbeitungseinheit (CPU) des Systems der Fig. 1 oder 2 in Blockform gemäß einem Ausführungsbeispiel der Erfindung ist;
- Fig. 6 ein Zeitdiagramm ist, das Ereignisse zeigt, die in der Pipeline-CPU 10 der Fig. 1 in aufeinanderfolgenden Maschinenzyklen auftreten;
- Fig. 7 ein elektrisches Diagramm der CPU der Fig. 1 in Blockform ist, angeordnet in einem zeitsequentiellen Format, wobei die pipelinemäßige Anordnung der CPU gemäß der Fig. 6 gezeigt ist;
- Fig. 8 ein elektrisches Diagramm in Blockform der Befehlseinheit der CPU der Fig. 1 ist;
- Fig. 9 ein elektrisches Diagramm in Blockform der komplexen Spezifizierereinheit ist, die in der CPU der Fig. 1 verwendet wird;
- Fig. 10 ein elektrisches Diagramm in Blockform des virtuellen Befehlscaches ist, der in der CPU der Fig. 1 verwendet wird;
- Fig. 11 ein elektrisches Diagramm in Blockform der Hervorhol-Warteschlange ist, die in der CPU der Fig. 1 verwendet wird;
- Fig. 12 ein elektrisches Diagramm in Blockform der Test- bzw. Auswertungskarteneinheit ist, die in der CPU der Fig. 1 verwendet wird;
- Fig. 13 ein elektrisches Diagramm in Blockform der Verzweigungsvorhersageneinheit ist, die in der CPU der Fig. 1 verwendet wird;
- Fig. 14 ein elektrisches Diagramm in Blockform der Mikrobefehlssteuereinheit der CPU der Fig. 1 ist, einschließlich der Mikro-Ablaufsteuerung und des Steuerspeichers;
- Fig. 15 ein Diagramm der Formate von Mikrobefehlsworten ist, die durch den Steuerspeicher der Fig. 14 erzeugt werden;
- Fig. 16 ein elektrisches Diagramm in Blockform der Ausführungsbeispiel der CPU der Fig. 1 ist;
- Fig. 17 ein elektrisches Diagramm der Speichermanagementeinheit der CPU der Fig. 1 ist;
- Fig. 18 ein elektrisches Diagramm in Blockform des primären Cache- oder P- Cache-Speichers der CPU der Fig. 1 ist;
- Fig. 18a ein Diagramm des im primären Cache der Fig. 18 gespeicherten Datenformats ist;
- Fig. 19 ein elektrisches Diagramm in Blockform der Cachesteuereinheit oder C-Box in der CPU der Fig. 1 ist;
- Fig. 20 ein elektrisches Diagramm in Blockform der Gleitkomma- Ausführungseinheit oder F-Box in der CPU der Fig. 1 ist;
- Fig. 21 ein Zeitdiagramm von Ereignissen ist, die auf dem CPU-Bus im System der Fig. 1 auftreten;
- Fig. 22 ein elektrisches Diagramm der Leitungen ist, die im CPU-Bus im System der Fig. 1 verwendet werden;
- Fig. 23 ein elektrisches Diagramm in Blockform der Bus-Schnittstelle und der Zuteiler-Einheit des Computersystems der Fig. 1 ist; und
- Fig. 24 ein elektrisches Diagramm in Blockform der Ungültigkeitserklärungs- Warteschlange und der Warteschlange für zurückgebrachte Daten in der Bus-Schnittstelle und der Zuteiler-Einheit der Fig. 23 ist.
- Fig. 25 ist ein Funktionsdiagramm der Fig. 24.
- Nimmt man Bezug auf Fig. 1, enthält gemäß einem Ausführungsbeispiel ein Computersystem, das Merkmale der Erfindung verwendet, einen CPU-Chip oder ein Modul 10, das durch einen Systembus 11 mit einem Systemspeicher 12 und mit I/O-Elementen 13 verbunden ist. Obwohl die CPU 10 bei einem bevorzugten Ausführungsbeispiel auf einem einzelnen integrierten Schaltkreis ausgebildet ist, können einige Gedanken, wie sie nachfolgend beschrieben sind, als Chip-Satz implementiert werden, der auf einer einzelnen Leiterplatte oder auf mehreren Leiterplatten montiert ist. Wenn sie Befehle oder Daten holt, greift die CPU 10 auf einen internen oder primären Cache 14 zu, und dann auf einen größeren externen oder Backup-Cache 15. Somit wird ein hierarchischer Speicher verwendet, wobei der schnellste der primäre Cache 14 ist, der nächstschnellste der Backup-Cache 15, dem der Hauptsystemspeicher 12 folgt, dem normalerweise ein Plattenspeicher 16 folgt, auf den durch die I/O-Elemente 13 unter Verwendung eines Betriebssystems (d. h. Software) zugegriffen wird. Eine virtuelle Speicherorganisation wird verwendet, wobei ein Seiten-Swapping zwischen der Platte 16 und dem Speicher 12 zum Halten der Seiten im physikalischen Speicher 12 verwendet wird, für die es am wahrscheinlichsten ist, daß sie verwendet werden. Ein zusätzlicher Cache 17 in der CPU 10 speichert nur Befehle unter Verwendung der virtuellen Adressen anstelle von physikalischen Adressen. Physikalische Adressen werden zum Zugreifen auf den primären Cache 14 und den Backup-Cache 15 verwendet und werden auf dem Bus 11 und im Speicher 12 verwendet. Wenn die CPU 10 einen Befehl holt, wird zuerst der virtuelle Befehlscache 17 geprüft, und wenn ein Cache-Nichttreffer auftritt, wird die Adresse in eine physikalische Adresse umgesetzt, und der primäre Cache 14 wird geprüft. Wenn der Befehl nicht im primären Cache ist, wird auf den Backup-Cache 15 zugegriffen, und auf einen Cache-Nichttreffer im Backup-Cache hin wird auf den Speicher 12 zugegriffen. Der primäre Cache 14 ist kleiner aber schneller als der Backup-Cache 15, und der Inhalt des primären Caches 14 besteht in einer Untergruppe des Inhalts des Backup-Caches 15. Der virtuelle Befehls- Cache 17 unterscheidet sich von dem Betrieb der anderen zwei Caches 14 und 15 darin, daß es kein Schreiben zum Cache 17 von der CPU 10 gibt, außer dann, wenn Befehle geholt werden, und ebenso muß der Inhalt dieses Caches 17 keine Untergruppe des Inhalts der Caches 14 oder 15 sein, obwohl er es sein kann.
- Die CPU 10 greift auf den Backup-Cache 15 durch einen Bus 19 zu, der separat von einem CPU-Bus 20 ist, der zum Zugreifen auf den Systembus 11 verwendet wird; somit ist eine Cache-Steuerung für den Backup-Cache 15 innerhalb des CPU-Chips enthalten. Sowohl der CPU-Bus 20 als auch der Systembus 11 sind bidirektionale 64-Bit-Multiplex-Adressen/Daten-Busse, die durch Steuerbusse begleitet werden, die Anfrage-, Gewährungs-, Befehlsleitungen, etc. enthalten. Der Bus 19 hat jedoch einen 64-Bit-Datenbus und separate Adressenbusse. Der Systembus 11 ist mit dem CPU-Bus 20 durch eine Schnittstelleneinheit 21 verbunden, die zum Zuteilen eines Zugriffs durch die CPU 10 und die anderen Komponenten auf den CPU-Bus 20 funktioniert bzw. arbeitet.
- Die CPU 10 enthält eine Befehlseinheit 22 (die I-Box genannt wird), die zum Holen von Makrobefehlen (Befehlen auf Maschinenebene) und zum Decodieren der Befehle, und zwar einen pro Zyklus, und zum Zerlegen der Operandenspezifizierer und zum darauffolgenden Beginnen des Operandenholens funktioniert. Die Daten- oder Adressenmanipulation, die durch die Befehle befohlen wird, wird durch eine Ausführungseinheit oder E-Box 23 durchgeführt, die eine Register-Datei und eine ALU enthält. Die CPU wird durch einen Mikrocode gesteuert, so daß eine Mikrobefehls-Steuereinheit 24, die eine Mikro-Ablaufsteuerung und einen Steuerspeicher enthält, verwendet wird, um die Ablauffolge bzw. Sequenz von Befehlen zu erzeugen, die zum Implementieren der Makrobefehle benötigt wird. Eine Speichermanagementeinheit oder M-Box 25 empfängt Befehls-Lese- und Daten-Leseanfragen von der Befehlseinheit 22, und Daten-Lese- oder -Schreibenanfragen von der Ausführungseinheit 23, führt eine Adressenumsetzung für das virtuelle Speichersystem durch, um physikalische Adressen zu erzeugen, und gibt Anfragen zum P- Cache 14 aus, oder leitet im Fall eines Nichttreffers die Anfragen über eine Cache- Steuerung 26 weiter zum Backup-Cache 15. Diese Cache-Steuerung oder C-Box 26 behandelt einen Zugriff auf den Backup-Cache (Cache der zweiten Ebene) 15 im Fall eines P-Cache-Nichttreffers, oder einen Zugriff auf den Hauptspeicher 12 für Backup-Cache-Nichttreffer. Ein Gleitkomma-Prozessor auf dem Chip 27 (der F- Box genannt wird) ist eine Ausführungseinheit für Gleitkomma- und Ganzzahlen- Multiplizierbefehle, die Operanden und Befehle von der Ausführungseinheit 23 empfängt und Ergebnisse zurück zur Ausführungseinheit ausgibt.
- Obwohl Merkmale der Erfindung bei verschiedenen Typen von CPUs verwendet werden können, war beabsichtigt, daß das offenbarte Ausführungsbeispiel den VAX-Befehlssatz ausführt, so daß die Befehle auf Maschinenebene oder die Makrobefehle, auf die Bezug genommen wird, von variabler Größe sind. Ein Befehl kann von minimal einem Byte bis zu maximal Dutzenden von Bytes lang sein. Der durchschnittliche Befehl ist etwa fünf Bytes lang. Somit muß die Befehlseinheit 22 Befehle variabler Länge behandeln können, und zusätzlich sind die Befehle im Speicher nicht notwendigerweise an Wort-Grenzen ausgerichtet. Die Befehle manipulieren Daten auch von variabler Breite, wobei die Ganzzahlen-Dateneinheiten in Fig. 3 gezeigt sind. Die internen Busse und Register der CPU 10 sind im allgemeinen 32 Bits breit, wobei sich 32 Bits in der VAX-Terminologie auf ein Langwort bezieht. Übertragungen von Daten zu und von den Caches 14 und 15 und dem Speicher 12 sind gleichzeitig normalerweise 64 Bits und die Busse 11 und 20 sind 64 Bits breit, was Quadwort (vier Worte oder acht Bytes) genannt wird. Der Befehlsstrom wird als Quadworte hervorgeholt und in einer Warteschlange gespeichert, und dann werden die bestimmten Bytes des nächsten Befehls durch die Befehlseinheit 22 zur Ausführung ausgewählt. Die Befehle führen Speicherreferenzen einer Byte-, einer Wort-, einer Langwort- oder einer Quadwortbreite durch, und diese müssen nicht an Langwort- oder Quadwort-Grenzen ausgerichtet sein, d. h. der Speicher ist byte-adressierbar. Einige der Befehle im Befehlssatz führen in einem Maschinenzyklus aus, aber die meisten benötigen mehrere Zyklen, und einige benötigen Dutzende von Zyklen, so daß die CPU 10 nicht nur an Befehle variabler Größe und Befehle, die auf variable Datenbreiten (ausgerichtet oder nicht ausgerichtet) Bezug nehmen, angepaßt sein muß, sondern auch an Befehle mit variierender Ausführungszeit.
- Selbst wenn beabsichtigt ist, daß das hierin zu beschreibende Ausführungsbeispiel den VAX-Befehlssatz ausführt, gibt es nichts desto weniger Merkmale der Erfindung, die bei Prozessoren nützlich sind, die aufgebaut sind, um andere Befehlssätze auszuführen, wie beispielsweise diejenigen für 80386- oder 68030-Typen. Ebenso sind einige der Merkmale, anstatt nur in Computern mit komplexem Befehlssatz (vom CISC-Typ), wie sie hierin offenbart sind, in Computern mit reduziertem Befehlssatz (RISC) nützlich; bei einem RISC-Typ haben die Befehlsworte immer dieselbe Breite (Anzahl von Bytes) und werden immer in einem einzigen Zyklus ausgeführt - in einem reduzierten Befehlssatz sind nur Register-zu-Register- oder Speicher-Register-Befehle zugelassen.
- Zusätzliche CPUs 28 können in einem Multiprozessorsystem auf den Systembus 11 zugreifen. Jede zusätzliche CPU kann ihren eigenen CPU-Chip 10, ihren eigenen Cache 15 und ihre eigene Schnittstelleneinheit 21 enthalten, wenn diese CPUs 28 vom selben Aufbau wie die CPU 10 sind. Alternativ dazu können diese anderen CPUs von einem anderen Aufbau sein, der aber ein kompatibles Bus-Protokoll zum Zugreifen auf den Hauptsystembus 11 ausführt. Diese anderen CPUs 28 können auf den Speicher 12 zugreifen, und so können die Blöcke von Daten in den Caches 14 oder 15 veraltet werden. Wenn eine CPU 28 zu einer Stelle im Speicher 12 schreibt, für die es auftritt, daß sie im Cache 15 (oder im primären Cache 14) dupliziert ist, dann sind die Daten an dieser Stelle im Cache 15 nicht mehr gültig. Aus diesem Grund werden Blöcke von Daten in den Caches 14 und 15 "für ungültig erklärt", wie es beschrieben wird, wenn es ein Schreiben zum Speicher 12 von einer Quelle gibt, die eine andere als die CPU 10 ist (wie beispielsweise die anderen CPUs 28). Der Cache 14 arbeitet auf einem "Durchschreib"-Prinzip, wohingegen der Cache 15 auf einem "Rückschreib"-Prinzip arbeitet. Wenn die CPU 10 ein Schreiben zu einer Stelle ausführt, für die es auftritt, daß sie im primären Cache 14 ist, werden die Daten zu diesem Cache 14 und auch zum Backup-Cache 15 (und manchmal auch zum Speicher 12, in Abhängigkeit von Bedingungen) geschrieben; dieser Operationstyp ist ein "Durchschreiben". Wenn die CPU 10 ein Schreiben zu einer Stelle ausführt, die im Backup-Cache 15 ist, wird das Schreiben jedoch nicht notwendigerweise zum Speicher 12 weitergeleitet, sondern wird statt dessen nur dann zum Speicher 12 zurückgeschrieben, wenn ein weiteres Element im System (wie beispielsweise eine CPU 28) die Daten benötigt (d. h. versucht, auf diese Stelle im Speicher zuzugreifen), oder dann, wenn der Block im Cache vom Cache 15 versetzt (deaktiviert) wird.
- Die Schnittstelleneinheit 21 hat drei Bus-Anschlußstellen. Zusätzlich zur CPU- Adressen/Daten-Anschlußstelle über den Bus 20 und den Hauptsystembus 11 ist ein ROM-Bus 29 zum Zugreifen auf einen Boot-ROM, sowie auf einen EEPROM, einen nichtflüchtigen RAM (mit einer Batterie-Notstromversorgung) und einen TaktlKalender-Chip vorgesehen. Der ROM-Bus 29 ist nur 8 Bits breit, da die Zeitanforderungen für ROM-Buszugriffe weniger streng sind. Dieser ROM-Bus kann auch auf eine Tastatur und/oder eine LCD-Anzeigensteuerung sowie andere Eingabevorrichtungen, wie beispielsweise eine Maus, zugreifen. Eine serielle Eingabe/Ausgabe-Anschlußstelle zu einer Konsole ist auch in der Schnittstelle 21 enthalten, wird aber hier nicht behandelt.
- Der Bus 20 kann andere Knoten aufweisen, die an ihn angeschlossen sind; beispielsweise kann, wie es in Fig. 2 zu sehen ist, eine billigere Konfiguration eines Systems, das die CPU 10 verwendet, den Schnittstellen/Zuteiler-Chip 21 weglassen und den Speicher 12 mit dem Bus 20 (unter Verwendung einer geeigneten Speicherschnittstelle) verbinden. In diesem Fall muß die I/O mit dem Bus 20 verbunden werden, da es keinen Systembus 11 gibt. Dafür ist die Platte bzw. Festplatte 16 oder eine andere I/O mit einem oder zwei I/O-Knoten 13a und 13b verbunden, und jede von ihnen kann nach einem in Besitz nehmen des Busses 20 fragen und es kann ihnen gewährt werden. Alle Komponenten des Busses 20 im Fall der Fig. 2 sind synchron und arbeiten unter einer Taktsteuerung von der CPU 10, wohingegen der Systembus 11 im Fall der Fig. 1 asynchron zum Bus 20 und zur CPU 10 ist und gemäß seinem eigenen Takt arbeitet.
- Demgemäß ist die hierin offenbarte CPU 10 bei vielen unterschiedlichen Klassen von Computersystemen nützlich, die von tischrechnerartigen Workstations oder PCs für Einzelanwender bis zu Konfigurationen vollständigen Ausmaßes, die große Abteilungen oder Einheiten bedienen, reichen. Bei einem Beispiel kann das System der Fig. 1 einen Backup-Cache 15 von 256 KBytes haben, einen Hauptspeicher 20 von 128 MBytes und eine Festplatte 16 mit einer Kapazität von vielleicht 1 GByte oder darüber. Bei diesem Beispiel kann die Zugriffszeit des Backup-Caches 15 etwa 25 nsek sein (zwei CPU-Maschinenzyklen), während die Zugriffszeit des Hauptspeichers 20 von der CPU 10 über den Bus 11 das zehn- oder zwanzigfache von derjenigen des Backup-Caches sein kann. Die Festplatte 16 hat natürlich eine Zugriffszeit von mehr als dem Zehnfachen von derjenigen des Hauptspeichers. In einem typischen System hängt daher die System-Leistungsfähigkeit von einem möglichst häufigen Ausführen von den Caches ab.
- Obwohl es in Fig. 1 derart gezeigt ist, daß es einen 64-Bit-Multiplex- Adressen/Daten-Bus 11 oder 20 verwendet, können einige Merkmale der Erfindung in einem System implementiert sein, das separate Adressen- und Daten-Busse verwendet, wie es beispielsweise im US-Patent 4,875,160 dargestellt ist.
- Gemäß Fig. 3 enthalten die Ganzzahlendatentypen oder Speicherreferenzen, die hierin diskutiert sind, ein Byte (acht Bits), ein Wort (zwei Bytes), ein Langwort (vier Bytes) und ein Quadwort (acht Bytes oder 64 Bits). Die Datenpfade in der CPU 10 haben allgemein eine Quadwort-Breite, wenn sie die Datenpfade der Busse 11 und 20 sind. In Fig. 3 nicht gezeigt, aber hierin genannt, ist ein Hexawort, das sechzehn Worte (32 Bytes) oder vier Quadworte ist.
- Gemäß Fig. 4 erzeugt ein Taktgenerator 30 im CPU-Chip 10 der Fig. 1 vier sich überlagernde Takte phi1, phi2, phi3 und phi4, die zum Definieren von vier Phasen P1, P2, P3 und P4 eines Maschinenzyklus verwendet werden. Bei einem Ausführungsbeispiel ist der Maschinenzyklus nominal 14 nsek, so daß die Takte phi1, etc. etwa 71 MHz sind; alternativ dazu kann der Maschinenzyklus 10 nsek sein, in welchem Fall die Taktfrequenz 100 MHz ist. Der Bus 20 und der Systembus 11 arbeiten jedoch mit einem Buszyklus, der dreimal länger als der Maschinenzyklus der CPU ist, so daß der Buszyklus bei diesem Beispiel, der in Fig. 4 auch gezeigt ist, nominal 42 nsek ist (oder für eine Taktgebung von 100 MHz wäre der Buszyklus 30 nsek). Der Buszyklus ist gleichermaßen durch vier sich überlagernde Takte Phi1, Phi2, Phi3 und Phi4 definiert, die durch den Taktgenerator 30 erzeugt werden und dazu dienen, vier Phasen PB1, PB2, PB3 und PB4 des Buszyklus zu definieren. Der Systembus 11 arbeitet jedoch mit einem längeren Buszyklus, der etwa zweimal so lang wie derjenige des Busses 20 ist, z. B. etwa 64 nsek, und dieser Buszyklus ist asynchron zur CPU 10 und zum Bus 20. Der Zeitgabezyklus des Systembusses 11 wird durch einen Taktgenerator 31 in der Schnittstelleneinheit 21 gesteuert.
- In Fig. 5 ist der interne Aufbau des CPU-Chips 10 in allgemeiner Form dargestellt. Die Befehlseinheit 22 enthält den virtuellen Befehls-Cache 17, der bei diesem Bei spiel ein bestimmter Nur-Befehlsstrom-Cache mit einer Größe von 2 KByte ist und der die zuletzt verwendeten Blöcke des Befehlsstroms eher unter Verwendung virtueller Adressen als physikalischer Adressen speichert, wie sie zum Zugreifen auf die Caches 14 und 15 und den Hauptspeicher 12 verwendet werden. Das bedeutet, daß eine Adresse zum Zugreifen auf den virtuellen Befehls-Cache 17 keine Adressenumsetzung benötigt, wie sie in der Speichermanagementeinheit 25 für andere Speicherreferenzen durchgeführt wird. Befehle werden vom Befehls-Cache 17 zu einer Hervorhol-Warteschlange 32 geladen, die sechzehn Bytes hält. Die Befehlseinheit 22 hat eine Befehls-Burst-Einheit 33, die einen Befehl in seine Einzelteile (Operationscode, Operandenspezifizierer, Spezifizierererweiterungen, etc.) aufteilt, Makrobefehle decodiert und Operandenspezifizierer zerlegt, was eine Befehlssteuerung (wie beispielsweise Abfertigungsadressen) erzeugt, die durch einen Bus 34 zu einer Befehls-Warteschlange 35 in der Mikrobefehlssteuerung 24 gesendet wird. Informationen von den Spezifizierern, die zum Zugreifen auf die Operanden benötigt werden, werden durch einen Bus 36 zu einer Quellen- Warteschlange 37 und einer Zielort-Warteschlange 38 in der Ausführungseinheit 23 gesendet. Die Befehlseinheit 22 enthält auch eine Verzweigungsvorhersageeinheit 39 zum Vorhersagen, ob eine bedingte Verzweigung genommen wird oder nicht, und zum entsprechenden Ausrichten bzw. Lenken der Adressierungssequenz des Befehlsstroms. Eine komplexe Spezifizierereinheit 40 in der Befehlseinheit 22 ist ein Hilfsadressenprozessor (anstelle der Verwendung der ALU in der Ausführungseinheit 23) zum Zugreifen auf die Register-Datei und sonst zum Erzeugen der Adressen für Operanden, bevor ein Befehl in der Ausführungseinheit 23 ausgeführt wird.
- Die Ausführungseinheit 23 führt (unter einer Steuerung der Mikrobefehlssteuereinheit 24) die tatsächliche "Arbeit" der Makrobefehle durch, was eine vierstufige Mikropipeline-Einheit mit der Fähigkeit zum Verzögern und zum Durchführen eines nicht programmierbaren Programmsprungs implementiert. Diese Elemente lösen die Warteschlange für den Befehl und Operandeninformationen auf, die durch die Befehlseinheit 22 über die Warteschlangen 35, 37 und 38 zur Verfügung gestellt wird. Für literale Typen von Operanden enthält die Quellen-Warteschlange 37 den aktuellen Operandenwert vom Befehl, während die Quellen-Warteschlange 37 für Register- oder Speichertypoperanden einen Zeiger zu den Daten in einer Register- Datei 41 in der Ausführungseinheit 23 hält.
- Die Mikrobefehlssteuereinheit 24 enthält eine Mikro-Ablaufsteuerung 42, die zum Bestimmen des nächsten Mikroworts funktioniert, das von einem Steuerspeicher 43 zu holen ist. Der Steuerspeicher ist ein ROM oder ein anderer Speicher von einer Größe von etwa 1600 Worten, was ein Mikrocode-Wort von einer Breite von vielleicht 61 Bits, und zwar eines je Maschinenzyklus, in Antwort auf eine durch die Mikro-Ablaufsteuerung 42 erzeugte 11-Bit-Adresse erzeugt. Die Mikro-Ablaufsteuerung empfängt eine 11-Bit-Eintragsstellenadresse von der Befehlseinheit 22 über die Befehls-Warteschlange 35, um eine Mikro-Routine zu beginnen, die durch den Makrobefehl bestimmt wird. Die in jedem Zyklus vom Steuerspeicher 43 erzeugten Mikrobefehle werden durch einen Mikrobefehlsbus 44 mit der Ausführungseinheit 23 gekoppelt.
- Die in der Ausführungseinheit 23 enthaltene Register-Datei 41 enthält fünfzehn allgemeine Register, einen PC (Programmzähler), sechs Speicherdatenregister, sechs temporäre oder Arbeitsregister und zehn Zustandsregister. Die Ausführungseinheit 23 enthält auch eine 32-Bit-ALU 45 und einen 64-Bit-Schieber 46 zum Durchführen der durch den Makrobefehl befohlenen Operation, wie es durch die auf dem Bus 44 empfangenen Mikrobefehle definiert ist.
- Die Gleitkommaeinheit 27 empfängt 32- oder 64-Bit-Operanden auf zwei 32-Bit- Bussen 47 und 48 von den A- und B-Eingängen der ALU 45 in der Ausführungseinheit 23 und erzeugt ein Ergebnis auf einem Ergebnisbus 49, der zur Ausführungseinheit 23 zurückgeht. Die Gleitkommaeinheit 27 empfängt einen Befehl für die durchzuführende Operation, führt aber dann diese Operation unabhängig von der Ausführungseinheit 23 aus, und signalisiert dann, wenn sie fertig ist, und gibt den Operanden aus. Wie es im allgemeinen im System der Fig. 1 wahr ist, ordnet die Gleitkommaeinheit 27 das Ergebnis in einer Warteschlange an, das durch die Ausführungseinheit 23 anzunehmen ist, wenn sie bereit ist. Die Gleitkommaeinheit 27 führt ein Gleitkommaaddieren in zwei Zyklen aus, ein Multiplizieren in zwei Zyklen und ein Dividieren in siebzehn bis dreißig Maschinenzyklen, und zwar in Abhängigkeit vom Typ des Dividierens.
- Die Ausgabe der Gleitkommaeinheit 27 auf dem Bus 49 und die Ausgaben der ALU 45 und des Schiebers 46 werden durch einen Ergebnis-Multiplexer oder Rmux 50 in der Ausführungseinheit 23 vereinigt (und zwar wird in jedem Zyklus eine (Ausgabe) ausgewählt). Die ausgewählte Ausgabe vom Rmux wird entweder zur Register-Datei 45 zurückgeschrieben, oder wird durch einen Schreibbus 51 zur Speichermanagementeinheit 25 gekoppelt, und Speicheranfragen werden von der Ausführungseinheit 23 durch einen virtuellen Adressenbus 52 an die Speichermanagementeinheit 25 angelegt.
- Die Speichermanagementeinheit 25 empfängt Leseanfragen von der Befehlseinheit 22 (sowohl einen Befehlsstrom als auch einen Datenstrom) durch einen Bus 53 und von der Ausführungseinheit 23 (nur einen Datenstrom) über den Adressenbus 52. Ein Speicherdatenbus 54 gibt Speicher-Lesedaten von der Speichermanagementeinheit 25 zu entweder der Befehlseinheit 22 (mit einer Breite von 64 Bits) oder der Ausführungseinheit 23 (mit einer Breite von 32 Bits) aus. Die Speichermanagementeinheit 25 empfängt auch Schreib/Speicher-Anfragen von der Ausführungseinheit 23 über einen Schreibdatenbus 51, und erklärt auch Auffüllungen und von der Cachesteuereinheit 26 zurückgebrachte Daten des primären Caches 14 für ungültig. Die Speichermanagementeinheit 25 führt eine Zuteilung zwischen diesen Anfragern durch und ordnet Anfragen, die gegenwärtig nicht behandelt werden können, in einer Warteschlange an. Wenn einmal eine Anfrage gestartet ist, führt die Speichermanagementeinheit 25 eine Adressenumsetzung, nämlich ein Abbilden von virtuellen zu physikalischen Adressen, unter Verwendung eines Umsetzungspuffers oder eines Adressen-Caches 55 durch. Dieses Nachschauen im Adressen-Cache 55 dauert einen Maschinenzyklus, wenn es keine Nichttreffer gibt. Im Fall eines Nichttreffers im TB 55 veranlaßt die Speichermanagementschaltung, daß ein Seitentabelleneintrag von Seitentabellen im Speicher gelesen und eine TB- Auffüllung zum Einfügen der Adresse, die ein Nichttreffer war, durchgeführt wird. Diese Speichermanagementschaltung führt auch alle Zugriffsprüfungen durch, um die Seitenschutzfunktion, etc. zu implementieren. Der P-Cache 14, auf den durch die Speichermanagementeinheit 25 Bezug genommen wird, ist ein Zweiwege- Gruppenassoziativ-Durchschreib-Cache mit einem Block und einer Auffüllgröße von 32 Bytes. Der P-Cache-Zustand wird als eine Untergruppe des Backup- Caches 15 beibehalten. Die Schaltung der Speichermanagementeinheit 25 stellt auch sicher, daß durch die Befehlseinheit 22 initiierte Auslesungen des Spezifizierers richtig angeordnet bzw. in eine Reihenfolge gebracht werden, wenn die Ausführungseinheit 23 diese Daten in der Registerdatei 41 speichert; dieses Anordnen, das "Scoreboarding" (= Bewertung) genannt wird, wird durch eine Warteschlange 56 für physikalische Adressen erreicht, die eine kleine Liste physikalischer Adressen mit einer anhängigen Speicherung der Ausführungseinheit 23 ist. Speicheranfragen, die durch die Speichermanagementeinheit 25 empfangen werden, für die aber ein Nichttreffer im primären Cache 14 auftritt, werden für eine Ausführung durch einen physikalischen Adressenbus 57 zur Cachesteuereinheit 26 gesendet, und (für ein Schreiben) durch einen Datenbus 58. Ungültigkeitserklärungen werden durch die Speichermanagementeinheit 25 von der Cache-Steuereinheit 26 durch einen Adressenbus 59 empfangen, und Auffülldaten durch den Datenbus 58.
- Die Cache-Steuereinheit 26 ist die Steuerung für den Backup-Cache 15 und bildet eine Schnittstelle zum externen CPU-Bus 20. Die Cache-Steuereinheit 26 empfängt diese Anfragen und ein Schreiben von der Speichermanagementeinheit 25 über den physikalischen Adressenbus 57 und den Datenbus 58 und sendet Auffüllungen und Ungültigkeitserklärungen des primären Caches 14 zur Speichermanagementeinheit 25 über den Adressenbus 59 und den Datenbus 58. Die Cache- Steuereinheit 26 stellt durch die Ungültigkeitserklärungen sicher, daß der primäre Cache 14 als eine Untergruppe des Backup-Caches 15 beibehalten wird. Die Cache-Steuereinheit 26 empfängt Cachekohärenztransaktionen vom Bus 20, auf die sie mit Ungültigkeitserklärungen und Rückschreibungen antwortet, wie es geeignet ist. Eine Cachekohärenz im System der Fig. 1 und 5 basiert auf dem Konzept eines Besitztums; ein Hexawort-(16-Wort)-Block des Speichers kann der Besitz von entweder dem Speicher 12 oder einem Backup-Cache 15 in einer CPU an dem Bus 11 sein - in einem Multiprozessorsystem kann nur einer der Caches oder der Speicher 12 den Hexawort-Block zu einer gegebenen Zeit besitzen, und dieser Besitz wird durch ein Besitz-Bit für jedes Hexawort in sowohl dem Speicher 12 als auch dem Backup-Cache 15 angezeigt (1 für Besitz, 0 für keinen Besitz). Sowohl die Tags bzw. die Kennungen als auch die Daten für den Backup-Cache 15 werden in RAMs außerhalb des Chips gespeichert, wobei die Größe und die Zugriffszeit ausgewählt werden, wie es für die Systemanforderungen benötigt wird. Der Backup-Cache 15 kann beispielsweise eine Größe von 128 K bis 2 MBytes haben. Mit einer Zugriffszeit von 28 nsek kann auf den Cache in zwei Maschinenzyklen Bezug genommen werden, wenn ein Maschinenzyklus von 14 nsek für die CPU 10 angenommen wird. Die Cache-Steuereinheit 26 packt ein sequentielles Schreiben zum selben Quadwort, um Schreibzugriffe zum Backup-Cache zu minimieren. Mehrfach-Schreibbefehle von der Speichermanagementeinheit 25 werden in einer Acht-Wort-Schreib-Warteschlange 60 gehalten. Die Cache-Steuereinheit 26 ist auch die Schnittstelle zum Multiplex-Adressen/Daten-Bus 20, und eine Eingangsdaten-Warteschlange 61 lädt Auffülldaten und Rückschreibanfragen vom Bus 20 zur CPU 10. Eine Nicht-Rückschreib-Warteschlange 62 und eine Rückschreib- Warteschlange 63 in der Cache-Steuereinheit 26 halten jeweils Leseanfragen und Rückschreibdaten, die über den Bus 20 zum Hauptspeicher 12 zu senden sind.
- Die CPU 10 ist auf einer Makrobefehlsebene pipelinemäßig. Ein Befehl benötigt sieben Pipeline-Segmente, um eine Ausführung zu beenden, wobei diese allgemein ein Befehlshol-Segment S0, ein Befehlsdecodier-Segment S1, ein Operandendefinitions-Segment S2, ein Registerdateienzugriffs-Segment S3, ein ALU- Segment S4, ein Adressenumsetzungs-Segment S5 und ein Speicher-Segment S6 sind, wie es in Fig. 6 zu sehen ist. In einem idealen Zustand, bei dem es keine Verzögerungen gibt, ist die Überlagerung sequentieller Befehle #1 bis #7 der Fig. 6 vollständig, so daß das S0-Segment des Befehls #7 während des Segments S6 des Befehls #1 ausführt, und die Befehle #2 bis #6 in dazwischenliegenden Segmenten sind. Wenn die Befehle an sequentiellen Stellen (keine Sprünge oder Verzweigungen) sind und die Operanden entweder innerhalb des Befehlsstroms enthalten sind oder in der Registerdatei 41 oder im primären Cache 14 sind, kann die CPU 10 für Zeitperioden in der idealen Befehlsüberlagerungssituation ausführen, wie es in Fig. 6 gezeigt ist. Jedoch dann, wenn ein Operand nicht in einem Register 43 oder im primären Cache 14 ist und vom Backup-Cache 15 oder vom Speicher 12 geholt werden muß oder verschiedene andere Zustände bzw. Bedingungen existieren, werden Verzögerungen eingeführt, und eine Ausführung weicht vom Idealzustand der Fig. 6a.
- In Fig. 7 sind die Hardware-Komponenten jedes Pipeline-Segments S0-S6 für die CPU 10 in allgemeiner Form gezeigt. Die tatsächlichen Schaltungen sind komplexer, wie es unten bei der detaillierteren Beschreibung der verschiedenen Komponenten der CPU 10 erscheinen wird. Es wird verstanden, daß hier nur auf Makrobefehls-Pipelinesegmente Bezug genommen wird; es gibt auch eine Mikropipelineverarbeitung von Operationen in den meisten der Segmente, d. h. wenn mehr als eine Operation erforderlich ist, um einen Makrobefehl zu verarbeiten, werden die vielen Befehle innerhalb eines Abschnitts auch pipelinemäßig verarbeitet.
- Wenn ein Befehl nur Operanden verwendet, die schon in der Registerdatei 41 enthalten sind, oder Literalkonstanten, die im Befehlsstrom selbst enthalten sind, dann ist es aus der Fig. 7 zu ersehen, daß der Befehl in sieben aufeinanderfolgenden Zyklen ohne Verzögerungen ausführen kann. Zuerst wird der Ablauf einer normalen Makrobefehlsausführung in der CPU 10 beschrieben, wie er in der Fig. 7 dar gestellt ist, und dann werden die Zustände beschrieben, die Verzögerungen und Ausnahmen verursachen.
- Eine Ausführung von Makrobefehlen in der Pipeline der CPU 10 wird in viele kleinere Schritte zerlegt, die in verschiedenen verteilten Abschnitten des Chips implementiert sind. Weil die CPU 10 eine Makrobefehls-Pipeline implementiert, ist jeder Abschnitt relativ autonom, wobei Warteschlangen zwischen den Abschnitten eingefügt sind, um die Verarbeitungsraten bzw. -geschwindigkeiten jedes Abschnitts zu normalisieren.
- Die Befehlseinheit 22 holt Befehlsstromdaten für den nächsten Befehl, zerlegt die Daten in einen Operationscode und Spezifizierer und bewertet bzw. bestimmt die Spezifizierer mit dem Ziel von Vorabbefehlsoperanden, um die Ausführungseinheit 23 bei einer Ausführung des Befehls zu unterstützen. Diese Funktionen der Befehlseinheit 22 sind über die Segmente S0 bis S3 der Pipeline verteilt, wobei das meiste der Arbeit in S1 durchgeführt wird. In S0 werden Befehlsstromdaten vom virtuellen Befehlscache 17 unter Verwendung der Adresse geholt, die im virtuellen Befehlspuffer-Adressen-(VIBA)-Register 65 enthalten ist. Die Daten werden in die Vorabbefehls-Warteschlange 32 geschrieben, und das VIBA 65 wird zur nächsten Stelle inkrementiert. Im Segment S1 wird die Vorabbefehls-Warteschlange 32 gelesen, und die Burst-Einheit 33 verwendet einen internen Zustand und die Inhalte einer Tabelle 66 (eines ROM und/oder einer PLA zum Schauen auf die Befehlsformate), um aus den Bytes in der Warteschlange 32 die nächste Befehlsstromkomponente auszuwählen - entweder einen Operationscode oder einen Spezifizierer. Einige Befehlskomponenten brauchen mehrere Zyklen zur Bitbündelung bzw. für einen Burst; beispielsweise benötigt ein Zwei-Byte-Operationscode, der im VAX-Befehlssatz, mit hexadezimal FD beginnt, zwei Burst-Zyklen: einen für das FD-Byte und einen für das zweite Operationscode-Byte. Gleichermaßen benötigen indizierte Spezifizierer wenigstens zwei Burst-Zyklen: einen für das Index- Byte und einen oder mehrere für den Basis-Spezifizierer.
- Wenn ein Operationscode durch die Burst-Einheit 33 decodiert wird, werden die Informationen über einen Bus 67 zu einer Ausgabeeinheit 68 geführt, die die Tabelle 66 für die Anfangsadresse (die Eintrittsstelle) im Steuerspeicher 43 der Routine konsultiert, die den Befehl verarbeiten wird. Die Ausgabeeinheit 68 sendet die Adresse und andere zum Befehl gehörende Informationen zur Befehls- Warteschlange 35, wo sie gehalten werden, bis die Ausfühmngseinheit 23 diesen Befehl erreicht.
- Wenn ein Spezifizierer decodiert wird, werden die Informationen über den Bus 67 zur Zuteilung zu den Quellen- und Zielort-Warteschlangen 37 und 38 zur Opanden- Warteschlangeneinheit 69 geführt, und möglicherweise zur komplexen Pipeline- Spezifizierereinheit 40. Die Operanden-Warteschlangeneinheit 69 teilt die geeignete Anzahl von Einträgen für den Spezifizierer in der Quellen- und der Zielort- Warteschlange 37 und 38 in der Ausführungseinheit 23 zu. Diese Warteschlangen 37 und 38 enthalten Zeiger zu Operanden und Ergebnissen. Wenn der Spezifizierer nicht eine kurze Literalkonstante oder ein Registerspeziflzierer ist, wobei auf diese als einfache Spezifizierer Bezug genommen wird, wird er somit derart angesehen, daß er ein komplexer Spezifizierer ist, und er wird durch die Mikrocodegesteuerte komplexe Spezifizierereinheit 40 verarbeitet, die in Segmente S1 (Steuerspeicherzugriff), S2 (Operandenzugriff einschließlich eines Lesens der Registerdatei 41) und S3 (Operation der ALU 45, Anfrage der Speichermanagementeinheit 25, Beschreiben des GPR) der Pipeline aufgeteilt ist. Die Pipeline der komplexen Spezifizierereinheit 40 berechnet alle Spezifizierer-Speicheradressen und führt die geeignete Anfrage zur Speichermanagementeinheit 25 für den Spezifizierertyp durch. Zum Vermeiden eines Lesens oder eines Beschreibens eines GPR, das durch eine anhängige Referenz einer Ausführungseinheit 23 verriegelt ist, enthält die Pipeline der komplexen Spezifizierereinheit 40 eine Register- Anzeigetafel, die Datenabhängigkeiten erfaßt. Die Pipeline der komplexen Spezifizierereinheit 40 führt der Ausführungseinheit 22 auch Operandeninformationen zu, die kein expliziter Teil des Befehlsstroms sind; beispielsweise wird der PC als impliziter Operand für Befehle zugeführt, die ihn benötigen.
- Während S1 beobachtet die Verzweigungsvorhersageeinheit 39 jeden Operationscode, der decodiert wird, und sucht nach bedingten und unbedingten Verzweigungen. Für unbedingte Verzweigungen berechnet die Verzweigungsvorhersageeinheit 39 den Ziel-PC und richtet den PC und die VIBA zum neuen Pfad neu aus. Für bedingte Verzweigungen sagt die Verzweigungsvorhersage 39 basierend auf einer vorausgehenden Vorgeschichte vorher, ob der Befehl verzweigen wird oder nicht. Wenn die Vorhersage anzeigt, daß die Verzweigung genommen werden wird, werden der PC und die VIBA zum neuen Pfad neu ausgerichtet. Die Verzweigungsvorhersageeinheit 39 schreibt das Flag für eine bedingte Verzweigungsvorhersage in eine Verzweigungs-Warteschlange 70 in der Ausführungseinheit 23, damit es durch die Ausführungseinheit 23 bei der Ausführung des Befehls verwendet wird. Die Verzweigungsvorhersageeinheit 39 unterhält einen Zustand, der dazu ausreichend ist, den richtigen Befehls-PC wiederherzustellen, wenn sich herausstellt, daß die Vorhersage unrichtig ist.
- Die Mikrobefehls-Steuereinheit 24 arbeitet im Segment S2 der Pipeline und funktioniert zum Zuführen des nächsten Mikrobefehls zur Ausführungseinheit 23 zur Ausführung. Wenn ein Makrobefehl die Ausführung von mehr als einem Mikrobefehl benötigt, führt die Mikrobefehls-Steuereinheit 24 jeden Mikrobefehl in einer Ablauffolge basierend auf einer Anweisung zu, die im vorangehenden Mikrobefehl enthalten ist. An Makrobefehlsgrenzen entfernt die Mikrobefehls-Steuereinheit 24 den nächsten Eintrag von der Befehls-Warteschlange 35, der die Anfangs- Mikrobefehlsadresse für den Makrobefehl enthält. Wenn die Befehls- Warteschlange 35 leer ist, führt die Mikrobefehls-Steuereinheit 24 die Adresse des Nicht-Operations-Mikrobefehls zu. Die Mikrobefehls-Steuereinheit 24 bewertet auch alle Ausnahmeanfragen und liefert ein Pipeline-Ausräum-Steuersignal zur Ausführungseinheit 23. Für bestimmte Ausnahmen und Unterbrechungen injiziert die Mikrobefehls-Steuereinheit 24 die Adresse eines geeigneten Mikrobefehls- Treibers, der zum Antworten auf das Ereignis verwendet wird.
- Die Ausführungseinheit 23 führt alle Nicht-Gleitkommabefehle aus, gibt Operanden zur Gleitkommaeinheit 27 über Busse 47, 48 und 49 aus und empfängt Ergebnisse von ihr über diese Busse und behandelt Nicht-Befehlsereignisse, wie beispielsweise Unterbrechungen und Ausnahmen. Die Ausführungseinheit 23 ist durch Segmente S3, S4 und S5 der Pipeline aufgeteilt; S3 enthält einen Operandenzugriff, einschließlich eines Lesens der Registerdatei 41; S4 enthält eine Operation der ALU 45 und des Schiebers 46, eine Anfrage des RMUX 50; und S5 enthält ein Beenden des RMUX 50, ein Schreiben zur Registerdatei 41, ein Beenden der Anfrage der Speichermanagementeinheit 25. Für den größten Teil werden Befehlsoperanden durch die Befehlseinheit 22 vorausgelesen und durch die Quellen- Warteschlange 37 indirekt adressiert. Die Quellen-Warteschlange 37 enthält den Operanden selbst für kurze Literalkonstanten-Spezifizierer, und einen Zeiger zu einem Eintrag in der Registerdatei 41 für andere Operandentypen.
- Ein Eintrag in einer Feld-Warteschlange 71 wird durchgeführt, wenn ein Feldtypen- Spezifizierereintrag in die Quellen-Warteschlange 37 durchgeführt wird. Die Feld- Warteschlange 71 liefert Mikroverzweigungs-Bedingungen, die zulassen, daß die Mikrobefehls-Steuereinheit 42 bestimmt, ob ein Feldtypen-Spezifizierer entweder ein GPR oder einen Speicher adressiert. Ein Mikrobefehl bei einem gültigen Feld- Warteschlangeneintrag zieht den Eintrag von der Warteschlange zurück.
- Die Registerdatei 41 ist in vier Teile aufgeteilt: die allgemeinen Prozessorregister (GPRs), Speicherdaten-(MD)-Register, Arbeitsregister und CPU-Zustandsregister. Für einen Registermoden-Spezifizierer zeigt die Quellen-Warteschlange 37 zum geeigneten GPR in der Registerdatei 41, oder für einen kurzen Literalkonstantenmode enthält die Warteschlange den Operanden selbst. Für die anderen Spezifizierermoden zeigt die Quellen-Warteschlange 37 zu einem MD-Register, das die Adresse des Spezifizierers enthält (oder eine Adresse der Adresse des Operanden, etc.). Das MD-Register wird entweder direkt durch die Befehlseinheit 22 beschrieben, oder durch die Speichermanagementeinheit 25 als Ergebnis eines Lesens des Speichers, das durch die Befehlseinheit 22 erzeugt wird.
- Im S3-Segment der Pipeline der Ausführungseinheit 23 werden die geeigneten Operanden für die Ausführung von Befehlen in der Ausführungseinheit 23 und der Gleitkommaeinheit 27 ausgewählt. Operanden werden zur Verwendung in sowohl der Ausführungseinheit 23 als auch der Gleitkommaeinheit 27 auf ABUS und BBUS ausgewählt. In den meisten Fällen kommen diese Operanden von der Registerdatei 41, obwohl es andere Datenpfadquellen von Nicht-Befehlsoperanden gibt (wie beispielsweise PSL).
- Die Berechnung der Ausführungseinheit 23 wird durch die ALU 45 und den Schieber 46 im S4-Segment der Pipeline an Operanden durchgeführt, die durch das S3- Segment zugeführt werden. Eine Steuerung dieser Einheiten wird durch den Mikrobefehl zugeführt, der ursprünglich durch den Steuerspeicher 43 zum S3- Segment zugeführt wird, und dann darauffolgend in Vorwärtsrichtung in der Mikrobefehls-Pipeline bewegt wird.
- Das S4-Segment enthält auch den Rmux 50, der Ergebnisse von entweder der Ausführungseinheit 23 oder der Gleitkommaeinheit 27 auswählt und die geeignete Register- oder Speicheroperation durchführt. Die Rmux-Eingaben kommen am Ende des Zyklus vom Ergebnis-Bus 49 der ALU 45, des Schiebers 46 und der Gleitkommaeinheit 27. Der Rmux 50 überspannt tatsächlich die S4/S5-Grenze, so daß seine Ausgaben am Anfang des S5-Segments gültig sind. Der Rmux 50 wird durch die Zurückzieh-Warteschlange 72 gesteuert, die die Quelle (entweder die Ausfüh rungseinheit 23 oder die Gleitkommaeinheit 27) des Ergebnisses spezifiziert, das als nächstes zu verarbeiten (oder zurückzuziehen) ist. Nicht ausgewählte Rmux- Quellen werden verzögert, bis die Zurückzieh-Warteschlange 72 anzeigt, daß sie verarbeitet werden sollten. Die Zurückzieh-Warteschlange 72 wird in der Reihenfolge von Operationen in den Befehlen des Befehlsstroms einem Updaten unterzogen.
- Wie die Quellen-Warteschlange 37 zu Befehlsoperanden zeigt, so zeigt die Zielort- Warteschlange 38 zum Zielort für Befehlsergebnisse. Wenn das Ergebnis in einem GPR zu speichern ist, enthält die Zielort-Warteschlange 38 einen Zeiger zum geeigneten GPR. Wenn das Ergebnis im Speicher zu speichern ist, zeigt die Zielort- Warteschlange 38 an, daß eine Anfrage zur Speichermanagementeinheit 25 durchzuführen ist, welche Anfrage die physikalische Adresse des Ergebnisses in der PA-Warteschlange 56 enthält. Die Informationen werden als Steuereingabe zur Logik des Rmux 50 zugeführt.
- Wenn der Rmux 50 einmal die geeignete Quelle von Ergebnisinformationen auswählt, fragt er entweder einen Service der Speichermanagementeinheit 25 an, oder er sendet das Ergebnis auf den Schreibbus 73, damit es zurück zur Registerdatei 41 oder zu anderen Datenpfadregistern im S5-Segment der Pipeline zurückgeschrieben wird. Die Schnittstelle zwischen der Ausführungseinheit 23 und der Speichermanagementeinheit 25 für alle Speicheranfragen ist der EM-Latch 74, der Steuerinformationen enthält, und eine Adresse, Daten oder beides enthalten kann, und zwar in Abhängigkeit vom Typ der Anfrage. Zusätzlich zu Operanden und Ergebnissen, die durch die Befehlseinheit 22 vorausgelesen werden, kann die Ausführungseinheit 23 auch explizite Speicheranfragen zur Speichermanagementeinheit 25 durchführen, um Daten zu lesen oder zu schreiben.
- Die Gleitkommaeinheit 27 führt alle Gleitkommabefehle im Befehlssatz aus, so wie die Langwortlängen-Ganzzahlen-Multiplizierbefehle. Für jeden Befehl, den die Gleitkommaeinheit 27 ausführen soll, empfängt sie von der Mikrobefehls- Steuereinheit 24 den Operationscode und andere zum Befehl gehörende Informationen. Die Gleitkommaeinheit 27 empfängt Operandendaten von der Ausführungseinheit 23 auf Bussen 47 und 48. Eine Ausführung von Befehlen wird in einer bestimmten Pipeline der Gleitkommaeinheit 27 durchgeführt, welche Pipeline im Segment S4 der Fig. 7 erscheint, hat aber tatsächlich minimal eine Länge von drei Zyklen. Bestimmte Befehle, wie beispielsweise ein Ganzzahlenmultiplizieren, kann mehrere Durchläufe durch einige Segmente der Pipeline der Gleitkommaeinheit 27 benötigen. Andere Befehle, wie beispielsweise ein Dividieren, werden schließlich nicht pipelinemäßig verarbeitet. Die Ergebnisse und der Status der Gleitkommaeinheit 27 werden in S4 über den Ergebnis-Bus 49 zum Zurückziehen zum Rmux 50 in der Ausführungseinheit 23 zurückgebracht. Wenn als nächstes ein F- Box-Befehl zurückzuziehen ist, wie es durch die Zurückzieh-Warteschlange 72 definiert wird, sendet der Rmux 50, wie es durch die Zielort-Warteschlange 38 angewiesen ist, die Ergebnisse zu entweder den GPRs für Registerzielorte oder der Speichermanagementeinheit 25 für Speicherzielorte.
- Die Speichermanagementeinheit 25 arbeitet in den S5- und S6-Segmenten der Pipeline und behandelt alle durch die anderen Abschnitte des Chips initiierten Speicherreferenzen. Anfragen zur Speichermanagementeinheit 25 können von der Befehlseinheit 22 kommen (für Auffüllungen des virtuellen Befehlscaches 17 und für Spezifiziererreferenzen) von der Ausführungseinheit 23 oder der Gleitkommaeinheit 27 über den Rmux 50 und den EM-Latch 74 (für Befehlsergebnisspeicherungen und für explizite Speicheranfragen der Ausführungseinheit 23), von der Speichermanagementeinheit 25 selbst (für Auffüllungen des Umsetzungspuffers und PTE-Auslesungen), oder von der Cache-Steuereinheit 26 (für Ungültigkeitserklärungen und Auffüllungen eines Caches). Alle virtuellen Referenzen werden durch den TB oder Umsetzungspuffer 64 in eine physikalische Adresse umgesetzt, der im S5-Segment der Pipeline arbeitet. Für durch die Befehlseinheit 22 erzeugte Befehlsergebnisreferenzen wird die umgesetzte Adresse in der physikalischen Adressen-Warteschlange 56 (PA-Warteschlange) gespeichert. Diese Adressen werden später an Daten von der Ausführungseinheit 23 oder der Gleitkommaeinheit 27 angepaßt, wenn das Ergebnis berechnet wird.
- Die Cache-Steuereinheit 26 unterhält den Backup-Cache 15 und greift auf ihn zu, und steuert den Bus außerhalb des Chips (den CPU-Bus 20). Die Cache- Steuereinheit 26 empfängt eine Eingabe (Speicheranfragen) von der Speichermanagementeinheit 25 im S6-Segment der Pipeline und braucht normalerweise mehrere Zyklen zum Beenden einer Anfrage. Aus diesem Grund ist die Cache- Steuereinheit 26 nicht in spezifischen Pipeline-Segmenten gezeigt. Wenn das Speicherlesen im primären Cache 14 fehlschlägt, wird die Anfrage zur Verarbeitung zur Cache-Steuereinheit 26 gesendet. Die Cache-Steuereinheit 26 sucht zuerst nach Daten im Backup-Cache 15 und füllt den Block im primären Cache 14 vom Backup-Cache 15 auf, wenn die Daten vorhanden sind. Wenn die Daten nicht im Backup-Cache 15 vorhanden sind, fragt die Cache-Steuereinheit 26 nach einer Cache-Auffüllung auf dem CPU-Bus 20 vom Speicher 12. Wenn der Speicher 12 die Daten zurückbringt, werden sie zu sowohl dem Backup-Cache 15 als auch dem primären Cache 14 (und möglicherweise zum virtuellen Befehls-Cache 17) geschrieben. Obwohl Auffüllungen des primären Caches 14 durch Durchführen einer Anfrage zur Pipeline der Speichermanagementeinheit 25 durchgeführt werden, werden Daten so schnell wie möglich durch Treiben von Daten direkt auf den Datenbus 75 und von dort auf den Speicherdatenbus 54, sobald der Bus frei ist, zum ursprünglichen Abwickler zurückgebracht.
- Trotz der Versuche die Pipeline der Fig. 6 glatt ablaufend zu halten, gibt es Zustände, die dazu führen, daß Segmente der Pipeline verzögern. Gedanklich kann jedes Segment der Pipeline als Blackbox angesehen werden, die in jedem Zyklus drei Schritte durchführt:
- (1) Die für das Pipelinesegment geeignete Aufgabe wird unter Verwendung einer Steuerung und von Eingaben vom vorangehenden Pipelinesegment durchgeführt. Das Segment führt dann ein Updaten des fokalen Zustandes (innerhalb des Segments) durch, aber nicht des globalen Zustandes (außerhalb des Segments).
- (2) Genau vor dem Ende des Zyklus senden alle Segmente Verzögerungszustände zur geeigneten Zustands-Ablaufsteuerung für jenes Segment, welches die Zustände bewertet und bestimmt, welche, wenn es welche gibt, Pipelinesegmente verzögern müssen.
- (3) Wenn keine Verzögerungszustände bzw. -bedingungen für ein Pipelinesegment existieren, läßt es die Zustands-Ablaufsteuerung zu, Ergebnisse zum nächsten Segment zu übergeben und Ergebnisse vom vorangehenden Segment anzunehmen. Dies wird durch Updaten des globalen Zustandes erreicht.
- Die Ablauffolge von Schritten maximiert das Gesamte durch Zulassen, daß jedes Pipelinesegment annimmt, daß keine Verzögerung auftreten wird (was der allgemeine Fall sein sollte). Wenn am Ende des Zyklus eine Verzögerung auftritt, werden Updates des globalen Zustandes blockiert, und das verzögerte Segment wiederholt dieselbe Aufgabe (mit potentiell anderen Eingaben) im nächsten Zyklus (und dem nächsten, und dem nächsten), bis der Verzögerungszustand entfernt ist. Diese Beschreibung ist manchmal zu sehr vereinfacht, weil einige globale Zustände durch ein Segment einem Updaten unterzogen werden müssen, bevor der Verzögerungszustand bekannt ist. Ebenso müssen einige Aufgaben durch ein Seg ment einmal und nur einmal durchgeführt werden. Diese werden in jedem Segment auf einer von Fall zu Fall unterschiedlichen Basis behandelt.
- Innerhalb eines bestimmten Abschnitts des Chips verursacht eine Verzögerung in einem Pipelinesegment auch Verzögerungen in allen stromaufwärts gelegenen Segmenten (jenen, die in der Pipeline früher auftreten) der Pipeline. Ungleich dem System des Patents 4,875,160 veranlassen Verzögerungen in einem Segment der Pipeline keine Verzögerungen in stromabwärtigen Segmenten der Pipeline. Beispielsweise verursachte eine Speicherdatenverzögerung in jenem System auch eine Verzögerung des stromabwärtigen ALU-Segments. In der CPU 10 verzögert eine Speicherdatenverzögerung das ALU-Segment nicht (eine Nicht-Operation wird in das S5-Segment eingefügt, wenn S4 zu S5 weitergeht).
- Es gibt eine Anzahl von Verzögerungszuständen im Chip, die in einer Pipeline- Verzögerung resultieren. Jede wird nachfolgend kurz diskutiert.
- In den S0- und S1-Segmenten der Pipeline können Verzögerungen nur in der Befehlseinheit auftreten. In 50 gibt es nur eine Verzögerung, die auftreten kann:
- (1) Die Vorabbefehls-Warteschlange 32 ist voll: bei einer normalen Operation wird in jedem Zyklus auf den virtuellen Befehls-Cache 17 unter Verwendung der Adresse im VIBA 65 zugegriffen, die Daten werden zur Vorabbefehls- Warteschlange 32 gesendet und das VIBA 65 wird inkrementiert. Wenn die Vorabbefehls-Warteschlange 32 voll ist, wird das Inkrementieren des VIBA blockiert, und auf die Daten wird in jedem Zyklus im virtuellen Befehls-Cache 17 erneut Bezug genommen, bis es Platz für sie in der Vorabbefehls-Warteschlange 32 gibt. An dieser Stelle fängt das Vorauslesen wird an.
- Im S1-Segment der Pipeline gibt es sieben Verzögerungen, die in der Befehlseinheit 22 auftreten können:
- (1) Nicht ausreichende Daten in der Vorabbefehls-Warteschlange 32: Die Burst-Einheit 33 versucht, in jedem Zyklus die nächste Befehlskomponente zu decodieren. Wenn es nicht genügend gültige Bytes der Vorabbefehls-Warteschlange 32 gibt, um die gesamte Komponente zu decodieren, verzögert die Burst-Einheit 33, bis die benötigten Bytes vom virtuellen Befehls-Cache 17 ausgegeben werden.
- (2) Die Quellen-Warteschlange 37 und die Zielort-Warteschlange 38 sind voll: Während eines Decodierens des Spezifizierers muß die Zuteilungslogik der Quellen- und der Zielort-Warteschlange genügend Einträge in jeder Warteschlange zuteilen, um die Anforderungen des Spezifizierers zu erfüllen, der gerade zerlegt wird. Zum Garantieren, daß es genügend Mittel gibt, die verfügbar sind, muß es wenigstens zwei freie Quellen-Warteschlangeneinträge und zwei freie Zielort- Warteschlangeneinträge geben, um die Bitbündelung des Spezifizierers zu beenden. Wenn es nicht ausreichend freie Einträge in einer Warteschlange gibt, verzögert die Burst-Einheit 33, bis freie Einträge verfügbar werden.
- (3) Die MD-Datei ist voll: wenn ein komplexer Spezifizierer decodiert wird, muß die Zuteilungslogik der Quellen-Warteschlange 37 genügend Speicherdatenregister in der Registerdatei 41 zuteilen, um die Anforderungen des Spezifizierers zu erfüllen, der gerade zerlegt wird. Zum Garantieren, daß es genügend Mittel gibt, die verfügbar sind, muß es wenigstens zwei freie Speicherdatenregister geben, die in der Registerdatei 41 verfügbar sind, um die Bitbündelung des Spezifizierers zu beenden. Wenn es nicht ausreichend freie Register gibt, verzögert die Burst- Einheit 33, bis genügend Speicherdatenregister verfügbar werden.
- (4) Eine zweite bedingte Verzweigung wird decodiert: Die Verzweigungsvorhersageeinheit 39 sagt den Pfad vorher, den jede bedingte Verzweigung nehmen wird, und richtet den Befehlsstrom basierend auf jener Vorhersage neu aus. Sie hält einen ausreichenden Zustand zum Wiederherstellen des alternativen Pfads zurück, wenn die Vorhersage falsch war. Wenn eine zweite bedingte Verzweigung decodiert wird, bevor die erste durch die Ausführungseinheit 23 aufgelöst ist, hat die Verzweigungsvorhersageeinheit 39 nirgendwo einen Platz zum Speichern des Zustands, so daß die Burst-Einheit 33 verzögert, bis die Ausführungseinheit 23 die aktuelle Weisung der ersten Verzweigung auflöst.
- (5) Die Befehls-Warteschlange ist voll: Wenn ein neuer Operationscode durch die Burst-Einheit 33 decodiert wird, versucht die Ausgabeeinheit 68 einen Eintrag für den Befehl zur Befehls-Warteschlange 35 hinzuzufügen. Wenn es keine freien Einträge zur Befehls-Warteschlange 35 gibt, verzögert die Burst-Einheit 33, bis ein freier Eintrag verfügbar wird, was erfolgt, wenn ein Befehl durch den Rmux 50 zurückgezogen wird.
- (6) Die komplexe Spezifizierereinheit ist besetzt: Wenn die Burst-Einheit 33 eine Befehlskomponente decodiert, die durch die Pipeline der komplexen Spezifizierereinheit 40 verarbeitet werden muß, führt sie eine Anfrage für einen Service durch die komplexe Spezifizierereinheit 40 durch einen S1-Anfrage-Latch durch. Wenn dieser Latch noch von einer vorangehenden Anfrage für einen Service gültig ist (entweder aufgrund eines Ablaufes in mehreren Zyklen oder einer Verzweigung der komplexen Spezifizierereinheit 40), verzögert die Burst-Einheit 33, bis das gültige Bit im Anfrage-Latch gelöscht ist.
- (7) Eine sofortige Datenfänge ist nicht verfügbar: Die Länge der Spezifiziererermreiterung für sofortige Spezifizierer hängt von der Datenlänge des Spezifizierers für jenen spezifischen Befehl ab. Die Datenlängeninformationen kommen von der Befehls-ROM/PLA-Tabelle 66, auf die basierend auf dem Operationscode des Befehls zugegriffen wird. Wenn der Zugriff auf die Tabelle 66 nicht beendet ist, bevor ein sofortiger Spezifizierer decodiert wird (welcher der erste Spezifizierer des Befehls sein müßte), verzögert die Burst-Einheit 33 für einen Zyklus.
- Im S2-Segment der Pipeline können Verzögerungen in der Befehlseinheit 22 oder in der Mikrocode-Steuerung 24 auftreten. In der Befehlseinheit 22 können zwei Verzögerungen auftreten:
- (1) Ein ausstehendes GPR-Schreiben der Ausführungseinheit 23 oder der Gleitkommaeinheit 27: Zum Berechnen bestimmter Spezifiziererspeicheradressen muß die komplexe Spezifizierereinheit 40 die Inhalte eines GPR von der Registerdatei 41 lesen. Wenn es ein anhängiges Schreiben der Ausführungseinheit 23 oder der Gleitkommaeinheit 27 zum Register gibt, verhindert die GPR-Anzeigetafel der Befehlseinheit 22 das GPR-Lesen durch Verzögern des S2-Segments der Pipeline der komplexen Spezifizierereinheit 40. Die Verzögerung dauert an, bis das GPR-Schreiben endet.
- (2) Speicherdaten sind nicht gültig: Für bestimmte Operationen führt die Befehlseinheit 22 eine Anfrage der Speichermanagementeinheit 25 durch, um Daten zurückzubringen, die zum Beenden der Operation verwendet werden (z. B. das Lesen, das für die indirekte Adresse eines von einem Versatz abgeleiteten Spezifizierers durchgeführt wird). Das MD-Register der Befehlseinheit 22 enthält ein gültiges Bit, das gelöscht wird, wenn eine Anfrage gemacht wird, und das gesetzt wird, wenn Daten in Antwort auf die Anfrage zurückkommen. Wenn die Befehlseinheit 22 auf das MD-Register der Befehlseinheit 22 Bezug nimmt, wenn das gültige Bit nicht da ist, verzögert das S2-Segment der Pipeline der komplexen Spezifizierereinheit 40, bis die Daten durch die Speichermanagementeinheit 25 zurückgebracht werden.
- In der Mikrocode-Steuerung 24 kann eine Verzögerung während des S2-Segments auftreten:
- (1) Die Befehls-Warteschlange ist leer: Der letzte Mikrobefehl eines Ausführungsablaufs eines Makrobefehls wird in der Ausführungseinheit 23 angezeigt, wenn ein Mikrobefehl des letzten Zyklus durch die Mikrobefehls-Steuereinheit 24 decodiert wird. In Antwort auf dieses Ereignis erwartet die Ausführungseinheit 23, den ersten Mikrobefehl des nächsten Makrobefehlsablaufs basierend auf der Anfangsadresse in der Befehls-Warteschlange 35 zu empfangen. Wenn die Befehls- Warteschlange 35 leer ist, führt die Mikrobefehls-Steuereinheit 24 den Befehls- Warteschlangen-Verzögerungs-Mikrobefehl anstelle des nächsten Makrobefehlsablaufs zu. Als Wirkung davon verzögert dies die Mikrobefehls-Steuereinheit 24 für einen Zyklus.
- Im S3-Segment der Pipeline können Verzögerungen in der Befehlseinheit 22, in der Ausführungseinheit 23 oder in entweder der Ausführungseinheit 23 oder in der Befehlseinheit 22 auftreten. In der Befehlseinheit 22 gibt es drei mögliche S3- Verzögerungen:
- (1) Ein ausstehendes GPR-Lesen der Ausführungseinheit 23: Zum Beenden der Verarbeitung für eine Auto-Inkrementierung, eine Auto-Dekrementierung und von einer Auto-Inkrementierung abgeleiteten Spezifizierern muß die komplexe Spezifizierereinheit 40 das GPR mit dem neuen Wert einem Updaten unterziehen. Wenn es ein anhängiges Lesen der Ausführungseinheit 23 zum Register durch die Quellen-Warteschlange 37 gibt, verhindert die Anzeigetafel der Befehlseinheit 22 das GPR-Schreiben durch Verzögern des S3-Segments der Pipeline der komplexen Spezifizierereinheit 40. Die Verzögerung dauert an, bis die Ausführungseinheit 23 das GPR liest.
- (2) Die Spezifizierer-Warteschlange ist voll: Für die komplexesten Spezifizierer führt die komplexe Spezifizierereinheit 40 eine Anfrage nach einem Service der Speichermanagementeinheit 25 für die durch den Spezifizierer benötigte Speicheranfrage durch. Wenn es keine freien Einträge in einer Spezifizierer Warteschlange 75 gibt, verzögert das S3-Segment der Pipeline der komplexen Spezifizierereinheit 40, bis ein freier Eintrag verfügbar wird.
- (3) RLOG ist voll: Ein Auto-Inkrementieren, ein Auto-Dekrementieren und von einem Auto-Inkrementieren abgeleitete Spezifizierer benötigen einen freien Registerprotokollierungs-(RLOG)-Eintrag, in dem der Wechsel zum GPR zu protokollieren ist. Wenn es keine freien RLOG-Einträge gibt, wenn ein derartiger Spezifizierer decodiert wird, verzögert das S3-Segment der Pipeline der komplexen Spezifizierereinheit 40, bis ein freier Eintrag verfügbar wird.
- In der Ausführungseinheit 23 können vier Verzögerungen im S3-Segment auftreten:
- (1) Speicherlesedaten sind nicht gültig: In einigen Fällen kann die Ausführungseinheit 23 eine explizite Leseanfrage zur Speichermanagementeinheit 25 durchführen, um Daten in einem der sechs Arbeitsregister der Ausführungseinheit 23 in der Registerdatei 41 zurückzubringen. Wenn die Anfrage durchgeführt wird, wird das gültige Bit am Register gelöscht. Wenn die Daten zum Register geschrieben werden, wird das gültige Bit gesetzt. Wenn die Ausführungseinheit 23 auf das Arbeitsregister in der Registerdatei 41 Bezug nimmt, wenn das gültige Bit gelöscht ist, verzögert das S3-Segment der Pipeline der Ausführungseinheit 23, bis der Eintrag verfügbar wird.
- (2) Die Feld-Warteschlange ist nicht gültig: Für jeden Makrobefehl, der einen Feldtypen-Spezifizierer enthält, führt der Mikrocode eine Mikroverzweigung am ersten Eintrag in der Feld-Warteschlange 71 durch, um zu bestimmen, ob der Feldspezifizierer ein GPR oder einen Speicher adressiert. Wenn die Ausführungseinheit 23 auf das Arbeitsregister Bezug nimmt, wenn das gültige Bit gelöscht ist, verzögert das S3-Segment der Pipeline der Ausführungseinheit 23, bis der Eintrag gültig wird.
- (3) Ein ausstehendes GPR-Schreiben der F-Box: Weil die Berechnungspipeline der Gleitkommaeinheit 27 mehrere Zyklen lang ist, kann die Ausführungseinheit 23 beginnen, nachfolgende Befehle zu verarbeiten, bevor die Gleitkommaeinheit 27 den ersten beendet. Wenn das Befehlsergebnis der Gleitkommaeinheit 27 für ein GPR in der Registerdatei 41 bestimmt ist auf das durch ein nachfolgendes Mikrowort der Ausführungseinheit 23 Bezug genommen wird, verzögert das S3-Segment der Pipeline der Ausführungseinheit 23, bis das Schreiben der Gleitkommaeinheit 72 zum GPR erfolgt.
- (4) Die F-Box-Befehls-Warteschlange ist voll: Wenn ein Befehl zur Gleitkommaeinheit 27 ausgegeben wird, wird ein Eintrag zur Befehls-Warteschlange der Gleitkommaeinheit 27 hinzugefügt. Wenn es keine freien Einträge in der Warteschlange gibt, verzögert das S3-Segment der Pipeline der Ausführungseinheit 23, bis ein freier Eintrag verfügbar wird.
- Zwei Verzögerungen können in entweder der Ausführungseinheit 23 oder der Gleitkommaeinheit 27 in S3 auftreten:
- (1) Die Quellen-Warteschlange ist leer: Die meisten Befehlsoperanden werden durch die Befehlseinheit 22 vorausgelesen, die einen Zeiger zum Operandenwert in die Quellen-Warteschlange 37 schreibt. Die Ausführungseinheit 23 nimmt dann auf bis zu zwei Operanden pro Zyklus indirekt durch die Quellen- Warteschlange 37 für eine Ausgabe zur Ausführungseinheit 23 oder zur Gleitkom maeinheit 27 Bezug. Wenn einer der Einträge der Quellen-Warteschlange, auf die Bezug genommen wird, nicht gültig ist, verzögert das S3-Segment der Pipeline der Ausführungseinheit 23, bis der Eintrag gültig wird.
- (2) Ein Speicheroperand ist nicht gültig: Speicheroperanden werden durch die Befehlseinheit 22 vorausgelesen, und die Daten werden durch entweder die Speichermanagementeinheit 25 oder die Befehlseinheit 22 in die Speicherdatenregister in der Registerdatei 41 geschrieben. Wenn ein Eintrag der Quellen- Warteschlange 37, auf den Bezug genommen wird, zu einem Speicherdatenregister zeigt, das nicht gültig ist, verzögert das S3-Segment der Pipeline der Ausführungseinheit 23, bis der Eintrag gültig wird.
- Im Segment S4 der Pipeline können zwei Verzögerungen in der Ausführungseinheit 23 auftreten, eine in der Gleitkommaeinheit 27, und vier in entweder der Ausführungseinheit 23 oder der Gleitkommaeinheit 27. In der Ausführungseinheit 23:
- (1) Die Verzweigung-Warteschlange ist leer: Wenn eine bedingte oder eine unbedingte Verzweigung durch die Befehlseinheit 22 decodiert wird, wird ein Eintrag zur Verzweigungs-Warteschlange 70 hinzugefügt. Für bedingte Verzweigungsbefehle zeigt der Eintrag die Vorhersage der Befehlseinheit 22 der Verzweigungsweisung an. Auf die Verzweigungs-Warteschlange wird durch die Ausführungseinheit 23 Bezug genommen, um zu verifizieren, daß der Verzweigungsversatz gültig war, und um die aktuelle Verzweigungsweisung mit, der Vorhersage zu vergleichen. Wenn der Eintrag der Verzweigungs-Warteschlange durch die Befehlseinheit 22 noch nicht durchgeführt worden ist, verzögert das S4-Segment der Pipeline der Ausführungseinheit 23, bis der Eintrag durchgeführt wird.
- (2) Die F-Box-GPR-Operanden-Anzeigetafel ist voll: Die Ausführungseinheit 23 implementiert eine Register-Anzeigetafel, um zu verhindern, daß die Ausführungseinheit 23 ein GPR liest, zu dem es ein ausstehendes Schreiben durch die Gleitkommaeinheit 27 gibt. Für jeden Befehl der Gleitkommaeinheit 27, der ein GPR-Ergebnis schreiben wird, fügt die Ausführungseinheit 23 einen Eintrag zur GPR-Anzeigetafel der Gleitkommaeinheit 27 hinzu. Wenn die Anzeigetafel voll ist, wenn die Ausführungseinheit 23 versucht, einen Eintrag hinzuzufügen, verzögert das S4-Segment der Pipeline der Ausführungseinheit 23, bis ein freier Eintrag verfügbar wird.
- In der Gleitkommaeinheit 27 kann eine Verzögerung in S4 auftreten:
- (1) Der F-Box-Operand ist nicht gültig: Befehle werden zur Gleitkommaeinheit 27 ausgegeben, wenn der Operationscode von der Befehls-Warteschlange 35 durch die Mikrobefehls-Steuereinheit 24 entfernt wird. Operanden für den Befehl können nicht über die Busse 47, 48 ankommen, bis es einige Zeit später ist. Wenn die Gleitkommaeinheit 27 versucht, die Befehlsausführung zu beginnen, wenn die Operanden noch nicht gültig sind, verzögert die Pipeline der Gleitkommaeinheit 27, bis die Operanden gültig werden.
- In entweder der Ausführungseinheit 23 oder der Gleitkommaeinheit 27 können diese vier Verzögerungen im Pipelinesegment S4 auftreten:
- (1) Die Zielort-Warteschlange ist leer: Zielortspezifizierer für Befehle werden durch die Befehlseinheit 22 verarbeitet, die einen Zeiger zum Zielort (entweder zum IPR oder zum Speicher) in die Zielort-Warteschlange 38 schreibt. Auf die Zielort- Warteschlange 38 wird in zwei Fällen Bezug genommen: Wenn die Ausführungseinheit 23 oder die Gleitkommaeinheit 27 Befehlsergebnisse über den Rmux 50 speichern, und wenn die Ausführungseinheit 23 versucht, den Zielort der Befehle der Gleitkommaeinheit 27 zur GPR-Anzeigetafel der Ausführungseinheit 23 hinzuzufügen. Wenn der Eintrag der Zielort-Warteschlange nicht gültig ist (wie es der Fall wäre, wenn die Befehlseinheit 22 ein Verarbeiten des Zielortspezifizierers nicht beendet hat), tritt eine Verzögerung auf, bis der Eintrag gültig wird.
- (2) Die PA-Warteschlange ist leer: Für Speicherzielortspezifizierer sendet die Befehlseinheit 22 die virtuelle Adresse dies Zielortes zur Speichermanagementeinheit 25, die sie umsetzt und die physikalische Adresse zur PA-Warteschlange 56 hinzufügt. Wenn die Zielort-Warteschlange 38 anzeigt, daß ein Befehlsergebnis zum Speicher zu schreiben ist, wird eine Speicheranfrage zur Speichermanagementeinheit 25 durchgeführt, die die Daten für das Ergebnis zuführt. Die Speichermanagementeinheit 25 paßt die Daten an die erste Adresse in der PA- Warteschlange 56 an und führt das Schreiben durch. Wenn die PA-Warteschlange nicht gültig ist, wenn die Ausführungseinheit 23 oder die Gleitkommaeinheit 27 ein Speicherergebnis fertig hat, verzögert der Rmux 50, bis der Eintrag gültig wird. Als Ergebnis verzögert auch die Quelle der Rmux-Eingabe (die Ausführungseinheit 23 oder die Gleitkommaeinheit 27).
- (3) Der EM-Latch ist voll: Alle impliziten und expliziten Speicheranfragen, die durch die Ausführungseinheit 23 oder die Gleitkommaeinheit 27 durchgeführt werden, laufen durch den EM-Latch 74 zur Speichermanagementeinheit 25. Wenn die Speichermanagementeinheit 25 die vorangehende Anfrage noch verarbeitet, wenn eine neue Anfrage durchgeführt wird, verzögert der Rmux 30, bis die vorangehende Anfrage beendet ist. Als Ergebnis verzögert auch die Quelle der Eingabe des Rmux 50 (die Ausführungseinheit 23 oder die Gleitkommaeinheit 27).
- (4) Der Rmux wählte eine andere Quelle aus: Makrobefehle müssen in der Reihenfolge beendet werden, in der sie im Befehlsstrom erscheinen. Die Zurückzieh-Warteschlange 72 der Ausführungseinheit 23 bestimmt, ob der nächste zu beendende Befehl von der Ausführungseinheit 23 oder der Gleitkommaeinheit 27 kommt. Wenn der nächste Befehl von einem Kurs kommen sollte und der andere eine Anfrage an den Rmux 50 durchführt, verzögert die andere Quelle, bis die Zurückzieh-Warteschlange anzeigt, daß der nächste Befehl von jener Quelle kommen sollte.
- Zusätzlich zu Verzögerungen kann ein Pipeline-Ablauf vom Ideal durch "Ausnahmen" abweichen. Eine Pipeline-Ausnahme tritt auf, wenn ein Segment der Pipeline ein Ereignis erfaßt, das erfordert, daß der normale Ablauf der Pipeline zugunsten eines anderen Ablaufs gestoppt wird. Es gibt zwei grundsätzliche Typen von Pipeline-Ausnahmen: Jene, die den ursprünglichen Pipeline-Ablauf wiederaufnehmen, wenn die Ausnahme einmal korrigiert ist und jene, die die Intervention des Betriebssystems erfordern. Ein Nichttreffer im Umsetzungspuffer 55 bei einer Speicherreferenz ist ein Beispiel für den ersten Typ, und eine Zugriffssteuerungs-(Speicherschutz)-Verletzung ist ein Beispiel für den zweiten Typ.
- Wieder startbare Ausnahmen werden vollständig innerhalb der Grenzen des Abschnitts behandelt, der das Ereignis erfaßte. Andere Ausnahmen müssen zur Verarbeitung der Ausführungseinheit 23 berichtet werden. Weil die CPU 10 makropipelinemäßig aufgebaut ist, können Ausnahmen durch Abschnitte der Pipeline lange vor dem Befehl erfaßt werden, der veranlaßte, daß die Ausnahme tatsächlich durch die Ausführungseinheit 23 oder die Gleitkommaeinheit 27 ausgeführt wird. Jedoch wird das Berichten der Ausnahme verzögert, bis der Befehl durch die Ausführungseinheit 23 oder die Gleitkommaeinheit 27 ausgeführt wird. An dieser Stelle wird ein Treiber der Ausführungseinheit 23 aufgerufen, um das Ereignis zu verarbeiten.
- Wenn die Ausführungseinheit 23 und die Gleitkommaeinheit 27 mikropipelinemäßig aufgebaut sind, muß die Stelle, an der ein Ausnahme-Treiber aufgerufen wird, sorgfältig gesteuert werden. Beispielsweise können drei Makrobefehle in den Segmenten S3, S4 und S5 der Pipeline der Ausführungseinheit 23 bei einer Ausführung sein. Wenn eine Ausnahme für den Makrobefehl im S3-Segment berichtet wird, muß zugelassen werden, daß die zwei Makrobefehle, die in den S4- und S5-Segmenten sind, beenden, bevor der Ausnahme-Treiber aufgerufen wird.
- Um dies zu erreichen ist die S4/S5-Grenze in der Ausführungseinheit 23 derart definiert, daß sie die Anfangsstelle für einen Mikrobefehl ist. Ein Architektur-Zustand wird vor dem Anfang des S5-Segments der Pipeline nicht modifiziert, bis es irgendeinen Mechanismus zum Wiederherstellen des ursprünglichen Zustandes gibt, wenn eine Ausnahme erfaßt wird (das RLOG der Befehlseinheit 22 ist ein Beispiel für einen derartigen Mechanismus). Ein Berichten einer Ausnahme wird verzögert, bis der Mikrobefehl, zu dem das Ereignis gehört, versucht, die S4/S5-Grenze zu überqueren. An dieser Stelle wird die Ausnahme berichtet, und ein Ausnahme- Treiber wird aufgerufen. Durch Verzögern des Berichtens einer Ausnahme bis zu dieser Stelle wird zugelassen, daß der vorangehende Mikrobefehl (der zum vorangehenden Makrobefehl gehören kann) beendet.
- Die meisten Ausnahmen werden durch Anfragen eines nicht programmierbaren Mikro-Programmsprungs von der Mikrobefehls-Steuereinheit 24 berichtet. Wenn die Mikrobefehls-Steuereinheit 24 eine Anfrage für einen nicht programmierbaren Mikro-Programmsprung empfängt, bringt sie die Ausführungseinheit 23 dazu, alle ihre Verzögerungen zu unterbrechen, bricht sie die Pipeline der Ausführungseinheit 23 ab und injiziert sie die Adresse eines Treibers für das Ereignis in einen Adressen-Latch für den Steuerspeicher 43. Dies startet eine Mikrocode-Routine der Ausführungseinheit 23, die die Ausnahme verarbeiten wird, wie es geeignet ist. Bestimmte andere Arten von Ausnahmen werden durch einfaches Injizieren der geeigneten Treiber-Adresse in den Steuerspeicher 43 an der geeigneten Stelle berichtet.
- Bei den Ausnahmen der CPU 10 gibt es zwei Typen: Fehler bzw. Ausfälle und nicht programmierbare Programmsprünge. Für beide Typen veranlaßt der Mikrocode-Treiber für die Ausnahme, daß die Befehlseinheit 22 alle GPR-Modifikationen auslagert, die im RLOG sind, und den PC von der PC-Warteschlange wiedergewinnt. Für Fehler bzw. Ausfälle wird der zurückgebrachte PC der PC des Operationscodes des Befehls, der die Ausnahme veranlaßte. Für nicht programmierte Programmsprünge wird der zurückgebrachte PC der PC des Operationscodes des auszuführenden nächsten Befehls. Der Mikrocode bildet dann den geeigneten Ausnahmerahmen auf dem Stapel und sendet ihn durch einen geeigneten Vektor zum Betriebssystem bzw. setzt ihn zu diesem ab.
- In Fig. 8 ist die Befehlseinheit 22 detaillierter gezeigt. Die Befehlseinheit 22 funktioniert zum Holen, Zerlegen und Verarbeiten des Befehlsstroms, wobei versucht wird, eine konstante Zufuhr zerlegter Makrobefehle zur Ausführungseinheit 23 zur Ausführung verfügbar zu halten. Der pipelinemäßige Aufbau der CPU 10 läßt zu, daß viele Makrobefehle innerhalb der CPU bei verschiedenen Stufen einer Ausführung sind, wie es in Fig. 6 dargestellt ist. Die Befehlseinheit 22, die gegenüber der Ausführungseinheit 23 semi-autonom läuft, zerlegt die Makrobefehle, die dem Befehl folgen, der gegenwärtig in der Ausführungseinheit 23 ausführt. Eine verbesserte Leistungsfähigkeit wird erhalten, wenn die Zeit zum Zerlegen in der Befehlseinheit 22 während der Ausführungszeit in der Ausführungseinheit 23 eines früheren Befehls versteckt wird. Die Befehlseinheit 22 ordnet in die Warteschlangen 35, 37 und 38 die Informationen an, die während eines Zerlegens zuvor im Befehlsstrom erzeugt werden. Die Befehls-Warteschlange 30 enthält befehlsspezifische Informationen einschließlich des Operationscodes (ein oder zwei Bytes), eines Flags, das einen Gleitkommabefehl anzeigt, und einer Eintragsstelle für die Mikrobefehls- Ablaufsteuerung 42. Die Quellen-Warteschlange 37 enthält Informationen über jeden der Quellenoperanden für die Befehle in der Befehls-Warteschlange 35, einschließlich entweder des aktuellen Operanden (wie bei einer im Befehlsstrom selbst enthaltenen kurzen Literalkonstante) oder eines Zeigers zur Stelle des Operanden. Die Zielort-Warteschlange 38 enthält Informationen, die für die Ausführungseinheit 23 erforderlich sind, um die Stelle zur Speicherung der Ergebnisse einer Ausführung auszuwählen. Diese drei Warteschlangen lassen zu, daß die Befehlseinheit 22 parallel zur Ausführungseinheit 23 arbeitet; wenn die Ausführungseinheit 23 die Einträge in den Warteschlangen verbraucht, führt die Befehlseinheit 22 vor einem Hinzufügen von noch mehr Einträgen eine Zerlegung durch - im Idealfall würde die Befehlseinheit 22 der Ausführungseinheit 23 Wert genug voraus bleiben, so daß die Ausführungseinheit 23 niemals aufgrund einer leeren Warteschlange verzögern müßte.
- Die Befehlseinheit 22 muß auf einen Speicher für Befehls- und Operandendaten zugreifen; Anfragen nach diesen Daten werden durch die Befehlseinheit 22 durch eine gemeinsame Anschlußstelle, einen Leseanfragebus 53 durchgeführt, die Adressen zur Speichermanagementeinheit 25 sendet. Alle Daten für sowohl die Befehlseinheit 22 als auch die Ausführungseinheit 23 werden auf dem gemeinsam genutzten Speicherdatenbus 54 zurückgebracht. Die Speichermanagementeinheit 25 enthält Warteschlangen zum Beruhigen des Speicheranfragenverkehrs über eine Zeit hin. Ein Spezifiziereranfrage-Latch oder eine Spezifizierer-Warteschlange 75 hält Anfragen von der Befehlseinheit 22 für Operandendaten, und der Befehlsanfrage-Latch oder I-ref-Latch 76 hält Anfragen von der Befehlseinheit 22 für Befehlsstromdaten; diese zwei Latches lassen zu, daß die Befehlseinheit 22 Speicheranfragen über den Bus 53 für sowohl Befehls- als auch Operandendaten ausgibt, selbst wenn die Speichermanagementeinheit 25 andere Anfragen verarbeiten kann.
- Die Befehlseinheit 22 unterstützt vier Hauptfunktionen: ein Vorauslesen eines Befehlsstroms, ein Zerlegen eines Befehls, ein Verarbeiten eines Operandenspezifizierers und eine Verzweigungsvorhersage. Ein Vorauslesen eines Befehlsstroms arbeitet zum Liefern einer stetigen Quelle von Befehlsstromdaten für ein Zerlegen des Befehls. Während die Schaltung zum Zerlegen des Befehls an einem Befehl arbeitet, holt die Schaltung zum Vorauslesen eines Befehls mehrere Befehle im voraus. Die Funktion zum Zerlegen eines Befehls zerlegt den ankommenden Befehlsstrom, was die Verarbeitung jeder der Komponenten des Befehls identifiziert und beginnt - nämlich des Operationscodes, der Spezifizierer, etc. Operationscodes und zugehörige Informationen werden über einen Bus 36 direkt in die Befehls-Warteschlange 35 geführt. Operandenspezifiziererinformationen werden weiter zu der Schaltung geführt, die die Operanden in der Registerdatei 41, im Speicher (im Cache oder im Speicher 12) oder im Befehlsstrom (Literalkonstanten) lokalisiert und die Informationen in den Warteschlangen 37 und 38 anordnet und die nötigen Speicheranfragen über den Bus 53 und die Spezifizierer- Warteschlange 75 durchführt. Wenn ein bedingter Verzweigungsbefehl angetroffen wird, ist die Bedingung nicht bekannt, bis der Befehl die Ausführungseinheit 23 erreicht und alle Bedingungscodes verfügbar sind, so daß dann, wenn er in der Befehlseinheit 22 ist, es nicht bekannt ist, ob die Verzweigung genommen oder nicht genommen wird. Aus diesem Grund wird eine Verzweigungsvorhersageschaltung 39 verwendet, um den Befehlsstrompfad auszuwählen, um ihm zu folgen, wenn eine bedingte Verzweigung angetroffen wird. Eine Verzweigungs- Vorgeschichtentabelle 77 wird für jeden bedingten Verzweigungsbefehl des Befehlssatzes unterhalten, und zwar mit Einträgen für die letzten vier Auftritte jeder bedingten Verzweigung, was anzeigt, ob die Verzweigung genommen oder nicht genommen wurde. Basierend auf dieser Vorgeschichtentabelle 77 erzeugt eine Vorhersageschaltung 78 eine Entscheidung "Nehmen" oder "Nicht Nehmen", wenn ein bedingter Verzweigungsbefehl erreicht wird, und beginnt ein Holen der neuen Adresse, was die Befehle ausräumt, die bereits geholt oder im Befehls-Cache sind, wenn die Verzweigung zu nehmen ist. Dann wird, nachdem der Befehl in der Ausführungseinheit 23 ausgeführt ist, die aktuelle Entscheidung für ein Nehmen oder Nicht Nehmen in der Vorgeschichtentabelle 77 einem Updaten unterzogen.
- Der Spezifizierer-Steuerbus 78 ist an eine komplexe Spezifizierereinheit 40 angelegt, die selbst ein Prozessor ist, der eine Mikro-Ablaufsteuerung und eine ALU enthält und zum Manipulieren der Inhalte von Registern in der Registerdatei 45 und zum Zugreifen auf einen Speicher über den Speicherdatenbus 54, um die nachfolgend durch die Ausführungseinheit benötigten Operanden zum Ausführen des Makrobefehls zu erzeugen, funktioniert. Der Spezifizierer-Steuerbus 78 ist auch an eine Operanden-Warteschlangeneinheit 69 angelegt, der "einfache" Operandenspezifizierer durch Weiterleiten der Spezifizierer zu den Quellen- und Zielort- Warteschlangen 37 und 38 über den Bus 36 behandelt; diese einfachen Operanden enthalten Literalkonstanten (der Operand ist im Befehl selbst vorhanden) oder Registermodenspezifizierer, die einen Zeiger zu einem der Register der Registerdatei 41 enthalten. Für komplexe Spezifizierer sendet die Operanden- Warteschlangeneinheit 79 einen Index auf einen Bus 80 zur komplexen Spezifizierereinheit 40, um das erste der Speicherdatenregister der Registerdatei 41 zu definieren, das durch die komplexe Spezifizierereinheit 40 beim Berechnen des Spezifiziererwerts als Zielort zu verwenden ist. Die Operanden-Warteschlangeneinheit 79 kann bis zu zwei Einträge der Quellen-Warteschlange 37 und bis zu zwei Einträge der Zielort-Warteschlange durch den Bus 36 in einem einzigen Zyklus senden. Der Spezifizierer-Steuerbus 78 ist weiterhin mit einer Anzeigetafeleinheit 81 gekoppelt, die die Anzahl ausstehender Referenzen zu allgemeinen Registern in der Registerdatei 41 verfolgt, die in den Quellen- und Zielort-Warteschlangen 37 und 38 enthalten sind; der Zweck besteht darin, ein Schreiben zu einem Register zu verhindern, zu dem es ein ausstehendes Lesen gibt, oder ein Lesen von einem Register, für das es ein ausstehendes Schreiben gibt. Wenn ein Spezifizierer zurückgezogen wird, sendet die Ausführungseinheit 23 Informationen darüber, welches Register zurückzuziehen ist, durch einen Bus 82, der zur komplexen Spezifizierereinheit 40, zur Operanden-Warteschlangeneinheit 79 und zur Anzeigetafeleinheit 81 geht. Der Inhalt des Spezifizierer-Steuerbusses 78 für jeden Spezifizierer enthält folgendes: eine Identifikation des Typs des Spezifizierers; Daten, wenn der Spezifizierer eine kurze Literalkonstante ist; den Zugriffstyp und die Datenlänge des Spezifizierers; ein Anzeichen, wenn er ein komplexer Spezifizierer ist; eine Sende- bzw. Absetzadresse für den Steuer-ROM in der komplexen Spezifizie rereinheit 40. Die Befehls-Burst-Einheit 33 leitet diese Informationen von einem neuen Operationscode ab, der von der Vorabbefehls-Warteschlange 32 über Leitungen 83 angenommen wird, und der folgende Informationen erzeugt: die Anzahl von Spezifizierern für diesen Befehl; eine Identifikation eines Verzweigungsversatzes und seine Größe, sein Zugriffstyp und seine Datenlänge für jeden von bis zu sechs Spezifizierern, ein Anzeichen, wenn dies ein Befehl der Gleitkommaeinheit 27 ist, eine Absetz-Adresse für den Steuer-ROM 43, etc. In jedem Zyklus bewertet die Befehls-Burst-Einheit 33 die folgenden Informationen, um zu bestimmen, ob ein Operandenspezifizierer verfügbar ist und wie viele Bytes der Vorabbefehls- Warteschlange 32 zurückgezogen werden sollten, um zum nächsten Operationscode oder zum nächsten Spezifizierer zu gelangen: (1) die Anzahl von verfügbaren Bytes der Vorabbefehls-Warteschlange 32, wie es durch einen Wert von 1-bis- 6 angezeigt wird, der durch die Vorabbefehls-Warteschlange 32 zur Verfügung gestellt wird; (2) die Anzahl von Spezifizierern, die dagelassen sind, damit sie im Befehlsstrom für diesen Befehl zerlegt werden, und zwar basierend auf einer laufenden Zahl, die durch die Befehls-Burst-Einheit 33 für den aktuellen Befehl gehalten wird; (3) die Datenlänge des nächsten Spezifizierers; (4) ob die komplexe Spezifizierereinheit 40 (wenn sie für diesen Befehl verwendet wird) belegt ist; (5) ob noch Datenlängeninformationen von der Tabelle 66 verfügbar sind; etc.
- Einige Befehle haben Ein- oder Zwei-Byte-Verzweigungsversätze, die von vom Operationscode abgeleiteten Ausgaben von der Tabelle 66 angezeigt werden. Der Verzweigungsversatz ist immer das letzte Stück von Daten für einen Befehl und wird durch die Verzweigungsvorhersageeinheit 39 zum Berechnen des Verzweigungszielortes verwendet, der über Busse 22bs und 22bq zur Einheit 39 gesendet wird. Ein Verzweigungsversatz wird verarbeitet, wenn die folgenden Bedingungen erfüllt sind: (1) es sind keine Spezifizierer gelassen, die zu verarbeiten sind; (2) die erforderliche Anzahl von Bytes (eins oder zwei) ist in der Vorabbefehls- Warteschlange 32 verfügbar; (3) eine Verzweigungsverzögerung, die dann auftritt, wenn eine zweite bedingte Verzweigung empfangen wird, bevor die erste gelöscht ist, ist nicht aktiviert.
- In Fig. 9 ist die komplexe Spezifizierereinheit 40 detaillierter gezeigt. Die komplexe Spezifizierereinheit 40 ist eine dreistufige (S1, S2, S3) mikrocodierte Pipeline, die für Handhabungsoperandenspezifizierer bestimmt ist, die eine komplexe Verarbeitung und/oder einen komplexen Zugriff zum Speicher erfordern. Sie hat einen Lese- und Schreib-Zugriff zur Registerdatei 41 und eine Anschlußstelle zur Spei chermanagementeinheit 25. Speicheranfragen werden durch die komplexe Spezifizierereinheit 40 empfangen und zur Speichermanagementeinheit 25 weitergeleitet, wenn es einen Zyklus gibt, der frei von Spezifizierer-Speicheranfragen ist; d. h. es wird versucht, daß Operandenanfragen für die aktuellen Befehle beendet sind, bevor neue Befehle geholt werden. Die komplexe Spezifizierereinheit 40 enthält eine ALU 48, die A- und B-Eingabebusse 85 und 86 hat, und einen Ausgabebus 87 hat, der zur Registerdatei 41 in der Ausführungseinheit 23 schreibt; alle diese Datenpfade haben eine Breite von 32 Bits. Die A- und B-Eingaben werden in S3- Latches 88 zwischengespeichert, die während S2 durch Ausgaben 89 und 90 von Selektoren 91 und 92 getrieben werden. Diese Selektoren empfangen Daten vom Spezifizierer-Datenbus 78, vom Speicherdatenbus 54, von der Registerdatei 41 über den Bus 93, den Ausgabebus 87 der ALU 84, den PC über die Leitung 95, den Anfragebus 96 des virtuellen Befehls-Caches 17, etc. Einige von diesen werden in S2-Latches 97 zwischengespeichert. Die Adressenausgabe 53 der Befehlseinheit 22 wird durch einen Selektor 98 erzeugt, der die ALU-Ausgabe 87, die Anfrage 96 des virtuellen Befehls-Caches 17 und den A-Bus 85 empfängt. Die in der ALU 84 durchgeführten Operationen und die durch die Selektoren 91, 92 und 98 durchgeführten Auswahlen werden durch eine Mikro-Ablaufsteuerung gesteuert, die einen Steuerspeicher 100 enthält, der auf einem Bus 101 in Antwort auf eine Mikrobefehlsadresse an einem Eingang 102 ein Mikrowort mit einer Breite von 29 Bits erzeugt. Der Steuerspeicher enthält bei einem Beispiel 128 Worte. Das Mikrowort wird in S1 basierend auf einer Adresse am Eingang 102 vom Selektor 103 erzeugt und während S2 und S3 in Pipeline-Latches 104 und 105 zwischengespeichert, um die Operation der ALU 84 zu steuern, etc.
- Die Befehlseinheit 22 führt ihre Operationen in den ersten vier Segmenten der Pipeline, nämlich S0-S4 durch. In S0 wird auf den virtuellen Befehls-Cache 17 zugegriffen, und er wird zur Vorabbefehls-Warteschlange 32 geladen; der virtuelle Befehls-Cache 17 versucht, die Vorabbefehls-Warteschlange 32 mit bis zu 8 Bytes von Befehlsstromdaten aufzufüllen. Es wird angenommen, daß der virtuelle Befehls-Cache 17 zuvor mit Befehlsstromblöcken geladen worden ist, die die sequentiellen Befehle enthalten, die zum Auffüllen der Vorabbefehls-Warteschlange 32 nötig sind. In S1 zerlegt die Befehls-Burst-Einheit 33 die ankommenden Befehlsdaten in Operationscodes, Operandenspezifizierer, Spezifizierererweiterungen und Verzweigungsversätze, d. h. bricht sie auf, und führt die Ergebnisse zu anderen Teilen der Befehlseinheit 22 zur weiteren Verarbeitung, und dann nimmt die Befehlsausgabeeinheit 68 die durch die Befehlsausgabeeinheit 83 zur Verfügung ge stellten Operationscodes und erzeugt Mikrocode-Sendeadressen bzw. -Absetzadressen und andere Informationen, die von der Mikrobefehlseinheit 24 benötigt werden, um eine Befehlsausführung zu beginnen. Ebenso sagt die Verzweigungsvorhersageeinheit 39 in S1 vorher, ob die Verzweigungen genommen werden oder nicht, und richtet eine Befehlsverarbeitung der Befehlseinheit 22 neu aus, wie es nötig ist, erzeugt die Operanden-Warteschlangeneinheit 79 eine Ausgabe auf dem Bus 36 zu den Quellen- und Zielort-Warteschlangen 37 und 38, und verfolgt die Anzeigetafeleinheit 81 ausstehende Lese- und Schreibreferenzen zu den GPRs in der Registerdatei 41. In der komplexen Spezifizierereinheit 40 greift die Mikro-Ablaufsteuerung auf den Steuerspeicher 100 zu, um ein Mikrowort auf den Leitungen 101 in S1 zu erzeugen. In der S2-Pipeline-Stufe führt die komplexe Spezifizierereinheit 40 ihre Leseoperation durch, wobei sie auf die nötigen Register in der Registerdatei 41 zugreift, und stellt die Daten ihrer ALU 84 in der nächsten Pipeline-Stufe zur Verfügung. Dann führt die ALU 84 in der S3-Stufe ihre Operation durch und schreibt das Ergebnis entweder zu einem Register in der Registerdatei 41 oder zu lokalen temporären Registern; dieses Segment enthält auch die Schnittstelle zur Speichermanagementeinheit 25 -- Anfragen werden zur Speichermanagementeinheit 25 zum Holen von Operanden gesendet, wie sie benötigt werden (was möglicherweise in Verzögerungen resultiert, während darauf gewartet wird, daß die Daten zurückkehren).
- In Fig. 10 ist der virtuelle Befehls-Cache 17 detaillierter gezeigt. Der virtuelle Befehls-Cache 17 enthält einen 2KByte-Datenspeicher 106, der auch 64 Kennungen bzw. Tags speichert. Der Datenspeicher ist als zwei Blöcke 107 und 108 von zwei- unddreißig Zeilen konfiguriert. Jeder Block 107, 108 hat eine Breite von 256 Bits, und somit enthält er ein Hexawort von Befehlsstromdaten (vier Quadworte). Ein Zeilendecodierer 109 empfängt Bits < 9 : 5> der virtuellen Adresse vom VIBA- Register 65 und wählt 1-aus-32 Indizes 110 (Zeilen) aus, um zwei Hexaworte von Befehlsstromdaten auf Spaltenleitungen 111 von der Speichermatrix auszugeben. Spaltendecodierer 112 und 113 wählen basierend auf Bits < 4 : 3> der virtuellen Adresse 1-aus-4 aus. Somit wählt der virtuelle Befehls-Cache 17 in jedem Zyklus zwei Hexawort-Stellen aus, um sie auf Bussen 114 und 115 auszugeben. Die zwei 22-Bit-Tags von Tag-Speichern 116 und 117, die durch den 1-aus-32- Zeilendecodierer 109 ausgewählt werden, werden auf Leitungen 118 und 119 für den ausgewählten Index ausgegeben und mit Bits < 31 : 10> der Adresse im VIBA- Register 65 durch Tag-Vergleichsschaltungen 120 und 121 verglichen. Wenn jedes Tag eine Übereinstimmung erzeugt, wird ein Treffer auf einer Leitung 122 signalisiert, und das Quadwort wird auf einen Bus 123 ausgegeben, der zur Vorabbefehlswarteschlange 32 geht. Wenn ein Nichttreffer signalisiert wird (kein Cache- Treffer wird auf der Leitung 122 aktiviert), dann wird durch Senden der VIBA- Adresse zum Adressenbus 53 über den Bus 96 und die komplexe Spezifizierereinheit 40 eine Speicherreferenz erzeugt, wie es in Fig. 8 zu sehen ist; die Befehlsstromdaten werden somit vom Cache geholt, oder es wird dann, wenn es nötig ist, eine Ausnahme erzeugt, um Befehlsstromdaten vom Speicher 12 zu holen. Nach einem Nichttreffer wird der virtuelle Befehls-Cache 17 vom Speicherdatenbus 54 durch Eingänge 124 und 125 zu den Datenspeicherblöcken über die Spaltendecodierer 112 und 113 aufgefüllt, und die Tag-Speicher werden vom Adresseneingang über Leitung 126 und 127 aufgefüllt. Nach jedem Cache-Zyklus wird das VIBA 65 über einen Pfad 128 inkrementiert (um +8, Quadwort, Granularität), aber die VIBA-Adresse wird auch im Register 129 gesichert, so daß das VIBA dann, wenn ein Nichttreffer auftritt, erneut geladen wird, und diese Adresse wird für die ankommenden Befehlsstromdaten auf dem MD-Bus 54 als die Auffülladresse verwendet. Die Steuerung 130 des virtuellen Befehls-Caches 17 empfängt Steuerungen von der Vorabbefehls-Warteschlange 32, das Cache-Treffersignal 122, etc., und definiert den Zyklus des virtuellen Befehls-Caches 17.
- In Fig. 11 ist die Vorabbefehls-Warteschlange 32 detaillierter gezeigt. Eine Speichermatrix 132 hält vier Langworte, die als vier Bytes mal vier Bytes angeordnet sind. Die Matrix 132 kann vier Bytes von Daten in jedem Zyklus über Leitungen 133 von einem Quellen-Multiplexer 134 annehmen. Die Eingänge zum Multiplexer 134 sind der Speicherdatenbus 54 und der Datenbus 123 des virtuellen Befehls- Caches 17. Wenn die Vorabbefehls-Warteschlange 32 unzureichend verfügbaren Raum zum Laden eines weiteren Quadwortes von Daten vom virtuellen Befehls- Cache 17 enthält, aktiviert die Steuerung 135 der Vorabbefehls-Warteschlange 32 ein pfq-Voll-Signal auf der Leitung 136, die zum virtuellen Befehls-Cache 17 geht. Der virtuelle Befehls-Cache 17 steuert die Zufuhr von Daten zur Vorabbefehls- Warteschlange 32 und lädt in jedem Zyklus ein Quadwort, bis die pfq-Volleitung 136 aktiviert ist. Die Steuerung 135 wählt in Antwort auf Signale von Daten zum Laden des virtuellen Befehls-Caches oder von Daten zum Laden von md auf Leitungen 137 und 138 von der Steuerung 130 des virtuellen Befehls-Caches über den Multiplexer 134 den Datenbus 123 des virtuellen Befehls-Caches 17 oder den Speicherdatenbus 54 als die Quelle aus. Die Steuerung 135 der Vorabbefehls- Warteschlange 32 bestimmt die Anzahl gültiger nicht verwendeter Bytes von Befehlsstromdaten, die zum Zerlegen verfügbar sind, und sendet diese Informationen über Leitungen 139 zur Befehls-Burst-Einheit 33. Wenn die Befehls-Burst-Einheit 33 Befehlsstromdaten zurückzieht, signalisiert sie der Steuerung 135 der Vorabbefehls-Warteschlange 32 auf Leitungen 140 die Anzahl von Befehlsstrom- Operationscode- und Spezifizierer-Bytes, die zurückgezogen werden. Diese Informationen werden zum Updaten von Zeigern zur Matrix 132 verwendet. Die Ausgabe der Matrix 132 erfolgt durch einen Multiplexer 141, der die Daten zur Verwendung durch die Befehls-Burst-Einheit 33 ausrichtet; der Ausrichtungsmultiplexer 141 nimmt (auf Leitungen 142) die ersten und zweiten Langworte 143 und das erste Byte 144 vom dritten Langwort als Eingaben und gibt auf Leitungen 83 sechs aneinandergrenzende Bytes beginnend von irgendeinem Byte im ersten Langwort basierend auf den in der Steuerung 135 gehaltenen Zeigern aus. Die Vorabbefehls-Warteschlange 32 wird ausgeräumt, wenn die Verzweigungsvorhersageeinheit 39 ein Signal für ein Laden eines neuen PC auf einer Leitung 146 sendet und wenn die Ausführungseinheit 23 ein Laden des PC aktiviert.
- Die Befehls-Burst-Einheit 33 empfängt bis zu sechs Bytes von Daten von der Vorabbefehls-Warteschlange 32 über Leitungen 83 in jedem Zyklus und identifiziert die Komponententeile, d. h. Operationscodes, Operandenspezifizierer und Verzweigungsversätze durch Bezugnahme auf die Tabelle 66. Neue Daten sind zu Beginn eines Zyklus für die Befehls-Burst-Einheit 33 verfügbar, und die Anzahl von Spezifizierer-Bytes, die zurückgezogen werden, wird über Leitungen 140 zur Vorabbefehls-Warteschlange 32 zurückgesendet, so daß der neue Satz neuer Daten zur Verarbeitung durch den nächsten Zyklus verfügbar ist. Die Komponententeile, die durch die Befehls-Burst-Einheit 33 von den Befehlsstromdaten extrahiert werden, werden zur weiteren Verarbeitung zu anderen Einheiten gesendet; der Operationscode wird zur Befehlsausgabeeinheit 83 und zur Verzweigungsvorhersageeinheit 39 auf einem Bus 147 gesendet, und die Spezifizierer, außer für Verzweigungsversätze, werden zur komplexen Spezifizierereinheit 40, zur Anzeigetafeleinheit 81 und zur Operanden-Warteschlangeneinheit 79 über einen Spezifizierer-Steuerbus 78 gesendet. Der Verzweigungsversatz wird über einen Bus 148 zur Verzweigungsvorhersageeinheit 39 gesendet, so daß die neue Adresse erzeugt werden kann, wenn die bedingte Verzweigung zu nehmen ist.
- In Fig. 12 ist die Anzeigetafeleinheit 81 detaillierter gezeigt. Die Anzeigetafeleinheit 81 verfolgt die Anzahl ausstehender Referenzen zu GPRs in den Quellen- und Zielort-Warteschlangen 37 und 38. Die Anzeigetafeleinheit 81 enthält zwei Matrizen von fünfzehn Zählern: die Quellenmatrix 150 für die Quellen-Warteschlange 37 und die Zielortmatrix 151 für die Zielort-Warteschlange 38. Die Zähler 152 und 153 in den Matrizen 150 und 151 führen eine Eins-zu-Eins-Abbildung mit den fünfzehn GPRs in der Registerdatei 41 durch. Es gibt keinen Anzeigetafelzähler, der dem PC entspricht. Die maximale Anzahl ausstehender Operandenreferenzen bestimmt den maximalen Zählwert für die Zähler 152, 153, und dieser Wert basiert auf der Länge der Quellen- und Zielort-Warteschlangen. Die Quellenmatrix zählt bis zu zwölf und die Zielortmatrix zählt bis zu sechs.
- Jedesmal dann, wenn gültige Registermoden-Quellenspezifizierer auf dem Spezifizierer-Bus 78 erscheinen, werden die Zähler 152 in der Quellenmatrix 150, die jenen Registern entsprechen, inkrementiert, wie es durch einen Selektor 154 bestimmt wird, der die Registernummern als Teil der Informationen auf dem Bus 78 empfängt. Gleichzeitig fügt die Operanden-Warteschlangeneinheit 79 Einträge ein, die zu diesen Registern in der Quellen-Warteschlange 37 zeigen. Anders ausgedrückt gibt es für jeden Registermoden-Quellen-Warteschlangeneintrag ein entsprechendes Inkrement eines Zählers 152 in der Matrix 150, und zwar durch die Inkrementiersteuerung 155. Dies impliziert ein Maximum von zwei Zählern, die jeden Zyklus inkrementieren, wenn ein Quadwortregistermoden-Quellenoperand zerlegt wird (jedes Register in der Registerdatei 41 hat 32 Bits, und somit muß ein Quadwort zwei Register in der Registerdatei 41 belegen bzw. besetzen). Jeder Zähler 152 kann nur um Eins inkrementiert werden. Wenn die Ausführungseinheit 22 die Quellen-Warteschlangeneinträge entfernt, werden die Zähler 152 durch eine Dekrementierungssteuerung 156 dekrementiert. Die Ausführungseinheit 23 entfernt bis zu zwei Registermoden-Quellen-Warteschlangeneinträge pro Zyklus, wie es auf dem Zurückzieh-Bus 82 angezeigt ist. Die GPR-Nummern für diese Register werden durch die Ausführungseinheit 23 auf dem Zurückzieh-Bus 82 zur Verfügung gestellt, der an die Inkrementierungs-Steuerung 155 und die Dekrementierungs- Steuerung 156 angelegt ist. Ein Maximum von zwei Zählern 152 kann in jedem Zyklus dekrementieren oder jeder Zähler kann bis zu Zwei dekrementiert werden, wenn beide Registermodeneinträge, die zurückgezogen werden, zum selben Basisregister zeigen.
- Auf ähnliche Weise wird dann, wenn ein neuer Registermoden-Zielortspezifizierer auf dem Spezifizierer-Bus 78 erscheint, die Zählerstufe 153 der Matrix 151, die jenem Register der Registerdatei 41 entspricht, wie es durch einen Selektor 157 bestimmt wird, durch die Steuerung 155 inkrementiert. Ein Maximum von zwei Zählern 153 inkrementiert in einem Zyklus für einen Quadwortregistermoden- Zielortoperanden. Wenn die Ausführungseinheit 23 einen Zielort- Warteschlangeneintrag entfernt, wird der Zähler 153 durch eine Steuerung 156 dekrementiert. Die Ausführungseinheit 23 zeigt ein Entfernen eines Registermoden-Zielort-Warteschlangeneintrags und die Registernummer auf dem Zurückzieh- Bus 82 an.
- Wann immer ein komplexer Spezifizierer zerlegt wird, wird das zu jenem Spezifizierer gehörende GPR als Index in die Quellen- und Zielort-Anzeigetafelmatrizen über Selektoren 154 und 157 verwendet, und Schnappschüsse von beiden Anzeigetafel-Zählerwerten werden auf einem Bus 158 zur komplexen Spezifizierereinheit 40 geführt. Die komplexe Spezifizierereinheit 40 verzögert, wenn sie ein GPR lesen muß, für das der Zielort-Anzeigetafel-Zählerwert nicht Null ist. Ein Nicht-Null- Zielort-Zähler 153 zeigt an, daß es wenigstens einen Zeiger zu jedem Register in der Zielort-Warteschlange 138 gibt. Dies bedeutet, daß es ein zukünftiges Schreiben der Ausführungseinheit 23 zu jenem Register gibt, und daß sein aktueller Wert ungültig ist. Die komplexe Spezifizierereinheit 40 verzögert auch, wenn sie ein GPR beschreiben muß, für das der Quellen-Anzeigetafel-Zählermrert nicht Null ist. Ein Nicht-Null-Quellen-Anzeigetafelwert zeigt an, daß es wenigstens einen Zeiger zu jedem Register in der Quellen-Warteschlange 37 gibt. Dies bedeutet, daß es ein zukünftiges Lesen der Ausführungseinheit 23 zu jenem Register gibt, und ihre Inhalte müssen nicht modifiziert werden. Für beide Anzeigetafeln 150 und 151 werden die Kopien in der Pipeline der komplexen Spezifizierereinheit 40 auf eine Aktivierung der Zurückziehsignale auf dem Bus 82 von der Ausführungseinheit 23 hin dekrementiert.
- In Fig. 13 ist die Verzweigungsvorhersageeinheit 39 detaillierter gezeigt. Die Befehls-Burst-Einheit 33, die die Tabellen von Operationscodewerten im ROM/PLA 66 verwendet, überwacht jeden Befehls-Operationscode, wenn er zerlegt wird, und sie sucht einen Verzweigungs-Operationscode. Wenn ein Verzweigungs- Operationscode erfaßt wird, wird der PC für diesen Operationscode über einen Bus 148 an die Verzweigungsvorhersageeinheit 39 angelegt. Dieser PC-Wert (tatsächlich eine Untergruppe der Adresse) wird durch einen Selektor 162 zum Adressieren der Tabelle 77 verwendet. Die Verzweigungs-Vorgeschichtentabelle 77 besteht aus einer Matrix von 512 Vier-Bit-Registern 163, und der Wett in dem einen Register 163, das durch 162 ausgewählt wird, wird durch Leitungen 164 an einen Selektor 165 angelegt, der einen von sechzehn Werten in einem Register 166 adressiert, was eine Ein-Bit-Ausgabe für ein Nehmen oder ein Nicht-Nehmen erzeugt. Die Verzweigungsvorhersageeinheit 39 sagt so vorher, ob die Verzweigung genommen werden wird oder nicht. Wenn die Verzweigungsvorhersageeinheit 39 vorhersagt, daß die Verzweigung genommen wird (ein ausgewählter Ausgang des Registers 166 ist "1"), fügt sie den mit Vorzeichen erweiterten Verzweigungsversatz auf einem Bus 148 zum aktuellen PC-Wert auf einem Bus 22 im Addierer 167 hinzu und sendet den resultierenden neuen PC zum Rest der Befehlseinheit 22 auf den Leitungen 168 des neuen PC. Der aktuelle PC-Wert im Register 169 wird durch Leitungen 170 an den Selektor 162 und den Addierer 167 angelegt.
- Die Verzweigungsvorhersageeinheit 39, die auf die Art der Fig. 13 aufgebaut ist, verwendet einen "Verzweigungsvorgeschichten"-Algorithmus zum Vorhersagen von Verzweigungen. Die Grundvoraussetzung hinter diesem Algorithmus besteht darin, daß ein Verzweigungsverhalten dazu neigt, gemustert zu sein. Ein Identifizieren eines bestimmten Verzweigungsbefehls in einem Programm und ein Verfolgen der Vorgeschichte des Befehls einer genommenen Verzweigung gegenüber einer nicht genommenen Verzweigung über eine Zeit hinweg entwickelt in den meisten Fällen ein Muster. Verzweigungsbefehle, die eine vergangene Vorgeschichte für ein Verzweigen haben, scheinen jene Vorgeschichte beizubehalten, und in Zukunft ist es für sie wahrscheinlicher, daß sie verzweigen, als daß sie nicht verzweigen. Verzweigungsbefehle, die einem Muster folgen, wie beispielsweise Verzweigung, keine Verzweigung, Verzweigung, keine Verzweigung etc. behalten wahrscheinlich jenes Muster bei. Verzweigungsvorgeschichten-Algorithmen für eine Verzweigungsvorhersage versuchen, einen Vorteil aus dieser "Verzweigungsträgheit" zu ziehen.
- Die Verzweigungsvorhersageeinheit 39 verwendet die Tabelle 77 von Verzweigungsvorgeschichten und einen Vorhersagealgorithmus (der im Register 166 gespeichert ist) basierend auf der vergangenen Vorgeschichte der Verzweigung.
- Wenn die Verzweigungsvorhersageeinheit 39 den PC eines Operationscodes für eine bedingte Verzweigung auf dem Bus 148 empfängt, wird eine Untergruppe der PC-Bits des Operationscodes durch den Selektor 162 verwendet, um auf die Verzweigungsvorgeschichtentabelle 77 zuzugreifen. Die Ausgabe von der Tabelle 77 auf Leitungen 164 ist ein 4-Bit-Feld, das die Verzweigungsvorgeschichten- Informationen für die Verzweigung enthält. Aus diesen vier Vorgeschichtenbits wird eine neue Vorhersage berechnet, die den erwarteten Verzweigungspfad anzeigt.
- Viele unterschiedliche Operationscode-PCs führen eine Abbildung zu jedem Eintrag der Verzweigungstabelle 77 durch, weil nur eine Untergruppe (9 Bits) der PC- Bits den durch den Selektor 162 verwendeten Index bilden. Wenn ein Verzweigungs-Operationscode sich außerhalb des Indexbereichs ändert, der durch diese Untergruppe definiert wird, kann der Vorgeschichtentabelleneintrag, der indiziert wird, auf einem anderen Verzweigungs-Operationscode basieren. Die Verzweigungstabelle 77 beruht auf dem Prinzip einer räumlichen Lokalität und nimmt an, daß der aktuelle Prozeß, wenn er PCs umgeschaltet hat, für eine Zeitperiode arbeitet innerhalb eines kleinen Bereichs. Dies läßt zu, daß die Verzweigungsvorgeschichtentabelle 77 eine neue dauerhafte Vorgeschichte, die sich auf den neuen PC bezieht, innerhalb weniger Verzweigungen erzeugt.
- Die Verzweigungsvorgeschichteninformationen in jedem 4-Bit-Register 163 der Tabelle 77 bestehen aus einer Kette von 1-en und 0-en, was anzeigt, was jene Verzweigung die letzten viermal tat, als sie gesehen wurde. Beispielsweise zeigt 1100 von rechts nach links gelesen an, daß diese Verzweigung das letzte Mal, als sie gesehen wurde, keine Verzweigung durchführte. Sie führte auch keine Verzweigung zu der Zeit davor durch. Aber dann verzweigte sie die zwei vorangehenden Male. Das Vorhersagebit ist das Ergebnis eines Führens der Vorgeschichtenbits, die gespeichert wurden, durch eine Logik, die die Richtung vorhersagt, die eine Verzweigung gehen wird, und zwar bei gegebener Vorgeschichte ihrer letzten vier Verzweigungen.
- Auf den durch das Register 166 definierten Vorhersagealgorithmus kann über die CPU-Datenpfade als internes Prozessorregister (IPR) zum Testen der Inhalte oder zum Updaten der Inhalte mit einem anderen Algorithmus zugegriffen werden. Nach einem Einschalten (der Leistung) initialisiert der Mikrocode der Ausführungseinheit 23 das Verzweigungsvorhersage-Algorithmusregister 166 mit einem Wert, der einen Algorithmus definiert, der das Ergebnis einer Simulations- und Statistiksamm lung ist, was eine optimale Verzweigungsvorhersage über eine gegebene Gruppe allgemeiner Befehlsbahnen zur Verfügung stellt. Dieser Algorithmus kann geändert werden, um die Verzweigungsvorhersage für eine spezifische Befehlsbahne oder -mischung abzustimmen; tatsächlich kann der Algorithmus während einer Operation durch ein Schreiben zum Register 166 dynamisch geändert werden. Dieser Algorithmus ist gemäß einem bevorzugten Ausführungsbeispiel in der folgenden Tabelle gezeigt:
- Verzweigungs-Vorgeschichte Vorhersage für eine nächste Verzweigung
- 0000 nicht genommen
- 0001 genommen
- 0010 nicht genommen
- 0011 genommen
- 0100 nicht genommen
- 0101 nicht genommen
- 0110 genommen
- 0111 genommen
- 1000 nicht genommen
- 1001 genommen
- 1010 genommen
- 1011 genommen
- 1100 genommen
- 1101 genommen
- 1110 genommen
- 1111 genommen
- Die 512 Einträge in der Verzweigungstabelle 77 werden durch die PC-Bits < 8 : 0> des Operationscodes indiziert. Jeder Verzweigungstabelleneintrag 163 enthält die vorherigen vier Verzweigungsvorgeschichtenbits für Verzweigungs- Operationscodes bei diesem Index. Die Ausführungseinheit 23 aktiviert einen Ausräum-Verzweigungstabellen-Befehl auf einer Leitung 171 unter einer Mikrocode- Steuerung während Umschaltungen eines Prozeßzusammenhangs. Dieses bei einer Rücksetzsteuerung 172 empfangene Signal setzt alle 512 Verzweigungstabelleneinträge auf einen neutralen Wert zurück: Vorgeschichte = 0100, was in einer nächsten Vorhersage von 0 resultieren wird (d. h. nicht genommen).
- Wenn ein Operationscode für eine bedingte Verzweigung angetroffen wird, liest die Verzweigungsvorhersageeinheit 39 den Verzweigungstabelleneintrag, der durch PC < 8 : 0> indiziert ist, unter Verwendung des Selektors 162. Wenn die Vorhersagelogik, die das Register 166 enthält, anzeigt, daß die Verzweigung genommen wird, dann führt der Addierer 167 eine Vorzeichenerweiterung durch und addiert den von der Befehls-Burst-Einheit 33 über einen Bus 147 zugeführten Verzweigungsversatz zum aktuellen PC und sendet das Ergebnis zur Befehlseinheit 22 auf den Leitungen 168 des neuen PC. Wenn das Vorhersagebit im Register 166 anzeigt, daß nicht zu erwarten ist, daß eine Verzweigung genommen wird, dann bleibt der aktuelle PC in der Befehlseinheit 22 unbeeinflußt. Der in beiden Fällen alternative PC (der aktuelle PC im vorhergesagten genommenen Fall und ein Verzweigungs-PC im vorhergesagten nicht genommenen Fall) wird in der Verzweigungsvorhersageeinheit 39 im Register 169 zurückgehalten, bis die Ausführungseinheit 23 die bedingte Verzweigung zurückzieht. Wenn die Ausführungseinheit 23 eine bedingte Verzweigung zurückzieht, zeigt sie die aktuelle Richtung der Verzweigung über Zurückzieh-Leitungen 173 an. Die Verzweigungsvorhersageeinheit 39 verwendet den alternativen PC vom Register 169, um die Befehlseinheit 22 im Fall einer unrichtigen Vorhersage über einen weiteren neuen PC auf Leitungen 168 neu auszurichten.
- Die Verzweigungstabelle 77 wird jedesmal mit einer neuen Vorgeschichte beschrieben, wenn auf eine bedingte Verzweigung getroffen wird. Eine Rückschreibschaltung 174 empfängt den Vier-Bit-Tabelleneintrag über Leitungen 164, verschiebt ihn um eine Stelle nach links, fügt das Ergebnis von der Vorhersagelogik ein, das auf einer Leitung 175 empfangen wird, und schreibt den neuen Vier-Bit- Wert zurück in dieselbe Stelle, auf die durch den Selektor 162 gezeigt wird. Somit wird dann, wenn einmal eine Vorhersage durchgeführt wird, das älteste der Verzweigungsvorgeschichtenbits weggeworfen, und die übrigen drei Verzweigungsvorgeschichtenbits und das neue vorhergesagte Vorgeschichtenbit werden bei demselben Verzweigungs-PC-Index zur Tabelle 77 zurückgeschrieben. Wenn die Ausführungseinheit 23 einen Verzweigungs-Warteschlangeneintrag für eine bedingte Verzweigung zurückzieht, wenn er keine falsche Vorhersage war, wird der neue Eintrag nicht beeinflußt, und die Verzweigungsvorhersageeinheit 39 ist dazu bereit, eine neue bedingte Verzweigung zu verarbeiten. Wenn eine falsche Vorhersage über Leitungen 173 signalisiert wird, wird derselbe Verzweigungstabelleneintrag durch die Schaltung 174 überschrieben, und dieses Mal empfängt das am wenigsten signifikante Vorgeschichtenbit das Komplement der vorhergesagten Richtung, unter Berücksichtigung der wahren Richtung der Verzweigung.
- Jedesmal wenn die Verzweigungsvorhersageeinheit 39 eine Vorhersage über einen Verzweigungs-Operationscode durchführt, sendet sie Informationen über jene Verzweigung zur Ausführungseinheit 23 auf dem Bus 176. Die Ausführungseinheit 23 behält eine Verzweigungs-Warteschlange 70 von Verzweigungsdateneinträgen bei, die Informationen über Verzweigungen enthalten, die durch die Verzweigungsvorhersageeinheit 39, aber nicht durch die Ausführungseinheit 23 verarbeitet worden sind. Der Bus 176 hat eine Breite von 2 Bits: ein gültiges Bit und ein Bit zum Anzeigen, ob die Vorhersage der Befehlseinheit 22 derart war, die Verzweigung zu nehmen oder nicht. Einträge werden für sowohl bedingte als auch unbedingte Verzweigungen zur Verzweigungs-Warteschlange 70 durchgeführt. Für unbedingte Verzweigungen wird der Wert des Bits 0 des Busses 176 durch die Ausführungseinheit 23 ignoriert. Die Länge der Verzweigungs-Warteschlange 70 wird derart ausgewählt, daß sie nicht überläuft, selbst wenn die gesamte Befehls- Warteschlange 35 mit Verzweigungsbefehlen aufgefüllt ist und es Verzweigungsbefehle gibt, die gegenwärtig in der Pipeline der Ausführungseinheit 23 sind. Zu jedem Zeitpunkt kann es nur eine bedingte Verzweigung in der Warteschlange 70 geben. Ein Warteschlangeneintrag wird nicht gemacht, bis ein gültiger Satz verarbeitet worden ist. Im Fall, daß eine zweite bedingte Verzweigung angetroffen wird, während eine erste noch ausstehend ist, kann der Eintrag nicht gemacht werden, bis die erste bedingte Verzweigung zurückgezogen worden ist.
- Wenn die Ausführungseinheit 23 einen Verzweigungsbefehl ausführt und sie die Endbestimmung darüber durchführt, ob die Verzweigung genommen werden sollte oder nicht, entfernt sie das nächste Element von der Verzweigungs-Warteschlange 70 und vergleicht die Richtung, die durch die Befehlseinheit 22 genommen wird, mit der Richtung, die genommen werden sollte. Wenn sich diese unterscheiden, dann sendet die Ausführungseinheit 23 ein Signal für einen falsche Vorhersage auf dem Bus 173 zur Verzweigungsvorhersageeinheit 39. Eine falsche Vorhersage veranlaßt, daß die Befehlseinheit 22 eine Verarbeitung aufhört, irgendwelche GPR- Modifikationen nicht durchführt, die während eines Verlegens in Abwärtsrichtung auf dem falschen Pfad durchgeführt sind, und ein Verarbeiten beim richtigen alternativen PC erneut beginnt.
- Die Verzweigungsvorhersageeinheit 39 drückt die BIU durch Aktivieren eines Verzweigungs-Verzögerungssignals auf einer Leitung 178 zurück, wenn sie eine neue bedingte Verzweigung bei einer bereits ausstehenden bedingten Verzweigung antrifft. Wenn die Verzweigungsvorhersageeinheit 39 eine bedingte Verzweigung verarbeitet hat, aber die Ausführungseinheit 23 sie noch nicht ausgeführt hat, dann veranlaßt eine weitere bedingte Verzweigung, daß die Verzweigungsvorhersageeinheit 39 eine Verzweigungsverzögerung aktiviert. Unbedingte Verzweigungen, die bei ausstehenden bedingten Verzweigungen auftreten, erzeugen kein Problem, weil der Befehlsstrom lediglich eine Neuausrichtung erfordert. Der alternative PC im Register 169 bleibt bis zu einer Auflösung der Bedingungen Verzweigung unverändert. Die Ausführungseinheit 23 informiert die Verzweigungsvorhersageeinheit 39 über den Bus 173 jedesmal, wenn eine bedingte Verzweigung von der Verzweigungs-Warteschlange 70 zurückgezogen wird, damit die Verzweigungsvorhersageeinheit 39 den alternativen PC und eine andere Schaltung für eine bedingte Verzweigung freigibt.
- Das Verzweigungsverzögerungssignal auf der Leitung 178 hält die Befehlseinheit 22 von einer Verarbeitung weiterer Operationscodes ab. Wenn eine Verzweigungsverzögerung aktiviert ist, beendet die Befehls-Burst-Einheit 33 eine Zerlegung des aktuellen Befehls für eine bedingte Verzweigung, einschließlich des Verzweigungsversatzes und irgendwelcher Hilfen, und dann verzögert die Befehls- Burst-Einheit 33. Der Eintrag zur Verzweigungs-Warteschlange 70 in der Ausführungseinheit 23 wird durchgeführt, nachdem die erste bedingte Verzweigung zurückgezogen ist. Zu dieser Zeit wird eine Verzweigungsverzögerung deaktiviert, und der alternative PC für die erste bedingte Verzweigung wird durch diejenigen für die zweite ersetzt.
- Die Verzweigungsvorhersageeinheit 39 verteilt alle PC-Ladungen zum Rest der Befehlseinheit 22. PC-Ladungen zur Befehlseinheit 22 vom Mikrocode der komplexen Spezifizierereinheit 40 laden einen neuen PC auf eine von zwei Arten. Wenn die komplexe Spezifizierereinheit 40 einen PC-Lade-Schreibbus aktiviert, treibt sie einen neuen PC-Wert auf den IW Bus-Leitungen. PC-Laden-MD zeigt an, daß der neue PC auf den MD-Bus-Leitungen 54 ist. Die Verzweigungsvorhersageeinheit 39 antwortet durch Weiterleiten des geeigneten Werts auf die Leitungen 168 des neuen PC und durch Aktivieren des Ladens des neuen PC. Diese PC-Ladungen der Befehlseinheit 22 ändern einen Zustand einer bedingten Verzweigung in der Verzweigungsvorhersageeinheit 39 nicht.
- Die Ausführungseinheit 23 signalisiert ihre Absicht zum Laden eines neuen PC durch Aktivieren eines Signals zum Laden des neuen PC. Die Aktivierung dieses Signals zeigt an, daß das nächste Stück von IPR-Daten, die auf dem MD-Bus 54 ankommen, der neue PC ist. Das nächste Mal, wenn die Speichermanagementeinheit 25 einen Schreibbefehl aktiviert, wird der PC vom MD-Bus 54 genommen und auf die Leitungen des neuen PC weitergeleitet, und ein Befehl für ein Laden des neuen PC wird aktiviert.
- Die Verzweigungsvorhersageeinheit 39 führt unbedingte Verzweigungen durch Addieren des mit Vorzeichen erweiterten Verzweigungsversatzes auf Leitungen 147 zum aktuellen PC auf Leitungen 170 im Addierer 167, durch Treiben des neuen PC auf die Leitungen 168 des neuen PC und durch Aktivieren eines Signals für ein Laden des neuen PC durch. Bedingte Verzweigungen faden den PC auf dieselbe Weise, wie wenn die Logik eine genommene Verzweigung vorhersagt. Auf eine falsche Vorhersage einer bedingten Verzweigung oder ein PC-Laden der Ausführungseinheit 23 hin wird jede anhängige bedingte Verzweigung gelöscht, und anhängige unbedingte Verzweigungen werden gelöscht.
- Gemäß Fig. 14 definiert die Mikrobefehls-Steuereinheit 24, die die Mikro- Ablaufsteuerung 42 und den Mikrospeicher 43 enthält, eine Endzustandsmaschine, die drei Abschnitte der Ausführungseinheit 23 der Pipeline der CPU 10 steuert: S3, S4 und S5. Die Mikrobefehls-Steuereinheit 24 selbst sitzt im S2-Abschnitt der Pipeline und greift auf einen Mikrocode zu, der im Steuerspeicher 43 auf dem Chip enthalten ist. Der Steuerspeicher 43 wird durch einen 11-Bit-Bus 181 von der Mikro-Ablaufsteuerung 42 adressiert. Die aktuelle Adresse für den Steuerspeicher wird in einem Latch 182 gehalten, und dieser Latch wird von einem Selektor 183 geladen, der mehrere Quellen für die verschiedenen Adressierungsbedingungen hat, wie beispielsweise einen Sprung oder eine Verzweigung, einen Mikro-Stapel oder einen nicht programmierbaren Mikro-Programmsprung. Jede Mikrowort- Ausgabe auf einem Bus 44 vom Steuerspeicher 43 ist aus Feldern aufgebaut, die alle drei Pipeline-Stufen steuern. Ein Mikrowort wird am Ende von S2 ausgegeben (und zwar eines in jedem Maschinenzyklus), und es wird zum Anlegen zum Mikrobefehlsbus 185 und zur Verwendung in der Ausführungseinheit 23 während S3 im Latch 184 gespeichert, und es wird dann in Vorwärtsrichtung zu Abschnitten S3 und S4 über Latches 186 und 187 unter Steuerung der Ausführungseinheit 23 pipelinemäßig verarbeitet (in Vorwärtsrichtung weitergeschaltet). Jedes Mikrowort einhält ein 15-Bit-Feld (einschließlich einer 11-Bit-Adresse), das zum Spezifizieren des nächsten Mikrobefehls im Mikroablauf auf einen Bus 188 zurück zur Mikro- Ablaufsteuerung 42 angelegt wird. Diese Feld kann eine explizite Adresse spezifizieren, die im Mikrowort vom Steuerspeicher 43 enthalten ist, oder es kann die Mikro-Ablaufsteuerung 42 anweisen, eine Adresse von einer anderen Quelle anzunehmen, z. B. dem Mikrocode erlauben, bei verschiedenen Zuständen in der CPU 10 bedingt zu verzweigen.
- Häufig verwendete Mikrocodes sind normalerweise als Mikro-Unterprogramme definiert, die bei ausgewählten Adressen im Steuerspeicher gespeichert sind, und dann, wenn eines dieser Unterprogramme aufgerufen wird, wird die Rücksprungadresse auf einen Mikro-Stapel 189 zur Verwendung beim Ausführen eines Rücksprungs abgelegt. Dafür wird die aktuelle Adresse auf dem Adresseneingabebus 181, nachdem sie inkrementiert ist, zur Mikro-Stapeleingabe 190 zurückgebracht, da der Rücksprung zur aktuellen Adresse plus Eins erfolgen wird. Der Mikrostapel kann beispielsweise sechs Einträge enthalten, um sechs Ebenen einer Unterprogrammverschachtefung zuzulassen. Die Ausgabe des Mikrostapels 189 wird über den Selektor 183 zurück zum Latch 182 der aktuellen Adresse gebracht, wenn die Befehle im Feld auf dem Bus 188 diesen als die Quelle der nächsten Adresse anweisen.
- Verzögerungen, die der Person offensichtlich sind, die den Mikrocode schreibt, treten dann auf, wenn ein CPU-Betriebsmittel nicht verfügbar ist, wie beispielsweise dann, wenn die ALU 50 einen Operanden benötigt, der noch nicht durch die Speichermanagementeinheit 25 zur Verfügung gestellt worden ist. Die Mikro- Ablaufsteuerung 42 verzögert dann, wenn das Pipeline-Segment S3 der Ausführungseinheit 23 verzögert wird. Eine Verzögerungseingabe zum Latch 182, zum Latch 184 oder zur Mikrostapelsteuerung 191 veranlaßt, daß der Steuerspeicher 43 zu Beginn von S3 keinen neuen Mikrobefehl zum Bus 44 ausgibt.
- Nicht programmierte Mikro-Programmsprünge lassen zu, daß der Mikrocodierer anormale Ereignisse behandelt, die einen sofortigen Service benötigen. Beispielsweise wird auf eine falsche Vorhersage einer Verzweigung hin nach einem nicht programmierbaren Mikro-Programmsprung gefragt, wenn die Verzweigungsberechnung in der Ausführungseinheit 23 unterschiedlich von derjenigen ist, die durch die Befehlseinheit 22 für einen Befehl für eine bedingte Verzweigung vorhergesagt ist. Ein Selektor 192 des nicht programmierbaren Mikro-Programmsprungs hat eine Anzahl von Eingängen 193 für verschiedene Bedingungen, und er legt unter den spezifizierten Bedingungen eine Adresse an den Selektor 183 an. Wenn ein nicht programmierbarer Mikro-Programmsprung auftritt, wird die Mikrocode- Steuerung beginnend bei dieser Adresse des nicht programmierbaren Mikro- Programmsprungs zum Service-Mikroprogramm übertragen.
- Das Steuerfeld (Bits < 14 : 0> ) der Mikrowort-Ausgabe vom Steuerspeicher 43 auf dem Bus 44 über den Bus 188 wird dazu verwendet, die nächste Adresse zu definieren, die an den Adresseneingang 181 anzulegen ist. Die nächste Adresse wird im aktuellen Mikrowort explizit codiert; es gibt kein Konzept für eine sequentielle nächste Adresse (d. h. die Ausgabe des Latchs 182 wird nicht nur inkrementiert). Das Bit 14 des Steuerfelds wählt zwischen Sprung- und Verzweigungsformaten aus. Das Sprungformat enthält Bits < 10 : 0> als Sprungadresse, Bits < 12 : 11 > zum Auswählen der Quelle der nächsten Adresse (über den Selektor 83) und das Bit 13 zum Steuern, ob eine Rücksprungadresse auf dem Mikrostapel 189 über einen Bus 190 abgelegt ist. Das Verzweigungsformat enthält Bits < 7 : 0> als Verzweigungs- Distanzadresse bzw. -Versatz, Bits < 12 : 8> zum Definieren der Quelle der Mikrotesteingabe und wiederum Bit 13 zum Steuern, ob eine Rücksprungadresse über den Bus 190 zum Mikrostapel 189 abgelegt ist. Diese Mikrobefehle für eine bedingte Verzweigung antworten auf verschiedene Zustände innerhalb der CPU 10, wie beispielsweise einen ALU-Überlauf, eine falsche Vorhersage einer Verzweigung, Speichermanagementausnahmen, reservierte Adressierungsmoden oder Fehler bzw. Ausfälle in der Gleitkommaeinheit 27.
- Das letzte Mikrowort eines Mikroprogramms enthält ein Feld, das es als den letzten Zyklus identifiziert, und dieses Feld aktiviert einen Selektor 195, der bestimmt, welcher neue Mikroablauf zu beginnen ist. Die Alternativen (in der Reihenfolge der Priorität) sind eine Unterbrechung, ein Fehlertreiber, ein Treiber für einen durchgeführten ersten Teil, oder die Eintragsstelle für einen neuen Makrobefehl, der durch den obersten Eintrag in der Befehls-Warteschlange 35 angezeigt wird. Alle dieser vier Alternativen werden durch die Eingaben 196 zum Selektor 195 dargestellt. Wenn ein letzter Zyklus angezeigt wird und es keinen nicht programmierbaren Mikro-Programmsprung vom Selektor 192 gibt, wird die nächste Adresse vom Selektor 195 zum Eintreten in den Latch 182 an den Selektor 183 angelegt.
- Die Befehls-Warteschlange 35 ist ein FIFO mit einer Tiefe von sechs Einträgen, der durch die Befehlseinheit 22 über den Bus 34 aufgefüllt wird, was zuläßt, daß die Befehlseinheit 22 Makrobefehle vor der Ausführung durch die Ausführungseinheit 23 holt und decodiert. Jeder Eintrag hat eine Länge von 22 Bits, wobei die Bits < 9 : 1 > diejenigen für die Steuerspeicheradresse über den Selektor 183 verwendete Absetz- bzw. Sendeadresse sind (alle Eintragsstellen werden zu diesen Adressenbits abgebildet), und die Bits < 21 : 13> der Operationscode selbst sind (das Zusatzbit, das einen Zwei-Byte-Operationscode bezeichnet). Das Bit 0 ist ein Gültigkeitsbit, das gesetzt ist, wenn der Eintrag gültig ist, das Bit 10 zeigt einen Befehl der Gleitkommaeinheit 27 an, und die Bits < 12 : 1> definieren die anfängliche Datenlänge von Befehlsoperanden (Byte, Wort, Langwort, etc.). Ein Schreibzeiger 197 definiert die Stelle, wo während phi1 ein neuer Eintrag zum Bus 34 geschrieben wird, und dieser Schreibzeiger 197 wird in phi3 jedes Zyklus weitergeschaltet, wenn das Gültigkeitsbit in diesem neuen Eintrag gesetzt ist. Ein Lesezeiger 198 definiert die Stelle in der Befehls-Warteschlange 35, wo der nächste Befehl während phi2 auf Ausgangsleitungen 199 zum Selektor 200 zu lesen ist. Wenn das Gültigkeitsbit im Eintrag der Befehls-Warteschlange 35 nicht gesetzt ist, der gerade ausgelesen wird, verwendet der Selektor 200 eine Verzögerungsadresseneingabe 201 zum Weiterleiten über einen Selektor 195 und einen Selektor 183 zum Latch 182; das Verzögerungsmikrowort wird somit zum Steuerspeicher 43 geholt und ein Verzögerungsbefehl wird zur Ausführungseinheit 23 gesendet. Wenn das Gültigkeitsbit im Eintrag gesetzt ist, der gerade von der Befehls-Warteschlange 35 gelesen wird, wird ein Befehl eines ersten Zyklus zur Ausführungseinheit 23 gesendet, und dann, wenn das Bit der Gleitkommaeinheit 27 auch gesetzt ist, wird ein Befehl der Gleitkommaeinheit 27 zur Gleitkommaeinheit 27 gesendet. Der Lesezeiger wird in phi4 weitergeschaltet, wenn der Selektor 195 des letzten Zyklus durch die Mikrowortausgabe in diesem Zyklus aktiviert wird, und der Selektor 195 wählt die Ausgabe 202 aus (und das Gültigkeitsbit wird im Eintrag gesetzt). Wenn der Lesezeiger 198 weitergeschaltet wird, wird das Gültigkeitsbit für den Eintrag, der gerade ausgelesen wird, gelöscht, so daß dieser Eintrag nicht erneut verwendet wird. Oder der Lesezeiger 198 wird verzögert (keine Aktion während phi4), wenn eine Verzögerungsbedingung existiert.
- Der Bus 202, der den von der Befehls-Warteschlange 35 gelesenen Eintrag enthält, enthält das Operationscodefeld sowie das Mikrocode-Adressenfeld (das zum Selektor 195 gesendet wird). Dieses Operationscodefeld zusammen mit dem Datenlängenfeld und dem Feld der Gleitkommaeinheit 27 wird auf phi3 von S2 hin in einen Befehlszusammenhangs-Latch 203 eingegeben, wenn die Befehls- Warteschlange 35 als die nächste Adressenquelle für den Steuerspeicher 43 ausgewählt wird. Wenn der ausgelesene Eintrag sein Gültigkeitsbit gelöscht hat, wird der Verzögerungsbefehlszusammenhang, der mit der Verzögerungsadresse aus dem Selektor 200 gezwungen wird, in den Zusammenhangslatch 203 zwischengespeichert. Die Ausgabe auf Leitungen 204 vom Latch 203 wird zur Gleitkommaeinheit 27 gesendet, um den auszuführenden Befehl der Gleitkommaeinheit 27 zu definieren, wenn das Bit der Gleitkommaeinheit 27 gesetzt ist. Auf phi1 des S3- Segments hin werden die Inhalte des Latchs 203 zu einem Slave- Zusammenhangslatch 205 getrieben, und die Inhalte dieses Slave-Latches werden während S3 durch die Ausführungseinheit 23 verwendet.
- Gemäß Fig. 15 ist das Mikrowort am Steuerspeicherausgang 61 Bits breit, und davon wird ein 14-Bit-Feld (Bits < 14 : 0> ) über einen Bus 24e in der Mikro- Ablaufsteuerung 42 verwendet, so daß die Eingabe zum Mikrobefehls-Latch 24d 47 Bits breit ist, d. h. Bits < 60 : 15> . Die Mikrobefehle sind von zwei allgemeinen Typen, die "Standard" und "Spezial" genannt werden, und zwar in Abhängigkeit davon, ob das Bit 60 eine Eins oder eine Null ist. In beiden Fällen hat der Mikrobefehl ein Feld, nämlich die Bits < 59 : 56> , das die ALU-Funktion (Addieren, Subtrahieren, Führen, Vergleichen, etc.) definiert, die für diesen Zyklus zu implementieren ist, und ein MRQ-Feld, nämlich die Bits < 54 : 50> , die irgendwelche Speicheranfragen definieren, die zur Speichermanagementeinheit 25 durchzuführen sind. Die A- und B-Felder (nämlich die Bits < 25 : 20> und < 39 : 36> ) des Mikroworts definieren die A- und B-Eingaben zur ALU, und das DST-Feld, nämlich die Bits < 31 : 26> , definiert den Schreib-Zielort für die ALU-Ausgabe zusammen mit dem MISC-Feld, das andere benötigte Steuerbits enthält. Die L-, W und V-Felder, nämlich die Bits < 34 : 32> , definieren die Datenlänge, ob der Schreibbus zu treiben ist, und die Schreibfreigabe der virtuellen Adresse. Für Schiebeoperationen enthält das Mikrowort ein SHF-Feld < 48 : 46> zum Definieren der Schiebefunktion und ein VAL-Feld, nämlich die Bits < 44 : 40> , zum Definieren des Schiebebetrags. Auch enthält das Mikrowort dann, wenn das Bit 45 eine Eins ist, einen konstanten Wert in den Bits < 44 : 35> zum Treiben auf den B-Eingang der ALU; die Konstante kann das 8-Bit oder das 10-Bit sein, wie es im MISC-Feld definiert ist, und wenn sie das 8-Bit ist, definiert ein POS-Feld die Position der Konstanten. Wenn sie vom speziellen Format sind, ist keine Schiebeoperation möglich, und zwei andere MISC-Steuerfelder sind verfügbar.
- Gemäß Fig. 16 enthält die E-Box oder die Ausführungseinheit 23 die Registerdatei 41, die siebenunddreißig 32-Bit-Register enthält, die aus sechs Speicherdatenregistern MD0-MD5 bestehen, fünfzehn allgemeine Register (GPRs) R0-R14, sechs Arbeitsregister W und CPU-Zustandsregister. Die MD-Register entfernen Daten von Speicherauslesungen, die durch die Befehlseinheit 22 initiiert werden, und von einem direkten Schreiben von der Befehlseinheit 22. Die Arbeitsregister W halten temporäre Daten unter einer Steuerung der Mikrobefehle (die für den Makrobefehlssatz nicht verfügbar sind); diese Register können Daten von Speicherauslesungen empfangen, die durch die Ausführungseinheit 23 initiiert werden, und empfangen Ergebnisdaten von Operationen der ALU 45, des Schiebers 46 oder der Gleitkommaeinheit 27. Die GPRs sind allgemeine Register der VAX-Architektur (obwohl der PC, R15, nicht in dieser Datei 41 ist) und können Daten von Speicherauslesungen empfangen, die durch die Ausführungseinheit 23 initiiert werden, von der ALU 45, dem Schieber 46 oder von der Befehlseinheit 22. Die Zustandsregister halten einen semipermanenten Architekturzustand und können nur durch die Ausführungseinheit 23 beschrieben werden.
- Die Registerdatei 41 hat drei Leseanschlußstellen und drei Schreibanschlußstellen. Die Leseanschlußstellen enthalten drei Leseadresseneingänge RA1, RA2 und RA3 und drei Lesedatenausgänge RD1, RD2 und RD3. Die drei Schreibanschlußsteüen enthalten Schreibadresseneingänge WA1, WA2 und WA3 und drei Schreibdateneingänge WD1, WD2 und WD3. Eine Dateneingabe zu den Schreibanschlußstellen der Registerdatei 41 erfolgt vom Speicherdatenbus 54 zum WB2, vom Schreibbus 87 der Befehlseinheit 22 zur WD3 oder zum Ausgang der ALU 45 auf dem Schreibbus 210 zur WD1. Eine Datenausgabe von der Registerdatei 41 erfolgt zum Selektor 211 für den ALU-A-Bus 212 von der RD1 (in S3), zum Selektor 213 für den ALU-B-Bus 214 von der RD2 (ebenso in S3) und zum Bus 93, der zur Befehlseinheit 22 geht, von der RD3. Die Leseadressen bei RA1 und RA2 für die RD1- und RD2-Ausgaben von der Registerdatei 41 werden von Selektoren 215 und 216 empfangen, von denen jeder Eingaben von der Quellen-Warteschlange 37 oder von den A- und B-Feldern des Mikrobefehls über den Bus 85 empfängt; in einem Zyklus können zwei Einträge in der Quellen-Warteschlange 37 die Adresseneingaben bei RA1 und RA2 sein, um die ALU-A- und -B-Eingaben (oder Eingaben der Gleitkommaeinheit 27) zur Verfügung zu stellen, oder der Mikrobefehl kann eine spezifische Registeradresse definieren sowie eine Adressierung der Quellen- Warteschlange spezifizieren. Die Schreibadresseneingabe WA1 (ein Steuern des Registers, zu dem die ALU-Ausgabe oder ein Schreibbus 210 geschrieben wird) wird durch einen Selektor 217 definiert, der eine Eingabe von der Zielort-Warteschlange 38 oder vom DSP-Feld des Mikrobefehls über den Bus 185 empfängt; der Selektor 217 wird durch die Zurückzieh-Warteschlange 72 sowie den Mikrobefehl gesteuert. Die WA2-Eingabe erfolgt von der Speichermanagementeinheit 25 über den Bus 218, was definiert, welches Register über den MD-Bus 54 bei WD2 beschrieben wird; diese MD-Anschlußstelle wird durch die Speichermanagementeinheit 25 zum Schreiben von Speicher- oder IPR-Lesedaten in W-Register oder GPRs verwendet wird, um durch die Ausführungseinheit 23 initiierte Auslesungen zu beenden, wobei die Registerdateiadresse von der Speichermanagementeinheit 25 zu WA2 zugeführt wird (die M-Box empfing die Registerdateiadresse, wenn die Speicheroperation initiiert wurde). Die komplexe Spezifizierereinheit 40 (die in Fig. 13 zu sehen ist) greift auf die Registerdatei 41 durch WA3/WD3 und RA3/RD3 für eine allgemeine Adressenberechnung und eine Autoinkrementier- und Autodekrementier-Operandenspezifiziererverarbeitung zu.
- Ein Umgehungspfad 219 ist vom MD-Bus 54 zu den Eingängen der Selektoren 211 und 213 vorgesehen und läßt zu, daß die Speicherlesedaten direkt an die A- oder B-ALU-Eingänge angelegt werden, ohne zu dem einen Register in der Registerdatei 41 geschrieben zu werden und dann von diesem Register im selben Zyklus ausgelesen zu werden. Die Daten erscheinen auf dem MD-Bus 54 zu spät, um im selben Zyklus gelesen zu werden. Wenn der Umgehungspfad durch einen Mikrocode freigegeben wird, werden die Daten nicht zum Register geschrieben.
- Es gibt zwei Konstantengeneratoren. Ein Konstantengenerator 220 für den A- Eingang der ALU über den Selektor 221, der im A-Feld des Mikrobefehls spezifiziert ist, erzeugt Konstanten, die hauptsächlich zum Erzeugen der Adressen von IPRs verwendet werden, und diese sind implementierungsabhängig. Allgemein wird ein 8-Bit-Wert erzeugt, um intern eine IPR-Adresse zu definieren. Ein Konstantengenerator 222 für den B-Eingang der ALU über den Selektor 223 bildet eine Langwortkonstante durch Anordnen eines Byte-Wertes in einer von vier Byte-Positionen im Langwort; die Positions- und Konstantenfelder Pos und Constant im Mikrobefehl spezifizieren diesen Wert. Ebenso kann die Konstantenquelle 222 eine niederwertige 10-Bit-Konstante erzeugen, die durch den Mikrobefehl spezifiziert wird, wenn ein Konstanten-10-Feld vorhanden ist.
- Die ALU 45 ist eine 32-Bit-Funktionseinheit, die arithmetische und logische Funktionen kann, die durch das ALU-Feld des Mikrowortes definiert sind. Die A- und B- Eingänge 212 und 214 werden durch die Selektoren 211 und 213 definiert, die unter einer Steuerung der A- und B-Felder des Mikrowortes sind. Der ALU-Ausgang 223 kann auf den Schreibbus 210 über den Rmux 50 multiplext werden und ist direkt mit dem virtuellen Adressenregister 224 verbunden. Die ALU erzeugt auch Zustandscodes (Überlauf, Übertrag, Null, Negativ) basierend auf den Ergebnissen einer Operation, und diese können dazu verwendet werden, die Zustandsregister einem Updaten zu unterziehen. Die Operationen, die in der ALU durchgeführt werden können, enthalten ein Addieren, ein Subtrahieren, ein Durchlaufen von A oder B, eine UND-Verknüpfung, eine ODER-Verknüpfung, eine Exklusiv-ODER- Verknüpfung, etc.
- Der Schieber 46 empfängt 64 Bits einer Eingabe von den A- und B-Eingängen 212 und 214 und erzeugt eine nach rechts verschobene 32-Bit-Ausgabe zum Rmux 50. Eine Schiebeoperation wird durch das SHF-Feld des Mikrobefehls definiert, und der Betrag (0-bis-32-Bits) wird durch das VAL-Feld oder durch ein Schiebezählerregister 225 definiert. Die Ausgabe 226 des Schiebers 46 wird über den Rmux 50 auf den Schreibbus 210 multiplext und direkt mit dem Quotienten- oder Q-Register 227 verbunden.
- Der Rmux 50 koordiniert den Ergebnisspeicher der Ausführungseinheit 23 und der Gleitkommaeinheit 27 und ein Zurückziehen von Makrobefehlen, ein Auswählen der Quelle von Speicheranfragen der Ausführungseinheit 23 und der Quelle der Daten des nächsten Schreibbusses 210 und zugehöriger Informationen. Die Rmux- Auswahl findet in S4 statt, wie es auch der Fall für das Treiben der Speicheranfrage zur Speichermanagementeinheit 25 ist. Die neuen Daten auf dem Schreibbus 210 werden jedoch bis zum Beginn von S5 nicht verwendet. Der Rmux 50 wird durch die Zurückzieh-Warteschlange 72 gesteuert, die eine Ausgabe auf Leitungen 228 erzeugt, was anzeigt, ob der nächste Makrobefehl zum Zurückziehen gerade durch die Ausführungseinheit 23 oder die Gleitkommaeinheit 27 ausgeführt wird, und der Rmux wählt eine von diesen zum Treiben des Schreibbusses 210 und zum Treiben der Speicheranfragesignale aus. Diejenige, die nicht ausgewählt wird (die Ausführungseinheit 23 oder die Gleitkommaeinheit 27), wird verzögern, wenn sie den Schreibbus 210 oder die Speicheranfrage treiben muß. Der Lesezeiger in der Zurückzieh-Warteschlange 72 wird nicht weitergeschaltet, und daher kann sich die Rmux-Auswahl nicht ändern, bis die gegenwärtig ausgewählte Quelle (die Ausfüh rungseinheit 23 oder die Gleitkommaeinheit 27) anzeigt, daß ihr Makrobefehl zurückzuziehen ist. Die Quelle (die Ausführungseinheit 23 oder die Gleitkommaeinheit 27), die durch die Zurückzieh-Warteschlange 72 angezeigt wird, ist immer ausgewählt, um den Rmux 50 zu treiben; wenn die Ausführungseinheit 23 ausgewählt ist, wählt das W-Feld des Mikrobefehls in S4 entweder die ALU 45 oder den Schieber 46 als die Quelle für den Rmux 50.
- Das 32-Bit-VA-Register oder virtuelle 32-Bit-Adressenregister 224 ist die Quelle für die Adresse für alle Speicheranfragen der Ausführungseinheit 23 auf einem VA- Bus 52, außer für auf der Zielort-Warteschlange 38 basierende Speicherungen, die den aktuellen Eintrag der PA-Warteschlange 56 für eine Adresse verwenden. Ungleich dem Eintrag in der PA-Warteschlange 56 wird die Adresse des VA-Registers 224 noch nicht umgesetzt -- sie ist eine virtuelle Adresse, außer dann, wenn die Speicheroperation keine Umsetzung erfordert (wie bei IPR-Referenzen oder expliziten physikalischen Speicherreferenzen), oder wenn ein Speichermanagement ausgeschaltet ist. Das VA-Register 224 kann nur vom Ausgang 223 der ALU 45 geladen werden und wird am Ende von S4 geladen, wenn das V-Feld des Mikroworts spezifiziert, es zu laden. Wenn ein gegebenes Mikrowort eine Speicheroperation im MRQ-Feld spezifiziert, und das VA-Register 224 lädt, wird der neue VA- Wert durch die Speichermanagementeinheit 25 mit dem Speicherbefehl empfangen.
- Der Populationszähler 230 funktioniert zum Berechnen der Anzahl von Einsen (viermal) in niederwertigen vierzehn Bits des A-Busses 212 in jedem Zyklus, was ein Ergebnis auf Leitungen 231 zum Selektor 221 erzeugt, so daß das Ergebnis eine Quelle ist, die auf dem A-Bus 212 für das nächste Mikrowort verfügbar ist. Die Populationszählfunktion sichert Mikrocodeschritte in AUFRUF-, ABHEB- und ABLEG-Makrobefehlen, wie es in der zusammen mit dieser anhängigen Anmeldung PD88-0372 aufgezeigt ist, die am 20. Juli 1988 eingereicht wurde und Digital Equipment Corporation gehört. Der Populationszähler 230 berechnet ein Ergebnis im Bereich (1-zu-14)*4, was gleich dem Vierfachen der Anzahl von Einsen auf dem A-Bus früh in S4 ist. Wenn ein Mikrowort N Daten zum A-Bus 212 steuert, kann ein Mikrowort N+1 auf das Populationszählerergebnis für jene Daten durch Spezifizieren dieser Quelle im A-Feld zugreifen. Das Populationszählerergebnis auf den Leitungen 231 wird zum Berechnen des Ausmaßes des Stapel-Frames verwendet, der durch den Makrobefehl geschrieben werden wird. Die zwei Enden des Stapel- Frames werden für Speichermanagementzwecke geprüft, bevor irgendein Schreiben durchgeführt wird.
- Die Maskenverarbeitungseinheit 232 hält und verarbeitet einen der von den Bits < 29 : 16> des B-Busses 214 geladenen 14-Bit-Werte während S4, wenn das Mikrowort ihr durch das MISC-Feld mitteilt, dies zu tun. Die Einheit 232 gibt eine Gruppe von Bits aus, mit welchen die Mikrobefehls-Ablaufsteuerung 42 eine Acht-Wege- Verzweigung ausführen kann. Jede dieser Mikroverzweigungen erfolgt zu einer Speicher-Register-zu-Stapel-Sequenz, wobei der Wert der Gruppe von Bits definiert, welches Register der Registerdatei 43 zu speichern ist. Diese Gruppe von drei Bits wird an einen Mikrotesteingang zum Mikroadressen-Latch 182 der Fig. 14 angelegt, um die Acht-Wege-Mikroverzweigung zu implementieren. Der Zweck davon besteht im Zulassen, daß der Mikrocode Bitmasken in Makrobefehlsausführungs-Abläufen für AUFRUF, Rücksprung, ABHEBEN und ABLEGEN schnell verarbeitet. Die Maskenverarbeitungseinheit 232 lädt die vierzehn Bits während S4, bewertet die Eingabe, die die Werte erzeugt, die in folgender Tabelle gezeigt sind, und zwar für die Bits < 6 : 0> und auch getrennt davon für die Bits < 13 : 7> des B- Busses:
- wobei X "keine Sorge" bedeutet. Wenn der Mikrocode bei einem dieser Ausgangswerte verzweigt, nachdem sie über Leitungen zum Mikrotesteingang zur Mikro- Ablaufsteuerung 42 geladen sind, wird das am wenigsten signifikante Bit, das im gegenwärtigen Maskenwert in der Maskenverarbeitungseinheit 232 eine Eins ist, automatisch auf Null rückgesetzt, und dieses Rücksetzen erfolgt in S3, so daß das nächste Mikrowort beim neuen Wert der Maske verzweigen kann. Die Mikro- Ablaufsteuerung 42 signalisiert, daß sie eine Verzweigung nahm, durch eine Ein gabe 234 zur Maskenverarbeitungseinheit 232. Der Vorteil der Maskenverarbeitungseinheit 232 besteht darin, daß eine minimale Anzahl von Mikrocode-Zyklen benötigt wird, um herauszufinden, welche Register zum Stapel zu sichern sind, wenn ein "AUFRUF" oder ein anderer derartiger Makrobefehl ausführt. Die zum B- Bus geladene Maske enthält eine Eins für jedes der vierzehn GPRs, das zum Stapel zu sichern ist, und normalerweise sind diese in den niederwertigeren Zahlen von Bits < 6 : 0> ; nehmen wir an, daß das Bit 1 und das Bit 2 Einsen sind, dann werden diese in zwei Zyklen gefunden (was Ausgaben von 000 und 001 auf den Leitungen 233 erzeugt), und der Rest von Null kann in zwei Zyklen bestimmt werden, wobei einer "111" am Ausgang 233 für die Bits < 6 : 2> der ersten Gruppe erzeugt, und wobei der nächste "111" am Ausgang 233 für die Bits < 13 : 7> gemeinsam (alles Nullen) für die zweite Gruppe erzeugt. Somit werden zehn Mikrozyklen gespart.
- Die Maskenverarbeitungseinheit 232 kann bei einem Ausführungsbeispiel durch einen Decodierer implementiert werden, um das Maskenmuster gemäß der obigen Tabelle zu bewerten und um die Drei-Bit-Ausgabe zu erzeugen, die gemäß der Position der führenden "1" angezeigt ist. In Antwort auf ein Anzeichen einer genommenen Verzweigung auf der Leitung 234 von der Mikro-Ablaufsteuerung macht der Decodierer die nacheilende "1" in der Maske zu Null, die dann in der Einheit ist, und führt eine weitere Bewertung durch, um den Drei-Bit-Ausgangswert auf den Leitungen 233 zu erzeugen.
- Der Verzweigungsbedingungsbewerter 235 verwendet den Makrobefehls- Operationscode, die ALU-Zustandscodebits und das Ergebnis des Schiebers 46 zum Bewerten der Verzweigungsbedingung für alle Makrobefehls-Verzweigungen. Diese Bewertung wird in jedem Zyklus durchgeführt, wird aber nur dann verwendet, wenn das Mikrowort sie im MRQ-Feld spezifiziert. Das Ergebnis der Bewertung wird mit der Vorhersage der Befehlseinheit 22 verglichen, die in der Verzweigungsvorhersageeinheit 39 durchgeführt wird. Die Vorhersage der Befehlseinheit 22 wird im Eintrag in der Verzweigungs-Warteschlange 70 angezeigt. Wenn die Vorhersage der Befehlseinheit 22 nicht richtig war, signalisiert die Ausführungseinheit 23 dies der Befehlseinheit 22 auf einer der Leitungen 173 und sendet eine Anfrage für einen nicht programmierbaren Verzweigungs-Falschvorhersage-Programmsprung zur Mikro-Ablaufsteuerung 42 als eine der Eingaben 193. Ein Zurückziehsignal wird auf einer der Leitungen 173 aktiviert, um der Befehlseinheit 22 mitzuteilen, daß ein Verzweigungs-Warteschlangeneintrag für eine bedingte Verzweigung von der Ver zweigungs-Warteschlange 70 entfernt wurde. Wenn das Zurückziehsignal aktiviert wird und das Nichttreffer-Vorhersagesignal nicht, löst die Befehlseinheit 22 das Betriebsmittel, bzw. gibt es frei, das den alternativen PC hält (die Adresse, zu der die Verzweigung gegangen sein sollte, wenn die Vorhersage nicht richtig gewesen wäre). Wenn ein Zurückziehen und eine Nichttreffer-Vorhersage beide aktiviert sind, beginnt die Befehlseinheit 22 ein Holen von Befehlen vom alternativen PC, und der nicht programmierbare Mikro-Programmsprung in der Mikro- Ablaufsteuerung 42 wird veranlassen, daß die Ausführungseinheit 23 und die Gleitkommaeinheit 27 eine pipelinemäßige Verarbeitung ausführen, um gelöscht zu werden, und damit verschiedene Warteschlangen der Befehlseinheit 22 und der Ausführungseinheit 23 ausgeräumt werden. Ebenso räumt ein Signal zur Speichermanagementeinheit 25 eine M-Box-Verarbeitung von Operandenzugriffen der Ausführungseinheit 23 aus (die andere als ein Schreiben sind). Der Verzweigungs- Makrobefehl ist in S5 eingetreten und wird daher selbst in dem Fall einer Falschvorhersage zurückgezogen; er besteht aus den Makrobefehlen, die der Verzweigung in der Pipeline folgen, die an einem Beenden in dem Fall eines nicht programmierbaren Falschvorhersage-Mikro-Programmsprungs über den Eingang 193 abgehalten werden muß.
- Gemäß der Fig. 17 enthält die Speichermanagementeinheit 25 den TB 55 und funktioniert zusammen mit der Betriebssystem-Speichermanagementsoftware zum Zuteilen eines physikalischen Speichers. Umsetzungen von virtuellen Adressen zu physikalischen Adressen werden in der Speichermanagementeinheit 25 durchgeführt, Zugriffsprüfungen sind für das Speicherschutzsystem implementiert, und der Software-Speichermanagementcode wird initiiert, wenn es nötig ist (TB-Nichttreffer, Seiten-Swapping bzw. Seitenwechsel, etc.). Die Speichermanagementeinheit 25 ordnet auch einen Zugriff zu den Bussen 19 oder 20 zu, wenn Speicherreferenzen gleichzeitig von der Befehlseinheit 22, der Ausführungseinheit 23 und/oder der Cache-Steuereinheit 26 empfangen werden; das bedeutet, daß die Speichermanagementeinheit 25 für alle Speicherreferenzen eine Prioritätsbildung, eine Ablauffolgenbildung und eine Verarbeitung auf eine effiziente und logisch richtige Weise durchführt, und die Anfragen und ihre entsprechenden Daten zu und von der Befehlseinheit 22, der Ausführungseinheit 23, der Cache-Steuereinheit 26 und dem primären Cache 14 überträgt. Die Speichermanagementeinheit 25 steuert auch den primären Cache 14, der für die meisten Befehlsstrom- und Datenstrom- Anfragen einen Zugriff in zwei Zyklen zur Verfügung stellt.
- Die Speichermanagementeinheit 25 empfängt Anfragen von mehreren Quellen. Virtuelle Adressen werden auf einem Bus 52 von der Ausführungseinheit 23 empfangen, und Daten auf dem Schreibbus 41 von der Ausführungseinheit 23; Adressen von beiden dieser Quellen werden in den EM-Latch 74 zwischengespeichert. Befehlsstromadressen werden durch den Bus 53 von der Befehlseinheit 22 an die Speichermanagementeinheit 25 angelegt. Ungültige Adressen von der Cache- Steuereinheit 26 werden durch den Bus 59 angelegt. Von der Speichermanagementeinheit 25 zur Befehlseinheit 22 oder zur Ausführungseinheit 23 zurückgebrachte Daten, welche aus einem Treffer des primären Caches 14 resultieren, oder von der Cache-Steuereinheit 26 sind, nachdem eine Referenz zum Backup-Cache 15 oder zum Speicher 12 weitergeleitet wurde, sind auf dem Speicherdatenbus 54. Die ankommenden Anfragen werden zwischengespeichert, und die ausgewählte der Anfragen wird durch die Speichermanagementeinheit 25 in einem gegebenen Maschinenzyklus initiiert.
- Eine virtuelle Adresse auf einem internen Bus 240 wird an den Tag- Adresseneingang des Umsetzungspuffers 55 angelegt. Der tb ist ein inhaltsadressierbarer Speicher mit 96 Einträgen, der die Tags und die Seitentabelleneinträge für die sechsundneunzig zuletzt verwendeten Seiten im physikalischen Speicher speichert. Die an den virtuellen Adressenbus 240 angelegte virtuelle Adresse wird mit den Tags im tb verglichen, und dann, wenn eine Übereinstimmung gefunden wird, wird der entsprechende Seitentabelleneintrag durch einen Ausgang 242 und den internen physikalischen Adressenbus 243 zum Weiterleiten zum primären Cache 14 durch einen Adresseneingang 244 angelegt. Die physikalische Adresse wird auch über einen Pipeline-Latch 245 zum physikalischen Adressenbus 57 angelegt, der zur Cache-Steuereinheit 26 geht. Wenn ein Treffer des primären Cache 14 auftritt, werden Daten vom primären Cache 14 vom Ausgang 246 an den Datenbus 58 angelegt, von wo sie an den Speicherdatenbus 54 angelegt werden.
- Die ankommenden virtuellen Adressen von der Befehlseinheit 22 auf dem Bus 53 werden an einen Latch 76 angelegt, der alle Befehlsstrom-Lesereferenzen speichert, die durch die Befehlseinheit 22 angefragt werden, bis die Referenz erfolgreich endet. Ein Inkrementierer 247 ist dem Latch 76 zugeordnet, um die Quad wort-Adresse zum Holen des nächsten Blocks von Befehlsstromdaten zu inkrementieren.
- Die virtuellen Adressen auf dem Bus 53 von der Befehlseinheit 22 werden an die Spezifizierer-Warteschlange 75 angelegt, die ein FIFO mit zwei Einträgen ist, um Datenstrom-Lese- und -Schreib-Referenzen zu speichern, die zu Quellen- und Zielort-Operanden gehören, die durch die Befehlseinheit 22 decodiert werden. Jede in der Spezifizierer-Warteschlange 75 zwischengespeicherte Referenz wird gespeichert, bis die Referenz erfolgreich endet.
- Der EM-Latch 74 speichert Referenzen, die in der Ausführungseinheit 23 entstehen, bevor er sie an den internen virtuellen Adressenbus 240 anlegt; jede derartige Referenz wird gespeichert, bis die Speichermanagement-Zugriffsprüfungen gelöscht sind und die Referenz erfolgreich endet. Der Adressenpaar-Latch 248 speichert die Adresse des nächsten Quadwortes, wenn ein nicht ausgerichtetes Referenzpaar erfaßt wird; ein Inkrementierer 249 erzeugt diese nächste Adresse durch Addieren von Acht zur Adresse auf dem Bus 240.
- Ankommende Adressen auf dem Bus 59 von der Cache-Steuereinheit 26 werden im Latch 250 der Cache-Steuereinheit 26 zwischengespeichert; diese Referenzen dienen für Befehlsstrom-Auffüllungen des primären Caches 14, für Datenstrom- Auffüllungen des primären Caches 14 oder für Hexawort-Ungültigkeitserklärungen des primären Caches 14. Jede Referenz wird im Latch 250 der Cache- Steuereinheit 26 gespeichert, bis sie endet. Wenn eine Datenstrom-Auffüllung des primären Caches 14 angefragt wird, werden die Daten auf dem Bus 58 von der Cache-Steuereinheit 26 erscheinen.
- Die physikalische Adressen-Warteschlange 65 ist ein FIFO mit acht Einträgen, der die physikalischen Adressen speichert, die zu Zielort-Spezifiziererreferenzen gehören, die durch die Befehlseinheit 22 über eine Zielortadresse oder einen Lesemodifizierbefehl gemacht werden. Die Ausführungseinheit 23 wird die entsprechenden Daten einige Zeit später über einen Speicherbefehl zuführen. Wenn die Speicherdaten zugeführt werden, wird die Adresse der physikalischen Adressen- Warteschlange 65 an die Speicherdaten angepaßt, und die Referenz wird in eine physikalische Schreiboperation umgekehrt. Adressen von der Befehlseinheit 22 werden in derselben Reihenfolge wie die entsprechenden Daten von der Ausführungseinheit 23 erwartet. Die Warteschlange 65 hat Adressen-Komparatoren, die in alle acht FIFO-Einträge eingebaut sind, und diese Komparatoren erfassen, wenn die Bits < 8 : 3> der physikalischen Adresse eines gültigen Eintrags mit der entsprechenden physikalischen Adresse eines Datenstromauslesens der Befehlseinheit 22 übereinstimmt.
- Ein Latch 252 speichert die gegenwärtig ausstehende Datenstrom-Leseadresse; ein Datenstromauslesen, das ein Nichttreffer im primären Cache 14 ist, wird in diesem Latch 252 gespeichert, bis die entsprechende Blockauffülloperation des primären Caches 14 beendet ist. Der Latch 253 speichert Befehlsstromlese- Nichttrefferadressen auf eine analoge Weise. Auslesungen zu IPRs werden, genau wie Datenstromauslesungen, auch im Latch 252 gespeichert. Diese zwei Latches 252 und 253 haben Komparatoren, die eingebaut sind, um mehrere Bedingungen bzw. Zustände zu erfassen. Wenn die Hexawort-Adresse einer Ungültigkeitserklärung mit der in einem Latch 252 oder 253 gespeicherten Hexawort-Adresse übereinstimmt, setzt der entsprechende dieser Latches ein Bit, um anzuzeigen, daß die entsprechende Auffülloperation nicht mehr im primären Cache 14 speicherbar ist. Adressenbits < 11 : 5> adressieren einen bestimmten Index im primären Cache 14 (zwei Blöcke des primären Caches 14); wenn die Adresse < 8 : 5> vom Latch 252 mit den entsprechenden Bits der physikalischen Adresse eines Befehlsstromauslesens übereinstimmt, wird dieses Befehlsstromauslesen verzögert, bis die Datenstrom- Auffülloperation endet - dies verhindert die Möglichkeit, daß verursacht wird, daß eine Datenstrom-Auffüllsequenz zu einem gegebenen Block des primären Caches 14 gleichzeitig mit einer Befehlsstrom-Auffüllsequenz zum selben Block auftritt. Gleichermaßen werden die Adressenbits < 8 : 5> des Latchs 253 mit den Datenstrom-Ausleseadressen verglichen, um eine weiteren gleichzeitige I-Strom/D- Strom-Auffüllsequenz zum selben Block des primären Caches 14 zu verhindern. Die Adressenbits < 8 : 5> von beiden Latches 252 und 253 werden mit jeder Speicherschreiboperation verglichen, was nötig ist, um zu verhindern, daß das Schreiben die Cache-Auffüllsequenz stört.
- Die virtuelle Adresse auf dem Bus 240 wird auch an die Speichermanagement- Ausnahmeeinheit 254 angelegt, die funktioniert, um die Zugriffsrechte des PTE zu prüfen, der der virtuellen Adresse entspricht, um sicherzustellen, daß der Schutzpegel nicht verletzt wird oder daß die Zugriffsregeln nicht verletzt werden. Wenn keine Ausnahme erzeugt wird, wird zugelassen, daß die Speicheranfrage ohne Unterbrechung fortfährt, aber dann, wenn eine Ausnahme durch die Einheit 254 gefunden wird, wird die Speicherreferenz abgebrochen.
- Ein wichtiges Ziel der Funktion der Speichermanagementeinheit 25 besteht darin, angefragte Lesedaten so schnell wie möglich zur Befehlseinheit 22 und zur Ausführungseinheit 23 zurückzubringen, um Verzögerungen der Makro-Pipeline zu minimieren. Wenn die Pipeline der Ausführungseinheit 23 verzögert wird, weil sie darauf wartet, daß ein Speicheroperand in ihre Registerdatei 41 geladen wird (md- Verzögerungszustand), dann bezieht sich der Betrag an Zeit, für die die Ausführungseinheit 23 verzögert bleibt, darauf, bzw. hängt davon ab, wie schnell die Speichermanagementeinheit 25 die Daten zurückbringen kann. Zum Minimieren einer Lese-Latenzzeit der Speichermanagementeinheit 25 wird eine Zwei-Zyklus- Pipeline-Organisation der Speichermanagementeinheit 25 verwendet, wie es in Fig. 17a dargestellt ist, was zuläßt, daß angefragte Lesedaten in einem Minimum von zwei Zyklen zurückgebracht werden, nachdem die Lesereferenz zur Speichermanagementeinheit 25 ausgesendet ist, wobei ein Treffer des primären Caches 14 angenommen ist. In Fig. 17a treibt die Speichermanagementeinheit 25 zu Beginn des S5-Zyklus die Referenz mit höchster Priorität in die S5-Pipeline; die Zuteilungsschaltung 256 bestimmt, welche Referenz in S5 am Ende des vorherigen Zyklus S4 getrieben werden sollte (angelegt über den Bus 240 zum Eingang 241 vom TB 55). Die erste Hälfte des S5-Zyklus wird für ein TB-Nachschauen und zum Umsetzen der virtuellen Adresse in eine physikalische Adresse über den TB verwendet. Der Zugriff auf den primären Cache 14 wird während phi2 von S5 begonnen (bevor die Ausgabe des TB verfügbar ist, und zwar unter Verwendung des Offset- Teils < 8 : 0> der virtuellen Adresse über dem Pfad 257) und fährt in phi1 von S6 fort, und zwar mit Zurückbringdaten auf dem Bus 246. Wenn die Referenz veranlassen sollte, daß Daten zur Befehlseinheit 22 oder zur Ausführungseinheit 23 zurückgebracht werden, wird phi1-phi3 des S6-Zyklus dazu verwendet, die Lesedaten im Phasendreher 258 zu drehen (wenn die Daten nicht rechts ausgerichtet sind) und die Daten über den MD-Bus 54 zurück zur Befehlseinheit 22 und/oder zur Ausführungseinheit 23 zu übertragen.
- Somit kann die Speichermanagementeinheit 25 unter der Annahme, daß im Zyklus x eine ausgerichtete Lesereferenz durch die Befehlseinheit 22 oder die Ausführungseinheit 23 ausgegeben wird, die angefragten Daten im Zyklus x+2 zurückbringen, vorausgesetzt, daß 1) die umgesetzte Leseadresse im TB 55 im Cache gespeichert wurde, 2) keine Speichermanagement-Ausnahmen auftraten, wie es durch die Speichermanagement-Ausnahmeeinheit 254 erfaßt wird, 3) die Lesedaten im primären Cache 14 gespeichert wurden, und 4) keine andere Referenz mit höherer Priorität oder keine anhängige Referenz die sofortige Verarbeitung dieses Auslesens verhinderte.
- Aufgrund der Makro-Pipelinestruktur der CPU 10 kann die Speichermanagementeinheit 25 Referenzen "außer der Reihe" von der Befehlseinheit 22 und der Ausführungseinheit 23 empfangen. Das bedeutet, daß die Befehlseinheit 22 eine Referenz senden kann, die einer Operationscode-Decodierung entspricht, bevor die Ausführungseinheit 23 alle Referenzen gesendet hat, die dem vorherigen Operationscode entsprechen. Ein Ausgeben von Referenzen "außer der Reihe" in einer Makro-Pipeline führt Schwierigkeiten in bezug auf ein Garantieren, daß alle Referenzen innerhalb des Zusammenhangs des Befehlssatzes, der CPU-Architektur, der Makro-Pipeline und der Hardware der Speichermanagementeinheit 25 richtig verarbeitet werden, bei der Speichermanagementeinheit 25. Viele von diesen Schwierigkeiten nehmen die Form von Beschränkungen in bezug darauf an, wie und wann Referenzen durch die Speichermanagementeinheit 25 verarbeitet werden können.
- Ein Synchronisationsbeispiel ist nützlich zum Darstellen mehrerer der Referenz- Reihenfolgenbeschränkungen. Dieses Beispiel nimmt an, daß zwei Prozessoren (z. B. "Prozessor 1" ist die CPU 10 der Fig. 1 und "Prozessor 2" ist die CPU 28) in einer Multiprozessorumgebung arbeiten und den folgenden Code ausführen:
- Prozessor 1 Prozessor 2
- MOVL #1,C 10$ BLBC T,10$
- MOVL #1,T MOVL C,R0
- Anfangs besitzt der Prozessor 1 den kritischen bzw. entscheidenden Abschnitt, der der Speicherstelle T entspricht. Der Prozessor 1 wird die Speicherzelle C modifizieren, da er sie gegenwärtig in Besitz hat. Darauffolgend wird der Prozessor 1 den Besitz durch Schreiben einer 1 in T freigeben. Zwischenzeitlich "kreist" der Prozessor 2 um die Stelle T und wartet darauf, daß T nicht Null wird. Wenn T einmal nicht Null ist, wird der Prozessor 2 den Wert von C lesen. Mehrere Referenz- Reihenfolgenbeschränkungen für die Speichermanagementeinheit 25, wie sie in den folgenden Absätzen erklärt werden, beziehen sich auf dieses Beispiel.
- Eine Beschränkung besteht in "Keine D-Strom-Treffer unter D-Strom-Nichttreffern", was bedeutet, daß die Speichermanagementeinheit 25 keine Datenstrom- Lesereferenz zulassen wird, die einen Treffer im primären Cache 14 erzielt, um solange auszuführen, wie angefragte Daten für ein vorheriges Datenstromlesen noch nicht zugeführt worden sind. Siehe den Code, den der Prozessor 2 im obigen Beispiel ausführt. Wenn die Speichermanagementeinheit 25 Datenstrom-Treffer unter Datenstrom-Nichttreffern zuläßt, dann ist es für das Lesen von C durch die Befehlseinheit 22 möglich, während einer anhängigen Lese-Nichttreffersequenz zu T einen Treffer im primären Cache 14 zu erzielen. Dabei könnte die Speichermanagementeinheit 25 den Wert von C zuführen, bevor der Prozessor 1 C modifizierte. Somit würde der Prozessor 2 das alte C mit dem neuen T bekommen, was dazu führt, daß der Synchronisationscode nicht richtig arbeitet.
- Es ist zu beachten, daß, während Datenstrom-Treffer unter Datenstrom- Nichttreffern verboten sind, die Speichermanagementeinheit 25 eine Datenstrom- Treffer- unter einer Datenstrom-Auffülloperation ausführen wird. Anders ausgedrückt wird die Speichermanagementeinheit 25 Daten für ein Lesen zuführen, das einen Treffer im primären Cache 14 erzielt, während eine Auffülloperation des primären Caches 14 zu einem vorherigen Lesen mit einem Nichttreffer gerade in Arbeit ist, vorausgesetzt, daß die gelesenen Daten mit Nichttreffer bereits zugeführt worden sind.
- Befehlsstrom- und Datenstrom-Referenzen werden unabhängig voneinander behandelt. Das bedeutet, daß eine Befehlsstromverarbeitung ungeachtet dessen weitermachen kann, ob eine Datenstrom-Nichttreffersequenz gegenwärtig ausführt, und zwar unter der Annahme, daß es keinen Indexkonflikt des primären Caches 14 gibt.
- Eine weitere Beschränkung ist "Keine Befehlsstrom-Treffer unter Befehlsstrom- Nichttreffern", was der analoge Fall für Befehlsstrom-Lesereferenzen ist. Diese Beschränkung ist notwendig, um zu garantieren, daß die Befehlseinheit 22 immer ihre angefragte Befehlsstrom-Referenz zuerst empfängt, bevor irgendwelche anderen Befehlsstrom-Daten empfangen werden.
- Eine dritte Beschränkung ist ein "Beibehalten der Reihenfolge beim Schreiben". Siehe das obige Beispiel: wenn die Speichermanagementeinheit 25 des Prozessors 1 das Schreiben zu C mit dem Schreiben zu T neu anordnen würde, dann könnte der Prozessor 2 den alten Wert von C lesen, bevor der Prozessor 1 C einem Updaten unterzogen hat. Somit muß die Speichermanagementeinheit 25 die Sequenz beim Schreiben, das durch den Mikrocode der Ausführungseinheit 23 erzeugt wird, niemals neu anordnen.
- Eine vierte Beschränkung ist ein "Beibehalten der Reihenfolge von C-Box- Referenzen". Siehe wiederum das obige Beispiel: der Prozessor 2 wird eine Ungültigkeitserklärung für C als Ergebnis des durch den Prozessor 1 im Befehl MOVL #1,C durchgeführten Schreibens empfangen. Wenn dieses für ungültig Erklären nicht verarbeitet würde, bis nachdem der Prozessor 2 das Lesen von C durchgeführt hat, dann ist der falsche Wert von C in RO angeordnet worden. Streng gesprochen muß garantiert werden, daß das für ungültig Erklären in bezug auf C vor dem Lesen von C erfolgt. Jedoch deshalb, weil C im primären Cache 14 des Prozessors 2 sein kann, gibt es keinen Grund dafür, das Auftreten des Lesens von C zu stoppen, bevor die Ungültigkeitserklärung empfangen ist. Somit ist vom Standpunkt des Prozessors 2 aus hier die wirkliche Beschränkung, daß die Ungültigkeitserklärung für C vor der Ungültigkeitserklärung für T auftreten muß, welche vor dem Lesen von T auftreten muß, was veranlaßt, daß der Prozessor 2 durch die Schleife fällt. Solange die Speichermanagementeinheit 25 Referenzen der Cache- Steuereinheit 26 nicht neu anordnet, wird das für ungültig Erklären von C auftreten, bevor ein Nicht-Null-Wert von T gelesen wird.
- Eine fünfte Beschränkung besteht im "Bewahren der Reihenfolge von Auslesungen der Befehlseinheit 22 relativ zu irgendeinem anhängigen Schreiben der Ausführungseinheit 23 zur selben Quadwort-Adresse". Siehe das folgende Beispiel des in der CPU 10 ausgeführten Codes:
- MOVL #1,C
- MOVL C,RO
- In der Makro-Pipeline führt die Befehlseinheit 22 ein Vorauslesen von Spezifiziereroperanden durch. Somit empfängt die Speichermanagementeinheit 25 ein Auslesen von C entsprechend dem Befehl "MOVL C,RO". Dieses Lesen kann jedoch nicht durchgeführt werden, bis das Schreiben zu C vom vorherigen Befehl endet. Sonst wird der falsche Wert von C gelesen. Allgemein muß die Speichermanagementeinheit 25 sicherstellen, daß ein Lesen der Befehlseinheit 22 nur ausgeführt wird, wenn einmal das gesamte vorherige Schreiben zur selben Stelle beendet ist.
- Eine sechste Beschränkung ist "ein Lesen des I/O-Raums von der Befehlseinheit 22 muß nur ausgeführt werden, wenn die Ausführungseinheit 23 den entsprechenden Befehl ausführt". Ungleich einem Speicherlesen kann ein Lesen zu bestimmten 1/0-Raumadressen veranlassen, daß ein Zustand modifiziert wird. Als Ergebnis muß dieses Lesen des I/O-Raums nur in Zusammenhang mit der Befehlsausführung durchgeführt werden, der das Lesen entspricht. Aufgrund der Makro- Pipelinestruktur der CPU 10 kann die Befehlseinheit 22 ein Lesen des I/O-Raums ausgeben, um einen Operanden eines Befehls vorauszulesen, den die Ausführungseinheit 23 gegenwärtig nicht ausführt. Aufgrund von Verzweigungen in der Befehlsausführung kann die Ausführungseinheit 23 in der Tat niemals den Befehl ausführen, der dem Lesen des I/O-Raums entspricht. Daher muß die Speichermanagementeinheit 25 zum Verhindern einer ungeeigneten bzw. unrichtigen Zustandsmodifikation die Verarbeitung eines Lesens des I/O-Raums verhindern, das durch die Befehlseinheit 22 ausgegeben wird, bis die Ausführungseinheit 23 tatsächlich den Befehl ausführt, der dem Lesen des I/O-Raums entspricht.
- Eine siebte Beschränkung ist "ein Lesen zum selben Block des primären Caches 14 wie eine anhängige Lese/Auffüll-Operation muß verhindert werden". Die Organisation des primären Caches 14 ist so, daß ein Adressen-Tag 4 Unterblock- Gültigkeitsbits entspricht. Daher müssen die für gültig erklärten Inhalte aller vier Unterblöcke immer der Tag-Adresse entsprechen. Wenn nkei unterschiedliche Auffülloperationen des primären Caches gleichzeitig denselben Block des primären Caches 14 auffüllen, ist es für die Auffülldaten möglich, daß sie zwischen die zwei Auffülloperationen gemischt werden. Als Ergebnis wird ein Befehlsstrom-Lesen zum selben Block des primären Caches 14 wie ein anhängiges Datenstrom- Lesen/Auffüllen verhindert, bis die anhängige Lese/Auffüll-Operation endet. Gleichermaßen wird auch ein Datenstromlesen zum selben Block des primären Caches 14 wie ein anhängiges Befehlsstromlesen/Auffüllen verhindert, bis die Auffüllung endet.
- Eine achte Beschränkung ist "ein Schreiben zum selben Block des primären Caches 14 wie eine anhängige Lese/Auffüll-Operation muß verhindert werden, bis die Lese/Auffüll-Operation endet". Wie bei der siebten Beschränkung ist diese Beschränkung nötig, um zu garantieren, daß alle gültigen Unterblöcke gültige Daten auf dem neuesten Stand enthalten. Siehe die folgende Situation: die Speichermanagementeinheit 25 führt ein Schreiben zu einem ungültigen Unterblock eines Blocks des primären Caches 14 aus, der gegenwärtig aufgefüllt wird. Einen Zyklus später kommt die Cache-Auffüllung zu demselben Unterblock beim primären Cache 14 an. Somit werden die letzten Unterblock-Daten, die vom Schreiben kamen, durch ältere Cache-Auffülldaten überschreiben. Dieser Unterblock wird nun mit "alten" Daten als gültig markiert. Zum Vermeiden dieser Situation wird ein Schreiben zum selben Block des primären Caches 14 wie eine anhängige Lese/Auffüll-Operation verhindert, bis die Cache-Auffüllsequenz endet.
- Gemäß Fig. 17 gibt es in der Speichermanagementeinheit 25 sieben unterschiedliche Referenzspeichervorrichtungen (z. B. den EM-Latch 74, den lref-Latch 75, den C-Box-Latch 250, den VAP-Latch 248, die Spezifizierer-Warteschlange 76, den MME-Latch, etc.), die zum virtuellen Adressenbus 240 in S5 getrieben werden können. Zum Auflösen, welche zu treiben ist, ist eine Referenzzuteilung durch die Zuteilungsschaltung 256 implementiert. Der Zweck dieser sieben Vorrichtungen besteht im Puffern anhängiger Referenzen, die von unterschiedlichen Abschnitten des Chips kommen, bis sie durch die Speichermanagementeinheit 25 verarbeitet werden können. Zum Optimieren der Leistungsfähigkeit der CPU-Pipeline und zum Beibehalten einer funktionellen Richtigkeit der Referenzverarbeitung im Hinblick auf die Schaltung der Speichermanagementeinheit 25 und die Referenz- Reihenfolgenbeschränkungen bedient die Speichermanagementeinheit 25 Referenzen von diesen sieben Warteschlangen auf eine prioritätsmäßige Weise.
- Während jedes Zyklus der Speichermanagementeinheit 25 bestimmt die Referenzzuteilungsschaltung 256, welche unbedienten Referenzen im nächsten Zyklus verarbeitet werden sollten, gemäß einer Zuteilungspriorität. Die Referenzquellen sind nachfolgend von der höchsten zur niedrigen Priorität aufgelistet:
- 1. Der Latch 250 mit C-Box-Referenzen
- 2. Der Latch 257 für ein erneutes Versuchen bei einem d-Nichttreffer
- 3. Der Speichermanagement-Ausnahme-Latch 258
- 4. Der virtuelle Adressenpaar-Latch 248
- 5. Der E-Box-zu-M-Box-Latch 74
- 6. Die Spezifizierer-Warteschlange 75
- 7. Der Referenzlatch 247 der Befehlseinheit 22
- Wenn nichts getrieben werden kann, treibt die Speichermanagementeinheit 25 einen NOP-Befehl in S5. Dieses prioritätsmäßige Schema zeigt nicht direkt an, welche anhängige Differenz als nächstes getrieben wird, sondern zeigt statt dessen an, in welcher Reihenfolge die anhängigen Referenzen getestet werden, um zu bestimmen, welche verarbeitet wird. Konzeptmäßig ist die höchste anhängige Referenz, die alle Bedingungen zum Treiben der Referenz erfüllt, diejenige, für die zugelassen ist, daß sie während des nachfolgenden Zyklus ausführt.
- Dieses Prioritätsschema basiert auf einem bestimmten Grund. Zuerst werden alle Referenzen, die von der Cache-Steuereinheit 26 kommen, immer bedient, sobald sie verfügbar sind. Da Referenzen der Cache-Steuereinheit 26 garantiert wird, daß sie in einem Zyklus S5 enden, eliminieren wir die Notwendigkeit, Referenzen der Cache-Steuereinheit 26 in eine Warteschlange zu bringen, und einen Zurückdrückmechanismus zur Verfügung zu stellen, um die Cache-Steuereinheit 26 darüber zu benachrichtigen, ein Senden von Referenzen zu stoppen. Als zweites ist garantiert, daß eine Datenstrom-Lesereferenz im Latch 257 zum erneuten Versuchen eines d-Nichttreffers alle potentiellen Speichermanagementprobleme gelöscht hat; daher wird irgendeine Referenz, die in diesem Latch gespeichert ist, als die zweite zur Verarbeitung angesehen. Als drittes wird dann, wenn eine Referenz, die sich auf eine Speichermanagementverarbeitung bezieht, im Speichermanagement- Ausnahme-Latch 258 anhängig ist, ihr eine Priorität über die übrigen vier Quellen zugeteilt, weil die Speichermanagementeinheit 25 alle Speichermanagementausnahmen löschen muß, bevor sie wieder eine normale Verarbeitung aufnehmen kann. Als viertes speichert der virtuelle Adressenpaar-Latch 248 die zweite Referenz eines nicht ausgerichteten Referenzpaars; da es nötig ist, die gesamte nicht ausgerichtete Referenz vor einem Beginnen einer anderen Referenz zu beenden, hat der Latch 248 die nächsthöchste Priorität, um die nicht ausgerichtete Sequenz zu beenden, die von einer Referenz einer niedrigeren Priorität initiiert wurde. Als fünftes speichert der EM-Latch 74 Referenzen von der Ausführungseinheit 23; ihm wird eine Priorität über die Quellen der Spezifizierer-Warteschlange 75 und des Referenz-Latchs 76 der Befehlseinheit 22 zugeteilt, weil Referenzen der Ausführungseinheit 23 physikalisch in der Pipeline weiter entfernt als Referenzen der Befehlseinheit 22 sind -- die vorausgesetzte Implizierung dieser Tatsache besteht darin, daß die Ausführungseinheit 23 eine dringendere Notwendigkeit zum Erfüllen ihrer Referenzanfragen als die Befehlseinheit 22 hat, da die Ausführungseinheit 23 immer echte Arbeit durchführt und die Befehlseinheit 22 Operanden vorausliest, die tatsächlich niemals verwendet werden. Als sechstes speichert die Spezifizierer- Warteschlange 75 Operandenreferenzen der Befehlseinheit 22 und ist die nächste in der Reihe für eine Betrachtung; die Spezifizierer-Warteschlange hat eine Priorität über dem Referenz-Latch 76 der Befehlseinheit 22, weil Spezifiziererreferenzen wieder derart angesehen werden, daß sie in der Pipeline weiter weg als ein Vorauslesen eines Befehlsstroms sind. Schließlich kann als siebtes, wenn gegenwärtig keine andere Referenz getrieben werden kann, der Referenz-Latch 76 der Befehlseinheit 22 eine Befehlsstrom-Lesereferenz treiben, um Daten zur Befehlseinheit 22 zuzuführen. Wenn gegenwärtig keine Referenz in S5 getrieben werden kann, treibt die Speichermanagementeinheit 25 automatisch einen NOP-Befehl.
- Der Zuteilungsalgorithmus, der in der Schaltung 256 ausgeführt wird, basiert auf dem gerade erörterten Prioritätschema. Die Zuteilungslogik testet jede Referenz, um zu sehen, ob sie im nächsten Zyklus verarbeitet werden kann, durch Bewerten des aktuellen Zustandes der Speichermanagementeinheit 25. Es gibt bestimmte Tests, die jedem Latch zugeordnet sind. Als erstes veranlaßt deshalb, weil Referenzen der Cache-Steuereinheit 26 immer sofort verarbeitet werden, ein für gültig erklärter Latch 250 immer, daß die Referenz der Cache-Steuereinheit 26 vor allen anderen Referenzen getrieben wird. Als zweites wird eine anhängige Datenstrom- Lesereferenz vom Latch 257 zum erneuten Versuchen getrieben, vorausgesetzt, daß der Auffüllzustand des primären Caches 14 sich geändert hat, seit die Referenz des Latchs 257 zuletzt versucht wurde; wenn der Zustand des primären Caches 14 sich geändert hat, macht es Sinn, die Referenz erneut zu versuchen, da sie nun einen Treffer im primären Cache 14 erzielen kann. Als drittes wird eine anhängige MME-Referenz getrieben, wenn die Inhalte der Speichermanagementausnahme für gültig erklärt sind. Als viertes wird eine Referenz vom virtuellen Adressenpaar-Latch 248 getrieben, wenn der Inhalt für gültig erklärt ist. Als fünftes wird eine Referenz vom E-Box-zu-M-Box-Latch 74 getrieben, vorausgesetzt, daß der Inhalt für gültig erklärt ist. Als sechstes wird eine für gültig erklärte Referenz in der Spezifizierer-Warteschlange 75 getrieben, vorausgesetzt, daß die Spezifizierer- Warteschlange nicht gestoppt worden ist, weil ein explizites Schreiben der Ausführungseinheit 23 in Arbeit ist. Als siebtes wird eine Referenz von der Befehlseinheit 22 im Latch 76 getrieben, vorausgesetzt, daß dieser Latch aufgrund einer anhängigen Leseverriegelungs/Schreibentriegelungssequenz nicht gestoppt worden ist. Wenn keine dieser sieben Bedingungen erfüllt sind, wird die Speichermanagementeinheit 25 einen NOP-Befehl auf den Befehlsbus 259 treiben, was veranlaßt, daß die S5-Pipeline leer wird.
- Eine LESE-Verarbeitung in der Speichermanagementeinheit 25 wird beginnend mit allgemeinen Lese-Treffer- und Lese-Nichttreffer/Cache-Auffüll-Sequenzen untersucht. Unter der Annahme, daß eine Leseoperation initiiert ist und es keine TB- Nichttreffer gibt (und keine Verzögerung aus irgendeinem einer Vielzahl unterschiedlicher Gründe), ist die Operation der Speichermanagementeinheit 25 folgendermaßen. Zuerst erzeugt der Byte-Maskengenerator 260 die entsprechende Byte- Maske durch Schauen auf die Bits < 2 : 0> der virtuellen Adresse auf dem Bus 243 und das Datenlängenfeld DL< 1 : 0> auf den Befehlsbus 261 und treibt dann die Byte-Maske auf acht Bits des Steuerbusses 261. Byte-Maskendaten werden bei einer Leseoperation erzeugt, um die Byte-Ausrichtungsinformationen bei einem Lesen des I/O-Raums zur Cache-Steuereinheit 26 zuzuführen.
- Wenn eine Lesereferenz in der S5-Pipeline initiiert wird, wird während der ersten Hälfte des S5-Zyklus die Adresse durch den TB (unter der Annahme, daß die Adresse virtuell war) in eine physikalische Adresse umgesetzt, was eine physikalische Adresse auf dem Bus 243 erzeugt. Der primäre Cache 14 initiiert während der zweiten Hälfte des S5-Zyklus eine Cache-Nachschausequenz unter Verwendung dieser physikalischen Adresse. Diese Cache-Zugriffssequenz überlagert in den folgenden S6-Zyklus. Während phi4 des S5-Zyklus bestimmt der primäre Cache 14, ob die Lesereferenz in seiner Matrix vorhanden ist. Wenn der primäre Cache 14 dazu bestimmt wird, daß die angefragten Daten vorhanden sind, erfolgt ein "Cache-Treffer"- oder ein "Lese-Treffer"-Zustand. In diesem Fall treibt der primäre Cache 14 die angefragten Daten auf den Datenbus 246. Ein Referenz- Freigabesignafauf dem Bus 262 wird deaktiviert, um die Cache-Steuereinheit 26 darüber zu informieren, daß sie das S6-Lesen nicht verarbeiten sollte, da die Speichermanagementeinheit 25 die Daten vom primären Cache 14 zuführen wird.
- Wenn der primäre Cache 14 derart bestimmt wird, daß die angefragten Daten nicht vorhanden sind, tritt ein "Cache-Nichttreffer"- oder ein "Lese-Nichttreffer"-Zustand auf. In diesem Fall wird die Lesereferenz in den Latch 252 oder den Latch 253 geladen (in Abhängigkeit davon, ob das Lesen ein Befehlsstrom oder ein Datenstrom war), und der Gache-Steuereinheit 26 wird befohlen, eine Verarbeitung des Lesens durch die Aktivierung der Speichermanagementeinheit des Referenz- Freigabesignals auf dem Bus 262 fortzuführen. Einige Zeit später erhält die Cache- Steuereinheit 26 die angefragten Daten vom Backup-Cache 15 oder vom Speicher 12. Die Gache-Steuereinheit 26 wird dann vier Quadworte von Daten unter Verwendung der Befehlsstrom-Cache-Auffüll- oder der Datenstrom-Cache- Auffüllbefehle senden. Die vier Cache-Auffüllbefehle werden zusammen dazu verwendet, den gesamten Block des primären Caches 14 entsprechend der Hexawort- Leseadresse auf dem Bus 57 aufzufüllen. In dem Fall von Datenstrom-Auffüllungen wird einer der vier Cache-Auffüllbefehle mit einem Signal qualifiziert werden, das anzeigt, daß die Quadwort-Auffüllung die angefragten Datenstrom-Daten entsprechend der Quadwortadresse des Lesens enthält. Wenn dieser Auffüllung begegnet wird, wird sie dazu verwendet werden, die angefragten Lesedaten zur Speichermanagementeinheit 25, zur Befehlseinheit 22 und/oder zur Ausführungseinheit 23 zuzuführen. Wenn jedoch die physikalische Adresse entsprechend dem Cache- Auffüllbefehl in den I/O-Raum fällt, wird nur eine Quadwort-Auffüllung zurückgebracht, und die Daten werden nicht im primären Cache 14 gespeichert. Nur Speicherdaten werden im primären Cache 14 gespeichert.
- Jeder zur Speichermanagementeinheit 25 gesendete Cache-Auffüllbefehl wird im Latch 250 der Cache-Steuereinheit 26 zwischengespeichert; es ist zu beachten, daß weder die gesamte Cache-Auffülladresse noch die Auffülldaten in diesen Latch geladen werden. Die Adresse in den I-Nichttreffer- oder D-Nichttreffer- Latches 252, 253 werden zusammen mit zwei Quadwort-Ausrichtungsbits, die im Latch 257 der Cache-Steuereinheit 26 zwischengespeichert sind, dazu verwendet, die Quadwort-Cache-Auffülladresse zu erzeugen, wenn der Cache-Auffüllbefehl in S5 ausgeführt wird. Wenn sich die Auffülloperation in S6 ausbreitet, treibt die Cache-Steuereinheit 26 die entsprechenden Cache-Auffülldaten auf den Datenbus 58, um für den primären Cache 14 die Auffüllung über den Eingang-Ausgang 246 durchzuführen.
- Aus einer Leseoperation resultierende Daten werden (im Fall eines Cache-Treffers) durch den primären Cache 14 auf den Bus 58 getrieben, oder durch die Cache- Steuereinheit 26 (im Fall eines Cache-Nichttreffers). Diese Daten werden dann durch den Phasendreher 258 in einer nach rechts ausgerichteten Form auf den MD-Bus 54 getrieben. Signale werden konditional auf den Bus 262 mit diesen Daten aktiviert, um den Zielort (die Zielorte) der Daten als den virtuellen Befehls- Cache 17, die Daten der Befehlseinheit 22, das IPR-Schreiben der Befehlseinheit 22, die Daten der Ausführungseinheit 23 oder die Daten der Speichermanagementeinheit 25 anzuzeigen.
- Zum möglichst baldigen Zurückbringen der angefragten Lesedaten zur Befehlseinheit 22 und/oder zur Ausführungseinheit 23, implementiert die Cache-Steuereinheit 26 einen Datenumgehungsmechanismus des primären Caches 14. Wenn dieser Mechanismus aufgerufen wird, können die angefragten Lesedaten einen Zyklus früher zurückgebracht werden, als wenn die Daten für die S6-Cache- Auffülloperation getrieben werden. Der Umgehungsmechanismus arbeitet dadurch, daß man die Speichermanagementeinheit 25 die Cache-Steuereinheit 26 darüber informieren läßt, daß der nächste S6-Zyklus leer sein wird und somit der Bus 58 für die Cache-Steuereinheit 26 verfügbar sein wird. Wenn die Cache-Steuereinheit 26 über den S6-Leerzyklus informiert wird, treibt sie den Bus 58 mit den angefragten Lesedaten, wenn gegenwärtig Lesedaten verfügbar sind (wenn während eines Umgehungszyklus keine Lesedaten verfügbar sind, treibt die Gache-Steuereinheit 26 einige unbestimmte Daten, und keine gültigen Daten werden umgangen). Die Lesedaten werden dann durch den Phasendreher 258 formatiert und auf den MD- Bus 54 übertragen, um zur Befehlseinheit 22 und/oder zur Ausführungseinheit 23 zurückgebracht zu werden, und zwar qualifiziert durch die Daten des virtuellen Befehls-Caches, I-Box-Daten- oder E-Box-Daten-Signale auf dem Befehlsbus 262.
- Ein Speicherzugriff auf den gesamten Befehlsstromcode wird durch die Speichermanagementeinheit 25 im Auftrag von der Befehlseinheit 22 implementiert. Die Befehlseinheit 22 verwendet die Befehlsstromdaten zum Laden ihrer Vorabbefehls- Warteschlange 32 und zum Auffüllen des virtuellen Befehls-Caches 17. Wenn die Befehlseinheit 22 Befehlsstromdaten benötigt, die nicht in der Vorabbefehls- Warteschlange 32 oder dem virtuellen Befehls-Caches 17 gespeichert sind, gibt die Befehlseinheit 22 eine Befehlsstrom-Leseanfrage aus, die durch den Iref-Latch 76 zwischengespeichert wird. Die Adresse der Befehlseinheit 22 wird durch die Speichermanagementeinheit 25 immer derart interpretiert, daß sie eine ausgerichtete Quadwort-Adresse ist. In Abhängigkeit davon, ob das Lesen ein Treffer oder ein Nichttreffer im primären Cache 14 ist, ändert sich die Menge an zurückgebrachten Daten. Die Befehlseinheit 22 nimmt kontinuierlich Befehlsstromdaten von der Speichermanagementeinheit 25 an, bis die Speichermanagementeinheit 25 Daten des Befehlsstrom-ID-Busses 54 mit dem Signal für ein letztes Auffüllen qualifiziert, was die Befehlseinheit 22 darüber informiert, daß die aktuelle Auffüllung die anfängliche I-Lesetransaktion beendet.
- Wenn die angefragten Daten einen Treffer im primären Cache 14 erzielen, wechselt die Speichermanagementeinheit 25 die Referenz des Iref-Latchs 76 in eine Reihe von Befehlsstrom-Auslesungen, um einen Algorithmus für ein "Vorwärts- Auffüllen" des virtuellen Befehls-Caches 17 zu implementieren. Der Algorithmus zum vorwärtigen Auffüllen erzeugt größer werdende Quadwort-Leseadressen von der ursprünglichen Adresse im Iref-Latch 76 bis zur höchsten Quadwort-Adresse der ursprünglichen Hexawort-Adresse. Anders ausgedrückt erzeugt die Speicher managementeinheit 25 Lesereferenzen, so daß der Hexawort-Block des virtuellen Befehls-Caches 17 entsprechend der ursprünglichen Adresse von der Stelle der Anfrage aus bis zum Ende des Blocks aufgefüllt wird. Die Theorie hinter diesem Schema zum vorwärtigen Auffüllen besteht darin, daß sie nur dafür Sinn macht, Befehlsstromdaten zuzuführen, die der angefragten Referenz folgen, da eine Befehlsstromausführung ein monotones Größerwerden von Befehlsstromadressen veranlaßt (unter Vernachlässigung von Verzweigungen).
- Das Schema zum vorwärtigen Auffüllen wird durch den Iref-Latch 76 implementiert. Wenn das Lesen des Iref-Latches einmal in S5 endet, modifiziert der Iref-Latch- Quadwort-Adresseninkrementierer 247 die gespeicherte Adresse des Latchs 76, so daß ihr Inhalt das nächste Quadwort-I-Lesen wird. Wenn diese "neue" Referenz einmal in S5 endet, wird die nächste I-Lese-Referenz erzeugt. Wenn der Iref-Latch schließlich das I-Lesen entsprechend der höchsten Quadwort-Adresse der Hexawort-Adresse ausgibt, wird der Prozessor zum vorwärtigen Auffüllen durch für ungültig Erklären des Iref-Latch 76 beendet.
- Der Algorithmus zum vorwärtigen Auffüllen, der oben beschrieben ist, wird immer auf einen Empfang eines I-Lesens hin aufgerufen. Jedoch dann, wenn gefunden wird, daß eines der I-Auslesungen einen Nichttreffer im primären Cache 14 erzielt hat, werden die nachfolgenden I-Lesereferenzen aus der S5-Pipeline und dem Iref- Latch 76 ausgeräumt. Das Nichttreffer-I-Lesen führt dazu, daß der I-Nichttreffer- Latch 253 geladen wird und die Cache-Steuereinheit 26 ein Verarbeiten des Lesens fortführt. Wenn die Cache-Steuereinheit 26 die resultierenden vier Quadworte der Daten des primären Caches 14 zurückbringt, werden alle vier Quadworte zurück zur Befehlseinheit 22 übertragen, qualifiziert durch VIC-Daten. Dies resultiert im Effekt in einem Algorithmus für ein "vollständiges Auffüllen" des virtuellen Befehls-Caches 17, da der gesamte Block des virtuellen Befehls-Caches 17 aufgefüllt werden wird. Ein vollständiges Auffüllen wird anstelle eines vorwärtigen Auffüllens durchgeführt, weil es mit wenig Aufwand zu implementieren ist. Die Speichermanagementeinheit 25 muß einen Block von Zyklen zum Verarbeiten der vier Cache- Auffüllungen zuteilen; daher können alle Auffülldaten des primären Caches 14 ohne zusätzlichen Aufwand in Zyklen der Speichermanagementeinheit 25 zum virtuellen Befehls-Cache 17 versandt werden, da der MD-Bus 54 sonst während dieser Auffüllzyklen leer sein würde.
- Es ist zu beachten, daß sich die Befehlseinheit 22 nicht bewußt ist, in welchem Auffüllmode die Speichermanagementeinheit 25 gegenwärtig arbeitet. Der virtuelle Befehls-Cache 17 fährt damit fort, Befehlsstromdaten vom MD-Bus 54 aufzufüllen, wann immer VIC-Daten aktiviert werden, ungeachtet des Auffüllmodes der Speichermanagementeinheit 25. Die Speichermanagementeinheit 25 aktiviert das Signal für ein letztes Auffüllen zur Befehlseinheit 22 während des Zyklus, in welchem die Speichermanagementeinheit 25 die letzte Befehlsstromauffüllung zur Befehlseinheit 22 treibt. Das Signal für ein letztes Auffüllen informiert die Befehlseinheit 22 darüber, daß sie die letzte Auffüllung des virtuellen Befehls-Caches 17 in diesem Zyklus empfängt und daß sie nicht weitere erwarten sollte. Im Mode für ein vorwärtiges Auffüllen aktiviert die Speichermanagementeinheit 25 ein letztes Auffüllen, wenn die Quadwort-Ausrichtung "11" gleicht (d. h. dem obersten Quadwort des Hexawortes). Im Mode für ein vollständiges Auffüllen empfängt die Speichermanagementeinheit 25 die Informationen für ein letztes Auffüllen von der Cache- Steuereinheit 26 und überträgt sie durch das Signal für ein letztes Auffüllen zur Befehlseinheit 22.
- Es ist möglich, ein Verarbeiten eines Befehlsstromlesens im Mode für ein vorwärtiges Auffüllen zu beginnen, aber dann zu einem vollständigen Auffüllen umzuschalten. Dies könnte erfolgen, weil eine der Referenzen in der Kette eines I-Lesens eines vorwärtigen Auffüllens aufgrund eines kürzlichen für ungültig Erklärens oder aufgrund eines Versatzes der Befehlsstromdaten des primären Caches 14 durch eine Datenstrom-Cache-Auffüllung ein Nichttreffer ist. In diesem Fall wird die Befehlseinheit 22 mehr als vier Auffüllungen empfangen, wird aber mit der Speichermanagementeinheit 25 synchronisiert bleiben, weil sie kontinuierlich erwartet, Auffüllungen zu sehen, bis eine letzte Auffüllung aktiviert ist.
- Ein Speicherzugriff zu allen Datenstromreferenzen wird durch die Speichermanagementeinheit 25 im Auftrag von der Befehlseinheit 22 (für eine Spezifiziererverarbeitung), der Speichermanagementeinheit 25 (für PTE-Referenzen) und der Ausführungseinheit 23 (für alle anderen Datenstromreferenzen) implementiert.
- Im allgemeinen verhält sich eine Datenstrom-Leseverarbeitung auf dieselbe Weise wie eine Befehlsstrom-Leseverarbeitung, außer daß es kein Schema für ein vorwärtiges Auffüllen oder ein vollständiges Auffüllen gibt. Anders ausgedrückt werden nur die angefragten Daten zum Initiator des Lesens versandt. Vom Standpunkt des primären Caches 14 aus wird jedoch ein Schema für ein vollständiges Datenstrom auffüllen implementiert, da vier D-CF-Befehle noch zum primären Cache 14 ausgegeben werden.
- Ein D-Stromlesen kann eine Datenlänge eines Bytes, eines Wortes, eines Langwortes oder eines Quadwortes haben. Mit der Ausnahme der Querseiten- Prüffunktion wird ein Quadwort-Lesen behandelt, als ob seine Datenlänge ein Langwort wäre. Somit bringt ein Datenstrom-Quadwortlesen die untere Hälfte des Quadwortes zurück, auf das Bezug genommen wird. Die Quelle der meisten Datenstrom-Quadwortauslesungen ist die Befehlseinheit 22. Die Befehlseinheit 22 wird ein Datenstrom-Langwortlesen zur oberen Hälfte des Referenz-Quadwortes sofort nach einem Ausgeben des Quadwortlesens ausgeben. Somit wird auf das gesamte Quadwort von Daten durch zwei Datenstrom-Leseoperationen Rücken an Rücken zugegriffen.
- Ein D-Leseverriegelungsbefehl auf einem Befehlsbus 261 erzwingt immer eine Lese-Nichttreffersequenz des primären Caches 14, ungeachtet dessen, ob die Referenzdaten tatsächlich im primären Cache 14 gespeichert wurden. Dies ist nötig, damit sich das Lesen zur Cache-Steuereinheit 26 ausbreitet, so daß die Speicher- Verriegelungs/Entriegelungs-Protokolle richtig verarbeitet werden können.
- Die Speichermanagementeinheit 25 wird versuchen, ein Datenstromlesen zu verarbeiten, nachdem die angefragte Auffüllung einer vorherigen Datenstrom- Auffüllsequenz beendet ist. Dieser Mechanismus, der "Auslesungen unter Auffüllungen" genannt wird, wird durchgeführt, um zu versuchen, Lesedaten zur Befehlseinheit 22 und/oder zur Ausführungseinheit 23 so schnell wie möglich zurückzubringen, ohne daß man darauf warten muß, daß die vorherige Auffüllsequenz endet. Wenn das versuchte Lesen ein Treffer im primären Cache 14 ist, werden die Daten zurückgebracht, und das Lesen endet. Wenn das Lesen in der S6-Pipeline ein Nichttreffer ist, wird die entsprechende Auffüllsequenz aus zwei Gründen nicht sofort initiiert: (1) eine Datenstrom-Cache-Auffüllsequenz für dieses Lesen kann nicht gestartet werden, weil der D-Nichttreffer-Latch 253 entsprechend der gegenwärtig ausstehenden Cache-Auffüllsequenz voll ist, (2) das Datenstromlesen kann ein Treffer im primären Cache 14 sein, wenn die aktuelle Auffüllsequenz einmal endet, weil die aktuelle Auffüllsequenz die Daten zuführen kann, die nötig sind, um das neue Datenstromlesen zu erfüllen. Weil das D-Lesen sich bereits durch die S5- Pipeline ausbreitete, muß das Lesen irgendwo gespeichert werden, damit es in S5 erneut gestartet werden kann. Der Latch 257 für ein erneutes Versuchen bei einem D-Nichttreffer ist der Mechanismus, durch welchen das S6-Lesen in der S5- Pipeline gesichert und erneut gestartet wird. Wenn das Lesen einmal im Latch 257 zum erneuten Versuchen gespeichert ist, wird es in S5 erneut versucht werden, nachdem eine neue Datenstrom-Auffülloperation des primären Caches 14 in die S5-Pipeline eingetreten ist. Die Absicht dieses Schemas besteht darin, zu versuchen, das Lesen so schnell wie möglich zu beenden, und zwar durch ein erneutes Versuchen von ihm zwischen Auffüllungen des primären Caches 14 und durch Hoffen, daß die letzte Auffüllung des primären Caches 14 die durch das Lesen angefragten Daten zuführte. Der Latch 257 zum erneuten Versuchen wird für ungültig erklärt, wenn eine der zwei Bedingungen wahr ist: (1) das erneut versuchte Lesen ist möglicherweise ein Treffer im primären Cache 14 ohne einen Paritätsfehler des primären Caches 14, oder (2) das erneut versuchte Lesen ist ein Nicht-Treffer, nachdem die gegenwärtig ausstehende Auffüllsequenz endet. In diesem Fall wird das Lesen in den P-Nichttreffer-Latch 252 geladen und wird als normaler Datenstrom-Nichttreffer verarbeitet.
- Auslesungen, die den I/O-Raum adressieren, haben die physikalischen Adressenbits < 31 : 29> gesetzt. Auslesungen des I/O-Raums werden durch die Speichermanagementeinheit 25 auf genau dieselbe Weise wie irgendein anderes Auslesen behandelt, mit Ausnahme der folgenden Unterschiede:
- (1) I/O-Raumdaten werden niemals im primären Cache 14 gespeichert -- daher erzeugt ein Auslesen des I/O-Raums immer eine Lese-Nichttreffersequenz und veranlaßt, daß die Cache-Steuereinheit 26 die Referenz eher verarbeitet als die Speichermanagementeinheit 25.
- (2) Ungleich einer Speicherraum-Nichttreffersequenz, die ein Hexawort von Daten über vier I_CF oder D_CF-Befehle zurückbringt, bringt ein Auslesen des I/O- Raums nur ein Stück von Daten über einen I_CF- oder D_CF-Befehl zurück -- somit aktiviert die Cache-Steuereinheit 26 immer ein letztes Auffüllen auf die erste und einzige I_CF- oder D_CF-I/O-Raumoperation hin; wenn das Auslesen des I/O- Raums ein Datenstrom ist, sind die zurückgebrachten D-CF-Daten in bezug auf die Länge immer kleiner als oder gleich einem Langwort.
- (3) I/O-Raum-Datenstromauslesungen werden niemals vor einer Ausführung der Ausführungseinheit 23 vorausgelesen; eine I/O-Raum-Datenstromauslesung, die von der Befehlseinheit 22 ausgegeben wird, wird nur dann verarbeitet, wenn von der Ausführungseinheit 23 bekannt ist, daß sie bei jenem bestimmten I/O- Raum-Auslesen verzögert. Befehlsstrom-I/O-Raum-Auslesungen müssen ein Quadwort von Daten zurückbringen.
- Als nächstes wird eine Schreibverarbeitung in der Speichermanagementeinheit 25 untersucht. Das gesamte Schreiben wird durch die Speichermanagementeinheit 25 im Auftrag von der Ausführungseinheit 23 initiiert. Der Mikrocode der Ausführungseinheit 23 kann Schreibreferenzen mit Datenlängen eines Bytes, eines Wortes, eines Langwortes oder eines Quadwortes erzeugen. Mit der Ausnahme von Querseitenprüfungen behandelt die Speichermanagementeinheit 25 Quadwort- Schreibreferenzen als Langwort-Schreibreferenzen, weil der Datenpfad der Ausführungseinheit 23 nur ein Langwort von Daten pro Zyklus zuführt. Das Schreiben der Ausführungseinheit 23 kann nicht ausgerichtet sein.
- Die Speichermanagementeinheit 25 führt die folgenden Funktionen während einer Schreibreferenz durch: (1) Speichermanagementprüfungen - die MME-Einheit 254 der Speichermanagementeinheit 25 prüft, um sicher zu sein, daß die Seite oder die - Seiten, auf die Bezug genommen wird, den geeigneten Zugriff haben, und daß die gültigen virtuellen Adressenumsetzungen verfügbar sind. (2) Die zugeführten Daten werden über einen Phasendreher 258 zur mit dem Speicher ausgerichteten Langwortgrenze richtig gedreht. (3) Byte-Maskenerzeugung - der Byte- Maskengenerator 260 der Speichermanagementeinheit 25 erzeugt die Byte-Maske der Schreibreferenz durch Untersuchen des Schreibzugriffs und der Datenlänge der Referenz. (4) Schreiben des primären Caches 14 - der primäre Cache 14 ist ein Durchschreib-Cache; daher wird ein Schreiben nur in den primären Cache 14 geschrieben, wenn die Schreibadresse mit einem für gültig erklärten Tag-Eintrag des primären Caches 14 übereinstimmt. (5) Die eine Ausnahme für diese Regel besteht darin, daß dann, wenn der primäre Cache 14 in einem Zwangs- Datenstrom-Treffermode konfiguriert ist; in diesem Mode werden die Daten immer zum primären Cache 14 geschrieben, ungeachtet dessen, ob der Tag übereinstimmt oder nicht übereinstimmt. (6) Alle Schreibreferenzen, die die Speichermanagementprüfungen durchlaufen, werden über den Datenbus 58 zur Cache- Steuereinheit 26 übertragen. Die C-Box verarbeitet ein Schreiben im Backup- Cache 15 und steuert die Protokolle, die sich auf das Rückschreib-Speicher- Untersystem beziehen.
- Wenn Schreibdaten im EM-Latch 74 zwischengespeichert werden, dreht der Vierwege-Byte-Barrel-Schieber 263, der zum EM-Latch 74 gehört, die Daten in eine geeignete Ausrichtung basierend auf den unteren zwei Bits der entsprechenden Adresse. Das Ergebnis dieser Datendrehung besteht darin, daß alle Bytes von Daten nun in den richtigen Bytepositionen relativ zu Speicher-Langwortgrenzen sind.
- Wenn Schreibdaten vom EM-Latch 74 getrieben werden, wird der interne Datenbus 264 durch den Ausgang des Barrel-Schiebers 263 getrieben, so daß Daten immer geeignet zu Speicher-Langwortadressen ausgerichtet sind. Es ist zu beachten, daß, während der Datenbus 264 die Breite eines Langwortes (32 Bits) hat, der Bus 58 die Breite eines Quadwortes hat; der Bus 58 hat eine Breite eines Quadwortes aufgrund der Quadwort-Zugriffsgröße des primären Caches 14. Die Quadwort-Zugriffsgröße ermöglicht ein Auffüllen des primären Caches 14 und des virtuellen Befehls-Caches 17. Jedoch wird für das gesamte Schreiben höchstens die Hälfte des Busses 58 jeweils dazu verwendet, den primären Cache 14 zu beschreiben, da alle Schreibbefehle ein Langwort oder weniger Daten modifizieren. Wenn eine Schreibreferenz sich von S5-S6 ausbreitet, werden die in bezug auf ein Langwort ausgerichteten Daten auch dem Bus 264 sowohl auf die obere als auch die untere Hälfte des Busses 58 übertragen, um zu garantieren, daß die Daten auf in bezug auf ein Quadwort zum primären Cache 14 und zur Cache-Steuereinheit 26 ausgerichtet sind. Die Byte-Maske, die der Referenz entspricht, wird steuern, welche Bytes des Busses 58 tatsächlich in den primären Cache 14 oder den Backup- Cache 15 geschrieben werden.
- Schreibreferenzen werden durch zwei unterschiedliche Mechanismen ausgebildet. Als erstes ist ein Schreiben des Zielortspezifizierers jenes Schreiben, das durch die Befehlseinheit 22 auf ein Decodieren eines Zielortspezifizierers eines Befehls hin initiiert wird. Wenn ein Zielortspezifizierer zum Speicher decodiert wird, gibt die Befehlseinheit 22 ein Referenzpaket entsprechend der Zielortadresse aus. Es ist zu beachten, daß keine Daten in diesem Paket vorhanden sind, weil die Daten erzeugt werden, wenn die Ausführungseinheit 23 darauffolgend den Befehl ausführt. Das Befehlsfeld dieses Pakets ist entweder ein Zielortadressenbefehl (wenn der Spezifizierer einen Zugriffstyp zum Schreiben hatte) oder ein D-Lese-Modifizier- Befehl (wenn der Spezifizierer einen Zugriffstyp zum Modifizieren hatte). Die Adresse dieses Befehlspaketes wird durch den TD umgesetzt, Speichermanagement-Zugriffsprüfungen werden durch die MME-Einheit 254 durchgeführt, und die entsprechende Byte-Maske wird durch die Einheit 260 erzeugt. Die physikalische Adresse DL und andere Qualifizierungsbits werden in die PA-Warteschlange 65 geladen. Wenn der Zielortadressenbefehl in S5 endet, wird er in S6 in einem NOP- Befehl gewandelt, weil keine weitere Verarbeitung ohne die aktuellen Schreibdaten stattfinden kann. Wenn die Ausführungseinheit 23 den Operationscode entsprechend dem Zielortspezifizierer der Befehlseinheit 22 ausführt, werden die entsprechenden zu schreibenden Speicherdaten erzeugt. Diese Daten werden durch einen Speicherungsbefehl zur Speichermanagementeinheit 25 gesendet. Das Speicherpaket enthält nur Daten. Wenn die Speichermanagementeinheit 25 den Speicherbefehl in S5 ausführt, wird das entsprechende Paket der PA-Warteschlange 65 in die S5-Pipeline getrieben. Die Daten im EM-Latch werden unter Verwendung des Byte-Phasendrehers und der niedrigeren zwei Bits der entsprechenden Adresse der PA-Warteschlange in eine geeignete Langwortausrichtung gedreht, und werden dann in S5 getrieben. Im Effekt werden die Zielortadressen- und Speicherbefehle miteinander vereinigt, um eine vollständige Schreiboperation einer physikalischen Adresse auszubilden. Diese Schreiboperation breitet sich durch die S5/56-Pipeline aus, um das Schreiben im primären Cache 14 durchzuführen (wenn die Adresse einen Treffer im primären Cache 14 erzielt), und im Speicher- Untersystem.
- Ein "explizites Schreiben" wird einmal allein durch die Ausführungseinheit 23 erzeugt. Das bedeutet ein Schreiben, das nicht aus dem Decodieren eines Zielortspezifizierers durch die Befehlseinheit 22 resultiert, sondern eher ein Schreiben, das durch die Ausführungseinheit 23 explizit initiiert und vollständig erzeugt wird. Ein Beispiel für ein explizites Schreiben ist ein Schreiben, das während eines MOVC-Befehls durchgeführt wird. Bei diesem Beispiel erzeugt die Ausführungseinheit 23 die virtuelle Schreibadresse jedes Schreibens sowie ein Zuführen der entsprechenden Daten. Die physikalische Adressenwarteschlange 65 ist nie beim Verarbeiten eines expliziten Schreibens beteiligt. Ein explizites Schreiben wird zur Speichermanagementeinheit 25 in der Form eines Schreibbefehls übertragen, der durch die Ausführungseinheit 23 ausgegeben wird. Dieses Schreiben führt in S5 und S6 auf dieselbe Weise direkt aus, wie wenn ein Schreibpaket aus den Inhalten der PA-Warteschlange 65 und den Speicherdaten ausgebildet wird.
- Ein Schreibbefehl, der den I/O-Raum adressiert, hat seine physikalischen Adressenbits < 31 : 29> gesetzt. Ein Beschreiben des I/O-Raums wird durch die Speichermanagementeinheit 25 auf genau dieselbe Weise wie ein anderes Schreiben behandelt, außer daß I/O-Raumdaten nie im primären Cache 14 gespeichert werden; daher ist ein Beschreiben des I/O-Raums im primären Cache 14 immer ein Nichttreffer.
- Wie es oben angegeben ist, wird eine Byte-Maskenerzeugung in der Speichermanagementeinheit 25 durchgeführt. Da der Speicher byte-adressierbar ist, müssen alle Speicher-Speicherungsvorrichtungen spezifizierte Bytes von Daten selektiv schreiben können, ohne den gesamten Satz von Bytes zu schreiben, die der Speichervorrichtung zur Verfügung gestellt werden. Das Byte-Maskenfeld des Schreibreferenzpakets spezifiziert, welche Bytes innerhalb der Quadwort-Zugriffsgröße des primären Caches 14 geschrieben werden. Die Byte-Maske wird in der Speichermanagementeinheit 25 durch den Byte-Maskengenerator 260 basierend auf den drei niederwertigeren Bits der Adresse auf dem Bus 243 und der Datenlänge der auf dem Befehlsbus 261 enthaltenen Referenz als das DL-Feld erzeugt. Byte- Maskendaten werden auf ein Lesen sowie auf ein Schreiben hin erzeugt, um die Byte-Ausrichtungsinformationen auf ein Lesen des I/O-Raums hin auf dem Bus 262 zur Cache-Steuereinheit 26 zuzuführen.
- Die Speichermanagementeinheit 25 ist der Pfad, durch den die Ausführungseinheit 23 Daten zum MD-Bus 54 und somit zur Befehlseinheit 22 überträgt. Ein neuer PC- Wert, der in der Ausführungseinheit 23 erzeugt wird, wird über den Bus 51 und einen Lade-PC-Befehl gesendet, und dieser Wert breitet sich durch die Speichermanagementeinheit 25 zum MD-Bus 54 aus. Der MD-Bus ist eine Eingabe zur Ausführungseinheit 23, um zur Referenzdatei 41 zu schreiben, aber die Ausführungseinheit 23 schreibt nicht zum MD-Bus.
- Gemäß Fig. 18 ist der primäre Cache 14 ein Zweiwege-SatzAssoziativ-Cache für physikalische Adressen für ein Zuteilen eines Lesens, ein Zuteilen keines Schreibens und ein Durchschreiben für Befehlsstrom- und Datenstromdaten. Der primäre Cache 14 hat einen Eins-Zyklus-Zugriff und eine Eins-Zyklus-Wiederholrate für sowohl ein Lesen als auch ein Schreiben. Der primäre Cache 14 enthält eine 8 KByte-Datenspeichermatrix 268, die 256 Hexawort-Blöcke speichert und 256 Tags in Tag-Speichern 269 und 270 speichert. Die Datenspeichermatrix 268 ist als zwei Blöcke 271 und 272 von 128 Zeilen konfiguriert. Jeder Block ist 256 Bits breit, so daß er ein Hexawort von Daten (vier Quadworte oder 32 Bytes) enthält; es gibt vier Quadwort-Unterblöcke pro Block, wobei ein gültiges Bit jedem Unterblock zugeordnet ist. Ein Tag ist 20 Bits breit, und zwar entsprechend den Bits < 31 : 12> der physikalischen Adresse auf dem Bus 243. Die Organisation des primären Caches 14 ist detaillierter in Fig. 18a gezeigt; jeder Index (wobei ein Index eine Zeile der Spei chermatrix 268 ist), enthält einen Zuteilungszeiger A und enthält zwei Blöcke, wobei jeder Block aus einem 20-Bit-Tag, einer 1-Bit-Tagparität, vier Gültigkeitsbits VB (eines für jedes Quadwort), 256 Bits von Daten und 32 Bits für die Datenparität besteht. Ein Zeilendecodierer 273 empfängt die Bits < 5 : 11 > der Eingangsadresse des primären Caches 14 vom Bus 243 und wählt 1-aus-128 Indizes (Zeilen) 274 aus, um es auf Spaltenleitungen der Speichermatrix auszugeben, und Spaltendecodierer 275 und 276 wählen 1-aus-4 basierend auf den Bits < 3 : 4> der Adresse aus. Somit wählt der primäre Cache 14 in jedem Zyklus zwei Quadwort-Stellen aus den Hexawort-Ausgaben von der Matrix aus, und die ausgewählten Quadworte sind auf Eingangs/Ausgangs-Leitungen 277 und 278 verfügbar. Die zwei 20-Bit- Tags von den Tagspeichern 269 und 271 werden gleichzeitig auf den Leitungen 279 und 280 für den ausgewählten Index ausgegeben und werden mit den Bits < 31 : 12> der Adresse auf dem Bus 243 durch Tag-Vergleichsschaltungen 281 und 282 verglichen. Die gültigen Bits werden auch ausgelesen und geprüft; wenn der adressierte Block Null ist, wird ein Nichttreffer signalisiert. Wenn ein Tag eine Übereinstimmung erzeugt und das Gültigkeitsbit gesetzt ist, wird auf einer Leitung 283 ein Treffer signalisiert und das ausgewählte Quadwort wird auf dem Bus 246 ausgegeben. Ein Nichttreffer des primären Caches 14 resultiert in einer Quadwort- Auffüllung; ein Speicherlesen wird erzeugt, was darin resultiert, daß über den Bus 246 und den Bus 277 oder 278 ein Quadwort zum Block 271 oder 272 geschrieben wird. Gleichzeitig werden Daten zur Datenspeichermatrix geschrieben, wobei die Adresse über die Leitungen 279 oder 280 zum Tagspeicher 269 oder 270 geschrieben wird. Wenn auf das Auftreten eines Schreibens zum Backup-Cache 15 oder zum Speicher 12 hin eine Ungültigkeitserklärung durch die Cache- Steuereinheit 26 gesendet wird, werden Gültigkeitsbits für den Index rückgesetzt.
- Der primäre Cache 14 muß immer ein kohärenter Cache in bezug auf den Backup- Cache 15 sein. Der primäre Cache 14 muß immer eine strenge Untergruppe der Daten enthalten, die im Backup-Cache 15 gespeichert sind. Wenn die Cachekohärenz nicht beibehalten würde, könnten aus einem Lesen "veralteter" Daten aus dem primären Cache 14 in Multiprozessorsystemkonfigurationen unrichtige Berechnungssequenzen resultieren.
- Eine Ungültigkeitserklärung bzw. eine Ungültigkeit ist der Mechanismus, durch den der primäre Cache 14 mit dem Backup-Cache 15 kohärent gehalten wird, und tritt dann auf, wenn Daten vom Backup-Cache 15 versetzt werden oder wenn Daten des Backup-Caches 15 selbst für ungültig erklärt werden. Die Cache-Steuereinheit 26 initiiert eine Ungültigkeit durch Spezifizieren einer physikalischen Hexawort- Adresse, die durch den Ungültigkeitserklärungsbefehl auf dem Bus 59 qualifiziert wird und in den Latch 250 der Cache-Steuereinheit 26 geladen wird. Eine Ausführung eines Ungültigkeitserklärungsbefehls garantiert, daß die Daten entsprechend der spezifizierten Hexawort-Adresse im primären Cache 14 nicht gültig sein werden. Wenn die Hexawort-Adresse des Ungültigkeitserklärungsbefehls nicht mit einem Tag des primären Caches 14 in den Tagspeichern 269 oder 270 im adressierten Index 274 übereinstimmt, findet keine Operation statt. Wenn die Hexawort- Adresse mit einem der Tags übereinstimmt, werden die vier entsprechenden Unterblock-Gültigkeitsbits gelöscht, um zu garantieren, daß jeder darauffolgende Zugriff des primären Caches 14 auf dieses Hexawort ein Nichttreffer sein wird, bis dieses Hexawort durch eine darauffolgende Auffüllsequenz des primären Caches 14 erneut für gültig erklärt wird. Wenn gerade eine Cache-Auffüllsequenz zur selben Hexawort-Adresse in Arbeit ist, wenn die Ungültigserklärung ausgeführt wird, wird ein Bit im entsprechenden Nichttreffer-Latch 252 oder 253 gesetzt, um zu verhindern, daß irgendwelche weiteren Cache-Auffüllungen Daten oder für gültig erklärende Daten für diesen Cache-Block laden.
- Wenn ein Lese-Nichttreffer auftritt, weil kein für gültig erklärtes Tag-Feld mit einer Leseadresse übereinstimmt, wird der Wert des Zuteilungsbits A im Nichttreffer- Latch 252 oder 253 entsprechend dem Lese-Nichttreffer zwischengespeichert. Dieser zwischengespeicherte Wert wird während der darauffolgenden Auffüllsequenz als die Bankauswahleingabe verwendet. Wenn eine jeweilige Auffülloperation stattfindet, wird das Inverse des im Nichttreffer-Latch gespeicherten Zuteilungswerts in das Zuteilungsbit A des adressierten Index 274 des primären Caches 14 geschrieben. Während Lese- oder Schreiboperationen des primären Caches 14 wird der Wert des Zuteilungsbits gesetzt, um zur gegenüberliegenden Bank zu zeigen, auf die gerade Bezug genommen wurde, weil diese nun die neue "nichtzuletzt-vermrendete" Bank 271 oder 272 für diesen Index ist.
- Die einzige Ausnahme für diesen Algorithmus tritt während eines Ungültigkeitserklärens auf. Wenn eine Ungültigkeitserklärung die Gültigkeitsbits eines bestimmten Tags innerhalb eines Index löscht, macht es nur Sinn, das Zuteilungsbit zu setzen, um zu der während der Ungültigkeitserklärung verwendeten Bankauswahl zu zeigen, ungeachtet dessen, welche Bank zuletzt zugeteilt wurde. Dadurch wird garantiert, daß der nächste zugeteilte Block innerhalb des Index nicht irgendein gültiges Tag versetzen wird, weil das Zuteilungsbit zu dem Tag zeigt, das gerade für ungültig erklärt wurde.
- Eine Auffülloperation des primären Caches 14 wird durch eine Befehlsstrom- oder Datenstrom-Cache-Auffüllreferenz initiiert. Eine Auffüllung ist eine spezialisierte Form einer Schreiboperation, die außer den folgenden Unterschieden funktionell identisch zu einem Beschreiben des primären Caches 14 ist:
- (1) Die Bank 271 oder 272 innerhalb des adressierten Index 274 des primären Cache 14 wird durch diesen Algorithmus ausgewählt. Wenn ein für gültig erklärtes Tag-Feld 269 oder 270 innerhalb des adressierten Index 274 mit der Cache-Auffülladresse übereinstimmt, dann wird der Block entsprechend diesem Tag für die Auffülloperation verwendet -- wenn dies nicht wahr ist, dann wählt der Wert des entsprechenden Zuteilungsbits A aus, welcher Block für die Auffüllung verwendet wird.
- (2) Die erste Auffülloperation zu einem Block führt dazu, daß alle vier Gültigkeitsbits der ausgewählten Bank geschrieben werden, so daß das Gültigkeitsbit der entsprechenden Auffülldaten gesetzt wird und die anderen drei gelöscht werden. Das gesamte darauffolgende Auffüllen veranlaßt, daß nur das Gültigkeitsbit der entsprechenden Auffülldaten gesetzt wird.
- (3) Jede Auffülloperation veranlaßt, daß die Auffülladressenbits < 31 : 12> in das Tag-Feld der ausgewählten Bank geschrieben werden. Eine Tag-Parität wird auch auf eine analoge Weise geschrieben.
- (4) Eine Auffülloperation veranlaßt, daß das Zuteilungsbit A mit dem Komplement des Wertes geschrieben wird, der durch den entsprechenden Nichttreffer- Latch 252 oder 253 während des anfänglichen Ereignisses eines Lese-Nichttreffers zwischengespeichert wird.
- (5) Eine Auffülloperation erzwingt, daß jedes Bit des entsprechenden Byte- Maskenfeldes gesetzt wird. Somit werden alle acht Bytes von Auffülldaten bei einer Auffülloperation immer in die Matrix des primären Caches 14 geschrieben.
- Eine Operation zum Ungültigerklären des primären Caches 14 wird durch eine Ungültigkeitserklärungsreferenz initiiert und wird durch den primären Cache 14 als keine Operation interpretiert, wenn die Adresse nicht mit einem Tag-Feld im adressierten Index 274 übereinstimmt. Wenn bei einem Tag eine Übereinstimmung erfaßt wird, wird eine Ungültigkeitserklärung bei jenem Tag auftreten. Es ist zu beachten, daß diese Bestimmung eher nur bei einer Übereinstimmung der Tag- Feldbits durchgeführt wird als beim Erfüllen aller Kriterien für eine Cache- Trefferoperation (Trefferfaktoren des primären Caches 14 in bezug auf Gültigkeitsbits und eine verifizierte Tag-Parität bei der Operation). Wenn eine Ungültigkeitserklärung auftreten soll, werden die vier Gültigkeitsbits des angepaßten Tags mit Nullen beschrieben, und das Zuteilungsbit A wird mit dem Wert der Bankauswahl beschrieben, die während der aktuellen Ungültigkeitserklärungsoperation verwendet wird.
- Gemäß Fig. 19 enthält die Cache-Steuereinheit 26 einen Datenpfad und eine Steuerung für eine Schnittstellenbildung zur Speichermanagementeinheit 25, zum Backup-Cache 15 und zum CPU-Bus 20. Der obere Teil der Fig. 19, der primär eine Schnittstelle zur Speichermanagementeinheit 25 und zum Backup-Cache 15 bildet, ist die Cache-Steuerung, und der untere Teil der Figur, der primär eine Schnittstelle zum CPU-Bus 20 bildet, ist die Bus-Schnittstelleneinheit. Der Datenpfad der Cache-Steuereinheit 26 ist um eine Anzahl von Warteschlangen und Latches, einen Bus 288 für interne Adressen und einen Bus 289 für interne Daten im Cache-Steuerteil und zwei Busse 290 und 291 für interne Adressen und einen Bus 292 für interne Daten in der Busschnittstelleneinheit organisiert. Ein separater Zugriff zu den Daten-RAMs 15x und den Tag-RAMs 15y des Backup-Caches 15 ist vom Bus 288 für interne Adressen und vom Bus 289 für interne Daten durch Leitungen 19a und 19b und Leitungen 19c und 19d im Bus 19 vorgesehen. Die Schnittstelle zur Speichermanagementeinheit 25 ist durch einen Bus 57 für physikalische Adressen, einen Datenbus 58 und den Bus 59 für Ungültigkeitserklärungsadressen und Auffülladressen vorgesehen.
- Der Ausgangs-Latch 296 ist einen Eintrag tief und hält sowohl Adressen als auch Daten für Auffülldaten oder Adressen für Ungültigkeitserklärungen, die auf den Bussen 58 und 59 zur Speichermanagementeinheit 25 gesendet werden. Die zwei Auffülldaten-Pipelines 297 und 298 sind 64-Bit-Latches für Pipeline-Daten, die zur Speichermanagementeinheit 25 gesendet werden. Der Datenlese-Latch 299 ist einen Eintrag tief und hält die Adresse einer Datenstrom-Leseanfrage, die auf dem Bus 57 für physikalische Adressen von der Speichermanagementeinheit 25 kommt. Der Befehlslese-Latch 300 ist einen Eintrag tief und hält die Adresse einer Befehlsstrom-Leseanfrage, die über den Bus 57 für physikalische Adressen von der Speichermanagementeinheit 25 kommt. Der Schreibpacker 301 ist einen Eintrag tief und hält sowohl Adressen als auch Daten und funktioniert zum Komprimieren eines sequentiellen Speicherschreibens zum selben Quadwort. Die Schreib- Warteschlange 60 ist acht Einträge tief und hält sowohl Adressen als auch Daten für Schreibanfragen, die über den Datenbus 58 und den Bus 57 für physikalische Adressen (über den Schreibpacker 301) von der Speichermanagementeinheit 25 kommen. Der Auffüll-CAM 302 ist zwei Einträge tief und hält Adressen für Lese- und Schreib-Nichttreffer, die in einem Lesen zum Schreiben resultierten; man kann die Adresse einer D-Datenleseverriegelung halten, die im Gange ist und die keine Speicheranfrage ausstehend hat. Auf der Seite des Busses 20 ist die Eingangs- Warteschlange 61 zehn Einträge tief und hält eine Adresse oder Daten für bis zu acht Quadwort-Auffüllungen und bis zu zwei Cachekohärenztransaktionen vom CPU-Bus 20. Die Rückschreib-Warteschlange 63 ist zwei Einträge tief (mit einem Datenfeld von 256 Bits) und hält Rückschreib-Adressen und -Daten, die auf dem CPU-Bus 20 zu treiben sind; diese Warteschlange hält bis zu zwei Hexawort- Rückschreibungen. Die Rückschreib-Warteschlange 63 wird auch für Quadwort- Schreibablehnungen verwendet. Die Nicht-Rückschreib-Warteschlange 62 ist zwei Einträge tief, und zwar für Adressen und Daten, und hält alle Nicht-Schreib- Ablehnungstransaktionen, die zum CPU-Bus 20 gehen; dies enthält ein Lesen, I/O- Raumtransaktionen und ein normales Schreiben, welche durchgeführt werden, wenn der Backup-Cache 15 im Auszustand ist oder während des Fehlerübergangsmodes. Es ist zu beachten, daß einige diese Warteschlangen Adressen- und Dateneinträge parallel enthalten (der Ausgangs-Latch 296, der Schreib-Packer 301, die Schreib-Warteschlange 60 und die Rückschreib- und Nicht-Rückschreib- Warteschlangen 63 und 62), einige nur Daten enthalten (die Auffülldaten-Pipelines 297 und 298) und einige nur Adressen enthalten (der Datenlese-Latch 299, der Befehlslese-Latch 300 und der Auffüll-CAM 302). Da der CPU-Bus 20 ein Multiplex-Bus ist, werden beispielsweise zwei Zyklen auf dem Bus 20 benötigt, um die Adresse und die Daten von einem Eintrag in der Nicht-Rückschreib-Warteschlange 62 zum Bus 20 zu laden. Ebenso wird der Bus 20 mit einer Zykluszeit vom Dreifachen derjenigen der Busse 288, 289 und 292 getaktet.
- Für eine Schreibanfrage gibt die Cache-Steuereinheit 26 Schreibdaten vom Datenbus 58 in die Schreib-Warteschlange 60 ein, während sie die Schreibadresse vom Bus 57 für physikalische Adressen eingibt; wenn es einen Cache-Treffer gibt, werden die Daten über den Bus 289 unter Verwendung der Adresse auf dem Bus 288 über den Bus 19 in die Daten-RAMs des Backup-Caches 15 geschrieben. Wenn ein Rückschreiben des Blocks auftritt, werden Daten von den Daten-RAMs über die Busse 19 und 289 ausgelesen, über eine Schnittstelle 303 und die Busse 291 und 292 zur Rückschreib-Warteschlange 63 übertragen, und dann auf den CPU-Bus 20 nach außen getrieben. Eine Leseanfrage tritt vom Bus 57 für physikalische Adressen und von den Latches 299 oder 300 ein und wird über den Bus 288 für interne Adressen über den Bus 19 an den Backup-Cache 15 angelegt, und wenn ein Treffer auftritt, werden die resultierenden Daten über den Bus 19 und den Bus 289 zum Daten-Latch 304 im Ausgangs-Latch 296 gesendet, von wo sie über den Datenbus 58 zur Speichermanagementeinheit 25 gesendet werden. Wenn Lesedaten vom Speicher 12 zurückkehren, gibt sie die Cache-Steuereinheit 26 durch die Eingangs-Warteschlange 61 ein, und sie werden auf den Bus 292 und dann durch die Schnittstelle 303 auf den Bus 289 für interne Daten und in die Daten-RAMs des Backup-Caches 15 getrieben, sowie über den Ausgangs-Latch 296 und den Bus 58 zur Speichermanagementeinheit 25, wie zuvor.
- Wenn ein Lesen oder ein Schreiben, das von der Speichermanagementeinheit 25 zur Cache-Steuereinheit 26 ankommt, nicht in einem Treffer im Backup-Cache 15 resultiert, wird die Nichttreffer-Adresse in den Auffüll-CAM 302 geladen, der Adressen von ausstehenden Lese- und Schreib-Nichttreffern hält; die Adresse wird auch durch die Schnittstelle 303 über den Bus 291 zur Nicht-Rückschreib- Warteschlange 62 getrieben. Sie tritt in die Warteschlange 62 ein, um darauf zu warten, daß sie, wenn sie an der Reihe ist, auf den CPU-Bus 20 getrieben wird. Viele Zyklen später kehren die Daten auf den CPU-Bus 20 zurück (nach einem Zugreifen auf den Speicher 12) und treten in die Eingangs-Warteschlange 61 ein. Die CPU 10 wird nachdem Nichttreffer im Backup-Cache 15 ein Ausführen von Verzögerungszyklen in den verschiedenen Pipelines begonnen haben. Die zurückkehrenden Daten begleitet ein Steuerbit auf dem Steuerbus im CPU-Bus 20, was besagt, welcher der zwei Adresseneinträge im Auffüll-CAM 302 auf den Bus 288 nach außen zu treiben ist, um zum Beschreiben der Daten-RAMs und der Tag-RAMs des Backup-Caches 15 verwendet zu werden.
- Wenn eine Cachekohärenztransaktion auf dem CPU-Bus 20 erscheint, kommt eine Adresse durch die Eingangs-Warteschlange 61 herein und wird über den Bus 290 und die Schnittstelle 303 zum Bus 288 getrieben, von wo sie über den Bus 19 an die Tag-RAMs des Backup-Caches 15 angelegt wird. Wenn sie ein Treffer ist, wird das Gültigkeitsbit gelöscht, und die Adresse wird durch den Adressen-Latch 305 im Ausgangs-Latch 296 für eine Ungültigkeitserklärung des primären Caches 14 zur Speichermanagementeinheit 25 ausgesendet (wo sie ein Treffer sein kann oder nicht sein kann, und zwar in Abhängigkeit davon, welche Blöcke der Daten des Backup-Caches 15 im primären Cache 14 sind). Wenn es nötig ist, wird das Gültigkeitsbit und/oder das anerkannte Bit im Eintrag des Backup-Caches 15 gelöscht. Für Ungültigkeitserklärungen werden nur die Adressenbits < 31 : 5> verwendet, da die Ungültigkeitserklärung immer zu einem Hexawort erfolgt.
- Wenn aufgrund dieser Cachekohärenztransaktion ein Rückschreiben erforderlich ist, wird der Index zu den Daten-RAMs des Backup-Caches 15 getrieben, so daß die Daten ausgelesen werden können. Die Adresse wird dann für das Rückschreiben zur Rückschreib-Warteschlange 62 getrieben; ihm folgt kurz danach das Rückschreiben von Daten auf den Datenbussen.
- Ein Fünf-Bit-Befehlsbus 262 von der Speichermanagementeinheit 25 ist an eine Steuerung 306 angelegt, um die Aktivitäten des internen Busses der Cache- Steuereinheit 26 zu definieren. Dieser Befehlsbus zeigt an, ob jede Speicheranfrage eine von acht Typen ist: ein Befehlsstromlesen, ein Datenstromlesen, ein Datenstromlesen mit Modifizierung, ein Lesen eines verriegelten Datenstroms, ein normales Schreiben, ein Schreiben, das eine Verriegelung freigibt, oder ein Lesen oder Beschreiben eines internen oder externen Prozessorregisters. Diese Befehle wirken auf den Befehls- oder den Datenlese-Latch 299 und 300 oder den Schreib- Packer 301 und die Schreib-Warteschlange 60 ein. Gleichermaßen geht der Befehlsbus 262 zurück zur Speichermanagementeinheit 25, was anzeigt, daß die Daten, die während des Zyklus gerade übertragen werden, eine Datenstrom- Cache-Auffüllung, eine Befehlsstrom-Cache-Auffüllung, eine Ungültigkeitserklärung eines Hexawort-Blocks im primären Cache 14 oder eine Nicht-Operation sind. Diese Befehlsfelder begleiten beispielsweise auch die Daten in der Schreib-Warteschlange.
- Gemäß der Fig. 20 ist die Gleitkomma-Einheit 27 ein vierstufiger Pipeline- Gleitkomma-Prozessor, der mit drei unterschiedlichen Segmenten der Haupt-CPU- Pipeline interagiert, wobei diese die Mikro-Ablaufsteuerung 42 in S2 und die Ausführungseinheit 23 in S3 und S4 sind. Die Gleitkomma-Einheit 27 läuft semiautonom in bezug auf den Rest der CPU 10 und sie unterstützt mehrere Operationen. Als erstes liefert sie eine Befehls- und Datenunterstützung für Gleitkomma- Befehle im Befehlssatz; d. h. ein Befehl vom Gleitkomma-Typ (einschließlich verschiedener Datentypen) wird durch die Befehlseinheit 22 erkannt und zur Ausfüh rung zur Gleitkomma-Einheit 27 anstatt zur Ausführungseinheit 23 gesendet. Als zweites werden Langwort-Ganzzahlen-Multiplizierbefehle in der Gleitkomma- Einheit 27 effizienter ausgeführt als in der Ausführungseinheit 23, so daß dann, wenn die Befehlseinheit 22 diese Befehle erkennt, der Befehl und die Daten zur Gleitkomma-Einheit 27 gesendet werden. Die Gleitkomma-Einheit 27 ist pipelinemäßig, so daß die Gleitkomma-Einheit 27, außer für die Divisionsbefehle, in jedem Zyklus einen neuen einzelnen Präzisions-Gleitkommabefehl starten kann und alle zwei Zyklen einen neuen doppelt präzisen Gleitkommabefehl oder einen Ganzzahlen-Multiplizierbefehl starten kann. Die Ausführungseinheit 23 kann der Gleitkomma-Einheit 27 in jedem Maschinenzyklus auf zwei Eingangs-Operandenbussen 47 und 48 zwei 32-Bit-Operanden zuführen, oder einen 64-Bit-Operanden. Die Gleitkomma-Einheit 27 treibt den Ergebnisoperanden auf dem 32-Bit-Ergebnisbus 49 zur Ausführungseinheit 23.
- In Fig. 20 sind die zwei 32-Bit-Datenbusse 47 und 48 an einen Schnittstellenabschnitt 310 angelegt, und Steuerbits vom Mikrobefehlsbus und ein Befehlskontext werden durch einen Eingang 311 angelegt. Dieser Schnittstellenabschnitt 310 funktioniert zum Überblicken des Protokolls, das bei einer Schnittstellenbildung mit der Ausführungseinheit 23 verwendet wird. Das Protokoll enthält die Sequenz zum Empfangen des Operationscodes und der Steuerung über Leitungen 311, von Operanden über Leitungen 47 und 48 und auch zum Ausgeben des Ergebnisses über den Bus 49 zusammen mit seinem beigefügten Status. Der Operationscode und die Operanden werden vom Schnittstellenabschnitt 310 zur Einheit 312 der Stufe 1 (für alle Operationen außer einer Division) durch Leitungen 313, 314, 315 und 316 übertragen. Das bedeutet, daß die Divisionseinheit 317 von allen Operationen außer einer Division umgangen wird. Die Leitungen 313 führen die Bruchteildaten der Daten im Gleitkommaformat, die Leitungen 314 führen die Exponentendaten, die Leitungen 315 führen das Vorzeichen und die Leitungen 316 führen Steuerinformationen. Die Divisionseinheit 317 empfängt ihre Eingaben von der Schnittstelle 313 und treibt ihre Ausgaben zur Einheit 317 der Stufe 1 und wird nur dazu verwendet, bei der Divisionsoperation zu helfen, für welche sie den Quotienten und den Rest in einem redundanten Format berechnet.
- Die Einheit 312 der Stufe 1 empfängt ihre Eingaben von entweder dem Dividierer 317 oder dem Schnittstellenabschnitt 310 über Leitungen 313, 314, 315 und 316 und treibt ihre Ausgaben 313a, 314a, 315a und 316a zum Abschnitt 318 der Stufe Zwei. Die Stufe Eins wird zum Bestimmen der Differenz zwischen den Exponenten der zwei Operanden, zum Subtrahieren der Bruchteilfelder, zum Durchführen des Aufzeichnens des Multiplizierers und zum Ausbilden eines Dreifachen des Multiplikanden und zum Auswählen der Eingaben zu den ersten zwei Zeilen der Multiplizierermatrix verwendet.
- Die Einheit 318 der Stufe Zwei empfängt ihre Eingaben von der Einheit 312 der Stufe Eins und treibt ihre Ausgaben zur Einheit 319 der Stufe Drei über Leitungen 313b, 314b, 315b und 316b. Die Funktionen der Einheit der Stufe Zwei sind eine Rechtsverschiebung zur Ausrichtung, ein Multiplizieren der Bruchteilfelder der Operanden und eine Nullbildung und ein Erfassen einer Null und einer führenden Eins der Zwischen-Bruchteilergebnisse.
- Die Einheit 319 der Stufe Drei empfängt die meisten ihrer Eingaben von der Einheit 318 der Stufe Zwei und treibt ihre Ausgaben zur Einheit 320 der Stufe Vier über Leitungen 313c, 314c, 315c und 316c, oder treibt ihre Ausgaben konditional zum Ausgangs-Schnittstellenabschnitt 321 über Leitungen 313d, 314d, 315d und 316d. Die primären Funktionen der Einheit 319 der Stufe Drei sind eine Linksverschiebung (eine Normalisierung) und ein Addieren der Bruchteilfelder für die ausgerichteten Operanden oder die redundanten Ausgaben der Multiplizierermatrix. Die Einheit 319 der Stufe Drei kann auch eine "Minimalrundungs"-Operation an den am wenigsten signifikanten Bits des Bruchteils für Additions-, Subtraktions- und Multiplikations-Gleitkommabefehle durchführen; wenn die Minimalrundung keinen Übertrag erzeugt, und wenn es keine möglichen Ausnahmen gibt, dann treibt die Stufe Drei das Ergebnis unter Umgehung der Einheit 320 der Stufe Vier und unter Einsparung eines Zyklus einer Latenzzeit direkt zum Ausgangsabschnitt 321.
- Die Einheit 320 der Stufe Vier empfängt ihre Eingaben von der Einheit 319 der Stufe Drei und treibt ihre Ausgaben zum Ausgangs-Schnittstellenabschnitt 321. Diese Stufe Vier wird zum Durchführen der Endoperationen, wie beispielsweise eines Rundens, einer Ausnahmeerfassung (eines Überlaufs, eines Unterlaufs, etc.) und einer Bestimmung der Zustandscodes verwendet.
- Für die Ausgabe von Befehls-Operationscodes und Operanden über die Busse 47, 48 und 311 und für die Speicherung von Ergebnissen, die durch den Bus 49 und Steuerleitungen 322 gesendet werden, hängt die Gleitkomma-Einheit 27 von der Ausführungseinheit 23 ab. Jedoch benötigt die Gleitkomma-Einheit 27 beim Ausführen der Befehle der Gleitkomma-Einheit 27 keinerlei Hilfe von der Ausführungs einheit 23. Die Gleitkomma-Makrobefehle werden durch die Befehlseinheit 22 genau wie irgendein anderer Makrobefehl decodiert, und die Mikro-Ablaufsteuerung 24 wird für einen Ausführungsablauf ausgewählt, der die Quellenoperanden, die während der S3-Pipelinestufe geholt werden, früh in der S4-Stufe zur Gleitkomma- Einheit 27 überträgt. Wenn einmal alle Operanden ausgegeben sind, führt die Gleitkomma-Einheit 27 den Makrobefehl aus. Beim Beenden fragt die Gleitkomma- Einheit 27 an, die Ergebnisse zurück zur Ausführungseinheit 23 zu übertragen. Wenn der aktuelle Zurückzieh-Warteschlangeneintrag in der Ausführungseinheit 23 ein Ergebnis einer Gleitkomma-Einheit 27 anzeigt und die Gleitkomma-Einheit 27 eine Ergebnisübertragung über Leitungen 322 angefragt hat, dann wird das Ergebnis spät in S4 der Pipeline über den Bus 49 zur Ausführungseinheit 23 übertragen, und der Mikrobefehl wird in S5 zurückgezogen.
- Die Eingangsschnittstelle 310 der Gleitkomma-Einheit 27 hat zwei Eingangs- Operandenregister 323, die alle Daten für einen Befehl halten können, und eine Operationscode-Pipeline des Segments 3. Wenn der Eingang der Gleitkomma- Einheit 27 unfähig ist, neue Operationscodes oder Operanden zu behandeln, dann wird ein Eingabeverzögerungssignal durch die Gleitkomma-Einheit 27 zur Ausführungseinheit 23 aktiviert, was veranlaßt, daß die nächste Dateneingabeoperation der Gleitkomma-Einheit 27 die CPU-Pipeline am Ende ihrer S3-Pipelinestufe verzögert.
- Die Ausgangsschnittstelle 321 der Gleitkomma-Einheit 27 hat einen Format- Multiplexer bzw. Formatmux und zwei Ergebnis-Warteschlangen, wobei diese die Daten-Warteschlange 324 und die Steuer-Warteschlange 325 sind. Der Formatmux wird dazu verwendet, das Ergebnis in das VAX-Speicherungsformat zu transformieren. Die Warteschlangen 324 und 325 werden dazu verwendet, Ergebnisse und Steuerinformationen zu halten, wann immer Ergebnisübertragungen zur Ausführungseinheit 23 verzögert werden.
- Wann immer die Gleitkomma-Einheit 27 anzeigt, daß sie dazu bereit ist, neue Informationen zu empfangen, und zwar durch Negieren des Eingabeverzögerungssignals, kann die Ausführungseinheit 23 die nächste Operationscode- oder Operandenübertragung initiieren. Die Gleitkomma-Einheit 27 empfängt Befehle von der Mikro-Ablaufsteuerung (S2 der CPU-Pipeline) auf einem 9-Bit-Operationscode-Bus (ein Teil der Steuerleitungen 311).
- Die Einheit 319 der Stufe Drei wird primär dazu verwendet, eine Eingabe nach links zu verschieben, oder zum Durchführen der Addition von zwei Eingaben in einem Addierer 326. Diese Stufe enthält einen Steuerabschnitt und Teile der Bruchteil-, Exponenten- und Vorzeichen-Datenpfade. Zusätzlich hat die Einheit der Stufe Drei die Fähigkeit, die Rundungsoperation der Einheit der Stufe Vier für bestimmte Befehle zu umgehen. Der Bruchteildatenpfadteil der Stufe Drei besteht aus einem Links-Schieber 327, einem Addierer 326 und Minimal-Rundungs-Inkrementierer 328. Der Links-Schieber 327 wird für subtraktionsähnliche Operationen verwendet. Der Addierer 326 wird von allen anderen Operationen entweder zum Führen einer Eingabe zum Ausgang 329 (durch Addieren von Null) oder zum Addieren zweier Vektoren verwendet - beispielsweise die zwei Eingangsoperanden (richtig ausgerichtet) für eine Addition/Subtraktion, oder die Summen- und Übertragsvektoren für eine Multiplikation. Die Minimal-Rundungs-Inkrementierer 328 werden zum Runden des Bruchteilergebnisses während einer Umgehungsoperation der Stufe Vier verwendet.
- Für bestimmte Befehle und Zustände kann die Einheit 319 der Stufe Drei das Ergebnis zur Ausgangsschnittstelle 321 direkt zuführen, was Umgehung der Stufe Vier genannt wird und was die Latenzzeit der Gleitkomma-Einheit 27 durch Zuführen eines Ergebnisses um einen vollen Zyklus früher als das Ergebnis der Stufe Vier zugeführt wird, verbessert. Zum Umgehen der Stufe Viermuß die Stufe Drei die erforderlichen Operationen, die die Stufe Vier normalerweise durchführen würde, unter denselben Bedingungen durchführen. Dies enthält ein Runden des Bruchteils, sowie ein Zuführen des richtigen Exponenten und eine Erzeugung der Bedingungs- bzw. Zustandscodes und Statusinformationen, die sich auf das Ergebnis beziehen. Dieses Umgehen wird nur für Additions-, Subtraktions- und Multiplikations-Gleitkommabefehle versucht. Die Stufe Drei führt die Rundungsoperation durch die Verwendung der Inkrementierer 328 durch, die nur auf die am wenigsten signifikanten Bits einwirken. Das bedeutet, daß diese Inkrementierer 328 aufgrund von zeitlichen Beschränkungen viel kleiner in bezug auf die Breite als die entsprechenden Rundungselemente bei der in Stufe Vier durchgeführten Rundung mit voller Breite sind. Aufgrund der begrenzten Größe der Inkrementierer 328 können nicht alle Bruchteildaten durch die Stufe Drei gerundet werden. Die Minimalrundung ist erfolgreich, wenn der Inkrementierer 328 für einen Befehl, der umgangen wird, keinen Übertrag nach außen erzeugt. Wenn die Minimalrundung fehlschlägt, wird der nicht modifizierte Bruchteil über den Ausgang 329 und die Leitungen 313c zur Stufe Vier geleitet, und die Umgehung wird abgebrochen.
- Die Einheit 319 der Stufe Drei und die Einheit 320 der Stufe Vier nutzen gemeinsame Busse gemeinsam, um die Ergebnisse zur Ausgangsschnittstelle 321 zu treiben. Die Stufe Vier wird die Leitungen 313d, 314d, 315d und 316d während phi3 treiben, wenn sie gültige Daten hat. Die Stufe Drei wird die Leitungen 313d, 314d, 315d und 316d während phi3 treiben, wenn sie einen Befehl erfolgreich umgehen kann und die Stufe Vier keine gültigen Daten hat. Wenn die Stufe Drei erfaßt hat, daß eine Umgehung möglich sein kann, signalisiert sie dies der Ausgangsschnittstelle 321 durch Aktivieren einer Umgehungsanfrage auf einer der Steuerleitungen 316d. Die folgenden Bedingungen müssen erfüllt sein, um eine Anfrage zum Umgehen der Stufe Vier zu erzeugen: ein Umgehungsfreigabesignal muß aktiviert sein; der Befehl muß eine Addition, eine Subtraktion oder eine Multiplikation sein; die Eingangsdaten der Stufe Drei müssen gültig sein; ein Ergebnis darf im vorherigen Zyklus nicht zur Stufe Vier gesendet worden sein; es gibt keine Fehler, die zu den Daten gehören. Zum Abbrechen einer Umgehung der Stufe Vier muß ein Umgehungsabbruchsignal während phi2 aktiviert werden. Eine von zwei Bedingungen brechen eine Umgehung der Stufe Vier ab, und zwar unter Annahme, daß die Umgehungsanfrage erzeugt wurde: ein Minimalrundungsfehler, was bedeutet, daß der Inkrementierer 328 einen Übertrag seiner signifikantesten Bitposition nach außen erzeugte; oder ein Exponentenüberlauf oder -unterlauf wird bei einem Exponentenergebnis im Exponentenabschnitt der Stufe Drei erfaßt.
- Die Fähigkeit zum Umgehen der letzten Stufe der Pipeline der Gleitkomma-Einheit 27 für die meisten Befehle dient zum Erhöhen der Leistungsfähigkeit um ein signifikantes Ausmaß. Eine Analyse zeigt, daß eine Mehrheit der durch die Gleitkomma- Einheit 27 ausgeführten Befehle die Anforderungen für eine Umgehungsoperation erfüllen wird, und somit wird die durchschnittliche Ausführungszeit um einen Zyklus reduziert.
- Jede der Komponenten der CPU 10, wie sie oben diskutiert sind, hat bestimmte interne Prozessorregister, wie es gewöhnliche Praxis ist. Beispielsweise enthält die Ausführungseinheit 23 den PSL oder Prozessorzustands-Latch und mehrere andere, die Speichermanagementeinheit 25 hat Prozessorregister zum Halten eines Zustands und einer Steuerung oder eines Befehls, wie es die Gleitkomma-Einheit 27 und die Cache-Steuereinheit 26 tut, etc. Diese Register sind anzahlmäßig weni ger als 256, so daß eine 8-Bit-Adresse zum Adressieren dieser Register verwendet werden kann. Die 8-Bit-Adresse wird durch den Mikrocode vom Steuer-ROM 43 erzeugt. Intern vom Chip der CPU 10 wird die Adresse eines Prozessorregisters auf einem 8-Bit-Teil eines Busses für interne Adressen geführt, und Steuerleitungen werden geführt, um zu spezifizieren, daß die aktuelle Referenz eher zu einem Prozessorregister ist als daß sie beispielsweise eine Speicherreferenz oder eine I/O-Referenz ist. Einige der Prozessorregister sind jedoch außerhalb des Chips, und auf sie muß durch den Bus 20 zugegriffen werden. Der Bus 20 verwendet eine Speicherabbildungs-I/O und hat allgemein ein Minimum von zusätzlichen Steuerleitungen, um mitzuteilen, welche spezielle Transaktion auf den Bus getrieben wird. Somit wird, um zu vermeiden, daß man Prozessorregister-Signalleitungen zum Bus 20 zufügen muß und um einen Speicher abgebildeten Zugriff zu den externen Prozessorregistern zu haben, die interne 8-Bit-Adresse (plus ihres Steuersignals, das einen Prozessorregisterzugriff bezeichnet) in der C-Box-Steuerung 306 zu einer Adresse mit voller Breite umgesetzt, und zwar durch Hinzufügen von Bits zu < 31 : 30> , wie beispielsweise der nach außen gehenden Adresse auf den Bus 20, um ein externes Prozessorregister zu spezifizieren. Die externe Adresse ist die Kombination der internen niederwertigen 8-Bit-Adresse, genau wie sie durch den Mikrocode erzeugt wurde, plus den hinzugefügten hochwertigen Bits, um auf dem Bus 20 zu spezifizieren, daß auf ein Prozessorregister zugegriffen wird.
- Der CPU-Bus 20 ist ein anhängiger synchroner Bus mit einer zentralisierten Zuteilung. "Anhängig" bedeutet eher, daß mehrere Transaktionen zu einer gegebenen Zeit in Arbeit sein können, als daß immer gewartet wird, bis eine Speicheranfrage erfüllt worden ist, bevor zugelassen wird, daß eine weitere Speicheranfrage auf den Bus 11 getrieben wird. Die Cache-Steuereinheit 26 der CPU 10 kann eine Speicherleseanfrage aussenden, und in den mehreren Buszyklen, bevor der Speicher 12 die Daten in Antwort auf diese Anfrage zurücksendet, können andere Speicheranfragen zum Bus 20 getrieben werden. Das ID-Feld auf dem Befehlsbusteil des Busses 20 spezifiziert dann, wenn die Daten auf den Bus 20 getrieben werden, welcher Knoten die Daten anfragte, so daß der anfragende Knoten nur seine eigenen Daten annehmen kann. In Fig. 21 ist ein Zeitdiagramm der Operation des Busses 20 während dreier Zyklen gezeigt. Die drei Zyklen sind ein Null- Zyklus-0, dem eine Schreibsequenz folgt; die Schreibadresse wird im Zyklus-1 nach außen getrieben, gefolgt durch die Schreibdaten im Zyklus-2. Fig. 21a zeigt die Daten oder die Adresse auf dem 64-Bit-Daten/Adressen-Bus. Die Fig. 21b-21e zeigen die Zuteilungssequenz. Im Zyklus-0 aktiviert die CPU 10 eine Anfrage zum Durchführen eines Schreibens durch eine Anfrageleitung, die von P2 bis P4 dieses Zyklus auf niedrig getrieben wird, wie es in Fig. 21b zu sehen ist. Wie es in Fig. 21b gezeigt ist, aktiviert der Zuteiler in der Bus-Schnittstelle 21 ein CPU- Gewährungssignal beginnend bei P2 des Zyklus-0, und diese Leitung wird auf niedrig (aktiviert) gehalten, weil die CPU 10 die CPU-Halteleitung aktiviert, wie es in Fig. 21c zu sehen ist. Das Haltesignal garantiert, daß die CPU 10 eine Steuerung des Busses zurückziehen wird, selbst wenn ein anderer Knoten, wie beispielsweise eine I/O 13a oder 13b eine Anfrage aktiviert. Das Haltesignal wird für Mehrfachzyklenübertragungen verwendet, wobei der Knoten eine Steuerung des Busses für darauffolgende Zyklen beibehalten muß. Nachdem die CPU die Halteleitung am Ende von P4 des Zyklus-1 freigibt, kann der Zuteiler in der Schnittstelleneinheit 21 die Gewährungsleitung zur CPU im Zyklus-2 freigeben. Die Bestätigungsleitung wird durch die Bus-Schnittstelle 21 zur CPU 10 im Zyklus aktiviert, nachdem sie die Schreibadresse ohne Paritätsfehler empfangen hat, die durch die CPU im Zyklus-1 getrieben wurde. In Fig. 21 ist keine weitere Bestätigung gezeigt, die durch die Bus-Schnittstelle 21 im Zyklus-3 aktiviert werden würde, wenn die Schreibdaten des Zyklus-2 ohne Paritätsfehler empfangen werden. Die Bestätigung muß aktiviert werden, wenn in dem Zyklus, nachdem Daten getrieben werden, kein Paritätsfehler erfaßt wird.
- Gemäß Fig. 22 besteht der Bus 20 aus einer Anzahl von Leitungen zusätzlich zu den 64-Bit-Multiplex-Adressen/Daten-Leitungen 20a, die die Adressen und Daten in alternativen bzw. abwechselnden Zyklen führen, wie es in Fig. 21a zu sehen ist. Die durch die Knoten am Bus 20 gemeinsam genutzten Leitungen (durch die CPU 10, die I/O 13a, die I/O 13b und das Schnittstellenchip 21) enthalten den Adressen/Datenbus 20a, einen Vier-Bit-Befehlsbus 20b, der die aktuelle Bustransaktion während eines gegebenen Zyklus spezifiziert (ein Schreiben, ein Befehlsstromlesen, ein Datenstromlesen, etc.), einen Drei-Bit-ID-Bus 20c, der die Identifikation der Bus-Befehlseinheit während der Adressen- und Zurückbringdaten-Zyklen enthält (jede Befehlseinheit bzw. jeder Commander kann zwei Lesetransaktionen ausstehend haben), einen Drei-Bit-Paritäts-Bus 20d und die Bestätigungsleitung 20e. Alle Befehlscodierungen für den Befehlsbus 20b und Definitionen dieser Transaktionen sind in nachfolgender Tabelle A gezeigt. Die CPU führt auch die Vier-Phasen-Bustakte der Fig. 3 vom Taktgenerator 30 auf Leitungen 20f zu.
- Zusätzlich zu diesen gemeinsam genutzten Leitungen im Bus 20 hat jeder der drei aktiven Knoten CPU 10, I/O 13a und I/O 13b einzeln die Anfrage-, Halte- und Gewährungsleitungen 20g, 20h und 20i, wie es oben diskutiert ist, die mit dem Zuteiler 325 im Speicherschnittstellenchip 21 verbunden sind. Eine weitere Funktion ist durch eine Überbrückungsleitung 20j vorgesehen, die durch die CPU 10 beispielsweise aktiviert wird, um neue Transaktionen auf dem Bus 20 zu unterdrücken, die die CPU 10 als Cachekohärenztransaktionen behandelt. Sie tut dies, wenn ihre Zwei-Eintrags-Cachekohärenz-Warteschlange 61 in der Gefahr ist, überzulaufen. Während des Zyklus, in dem die CPU 10 die Unterdrückungsleitung 20j aktiviert, wird die CPU 10 eine neue Transaktion annehmen, aber Transaktionen beginnend mit dem folgenden Zyklus werden unterdrückt (keinem Knoten wird ein Befehl des Busses gewährt). Während die Unterdrückungsleitung 20j aktiviert ist, ist nur zugelassen, daß Auffüllungen und Rückschreibungen von irgendwelchen Knoten weitermachen, die andere als die CPU 10 sind. Die CPU 10 kann damit fortfahren, alle Transaktionen auf den Bus 20 zu bringen (solange eine Nur-Rückschreibleitung 20k nicht aktiviert ist). Weil die Eingangs-Warteschlange 61 voll ist und die höchste Priorität innerhalb der Cache-Steuereinheit 26 einnimmt, arbeitet die CPU 10 am häufigsten an Cachekohärenztransaktionen, während die Unterdrückungsleitung 20j aktiviert ist, was dazu führen kann, daß die CPU 10 Schreibablehnungen auf dem Bus 20 ausgibt. Jedoch kann die CPU 10 irgendeinen Typ einer Transaktion ausgeben und tut dies, während ihre Unterdrückungsleitung 20j aktiviert ist. Die I/O-Knoten 13a und 13b haben eine ähnliche Unterdrückungsleitungsfunktion.
- Die Nur-Rückschreib- oder Nur-WB-Leitung 20k hat dann, wenn sie durch den Zuteiler 325 aktiviert ist, die Bedeutung, daß der Knoten, zu dem sie ausgerichtet ist (z. B. die CPU 10), nur Schreibablehnungsbefehle ausgeben wird, einschließlich von Schreibablehnungen aufgrund von Schreibentriegelungen, wenn der Cache im ausgeschalteten Zustand ist. Sonst wird die CPU 10 keine neuen Anfragen ausgeben. Während des Zyklus, in dem die Nur-WB-Leitung 20k zur CPU 10 aktiviert ist, muß das System darauf vorbereitet sein, einen weiteren Nicht-Rückschreib-Befehl von der CPU 10 anzunehmen. Beginnend mit dem Zyklus, der der Aktivierung von Nur-WB folgt, wird die CPU 10 Nur-Rückschreibbefehle ausgeben. Die getrennten Rückschreib- und Nicht-Rückschreib-Warteschlangen 62 und 63 in der Cache- Steuereinheit 26 der Fig. 19 lassen zu, daß die in der Warteschlange angeordneten Transaktionen getrennt werden, so daß dann, wenn die Nur-WB-Leitung 20k aktiviert ist, die Rückschreib-Warteschlange 62 geleert werden kann, wenn es nötig ist, so daß die anderen Knoten des Systems fortfahren, einem Updaten unterzogene Daten im Speicher 12 verfügbar zu haben.
- Wenn irgendein Knoten seine Unterdrückungsleitung 20j aktiviert, müssen keine Transaktionen, die andere als ein Rückschreiben oder ein Auffüllen sind, auf dem Bus 20 getrieben werden, und zwar beginnend mit dem folgenden Zyklus. Beispielsweise dann, wenn die CPU 10 ihre Unterdrückungsleitung 20j aktiviert, kann der Zuteiler 325 dies durch Aktivieren von Nur-WB zu sowohl der I/O 13a als auch der I/O 13b erreichen, so daß diese Knoten den Bus außer für Auffüllungen und Rückschreibungen nicht anfragen. Somit veranlaßt eine Aktivierung der Unterdrückung durch die CPU 10, daß der Zuteiler 325 ein Nur-WB zu den anderen zwei Knoten 13a und 13b aktiviert. Oder eine Aktivierung einer Unterdrückung durch I/O 13a wird veranlassen, daß der Zuteiler 325 Nur-WB zur CPU 10 und zur I/O 13b aktiviert. Die Halteleitung 20h überschreitet die Unterdrückungsfunktion.
- Die durch den Zuteiler 325 ausgeführten Regeln sind folgende: (1) irgendein Knoten kann seine Anfrageleitung 20g während jedes Zyklus aktivieren; (2) eine Gewährungsleitung 20i des Knotens muß aktiviert sein, bevor jener Knoten des Bus 20 treibt; (3) ein Treiber des Busses 20 kann nur seine Halteleitung 20h aktivieren, wenn es dem Bus für den aktuellen Zyklus gewährt worden ist; (4) wenn dem Bus 20 ein Knoten gewährt worden ist und er ein Halten aktiviert, wird ihm garantiert, daß er dem Bus 20 im folgenden Zyklus gewährt wird; (5) die Halteleitung 20h kann in zwei Fällen verwendet werden, und zwar in einem zum Halten des Busses für die Datenzyklen eines Schreibens, und im anderen zum Senden aufeinanderfolgender Auffüllzyklen; (6) ein Halten muß dazu verwendet werden, den Bus für die Datenzyklen eines Schreibens zurückzuziehen, wenn die Zyklen an den Schreibadressenzyklus angrenzend sein müssen; (7) ein Halten muß nicht dazu verwendet werden, den Bus 20 für neue Transaktionen zurückzuziehen, da eine Zuteilungsgerechtigkeit nicht beibehalten würde; (8) wenn ein Knoten den Bus 20 anfragt und ihm der Bus gewährt wird, muß er den Bus während des gewährten Zyklus mit einem gültigen Befehl treiben - Nicht-Operation bzw. NOP ist ein gültiger Befehl - die CPU 10 nimmt diesen einen Schritt weiter und treibt NOP, wenn ihm der Bus gewährt ist, wenn er ihn nicht anfragte; (9) irgendein Knoten, der ein Lesen ausgibt, muß die entsprechenden Auffüllungen annehmen können, wenn sie nicht unterdrückt oder verlangsamt werden können; (10) wenn eine Nur-WP-Leitung 20k eines Knotens aktiviert ist, kann er den Bus 20 nur mit NOP, Lesedatenrücksprung, Schreibablehnung und anderen Situationen treiben, die nicht hierhin gehören; (11) wenn ein Knoten seine Unterdrückungsleitung 20j aktiviert, darf der Zuteiler 325 den Bus nicht zu irgendeinem anderen Knoten gewähren, außer demjenigen im nächsten Zyklus - gleichzeitig muß der Zuteiler die geeigneten Nur-WB-Leitungen aktivieren (im folgenden Zyklus muß der Zuteiler den Bus auf normale Weise gewähren); (12) die Regeln für ein Halten überschreiten die Regeln für ein Unterdrücken; (13) der Bus 20 muß während jedes Zyklus aktiv getrieben werden.
- Der Bus 20a, nämlich die Bits < 63 : 0> , wird zur Informationsübertragung verwendet. Die Verwendung dieses Feldes < 63 : 0> des Busses 20a wird zwischen Adressen- und Dateninformationen multiplext. Bei Datenzyklen stellen die Leitungen < 63 : 0> des Busses 20a 64 Bits von Lese- oder Schreibdaten dar. Bei Adressenzyklen stellen die Leitungen < 63 : 0> des Busses 20a Adressen in den Bits < 31 : 0> , Byte- Freigabeeingangsbits < 55 : 40> und Längeninformationen in den Bits < 63 : 62> dar. Es gibt mehrere Typen von Buszyklen, wie es in der Tabelle A definiert ist. Vier Typen von Datenzyklen sind folgende: Schreibdaten, Schlecht-Schreibdaten, Lesedaten-Rücksprung und Lesedaten-Fehler. Während Schreibdaten-Zyklen treibt der Commander bzw. die Befehlseinheit (z. B. die Cache-Steuereinheit 26 der CPU 10) zuerst den Adressenzyklus auf den Bus 20, einschließlich seiner ID auf dem ID-Bus 20c, und treibt dann im nächsten Zyklus Daten auf den Bus 20a, und zwar wiederum mit ihren ID. Die vollen 64 Bits von Daten auf den Busleitungen 20a werden während jedes von vier Datenzyklen für ein Hexawort-Schreiben geschrieben; für ein Oktawort- und ein Quadwort-Längenschreiben entsprechen die Datenbytes, die geschrieben werden, den Byte-Freigabebits, die während des Adressenzyklus aktiviert wurden, der die Transaktion initiiert. Während Lesedaten-Rücksprung- und Lesedaten-Fehlerzyklen treibt der Responder bzw. die Antworteinheit auf Leitungen 20c die ID des ursprünglichen Commanders (d. h. des Knotens, wie beispielsweise der CPU 10, wo das Lesen entstand).
- Der Adressenzyklus auf dem Bus 20a wird durch den Commander (d. h. den Ursprungsknoten, wie beispielsweise der CPU 10) dazu verwendet, eine Transaktion des Busses 20 zu initiieren. Bei Adressenzyklen wird die Adresse im niedrigeren Langwort < 31 : 0> des Busses getrieben, und die Byte-Freigabe und die Transaktionslänge werden im oberen Langwort getrieben. Der durch den Bus 20 unterstützte Adressenraum wird in einen Speicherraum und einen I/O-Raum aufgeteilt. Die unteren 32 Bits der Adressenzyklusbits < 31 : 0> definieren die Adresse einer Lese- oder Schreibtransaktion des Busses 20. Der Bus 20 unterstützt einen Adressenraum von vier Gigabyte (232 Byte). Die signifikantesten Bits dieser Adresse (entsprechend den Leitungen < 31 : 29> ) wählen einen I/O-Raum von 512 Mb (< 31 : 29> = 111) oder einen Speicherraum von 3,5 Gb (< 31 : 29> = 000..110) aus. Die Aufteilung des Adressenraums in den I/O-Bereich wird weiterhin zur Anpassung an die Notwendigkeit für getrennte Adressenräume für den Knoten der CPU 10 und die I/O-Knoten 13a und 13b definiert. Adressenbits < 31 : 0> sind alle signifikanten Bits in einer Adresse zum I/O-Raum. Obwohl das Längenfeld < 63 : 62> auf dem Bus 20 immer ein Quadwort für ein Lesen und ein Schreiben des I/O-Raums spezifiziert, kann die aktuelle Menge von Daten, die gelesen oder geschrieben werden, kleiner als ein Quadwort sein. Das Byte-Freigabefeld < 55 : 40> wird nur zum Lesen oder Schreiben der angefragten Bytes verwendet. Wenn das Byte- Freigabefeld ein 1-Byte-Lesen oder -Schreiben anzeigt, ist jedes Bit der Adresse signifikant. Die unteren Bits der Adresse sind manchmal angesichts des Byte- Freigabefelds redundant, sind aber auf dem Bus 20a vorgesehen, so daß die I/O- Adapter die Adresse nicht vom Byte-Freigabefeld ableiten müssen.
- Das gesamte Lesen hat signifikante Bits in seiner Adresse nach unten zum Quadwort (Bit < 3> ) der Adresse. Obwohl Auffüllungen (die bezüglich der Länge ein Hexawort sind) mit Quadworten in irgendeiner Reihenfolge zurückgebracht werden können, gibt es einen leistungsmäßigen Vorteil, wenn der Speicher 12 das angefragte Quadwort zuerst zurückbringt. Das Protokoll des Busses 20 identifiziert jedes Quadwort unter Verwendung eines der vier Lesedaten-Zurückbringbefehle auf dem Bus 20b, wie es in der Tabelle A gezeigt ist, so daß Quadworte in richtigen Stellen im Backup-Cache 15 durch die Cache-Steuereinheit 26 angeordnet werden können, und zwar ungeachtet der Reihenfolge, in der sie zurückgebracht werden. Ein Quadwort-, ein Oktawort- und ein Hexawort-Schreiben durch die CPU 10 ist immer natürlich ausgerichtet und wird auf den Bus 20 in einer Reihenfolge vom Quadwort mit der niedrigsten Adresse zu demjenigen mit der höchsten getrieben.
- Das Byte-Freigabefeld ist während des Adressenzyklus in den Bits < 55 : 40> des Busses 20a angeordnet. Es wird zum Zuführen von Byte-Pegel- Freigabeinformationen für Quadwortlängen-Besitzlesen, I-Strom-Lesen, D-Strom- Lesen und Oktawortlängen-Schreiben und Schreibablehnungen verwendet. Von diesen Typen von Transaktionen, die Byte-Freigaben verwenden, erzeugt die CPU 10 nur ein Quadwort-I-Strom-Lesen und -D-Strom-Lesen zum I/O-Raum, ein Quadwort-Schreiben zum I/O-Raum und ein Quadwortschreiben und Schreibablehnungen zum Speicherraum.
- Das Längenfeld bei den Bits < 63 : 62> des Adressenzyklus auf dem Bus 20a wird zum Anzeigen der Menge an Daten verwendet, die für die aktuelle Transaktion zu lesen oder zu schreiben sind, d. h. ein Hexawort, ein Quadwort oder ein Oktawort (Oktawort wird bei einem typischen Ausführungsbeispiel nicht verwendet).
- Der Schlecht-Schreibdatenbefehl, der auf dem Bus 20b erscheint, wie es in der Tabelle A aufgelistet ist, funktioniert zum Zulassen, daß die CPU 10 ein schlechtes Quadwort von Schreibdaten identifiziert, wenn ein Hexawort-Rückschreiben ausgeführt wird. Die Cache-Steuereinheit 26 testet die Daten, die aus dem Backup- Cache 15 ausgelesen werden, auf ihrem Weg zum Bus 20 über die Rückschreib- Warteschlange 62. Wenn ein Quadwort des Hexawortes bei diesem Test eine schlechte Parität zeigt, dann wird dieses Quadwort durch die Cache-Steuereinheit 26 mit einem Schlecht-Schreibdatenbefehl auf den Bus 20b gesendet, in welchem Fall der Speicher beim Hexawort-Schreiben drei gute Quadworte und ein schlechtes empfangen wird. Sonst würde deshalb, weil der Schreibblock ein Hexawort ist, das gesamte Hexawort im Speicher 12 für ungültig erklärt werden und somit für andere CPUs nicht verfügbar sein. Natürlich müssen Fehlerbehebungsalgorithmen durch das Betriebssystem ausgeführt werden, um zu sehen, ob das mit dem Schlecht-Schreibdatenbefehl gesendete schlechte Quadwort katastrophal sein wird oder ob um es herum gearbeitet werden kann.
- Wie es oben beschrieben ist, ist der Bus 20 ein anhängiger 64-Bit-Multiplex- Adressen/Datenbus, der synchron zur CPU 10 ist, mit einer zentralisierten Zuteilung, die durch das Schnittstellenchip 21 vorgesehen ist. Mehrere solcher Transaktionen können zu einer gegebenen Zeit in Arbeit sein, da ein Lesen mehrere Zyklen dauern wird, um die Lese-Rücksprungdaten vom Speicher 12 zu erzeugen, und zwischenzeitlich können andere Transaktionen dazwischen angeordnet werden. Eine Zuteilung und eine Datenübertragung erfolgen auf dem Bus 20 gleichzeitig (parallel). Vier Knoten werden unterstützt: die CPU 10, der Systemspeicher (über den Bus 11 und den Chipstellenchip 21) und zwei I/O-Knoten 13a und 13b. Auf dem 64-Bit-Bus 20a wechseln Datenzyklen (64 Bits von Daten) mit Adressenzyklen ab, die 32-Bit-Adressen plus Byte-Masken und Datenlängenfelder enthalten; ein paralleler Befehls- und Zuteilungsbus führt einen Befehl auf den Leitungen 20b, ein Identifiziererfeld auf den Leitungen 20c, die definieren, welcher Knoten gerade sendet, und eine Bestätigung auf der Leitung 20e; getrennte Anfrage-, Halte-, Gewährungs-, Unterdrückungs- und Nur-Rückschreib-Leitungen sind vorgesehen, um jeden Knoten mit dem Zuteiler 325 zu verbinden.
- Der Backup-Cache 15 für die CPU 10 ist ein "Rückschreib"-Cache, so daß es Zeiten gibt, zu denen der Backup-Cache 15 die einzige gültige Kopie eines bestimmten Blocks von Daten im gesamten System der Fig. 1 enthält. Der Backup-Cache 15 (sowohl der Tag-Speicher als auch der Daten-Speicher) wird durch ECC geschützt. Prüfbits werden gespeichert, wenn Daten zum Daten-RAM des Caches 15 geschrieben werden oder zum Tag-RAM geschrieben werden, und dann werden diese Bits gegenüber den Daten geprüft, wenn der Cache 15 gelesen wird, und zwar unter Verwendung von EEC-Prüfschaltungen 330 und 331 der Fig. 19. Wenn durch diese EEC-Prüfschaltungen ein Fehler erfaßt wird, wird durch die C-Box- Steuerung 306 in einen Fehlerübergangsmode eingetreten; der Backup-Cache 15 kann nicht nur für ungültig erklärt werden, da andere Systemknoten 28 Daten benötigen können, die im Besitz des Backup-Caches 15 sind. In diesem Fehlerübergangsmode werden so viele Daten wie möglich im Backup-Cache 15 zur Diagnose aufbewahrt, aber die Operation fährt fort; die Aufgabe besteht darin, die Daten, für die dieser Backup-Cache 15 die einzige Kopie im System hat, so schnell wie möglich zurück nach außen zum Speicher 12 zu bewegen, aber dennoch ohne ein unnötiges Verschlechtern der Leistungsfähigkeit. Für Blöcke (Hexaworte), die nicht im Besitz des Backup-Caches 15 sind, werden Referenzen von der Speichermanagementeinheit 25, die durch die Cache-Steuereinheit 26 empfangen werden, zum Speicher 12 gesendet, anstatt daß sie im Backup-Cache 15 ausgeführt werden, selbst wenn es einen Cache-Treffer gibt. Für Blöcke, die im Besitz des Backup- Caches 15 sind, veranlaßt eine Schreiboperation durch die CPU 10, die einen Treffer im Backup-Cache 15 erzielt, daß der Block vom Backup-Cache 15 zurück zum Speicher 12 geschrieben wird, und die Schreiboperation wird ebenso eher zum Speicher 12 weitergeleitet, als daß ein Schreiben zum Backup-Cache 15 erfolgt; nur die Besitz-Bits werden für diesen Block im Backup-Cache 15 geändert. Ein Lese-Treffer zu einem Block mit gültigem Besitz wird durch den Backup-Cache 15 ausgeführt. Keine Cache-Auffülloperationen werden gestartet, nachdem in den Fehlerübergangsmode eingetreten ist. Cachekohärenztransaktionen vom Systembus 20 werden normal ausgeführt, aber dies ändert die Daten oder die Tags im Backup-Cache 15 nicht, sondern nur die gültigen und besessenen Bits. Auf diese Weise macht das System mit einer Operation weiter, doch die Daten im Backup- Cache 15 sind für eine spätere Diagnose so gut aufbewahrt, wie es sein kann.
- Somit tritt die Cache-Steuereinheit 26 dann, wenn sie unter Verwendung der EEC- Schaltungen 330 und 331 nicht korrigierbare Fehler erfaßt, in den Fehlerübergangsmode (ETM) ein. Die Ziele der Operation der Cache-Steuereinheit 26 während des ETM sind folgende: (1) Aufbewahren von so viel wie möglich des Zustandes des Caches 15 für Diagnose-Software; (2) Honorieren von Referenzen der Speichermanagementeinheit 25, die einen Treffer für Blöcke im Besitz des Backup- Caches 15 erzielen, da dies die einzige Quelle von Daten im System ist; (3) Antworten auf Cachekohärenzanfragen, die normalerweise vom Bus 20 empfangen werden.
- Wenn die Cache-Steuereinheit 26 einmal in den Fehlerübergangsmode eintritt, bleibt sie im ETM, bis eine Software den Cache 15 explizit sperrt oder freigibt. Zum Sicherstellen einer Cachekohärenz müssen gültige Blöcke vollständig vom Cache 15 ausgeräumt werden, bevor er wieder freigegeben wird, weil einige Daten veralten können, während der Cache im ETM ist.
- Die Tabelle B beschreibt, wie sich der Backup-Cache 15 verhält, während er im ETM ist. Jedes Lesen oder Schreiben, das während ETM keinen Treffer für einen gültigen Besitz erzielt, wird zum Speicher 12 gesendet: Lesedaten werden vom Speicher 12 ausgelesen, und ein Schreiben wird zum Speicher 12 geschrieben, und zwar unter vollständiger Umgehung des Caches 15. Der Cache 15 führt Daten für ein I-Lesen und ein D-Lesen zu, welches einen Treffer für einen gültigen Besitz erzielt; dies ist ein normales Cache-Verhalten. Wenn ein Schreiben einen Treffer für einen Block für einen gültigen Besitz im Backup-Cache 15 erzielt, wird der Block zurück zum Speicher 12 geschrieben, und das Schreiben wird auch zum Speicher 12 gesendet. Das Schreiben verläßt die Cache-Steuereinheit 26 durch die Nicht- Rückschreib-Warteschlange 62, was eine Schreibreihenfolge zu einem vorherigen Schreiben verstärkt, das einen Nichttreffer im Backup-Cache 15 erzielt haben kann. Wenn eine Leseverriegelung einen Treffer für einen gültigen Besitz im Cache 15 erzielt, wird ein Rückschreiben des Blocks erzwungen, und die Leseverriegelung wird zum Speicher 12 gesendet (als Besitzlesen auf dem Bus 20). Dieses Verhalten verstärkt eine Schreibreihenfolge zwischen vorherigem Schreiben, das einen Nichttreffer im Cache erzielt haben kann, und dem Schreibentriegeln, das dem Leseverriegeln folgen wird.
- Das Problem der Schreibreihenfolge, das angedeutet worden ist, ist folgendes: es soll angenommen sein, daß der Cache 15 im ETM ist. Ebenso soll angenommen sein, daß unter dem ETM ein Schreiben, das einen Treffer für einen Besitz im Cache 15 erzielt, zum Cache geschrieben wird, während ein Schreiben, das einen Nichttreffer erzielt, zum Speicher 12 gesendet wird. Ein Schreiben A erzielt einen Nichttreffer im Cache 15 und wird auf seinem Weg zum Speicher 12 zur Nicht- Rückschreib-Warteschlange 62 gesendet. Ein Schreiben B erzielt einen Treffer für einen Besitz im Cache 15 und wird zum Cache geschrieben. Eine Cachekohärenzanfrage kommt für den Block B an, und jener Block wird in der Rückschreib- Warteschlange 63 angeordnet. Wenn das Schreiben A den Bus 20 noch nicht erreicht hat, kann das Rückschreiben B ihn durchlaufen, da die Rückschreib- Warteschlange eine Priorität über die Nicht-Rückschreib-Warteschlange hat. Wenn dies passiert, sieht das System das Schreiben B, während es noch alte Daten im Block A liest, weil das Schreiben A den Speicher noch nicht erreicht hat.
- Nimmt man wieder Bezug auf die Tabelle B, so ist zu beachten, daß ein Schreibentriegeln, das während ETM einen Treffer für einen Besitz erzielt, direkt zum Cache 15 geschrieben wird. Es gibt nur einen Fall, in dem ein Schreibentriegeln einen Treffer für einen Besitz während ETM erzielen wird: wenn die Leseverriegelung, die ihm vorangegangen ist, durchgeführt wurde, bevor der Cache in den ETM eintrat. (Entweder die Leseverriegelung selbst oder eine Ungültigkeitserklärung, die zwischen der Leseverriegelung und der Schreibentriegelung durchgeführt wird, veranlaßte den Eintritt in den ETM.) In diesem Fall wissen wir, daß kein vorheriges Schreiben in der Nicht-Rückschreib-Warteschlange ist, weil ein Schreiben nicht in die Nicht-Rückschreib-Warteschlange abgelegt wird, wenn wir nicht im ETM sind. (Es kann ein I/O-Raumschreiben in der Nicht-Rückschreib-Warteschlange geben, aber ein Befehlen mit einem I/O-Raumschreiben ist keine Beschränkung.) Daher gibt es kein Problem bei einem Schreibbefehl, wie beim vorherigen Absatz.
- Die Tabelle B zeigt, daß während ETM Cachekohärenzanfragen behandelt werden, wie sie es während einer normalen Operation werden, mit einer Ausnahme, wie es durch eine Anmerkung angezeigt ist. Auffüllungen als das Ergebnis irgendeines Typs eines Lesens, das entstand, bevor der Cache in den ETM eintrat, werden auf die gewöhnliche Weise verarbeitet. Wenn die Auffüllung als Ergebnis eines Schreib-Nichttreffers erfolgt, werden die Schreibdaten wie gewöhnlich vereinigt, wenn die angefragte Auffüllung zurückkehrt. Durch irgendeinen Typ eines Lesens verursachte Auffüllungen, das während ETM entstand, werden nicht in den Cache geschrieben oder im Tag-Speicher für gültig erklärt. Während ETM wird der Zu stand des Caches so wenig wie möglich modifiziert. Die Tabelle B zeigt, wie jede Transaktion den Zustand des Caches modifiziert.
- Gemäß Fig. 23 funktioniert die Schnittstelleneinheit 21 zum Verbinden des CPU- Busses 20 mit dem Systembus 11. Der Systembus 11 ist ein anhängiger synchroner Bus mit einer zentralisierten Zuteilung. Mehrere Transaktionen können zu einer gegebenen Zeit in Arbeit sein, was eine äußerst effiziente Ausnutzung der Busbandbreite zuläßt. Eine Zuteilung und Datenübertragungen erfolgen simultan mit multiplexten Daten- und Adressenleitungen. Der Bus 11 unterstützt Rückschreib- Caches durch Vorsehen eines Satzes von Besitztums-Befehlen, wie es oben diskutiert ist. Der Bus 11 unterstützt ein Quadwort-, ein Oktawort- und ein Hexawort- Lesen und -Schreiben zum Speicher 12. Zusätzlich unterstützt der Bus 11 Langwortlängenlese- und -schreiboperationen zum I/O-Raum, und diese Langwortoperationen implementieren Byte- und Wortmoden, die durch einige I/O- Vorrichtungen benötigt werden. Beim Arbeiten bei einem Buszyklus von 64 nsek hat der Bus 11 eine Bandbreite von 125 MBytes/sek.
- Die Informationen auf dem CPU-Bus 20 werden durch einen Eingabebus 335 an einen Empfangs-Latch 336 angelegt. Diese Informationen werden in jedem Zyklus des Busses 20 zwischengespeichert. Der Bus 335 führt die 64-Bit-Daten/Adressen, den 4-Bit-Befehl, die 3-Bit-ID und die 3-Bit-Parität, wie es oben diskutiert ist. Der Latch 336 erzeugt eine Datenausgabe auf einem Bus 337 und eine Steuerausgabe auf einem Bus 338, die an eine Rückschreib-Warteschlange 339 und eine Nicht- Rückschreib-Warteschlange 340 angelegt werden, so daß die Rückschreibungen weitermachen können, selbst wenn Nicht-Rückschreib-Transaktionen unterdrückt werden, wie es oben diskutiert ist. Von der Rückschreib-Warteschlange 339 werden Ausgaben 341 nur an eine Schnittstelle 342 zum Systembus 11 angelegt, aber für die Nicht-Rückschreib-Warteschlange 340 werden Ausgaben 343 an entweder die Schnittstelle 342 zum Systembus 11 oder an eine Schnittstelle 344 zum ROM- Bus 29 angelegt. Ein Rückschreiben wird immer zum Speicher 12 gehen, wohingegen Nicht-Rückschreibungen zum Speicher 12 oder zum ROM-Bus 29 erfolgen können. Vom Systembus 11 bei der Sende/Empfangs-Schnittstelle 342 empfangene Daten werden durch einen Bus 345 zu einer Antwort-Warteschlange 346 gesendet, wie es nachfolgend detaillierter beschrieben ist, und die Ausgabe dieser Antwort-Warteschlange wird durch einen Bus 347 an eine Sende-Schnittstelle 348 angelegt, von wo sie durch einen Ausgang 349 der Schnittstelle 348 an den Bus 20 angelegt wird. Die ankommenden Daten auf dem Bus 345, die vom Systembus 11 zur CPU 10 gehen, sind entweder Zurückbring- bzw. Rücksprungdaten, die aus einem Speicherlesen resultieren, oder sind eine Ungültigkeitserklärung, die aus einem Schreiben zum Speicher 12 durch einen anderen Prozessor 28 am Systembus 11 resultiert. Ankommende Daten vom ROM-Bus 29 werden von der Sende/Empfangs-Schnittstelle 344 durch einen Bus 351 direkt an die Schnittstelle 348 angelegt, ohne in einer Warteschlange angeordnet zu werden, da die Datenrate auf diesem Kanal niedrig ist. Der Zuteiler 325 im Schnittstellenchip 21 erzeugt die Gewährungssignale zur CPU 10, wie es oben diskutiert ist, und empfängt auch Anfragesignale auf einer Leitung 352 von der Sende-Schnittstelle 348, wenn die Schnittstelle 348 einen Befehl des Busses 20 zum Senden von Daten wünscht und Gewährungssignale auf einer Leitung 353 zum Gewähren des Busses 20 zur Schnittstelle 348 liefert.
- Gemäß Fig. 24 verwendet die Antwort-Warteschlange 346 getrennte Warteschlangen 355 und 256 für die Ungültigkeitserklärungen bzw. für Rückkehrdaten. Die Ungültigkeitserklärungs-Warteschlange 355 kann beispielsweise zwölf Einträge oder Schlitze 357 haben, wie es in Fig. 25 zu sehen ist, wohingegen die Zurückbringdaten-Warteschlange vier Schlitze 258 haben würde. Es würde viel mehr Ungültigkeitserklärungen als Lesedatenrücksprünge in einem Multiprozessorsystem geben. Jeder Eintrag oder Schlitz 357 in der Ungültigkeitserklärungs-Warteschlange enthält eine Ungültigkeitsadresse 359, einen Typenindikator, ein Gültigkeitsbit 360 und einen nächsten Zeiger 361, der zur Schlitznummer des nächsten Eintrags in chronologischer Ablauffolge des Empfangs zeigt. Ein Endzeiger 362 wird für die Warteschlange 355 unterhalten und ein separater Endzeiger 363 wird für die Warteschlange 356 unterhalten; wenn ein neuer Eintrag auf dem Bus 345 vom Systembus 11 ankommt, wird er zu einer der Warteschlangen 355 oder 356 geladen, und zwar in Abhängigkeit von seinem Typ (Ungültigkeitserklärung oder Lesedaten), und in den Schlitz 357 oder 358 in dieser Warteschlange, wie es durch den Endzeiger 362 oder 363 identifiziert ist. Auf jede solche Ladeoperation hin wird der Endzeiger 362 oder 363 inkrementiert, der zum Beginn zurückspringt bzw. umbricht, wenn er das Ende erreicht. Einträge werden von den Warteschlangen 355 und 356 entladen und über den Bus 347 weiter zum Sender 348 gesendet, und der Schlitz, von dem ein Eintrag entladen wird, wird durch einen Anfangszeiger 364 definiert. Der Anfangszeiger 364 schaltet zwischen den Warteschlangen 355 und 356 um; es gibt nur einen Anfangszeiger. Die Einträge in den Warteschlangen 355 und 356 müssen in derselben Reihenfolge zur CPU 10 weitergeleitet werden, wie sie vom Systembus 11 empfangen werden. Der Anfangszeiger 364 ist eine Eingabe zu Selektoren 365, 366 und 367, die auswählen, welcher der Einträge auf den Bus 347 ausgegeben wird. Eine Steuerung 368, die den Anfangszeiger 364 und den Endzeiger 362 und 363 enthält, sendet eine Anfrage auf einer Leitung 369 zum Sender 348, wann immer ein Eintrag zum Senden bereit ist, und empfängt eine Antwort auf einer Leitung 370, was anzeigt, daß der Eintrag angenommen und weiter zum Bus 20 gesendet worden ist. Zu dieser Zeit wird der gerade gesendete Schlitz durch eine Leitung 371 für ungültig erklärt, und der Anfangszeiger 364 wird zum nächsten Zeigerwert 361 im gerade gesendeten Schlitz bewegt. Der nächste Zeigerwert kann der nächste Schlitz in derselben Warteschlange 355 oder 356 sein, oder er kann zu einem Schlitz in der anderen Warteschlange zeigen. Auf ein Laden eines Eintrags in den Warteschlangen 355 oder 356 hin wird der Wert im nächsten Zeiger 361 nicht eingefügt, bis der folgende Eintrag geladen ist, da es bis dahin nicht bekannt ist, ob dieser ein für ungültig erklärter oder ein Rücksprungdateneintrag sein wird.
- Der Schnittstellenchip 21 stellt die Speicherschnittstelle für die CPU 10 durch Handhaben von CPU-Speicher- und I/O-Anfragen auf dem Systembus 11 zur Verfügung. Bei einem Speicherlese- oder -schreib-Nichttreffer im Backup-Cache 15 sendet die Schnittstelle 21 ein Lesen auf dem Systembus 11, dem eine Cache- Auffülloperation folgt, um den Block vom Hauptspeicher 12 zu bekommen. Der Schnittstellenchip 21 überwacht einen Speicherlese- und -schreibverkehr, der durch andere Knoten auf dem Systembus 11 erzeugt wird, wie beispielsweise den CPUs 28, um sicherzustellen, daß die Caches 14 und 15 der CPU 10 zum Hauptspeicher 12 konsistent bleiben. Wenn ein Lesen oder ein Schreiben durch einen anderen Knoten einen Treffer im Cache 15 erzielt, dann wird ein Rückschreiben oder ein Ungültigkeitserklären durch den Chip der CPU 10 durchgeführt, wie es zuvor diskutiert ist. Der Schnittstellen-Chip 21 behandelt auch Unterbrechungstransaktionen zu und von der CPU.
- Der Systembus 11 enthält ein Unterdrückungssignal, wie es oben diskutiert ist, in bezug auf den CPU-Bus 20 (d. h. die Leitung 20j), und dieses wird zum Steuern der Initiierung von neuen Transaktionen des Systembusses 11 verwendet. Eine Aktivierung der Unterdrückung auf dem Systembus 11 blockiert alle Bus- Commanderanfragen, wodurch die Initiierung von neuen Transaktionen des Systembusses unterdrückt werden. Dieses Unterdrückungssignal des Busses 11 kann durch irgendeinen Knoten am Bus 11 am Anfang jedes Zyklus des Busses 11 aktiviert werden, um eine Zuteilung für den Zyklus nach dem nächsten Zyklus des Systembusses 11 zu steuern. Der Schnittstellen-Chip 21 verwendet dieses Unterdrückungssignal zum Verhindern von Transaktionen (außer einem Rückschreiben und einer Leseantwort) auf dem Systembus 11, wenn seine Ungültigkeitserklärungs-Warteschlange 355 nahezu voll ist, um einen Überlauf der Ungültigkeitserklärungs-Warteschlange 355 zu verhindern.
- Der Schnittstellen-Chip 21 nimmt an allen Transaktionen des Busses 20 teil, und zwar in Antwort auf ein Lesen und ein Schreiben, das einen Nichttreffer im Backup- Cache 15 erzielt, was in einer Besitztums-Leseoperation des Systembusses 11 und einer Cache-Auffüllung resultiert. Der Schnittstellen-Chip 21 speichert den Adressen/Daten-Bus 20a, den Befehlsbus 20b, den ID-Bus 20c und die Parität 20d während jedes Zyklus des Busses 20 in den Latch 336 zwischen, und prüft dann die Parität und decodiert den Befehl und die Adresse. Wenn die Parität gut ist und die Adresse derart erkannt wird, daß sie in einem Raum des Schnittstellen-Chips 21 ist, dann wird eine Bestätigungs-Leitung 20e aktiviert, und die Informationen werden in Halteregistern in Warteschlangen 339 oder 340 bewegt, so daß die Latches 336 frei werden, um den nächsten Zyklus abzutasten. Informationen in diesen Halteregistern werden für die Dauer der Transaktion gesichert.
- Der Zuteiler 325 für den Bus 20 ist im Schnittstellen-Chip 21 enthalten. Die zwei Knoten, nämlich die CPU 10 und der Schnittstellen-Chip 21, wirken sowohl als Commander- bzw. als Befehlseinheit als auch als Antworteinheit auf dem Bus 20. Sowohl die CPU 10 als auch der Schnittstellen-Chip 21 haben Lesedaten- Warteschlangen, die geeignet sind, alle ausstehenden Auffülltransaktionen zu behandeln. Die CPU-Unterdrückungsleitung 20j verhindert eine Gewährung für einen Zyklus des Busses 20, während dem das Nur-WB-Signal durch den Schnittstellen- Chip 21 auf der Leitung 20k aktiviert ist.
- Wenn die Eingangs-Warteschlange 61 in der Cache-Steuereinheit 26 auffüllt, aktiviert sie die CPU-Unterdrückungsleitung 20j, und der Schnittstellen-Chip 21 stoppt ein Senden von Ungültigkeitserklärungen zum Bus 20 (der Systembus 11 wird nur unterdrückt, wenn die Eingangs-Warteschlange 355 des Schnittstellen-Chips 21 auffüllt). Der Schnittstellen-Chip 21 fährt fort, Auffülldaten zu senden, bis eine Ungültigkeitserklärung angetroffen wird.
- Wenn die Rückschreib-Warteschlange 339 des Schnittstellen-Chips 21 auffüllt, stoppt sie ein Ausgaben einer Gewährung zur CPU 10 auf der Leitung 20i. Wenn die Nicht-Rückschreib-Warteschlange 340 des Schnittstellen-Chips 21 auffüllt, aktiviert sie Nur-WB zur CPU 10 auf einer Leitung 20k.
- Die folgenden durch die CPU 10 erzeugten Befehle werden durch den Schnittstellen-Chip 21 alle als Speicherlesen behandelt (der einzige Unterschied, der von dem Schnittstellen-Chip 21 gesehen wird, besteht darin, wie jeder spezifische Befehl zum Systembus 11 abgebildet wird: (1) ein Speicherraum-Befehlsstrom-Lese- Hexawort; (2) ein Speicherraum-Datenstrom-Lese-Hexawort (Besitztum); und (3) ein Speicherraum-Datenstrom-Lese-Hexawort (keine Verriegelung oder Besitztum). Wenn irgendeiner dieser Speicherlesebefehle auf dem Bus 20 auftritt und wenn die Befehls/Adressen-Parität gut ist, ordnet der Schnittsteilen-Chip 21 die Informationen in einem Halteregister an.
- Für Lese-Nichttreffer- und Auffüll-Operationen geht die Anfrage dann, wenn ein Lesen einen Nichttreffer in der CPU der CPU 10 erzielt, über den Bus 20 zum Schnittstellen-Chip 21. Wenn die Speicherschnittstelle die Daten zurückbringt, bringt die Cache-Steuereinheit 26 der CPU 10 die Auffüllung in die Eingangs- Warteschlange 61. Da die Blockgröße 32 Bytes ist und der Bus 20 8 Bytes breit ist, resultiert eine Hexawort-Lesetransaktion auf dem Bus 20 aus der Leseanfrage. Wenn Auffülldaten zurückkehren, verfolgt die Cache-Steuereinheit 26, wieviele Quadworte empfangen worden sind, mit einem Zwei-Bit-Zähler im Auffüll-CAM 302. Wenn zwei Lese-Nichttreffer ausstehend sind, kann ein Auffüllen von den zwei Nichttreffern verschachtelt zurückkehren, so daß jeder Eintrag im Auffüll-CAM 302 einen separaten Zähler hat. Wenn das letzte Quadwort eines Lese-Nichttreffers ankommt, wird das neue Tag geschrieben, und das Gültigkeitsbit wird im Cache 15 gesetzt. Das Besitzbit wird gesetzt, wenn die Auffüllung für ein Besitztumslesen war.
- Für Schreib-Nichttreffer-Operationen wird dann, wenn der Tag-Speicher der CPU 10 im Cache 15 danach schaut, ob ein Schreiben durchgeführt ist und das Besitztumsbit nicht gesetzt ist, ein Besitztumslesen zum Schnittstellen-Chip 21 ausgegeben. Wenn das erste Quadwort durch die Eingangs-Warteschlange 61 zurückkehrt, werden die Schreibdaten mit den Auffülldaten vereinigt, ECC wird berechnet, und die neuen Daten werden zu den Cache-RAMs 15 geschrieben. Wenn das vierte Quadwort zurückkehrt, werden das Gültigkeitsbit und das Besitztumsbit im Tag- Speicher für den Cache 15 gesetzt, und das Schreiben wird von der Schreib- Warteschlange entfernt.
- Für die CPU-Speicher-Schreiboperationen werden die folgenden vier durch die CPU 10 erzeugten Befehle durch den Schnittstellen-Chip 21 als Speicherschreiben behandelt (der einzige Unterschied, der vom Schnittstellen-Chip 21 gesehen wird, besteht darin, wie jeder spezifische Befehl zum Systembus 11 abgebildet ist: (1) ein speicherraum-schreibmaskiertes Quadwort (keine Ablehnung oder eine Entriegelung); (2) ein Speicherraum-Schreibablehnungs-Quadwort; (3) ein Speicherraum-Schreibablehnungs-Hexawort; und (4) ein Speicherraum- Schlechtschreibdaten-Hexawort.)
- Für Freigaben aufgrund eines CPU-Lesens und -Schreibens wird dann, wenn irgendein Nachschauen eines Tags der CPU 10 für ein Lesen oder ein Schreiben in einem Nichttreffer resultiert, der Cache-Block freigegeben, um zuzulassen, daß die Auffülldaten ihren Platz einnehmen. Wenn der Block nicht gültig ist, wird keine Handlung für die Freigabe unternommen. Wenn der Block gültig ist, aber nicht in Besitz ist, wird der Block für ungültig erklärt. Wenn der Block gültig ist und in Besitz ist, wird der Block auf dem Bus 20 zum Schnittstellen-Chip 21 gesendet und zum Speicher 12 zurückgeschrieben und im Tag-Speicher für ungültig erklärt. Der Hexawort-Ablehnungs-Schreibbefehl wird zum Zurückschreiben der Daten verwendet. Wenn ein Rückschreiben nötig ist, wird es sofort durchgeführt, nachdem der Lese- oder Schreib-Nichttreffer auftritt. Der Nichttreffer und die Freigabe sind benachbarte Ereignisse und werden für irgendeine andere Transaktion nicht unterbrochen.
- Für Leseverriegelungs- und Schreibentriegelungsoperationen empfängt die Cache- Steuereinheit 26 der CPU 10 Leseverriegelungs/Schreibentriegelungspaare von der Speichermanagementeinheit 25; sie gibt jene Befehle niemals auf den Bus 20 aus, sondern verwendet statt dessen eher ein Besitztumslesen- Ablehnungsschreiben und hängt von einer Verwendung des Besitztumsbit im Speicher 12 zum Erreichen von Verriegelungen ab. Eine Leseverriegelung, die keinen Treffer für einen Besitz im Backup-Cache 15 erzeugt, resultiert in einem Besitztumslesen auf dem Bus 20, gleichgültig ob der Cache 15 im eingeschalteten oder ausgeschalteten Zustand ist. Wenn der Cache im eingeschalteten Zustand ist, wird die Schreibentriegelung in den Backup-Cache 15 geschrieben und wird nur zum Speicher 12 geschrieben, wenn es durch eine Kohärenztransaktion angefragt wird.
- Wenn der Cache 15 im Auszustand ist, wird die Schreibentriegelung ein Quadwort- Ablehnungsschreiben auf dem Bus 20.
- In bezug auf Ungültigkeitserklärungen überwacht der Schnittstellen-Chip 21 den gesamten Lese- und Schreibverkehr durch andere Knoten 28 zum Speicher 12, um eine Cachekohärenz zwischen dem Cache 14 und 15 und dem Hauptspeicher 12 beizubehalten und um zuzulassen, daß andere Knoten des Systembusses 11 auf Speicherstellen zugreifen, die im Besitz der CPU 10 sind. Der Schnittstellen-Chip 21 wird die Adressen dieser Referenzen über den Bus 20 zur Cache-Steuereinheit 26 der CPU 10 weiterleiten. Die Cache-Steuereinheit 26 wird die Adresse im Tag- Speicher des Caches 15 nachschauen und bestimmen, ob der entsprechende Cache-Unterblock für ungültig erklärt oder zurückgeschrieben werden muß. Es gibt keinen Filtermechanismus für Ungültigkeitserklärungen, was bedeutet, daß der Bus 20 für jede potentielle Ungültigkeitserklärung verwendet werden muß.
- Die CPU 10 bestätigt keine Cachekohärenzzyklen und erwartet statt dessen, daß der Schnittstellen-Chip 21 eine Bestätigung für seine eigenen Ungültigkeitserklärungszyklen aktiviert. Ein Cachekohärenzzyklus ist ein Lesen oder ein Schreiben, das nicht durch die CPU 10 getrieben wird. Wenn der Schnittstellen-Chip 21 eine Speicherreferenz durch einen anderen Knoten 28 auf dem Systembus 11 erfaßt, ordnet er die Adresse in der Antwort-Warteschlange 346 an. Diese Adresse wird auf den Bus 20 getrieben und fragt implizit die Cache-Steuereinheit 26, ein Cache- Nachschauen durchzuführen.
- Die Ungültigkeitserklärungs-Warteschlange 355 ist bei dem Beispiel zwölf Einträge tief. Der Schnittstellen-Chip 21 verwendet die Unterdrückungsleitung des Systembusses 11 zum Unterdrücken von Transaktionen des Busses 11, um die Antwort- Warteschlange 355 vor einem Überlaufen zu bewahren. Wenn (beispielsweise) zehn oder mehr Einträge in der Antwort-Warteschlange 355 gültig sind, aktiviert der Schnittstellen-Chip 21 die Unterdrückungsleitung zum Systembus 11. Bis zu zwei weiteren Schreibausführungen des Busses 11 oder drei Leseausführungen des Busses 11 können auftreten, wenn der Schnittstellen-Chip 21 einmal das Unterdrückungssignal aktiviert. Die Unterdrückung der Befehle des Systembusses 11 läßt zu, daß der Schnittstellen-Chip 21 und die Cache-Steuereinheit 26 der CPU 10 Warteschlangeneinträge für zukünftige Ungültigkeitserklärungsadressen bei einer Ungültigkeitserklärungsverarbeitung fangen und öffnen. Wenn die Anzahl gültiger Einträge (beispielsweise) unter neun abfällt, deaktiviert der Schnittstellen-Chip 21 die Unterdrückungsleitung zum Systembus 11.
- Ein potentielles Problem existiert dann, wenn eine Ungültigkeitserklärungsadresse empfangen wird, die im selben Cache-Unterblock wie ein ausstehendes im Cache speicherbares Speicherlesen ist. Das Tag-Nachschauen der Cache-Steuereinheit 26 wird einen Cache-Nichttreffer erzeugen, da jener Unterblock noch nicht für gültig erklärt worden ist. Da die Anfrage des Systembusses 11, die diese Ungültigkeitserklärungsanfrage erzeugte, aufgetreten sein kann, nachdem der Befehlszyklus zum Systembus 11 weiterging, muß diese Ungültigkeitserklärung verarbeitet werden. Die Cache-Steuereinheit 26 der CPU 10 behält einen internen Zustand, der erzwingen wird, daß dieser Cache-Unterblock für ungültig erklärt oder zum Speicher zurückgeschrieben wird, wenn die Cache-Auffüllung einmal endet. Die Cache-Steuereinheit 26 wird weitere Ungültigkeitserklärungen normal verarbeiten, während sie darauf wartet, daß die Cache-Auffüllung endet.
- Frühere VAX-Systeme verwendeten einen nicht anhängigen Bus und hatten separate Ungültigkeitserklärungs- und Rückkehrdaten-Warteschlangen, die die Funktionen der Warteschlangen 355 und 356 durchführen. Diese früheren Warteschlangen hatten keine exakten Qualitäten bezüglich der "Reihenfolge einer Übertragung", sondern "markierten" die Ungültigkeiten eher wie sie in die geeignete Warteschlange kamen, so daß sie vor irgendeinem darauffolgenden Lesen verarbeitet wurden.
- Jedoch verwendet die CPU 10 anhängige Busse 11 und 20, und Ungültigkeiten wandern entlang demselben Pfad wie die Rückkehrdaten. Es ist nötig, eine strenge Reihenfolge der Übertragung beizubehalten, so daß Ungültigkeiten und Rückkehrdaten-Worte zur CPU 10 zur Verarbeitung in genau derselben Reihenfolge gesendet werden müssen, in der sie vom Systembus 11 in die Warteschlange 346 eintragen. Dieses Ziel könnte erreicht werden, indem man einfach eine vereinheitlichte Warteschlange hat, die groß genug ist, entweder Ungültigkeiten oder Rückkehrdaten-Worte zu behandeln, aber dies würde die Chipgröße für den Schnittstellen-Chip 21 zu sehr vergrößern. Insbesondere bedeutet eine vereinheitlichte Warteschlange in der Praxis, daß jeder Schlitz groß genug wäre, um die Rückkehrdaten unterzubringen, da jenes Wort das größere der zwei ist. In Wirklichkeit sind das Rückkehrdaten-Wort und seine zugehörigen Steuerbits mehr als zweimal so groß wie die Ungültigkeitsadresse und ihre Steuerbits. Der Ungültigkeitsteil der Warteschlange wird auch ungefähr die zweifache Größe des Rückkehrdatenteils haben. Somit wäre ungefähr 2/3 der Warteschlange nur halb ausgenutzt, oder 1/3 der Warteschlange wäre verschwendet.
- Zusätzlich gibt das Protokoll des Systembusses 11 den Auftrag, daß Rückkehrdaten Platz haben müssen, wenn sie schließlich vom Speicher 12 ausgegeben werden. Wenn die Warteschlange vereinheitlicht ist, könnten Ungültigkeiten Platz einnehmen, der für die Rückkehrdaten benötigt wird. Unter der Annahme, daß ein Hexawort von Rückkehrdaten zu irgendeiner bestimmten Zeit erwartet wird (da die Hauptquelle von Rückkehrdaten ein Hexawort-Besitztumslesen sein wird), muß garantiert werden, daß vier Warteschlangenschlitze frei sind. Das Busprotokoll verwendet den Busunterdrückungsmechanismus, wie er zuvor diskutiert ist, um neue Ungültigkeiten zu verhindern während zugelassen ist, daß Rückkehrdaten ausgegeben werden. Aufgrund der innewohnenden Verzögerung beim Entscheiden, wann das Unterdrückungssignal aktiviert werden muß und einer weiteren Verzögerung bei seiner Erkennung in der Zuteilungseinheit 325, muß es drei oder vier zusätzliche Ungültigkeitsschlitze geben, um Ungültigkeiten während dieser Unterdrückungs-Totzone unterzubringen. Wenn wir wünschen, vier Schlitze für reale Ungültigkeiten zuzulassen, muß der Ungültigkeitsteil der Warteschlange eine Länge von sieben oder acht Schlitzen haben. Weniger Schlitze würde eine häufige Unterdrückung des Systembusses 11 bedeuten. Dies bedeutet, daß so viele wie zwölf Schlitze für die kombinierte Daten/Ungültigkeits-Warteschlange benötigt werden würden, wobei jeder Schlitz groß genug sein muß, um das Datenwort und seine zugehörigen Steuerbits unterzubringen. Wir könnten weniger Schlitze haben und früher unterdrücken, oder mehr Schlitze und die Warteschlange sogar größer machen. Auf jeden Fall wächst die Warteschlange bei unserem gegebenen Ziel zweimal so schnell, wie sie es muß. Wenn wir wünschen, mehr als ein ausstehendes Lesen zuzulassen, muß die Warteschlange 15 oder 16 Schlitze groß sein, da ein Ansatz eines äußerst starken Zwangs nötig ist.
- Gemäß diesem Merkmal des Erfindungsgedankens sind die Ungültigkeits- und Lesedaten-Warteschlangen in separate Einheiten 355 und 356 aufgeteilt, wobei jede (bezüglich der Tiefe und der Länge) nur so groß ist, wie es für ihre Aufgabe nötig ist. Das Problem besteht natürlich darin, wie eine strenge Reihenfolge einer Übertragung garantiert werden kann. Dies muß unter Verwendung einer hardwaremäßig verbundenen Liste zwischen den zwei Warteschlangen durchgeführt werden, die bei diesem Beispiel durch die nächsten Zeigerfelder 361 und den Anfangszeiger 364 implementiert ist. Jeder Schlitzeintrag hat einen "nächsten" Zeiger 361, der die Entladelogik instruiert, wo sie die nächste Dateneinheit (entweder Ungültigkeits- oder Lesedaten) suchen soll.
- Dieselbe Funktion kann unter Verwendung eines universellen Zeigers für jeden Schlitz durchgeführt werden, oder durch ledigliches Haben eines Flags, das "gehe jetzt zur anderen Warteschlange, bis zurückgeschaltet wird" sagt. Da die Ungültigkeits-Warteschlange 335 und die Lesedaten-Warteschlange 356 jeweils vollständig in sich selbst zirkular sind, wird eine strenge Reihenfolge innerhalb der gesamten Antwort-Warteschlange 346 bewahrt.
- Der Ansatz der Fig. 17 und 18 hat mehrere Vorteile gegenüber der Verwendung einer einzigen Warteschlange, ohne die Komplexität des Aufbaus stark zu erhöhen. Die Vorteile tragen alle dazu bei, die nötige Leistungsfähigkeit zur Verfügung zu stellen, während die Chipgröße reduziert wird. Die spezifischen Vorteile sind folgende: (1) Dieselbe Leistungsfähigkeit, die mit einer großen vereinheitlichten Warteschlange erhalten wird, kann mit weit weniger Raum unter Verwendung des Verfahrens einer aufgeteilten Warteschlange realisiert werden; (2) Jede Warteschlange kann für einen spezifischen Typ von Daten mit einer Kennzeichnung markiert werden, und es kann kein Hinüberkriechen von einem Datentyp in den anderen geben. Als solches können die zwei Typen von Warteschlangen (Ungültigkeit und Rückkehrdaten) auf ihre optimale Größe eingestellt werden. Beispielsweise könnte die Ungültigkeits-Warteschlange sieben (kleine) Schlitze haben, während die Lesedaten-Warteschlange fünf oder sechs (große) Schlitze haben könnte. Dies würde eine sanfte Lesebefehlsüberlagerung zur Verfügung stellen, während zugelassen ist, daß Ungültigkeiten verarbeitet werden, ohne den Systembus 11 ungebührend zu unterdrücken; (3) Die Lesedaten-Warteschlange 356 kann vergrößert werden, um zwei ausstehende Leseausführungen unterzubringen, ohne sich um die Größe der Ungültigkeits-Warteschlange zu sorgen, welche dieselbe Größe beibehalten kann, und zwar basierend auf ihren eigenen Notwendigkeiten. TABELLE A - CPU-Busbefehls-Codierungen und -Definitionen TABELLE B - Backup-Cache-Verhalten während ETM
- * Außer jener Cachekohärenztransaktion aufgrund eines O-Lesens oder Schreibens resultiert dies immer in einer Ungültigkeit zum P-Cache, um eine P- Cachekohärenz beizubehalten, gleichgültig, ob es einen P-Cache-Treffer gibt oder nicht, weil der P-Cache nicht länger eine Untergruppe ist. TABELLE C - Backup-Cache-Zustand ändert sich während ETM
Claims (12)
1. Verfahren zum Adressieren einer Vielzahl von Prozessorregistern (12, 13,
41)
in einem Computersystem mit einer Prozessorvorrichtung (10), wobei die
Prozessorvorrichtung (10) in Verbindung mit der Vielzahl von
Prozessorregistern (12, 13, 41) steht, wobei die Vielzahl von Prozessorregistern (12, 13,
41) innerhalb der Prozessorvorrichtung (10) interne Prozessorregister (41)
enthält und außerhalb der Prozessorvorrichtung (10) auch externe
Prozessorregister (12, 13) enthält, wobei das Verfahren folgende Schritte aufweist:
a. Erzeugen einer kurzen Adresse innerhalb der
Prozessorvorrichtung (10), welche Adresse einen Bereich von Adressen einschließlich von
Adressen aller der Vielzahl von Prozessorregistern (12, 13, 41) definiert,
wobei die kurze Adresse eine Anzahl von Bits enthält, wobei die externen
Prozessorregister (12, 13) außerhalb der Prozessorvorrichtung (10) in einen
gegebenen Adressenraum des Computersystems abgebildet werden, wobei der
gegebene Adressenraum ein Hauptspeicherraum des Computersystems ist;
b. Zugreifen auf eines der internen Prozessorregister (41)
innerhalb der Prozessorvorrichtung (10) unter Verwendung der kurzen Adresse,
wenn die kurze Adresse ein Prozessorregister innerhalb der
Prozessorvorrichtung (10) identifiziert; und
c. Zugreifen auf eines der externen Prozessorregister (12, 13)
außerhalb der Prozessorvorrichtung (10) unter Verwendung einer externen
Adresse, die länger als die kurze Adresse ist und aus der kurzen Adresse
ohne Übersetzung plus wenigstens einem führenden Adressenbit besteht, wenn
die kurze Adresse ein externes Prozessorregister (12, 13) außerhalb der
Prozessorvorrichtung (10) identifiziert, wobei die externe Adresse innerhalb des
gegebenen Adressenraums ist.
2. Verfahren nach Anspruch 1, wobei die kurze Adresse nicht breiter als ein
Byte ist.
3. Verfahren nach Anspruch 2, wobei das wenigstens eine führende Adressenbit
eine Vielzahl von Bits ist, und wobei eine Adresse für das externe
Prozessor
register (12, 13) außerhalb der Prozessorvorrichtung (10) eine Adresse von
wenigstens vier Bytes ist.
4. Verfahren nach Anspruch 1, das den Schritt zum Erzeugen der kurzen
Adressen durch einen in der Prozessorvorrichtung (10) gespeicherten Mikrocode
enthält.
5. Verfahren nach Anspruch 1, wobei die Prozessorvorrichtung (10) eine
integrierte Einchip-Schaltkreisvorrichtung ist.
6. Verfahren nach Anspruch 1, wobei das wenigstens eine führende Adressenbit
vor einem Anlegen einer Adresse eines externen Prozessorregisters (12, 13)
außerhalb der Prozessorvorrichtung (10) an einen externen Bus (11) zur
kurzen Adresse hinzufügt wird.
7. Computersystem, das folgendes aufweist:
a. eine Ausführungseinheit (23) in einer Prozessorvorrichtung
(10) zum Ausführen von Befehlen;
b. einen Speicher (12), der extern von der Prozessorvorrichtung
(10) ist, durch welche auf ihn unter Verwendung von Adressen mit gegebener
Länge zugegriffen wird, welche einen Speicherraum definieren;
c. eine Vielzahl von Prozessorregistern (12, 13, 41) im
Computersystem, und wobei die Prozessorvorrichtung (10) eine Einrichtung zum
Zugreifen auf die Prozessorregister (12, 13, 41) hat, wobei die Einrichtung zum
Zugreifen folgendes enthält:
i. eine Einrichtung zum Erzeugen einer kurzen Adresse
innerhalb der Ausführungseinheit (23), welche Adresse einen Bereich von
Adressen einschließlich von Adressen aller Prozessorregister (12, 13, 41)
definiert, wobei die kurze Adresse eine Anzahl von Bits hat und kürzer als die
gegebene Länge ist,
ii. ein internes Prozessorregister (41) innerhalb der
Prozessorvorrichtung (10), auf das unter Verwendung der kurzen Adresse
zugegriffen wird, wenn die kurze Adresse ein internes Prozessorregister (41)
innerhalb der Prozessorvorrichtung (10) identifiziert;
iii. ein externes Prozessorregister (12, 13) außerhalb der
Prozessorvorrichtung (10), auf das unter Verwendung der kurzen Adresse
ohne Übersetzung plus wenigstens einem führenden Adressenbit zugegriffen
wird, um eine Adresse der gegebenen Länge zu erzeugen, wenn die kurze
Adresse ein externes Prozessorregister (12, 13) außerhalb der
Prozessorvorrichtung (10) identifiziert, so daß das externe Prozessorregister (12, 13)
außerhalb der Prozessorvorrichtung (10) im Speicherraum des
Computersystems abgebildet wird.
8. System nach Anspruch 7, das eine Einrichtung zum Erzeugen der kurzen
Adresse durch einen in der Prozessorvorrichtung (10) gespeicherten
Mikrocode enthält.
9. Computersystem nach Anspruch 7, wobei die Prozessorvorrichtung (10) eine
integrierte Einchip-Schaltkreisvorrichtung ist, die die Ausführungseinheit (23)
und einen Mikro-Steuerungs-ROM (43) zum Steuern der Ausführungseinheit
(23) enthält.
10. Computersystem nach Anspruch 7, wobei die kurze Adresse eine Acht-Bit-
Registeradresse ist, und die gegebene Länge, die den Speicherraum
definiert, eine 32-Bit-Adressenlänge ist.
11. Computersystem nach Anspruch 10, das weiterhin einen Adressenbus (11)
mit einer Breite von 32 Bit aufweist, der den Speicher (12) mit der
Prozessorvorrichtung (10) verbindet, um zuzulassen, daß die Prozessorvorrichturig (10)
den Speicher (12) durch Verwenden einer 32-Bit-Adresse adressiert.
12. Computersystem nach Anspruch 11, wobei der Mikro-Steuerungs-ROM (43)
acht Ausgangsbits zum Spezifizieren einer Acht-Bit-Registeradresse hat, um
die zur Prozessorvorrichtung (10) internen (41) und externen (12, 13)
Prozessorregister zu adressieren.
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US54799590A | 1990-06-29 | 1990-06-29 |
Publications (2)
Publication Number | Publication Date |
---|---|
DE69130495D1 DE69130495D1 (de) | 1998-12-24 |
DE69130495T2 true DE69130495T2 (de) | 1999-06-24 |
Family
ID=24186998
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
DE69130495T Expired - Lifetime DE69130495T2 (de) | 1990-06-29 | 1991-06-27 | Umwandlung der Befehle von internen Prozessorregistern in I/O-Adressraum |
Country Status (5)
Country | Link |
---|---|
US (1) | US5481689A (de) |
EP (1) | EP0466550B1 (de) |
JP (1) | JP2962876B2 (de) |
CA (1) | CA2045798A1 (de) |
DE (1) | DE69130495T2 (de) |
Families Citing this family (56)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5627987A (en) * | 1991-11-29 | 1997-05-06 | Kabushiki Kaisha Toshiba | Memory management and protection system for virtual memory in computer system |
US6330665B1 (en) | 1992-06-30 | 2001-12-11 | Discovision Associates | Video parser |
DE69229338T2 (de) | 1992-06-30 | 1999-12-16 | Discovision Associates, Irvine | Datenpipelinesystem |
US6079009A (en) | 1992-06-30 | 2000-06-20 | Discovision Associates | Coding standard token in a system compromising a plurality of pipeline stages |
US6034674A (en) * | 1992-06-30 | 2000-03-07 | Discovision Associates | Buffer manager |
US6435737B1 (en) | 1992-06-30 | 2002-08-20 | Discovision Associates | Data pipeline system and data encoding method |
US6047112A (en) | 1992-06-30 | 2000-04-04 | Discovision Associates | Technique for initiating processing of a data stream of encoded video information |
US7095783B1 (en) | 1992-06-30 | 2006-08-22 | Discovision Associates | Multistandard video decoder and decompression system for processing encoded bit streams including start codes and methods relating thereto |
US5809270A (en) | 1992-06-30 | 1998-09-15 | Discovision Associates | Inverse quantizer |
US5768561A (en) | 1992-06-30 | 1998-06-16 | Discovision Associates | Tokens-based adaptive video processing arrangement |
US5784631A (en) | 1992-06-30 | 1998-07-21 | Discovision Associates | Huffman decoder |
US6067417A (en) | 1992-06-30 | 2000-05-23 | Discovision Associates | Picture start token |
US6112017A (en) | 1992-06-30 | 2000-08-29 | Discovision Associates | Pipeline processing machine having a plurality of reconfigurable processing stages interconnected by a two-wire interface bus |
US5805914A (en) | 1993-06-24 | 1998-09-08 | Discovision Associates | Data pipeline system and data encoding method |
US5699544A (en) | 1993-06-24 | 1997-12-16 | Discovision Associates | Method and apparatus for using a fixed width word for addressing variable width data |
US5861894A (en) | 1993-06-24 | 1999-01-19 | Discovision Associates | Buffer manager |
US6216127B1 (en) * | 1994-02-22 | 2001-04-10 | Oracle Corporation | Method and apparatus for processing electronic mail in parallel |
CA2145361C (en) | 1994-03-24 | 1999-09-07 | Martin William Sotheran | Buffer manager |
CA2145379C (en) | 1994-03-24 | 1999-06-08 | William P. Robbins | Method and apparatus for addressing memory |
US5984512A (en) | 1994-07-29 | 1999-11-16 | Discovision Associates | Method for storing video information |
US5706483A (en) * | 1994-12-13 | 1998-01-06 | Microsoft Corporation | Run-time code compiler for data block transfer |
WO1996037854A2 (en) * | 1995-05-26 | 1996-11-28 | National Semiconductor Corporation | Integrated circuit with multiple functions sharing multiple internal signal buses according to distributed bus access and control arbitration |
US6119213A (en) * | 1995-06-07 | 2000-09-12 | Discovision Associates | Method for addressing data having variable data width using a fixed number of bits for address and width defining fields |
US5745728A (en) * | 1995-12-13 | 1998-04-28 | International Business Machines Corporation | Process or renders repeat operation instructions non-cacheable |
US6212601B1 (en) * | 1996-08-30 | 2001-04-03 | Texas Instruments Incorporated | Microprocessor system with block move circuit disposed between cache circuits |
US5826074A (en) * | 1996-11-22 | 1998-10-20 | S3 Incorporated | Extenstion of 32-bit architecture for 64-bit addressing with shared super-page register |
US6175906B1 (en) * | 1996-12-06 | 2001-01-16 | Advanced Micro Devices, Inc. | Mechanism for fast revalidation of virtual tags |
US6125393A (en) * | 1997-03-28 | 2000-09-26 | International Business Machines Corporation | System of compressing the tail of a sparse log stream of a multisystem environment |
US5999935A (en) * | 1997-03-28 | 1999-12-07 | International Business Machines Corporation | Tail compression of a sparse log stream of a multisystem environment |
US5956735A (en) * | 1997-03-28 | 1999-09-21 | International Business Machines Corporation | System of compressing the tail of a sparse log stream of a computer system |
US5920875A (en) * | 1997-03-28 | 1999-07-06 | International Business Machines Corporation | Tail compression of a sparse log stream of a computer system |
US5881274A (en) * | 1997-07-25 | 1999-03-09 | International Business Machines Corporation | Method and apparatus for performing add and rotate as a single instruction within a processor |
US6101420A (en) * | 1997-10-24 | 2000-08-08 | Compaq Computer Corporation | Method and apparatus for disambiguating change-to-dirty commands in a switch based multi-processing system with coarse directories |
US6112270A (en) * | 1997-10-31 | 2000-08-29 | International Business Machines Corporation | Method and system for high speed transferring of strictly ordered bus operations by reissuing bus operations in a multiprocessor system |
US6145038A (en) * | 1997-10-31 | 2000-11-07 | International Business Machines Corporation | Method and system for early slave forwarding of strictly ordered bus operations |
US6157986A (en) * | 1997-12-16 | 2000-12-05 | Advanced Micro Devices, Inc. | Fast linear tag validation unit for use in microprocessor |
FR2775089B1 (fr) * | 1998-02-18 | 2000-04-14 | Sgs Thomson Microelectronics | Circuit integre comportant une banque de registres partiellement utilisee |
US6199118B1 (en) * | 1998-08-18 | 2001-03-06 | Compaq Computer Corporation | System and method for aligning an initial cache line of data read from an input/output device by a central processing unit |
US6360308B1 (en) | 1998-09-30 | 2002-03-19 | Lsi Logic Corporation | Buffer controller |
TW416032B (en) * | 1999-03-05 | 2000-12-21 | Via Tech Inc | Memory pages management device and method for tracking memory access |
US6230256B1 (en) * | 1999-03-31 | 2001-05-08 | Bull Hn Information Systems Inc. | Data processing system having a bus wider than processor instruction width |
US6463518B1 (en) | 2000-06-19 | 2002-10-08 | Philips Electronics No. America Corp. | Generation of memory addresses for accessing a memory utilizing scheme registers |
US8239271B2 (en) * | 2001-09-04 | 2012-08-07 | Ncr Corporation | Methods and apparatus for managing sequencing of data received from devices in a retail point of sale system |
JP4044756B2 (ja) * | 2001-12-11 | 2008-02-06 | 松下電器産業株式会社 | プログラム変換装置、プログラム変換方法、及び当該プログラム変換装置を実現するプログラム |
US7565509B2 (en) | 2002-04-17 | 2009-07-21 | Microsoft Corporation | Using limits on address translation to control access to an addressable entity |
TWI289751B (en) * | 2003-02-27 | 2007-11-11 | Mediatek Inc | Method for increasing memory in a processor |
US7240179B1 (en) * | 2004-12-13 | 2007-07-03 | Nvidia Corporation | System, apparatus and method for reclaiming memory holes in memory composed of arbitrarily-sized memory devices |
KR100621631B1 (ko) * | 2005-01-11 | 2006-09-13 | 삼성전자주식회사 | 반도체 디스크 제어 장치 |
US7797685B2 (en) * | 2005-05-13 | 2010-09-14 | Texas Instruments Incorporated | Method for generating timing data packet |
US7526638B1 (en) | 2008-03-16 | 2009-04-28 | International Business Machines Corporation | Hardware alteration of instructions in a microcode routine |
KR100998929B1 (ko) * | 2009-01-23 | 2010-12-09 | 한국과학기술원 | 캐쉬 컨트롤러 장치, 캐쉬 컨트롤러 장치를 이용한 인터페이스 방법 및 프로그래밍 방법 |
JP2011007888A (ja) * | 2009-06-24 | 2011-01-13 | Kawai Musical Instr Mfg Co Ltd | 楽音生成装置のメモリ制御装置 |
JP5600517B2 (ja) | 2010-08-18 | 2014-10-01 | キヤノン株式会社 | 情報処理装置、情報処理方法、およびプログラム |
JP6011194B2 (ja) * | 2012-09-21 | 2016-10-19 | 富士通株式会社 | 演算処理装置及び演算処理装置の制御方法 |
US11106466B2 (en) * | 2018-06-18 | 2021-08-31 | International Business Machines Corporation | Decoupling of conditional branches |
CN109818603B (zh) * | 2018-12-14 | 2023-04-28 | 深圳市紫光同创电子有限公司 | 一种位宽转换电路的复用方法及位宽转换电路 |
Family Cites Families (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4004280A (en) * | 1973-06-11 | 1977-01-18 | Texas Instruments Incorporated | Calculator data storage system |
US4041462A (en) * | 1976-04-30 | 1977-08-09 | International Business Machines Corporation | Data processing system featuring subroutine linkage operations using hardware controlled stacks |
US4217638A (en) * | 1977-05-19 | 1980-08-12 | Tokyo Shibaura Electric Co., Ltd. | Data-processing apparatus and method |
US4236206A (en) * | 1978-10-25 | 1980-11-25 | Digital Equipment Corporation | Central processor unit for executing instructions of variable length |
US4403287A (en) * | 1981-08-24 | 1983-09-06 | Bell Telephone Laboratories, Incorporated | Microprocessor architecture having internal access means |
US4648035A (en) * | 1982-12-06 | 1987-03-03 | Digital Equipment Corporation | Address conversion unit for multiprocessor system |
US4649471A (en) * | 1983-03-01 | 1987-03-10 | Thomson Components-Mostek Corporation | Address-controlled automatic bus arbitration and address modification |
US4713748A (en) * | 1985-02-12 | 1987-12-15 | Texas Instruments Incorporated | Microprocessor with block move instruction |
CA1250667A (en) * | 1985-04-15 | 1989-02-28 | Larry D. Larsen | Branch control in a three phase pipelined signal processor |
US4868740A (en) * | 1986-06-04 | 1989-09-19 | Hitachi, Ltd. | System for processing data with multiple virtual address and data word lengths |
US5109494A (en) * | 1987-12-31 | 1992-04-28 | Texas Instruments Incorporated | Passive processor communications interface |
-
1991
- 1991-06-27 EP EP91401765A patent/EP0466550B1/de not_active Expired - Lifetime
- 1991-06-27 CA CA002045798A patent/CA2045798A1/en not_active Abandoned
- 1991-06-27 DE DE69130495T patent/DE69130495T2/de not_active Expired - Lifetime
- 1991-06-28 JP JP3159112A patent/JP2962876B2/ja not_active Expired - Fee Related
-
1993
- 1993-08-13 US US08/106,317 patent/US5481689A/en not_active Expired - Lifetime
Also Published As
Publication number | Publication date |
---|---|
EP0466550A2 (de) | 1992-01-15 |
US5481689A (en) | 1996-01-02 |
JP2962876B2 (ja) | 1999-10-12 |
EP0466550B1 (de) | 1998-11-18 |
EP0466550A3 (en) | 1993-12-08 |
CA2045798A1 (en) | 1991-12-30 |
DE69130495D1 (de) | 1998-12-24 |
JPH06119243A (ja) | 1994-04-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
DE69130495T2 (de) | Umwandlung der Befehle von internen Prozessorregistern in I/O-Adressraum | |
DE69111707T2 (de) | Fehlerübergangsmodus für eine Mehrrechneranordnung. | |
DE69130138T2 (de) | Sprungvorhersageeinheit für hochleistungsfähigen Prozessor | |
DE69130519T2 (de) | Hochleistungsfähiger Multiprozessor mit Gleitkommaeinheit und Verfahren zu seinem Betrieb | |
DE69127936T2 (de) | Busprotokoll für Prozessor mit write-back cache | |
DE69127726T2 (de) | Kombinierte Warteschlange für Entwertungen und Rücklaufdaten in einem Multiprozessorsystem | |
DE69429061T2 (de) | Superskalarmikroprozessoren | |
DE68922326T2 (de) | Speicherwarteschlange für eine festgekoppelte Mehrprozessorenkonfiguration mit einem zweistufigen Cache-Pufferspeicher. | |
DE69031433T2 (de) | Speicherzugriffsausnahmebehandlung bei vorausgelesenen Befehlswörtern in dem Befehlsfliessband eines Rechners mit virtuellem Speicher | |
US6240508B1 (en) | Decode and execution synchronized pipeline processing using decode generated memory read queue with stop entry to allow execution generated memory read | |
US5471591A (en) | Combined write-operand queue and read-after-write dependency scoreboard | |
DE69130588T2 (de) | Cache-Speicher von partiell decodierten Befehlen und Verfahren hierfür | |
DE68923490T2 (de) | Prüfpunkt-Wiederholungssystem. | |
US5542058A (en) | Pipelined computer with operand context queue to simplify context-dependent execution flow | |
DE68917325T2 (de) | Verfahren und Vorrichtung zum Schreiben gegenseitiger verriegelter Variablen in einen integrierten Cachespeicher. | |
DE69233493T2 (de) | RISC-Prozessor mit erweiterbarer Architektur | |
DE68926059T2 (de) | Organisation einer integrierten Cache-Einheit zur flexiblen Verwendung beim Entwurf von Cache-Systemen | |
DE69131637T2 (de) | Registerhaltige Datenbearbeitung in einem Prozessor mit reduziertem Befehlssatz | |
DE69130379T2 (de) | Datenvorausladebefehl in einem Prozessor mit reduziertem Befehlssatz | |
DE69612991T2 (de) | System zur bearbeitung von selbstmodifizierendem kode | |
DE3801361A1 (de) | Verfahren und einrichtung zum detektieren und fuer die spezialbehandlung von memory-mapped eingabe/ausgabereferenzen in einem pipelinemikroprozessor | |
DE10296989T5 (de) | Multi-Thread-Prozessor mit der Fähigkeit einer impliziten Multi-Thread-Ausführung eines Ein-Thread-Programms | |
DE68926466T2 (de) | Integrierte Cachespeichereinheit | |
EP0463967A2 (de) | Satzauswahl für Prozessorcache | |
EP0468837A2 (de) | Maskierverarbeitungseinheit für hochleistungsfähigen Prozessor |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
8364 | No opposition during term of opposition | ||
8328 | Change in the person/name/address of the agent |
Free format text: GRUENECKER, KINKELDEY, STOCKMAIR & SCHWANHAEUSSER, 80538 MUENCHEN |