DE69127726T2 - Kombinierte Warteschlange für Entwertungen und Rücklaufdaten in einem Multiprozessorsystem - Google Patents

Kombinierte Warteschlange für Entwertungen und Rücklaufdaten in einem Multiprozessorsystem

Info

Publication number
DE69127726T2
DE69127726T2 DE69127726T DE69127726T DE69127726T2 DE 69127726 T2 DE69127726 T2 DE 69127726T2 DE 69127726 T DE69127726 T DE 69127726T DE 69127726 T DE69127726 T DE 69127726T DE 69127726 T2 DE69127726 T2 DE 69127726T2
Authority
DE
Germany
Prior art keywords
data
bus
instruction
unit
cache
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
Application number
DE69127726T
Other languages
English (en)
Other versions
DE69127726D1 (de
Inventor
Gregg Bouchard
Lawrence Chisvin
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Digital Equipment Corp
Original Assignee
Digital Equipment Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Digital Equipment Corp filed Critical Digital Equipment Corp
Publication of DE69127726D1 publication Critical patent/DE69127726D1/de
Application granted granted Critical
Publication of DE69127726T2 publication Critical patent/DE69127726T2/de
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0815Cache consistency protocols
    • G06F12/0831Cache consistency protocols using a bus scheme, e.g. with bus monitoring or watching means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8007Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors single instruction multiple data [SIMD] multiprocessors
    • G06F15/8015One dimensional arrays, e.g. rings, linear arrays, buses
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/483Computations with numbers represented by a non-linear combination of denominational numbers, e.g. rational numbers, logarithmic number system or floating-point numbers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • G06F9/30014Arithmetic instructions with variable precision
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/30149Instruction analysis, e.g. decoding, instruction word fields of variable length instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • G06F9/30167Decoding the operand specifier, e.g. specifier format of immediate specifier, e.g. constants
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • G06F9/3826Bypassing or forwarding of data results, e.g. locally between pipeline stages or within a pipeline stage
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • G06F9/383Operand prefetching
    • G06F9/3832Value prediction for operands; operand history buffers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3838Dependency mechanisms, e.g. register scoreboarding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • G06F9/3844Speculative instruction execution using dynamic branch prediction, e.g. using branch history tables
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3861Recovery, e.g. branch miss-prediction, exception handling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3867Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3867Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
    • G06F9/3869Implementation aspects, e.g. pipeline latches; pipeline synchronisation and clocking
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3867Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
    • G06F9/3873Variable length pipelines, e.g. elastic pipeline
    • FMECHANICAL ENGINEERING; LIGHTING; HEATING; WEAPONS; BLASTING
    • F02COMBUSTION ENGINES; HOT-GAS OR COMBUSTION-PRODUCT ENGINE PLANTS
    • F02BINTERNAL-COMBUSTION PISTON ENGINES; COMBUSTION ENGINES IN GENERAL
    • F02B75/00Other engines
    • F02B75/02Engines characterised by their cycles, e.g. six-stroke
    • F02B2075/022Engines characterised by their cycles, e.g. six-stroke having less than six strokes per cycle
    • F02B2075/025Engines characterised by their cycles, e.g. six-stroke having less than six strokes per cycle two
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/499Denomination or exception handling, e.g. rounding or overflow
    • G06F7/49942Significance control
    • G06F7/49947Rounding

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computational Mathematics (AREA)
  • Computing Systems (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Nonlinear Science (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Advance Control (AREA)

Description

  • Diese Erfindung offenbart einen Gegenstand, der ferner in den folgenden gleichzeitig anhängigen europäischen Patentanmeldungen offenbart ist, die im Namen der Digital Equipment Corporation eingereicht worden sind:
  • Europäische Patentanmeldungsnummern:
  • EP-A-0463967, EP-A-0463965, EP-A-0463966, EP-A-0468837, EP-A-0463831, EP-A-0466550, EP-A-0465319, EP-A-0-465320.
  • Diese Erfindung bezieht sich auf Digitalcomputer und insbesondere auf verbesserte CPU-Vorrichtungen desjenigen Typs, der als integrierte Einzelchip-Schaltung konstruiert ist.
  • Ein großer Teil der bestehenden Softwarebasis, die eine große Investition beim Schreiben des Codes, der Datenbankstrukturen und des Personaltrainings darstellt, ist für einen komplexen Befehlssatz oder für CISC-Typ- Prozessoren ausgelegt. Diese Typen von Prozessoren sind dadurch gekennzeichnet, daß sie in ihrem Befehlssatz eine große Anzahl von Befehlen besitzen und häufig Speicherzu-Speicher-Befehle mit komplexen Speicherzugriffsmodi enthalten. Die Befehle besitzen üblicherweise eine veränderliche Länge, wobei einfache Befehle vielleicht nur ein Byte lang sind, jedoch die Länge bis zu Dutzenden von Bytes reicht. Der VAX =Befehlssatz ist ein primäres Beispiel für CISC und verwendet Befehle mit 1-2 Bytes Opcodes plus 0-6 Operandenspezifizierer, wobei jeder Operandenspezifizierer eine Länge von einem bis vielen Bytes aufweisen kann. Die Größe des Operandenspezifizierers hängt vom Adressierungsmodus, der Größe der Verschiebung (Byte, Wort oder Langwort) und dergleichen ab. Das erste Byte des Operandenspezifizierers beschreibt den Adressierungsmodus für diesen Operanden, während der Opcode die Anzahl von Operanden definiert: eins, zwei oder drei. Wenn der Opcode selbst decodiert wird, ist jedoch dem Prozessor die Gesamtlänge des Befehls noch unbekannt, da die Operandenspezifizierer noch nicht decodiert worden sind. Eine weitere Eigenschaft der Prozessoren des VAX-Typs ist die Verwendung von Byte- oder Byteketten- Speicherreferenzen, zusätzlich zu Vierwort- oder Langwort-Referenzen; d. h., eine Speicherreferenz kann eine veränderliche Länge von einem Byte bis zu mehreren Wörtern einschließlich nicht ausgerichteter Bytereferenzen aufweisen.
  • Die Vielfalt leistungsfähiger Befehle, Speicherzugriffsmodi und verfügbarer Datentypen in einem VAX-Typ der Architektur führt dazu, daß für jede Zeile des Codes mehr Arbeit erledigt wird (in Wirklichkeit erzeugen Compiler keinen Code, der dies voll ausnützt). Der Gewinn in der Kompaktheit des Quellendes wird jedoch auf Kosten der Ausführungszeit erreicht. Insbesondere seit das Pipelining der Befehlsausführung notwendig geworden ist, um das Leistungsniveau zu erreichen, das von den Systemen derzeit gefordert wird, haben die Daten- oder Zustandsabhängigkeiten aufeinanderfolgenden Befehle und die großen Unterschiede in der Speicherzugriffszeit gegenüber der Maschinenzykluszeit übermäßig viele Halte und Ausnahmen erzeugt, die die Ausführung verlangsamen.
  • Als die CPUs viel schneller als der Speicher waren, wie in den Dokumenten US-A-4322795 und EP-A-00336 offenbart ist, war es vorteilhaft, mehr Arbeit pro Befehl zu erledigen, da ansonsten die CPU ständig darauf warten würde, daß der Speicher Befehle liefert - dieser Faktor führte zu komplexeren Befehlen, die das einschlossen, was ansonsten in Form von Unterroutinen implementiert wurde. Als die CPU- und Speichergeschwindigkeiten ausgeglichener wurden, wurden die Vorteile komplexer Befehle geringer, unter der Annahme, daß das Speichersystem fähig ist, in jedem Zyklus einen Befehl und einige Daten zu liefern. Hierarchische Speichertechniken sowie schnellere Zugriffszyklen und größere Speicherzugriffsbandbreiten ermöglichten diese schnelleren Speichergeschwindigkeiten. Ein weiterer Faktor, der die Wahl zwischen komplexen und einfachen Befehlstypen beeinflußt hat, ist die Veränderung der relativen Kosten der Off-Chip-Verbindung gegenüber der on-Chip-Verbindung, die aus der VLSI- Konstruktion der CPUs resultiert. Der Aufbau auf Chips anstelle von Platinen hat die Ökonomie verändert - erstens ist es günstig, die Architektur einfach genug zu gestalten, so daß sie auf einem Chip Platz findet, und ferner ist mehr On-Chip-Speicher möglich (und erforderlich), um das Verlassen des Chips für Speicherreferenzen zu vermeiden. Ein weiterer Faktor beim Vergleich ist, daß das Hinzufügen komplexerer Befehle und Adressierungsmodi, wie in einer CISC-Lösung, dhe Stufen des Befehlsausführungsprozesses verkompliziert (und somit verlangsamt). Die komplexe Funktion kann bewirken, daß die Funktion schneller ausgeführt wird als eine äquivalente Sequenz einfacher Befehle, jedoch kann sie die Befehlszykluszeit verlängern, wodurch alle Befehle langsamer ausgeführt werden; somit muß eine hinzugefügte Funktion die Gesamtleistung ausreichend steigern, um die Verringerung der Befehlsausführungsrate auszugleichen.
  • Trotz der Leistungsfaktoren, die sich aus den theoretischen Vorteilen von CISC-Prozessoren ableiten, ergibt sich durch die bestehende Softwarebasis wie oben beschrieben ein Langzeitbedarf an diesen Prozessortypen, wobei selbstverständlich der Markt ein immer weiter ansteigendes Leistungsniveau erfordert. Geschäftsunternehmen haben viele Jahre an operationshintergrund, einschließlich Operatortraining sowie Kosten für den Code selbst, in Anwendungsprogramme und Datenstrukturen investiert, die CISC-Typ-Prozessoren verwenden, die in den letzten zehn oder fünfzehn Jahren am weitesten verbreitet waren. Die Unkosten und der Aufwand von Operationen zum Umschreiben des gesamten Codes und der Datenstrukturen, um sie an eine neue Prozessorarchitektur anzupassen, kann nicht gerechtfertigt werden, obwohl die Leistungsvorteile, die letztendlich erwartet werden, beträchtlich sind. Es ist daher das Ziel, eine höhere Leistung in einer CPU zu erreichen, die einen Befehlssatz des Typs ausführt, der Befehle mit veränderlicher Länge und veränderlichen Datenbreiten bei Speicherzugriffen verwendet.
  • Die typische VAX-Implementierung besitzt drei Hauptabschnitte, den I-Kasten oder die Befehlseinheit, die Befehle holt und decodiert, den E-Kasten oder die Ausführungseinheit, die die durch die Befehle definierten Operationen ausführt, sowie den M-Kasten oder die Speichermanagementeinheit, die den Speicher und die E/A- Funktionen handhabt. Ein Beispiel dieser VAX-Systeme ist gezeigt im US-Patent 4,875,160, erteilt am 17 Oktober 1989 an John F. Brown und die Digital Equipment Corporation. Diese Maschinen sind unter Verwendung einer Einzelchip-CPU-Vorrichtung konstruiert, die mit sehr hohen Raten getaktet wird und sowohl mikrocodiert als auch pipelinegesteuert ist.
  • Wenn die Pipeline gefüllt gehalten werden kann und in jedem Zyklus ein Befehl ausgegeben wird, kann ein Prozessor theoretisch einen Befehl pro Zyklus ausführen. In einer Maschine mit komplexen Befehlen gibt es mehrere Hindernisse, die diesem Ideal entgegenstehen. Erstens ist bei Befehlen mit variabler Größe die Länge des Befehls vielleicht bis mehrere Zyklen nach seiner Decodierung unbekannt. Die Anzahl der Opcode-Bytes kann sich verändern, die Anzahl der Operanden kann sich verändern, und die Anzahl der Bytes, die zum Spezifizieren eines Operanden verwendet werden, kann sich verändern. Die Befehle müssen der Reihe nach decodiert werden, statt eine Paralleldecodierung durchzuführen. Zweitens, Datenabhängigkeiten erzeugen Blasen in der Pipeline, da die von einem Befehl erzeugten Ergebnisse, die noch nicht verfügbar sind, von einem nachfolgenden Befehl benötigt werden, der zur Ausführung bereit ist. Drittens, die umfassende Veränderung der Befehlskomplexität macht es unmöglich, die Ausführung zu implementieren, ohne entweder die Pipeline für jeden Befehl zu verlängern (was das Datenabhängigkeitsproblem verschlechtert) oder die Eingabe anzuhalten (was Blasen erzeugt).
  • Trotz der Verwendung der derzeitigen Halbleiterverarbeitung und hoher Taktraten zum Erzielen der aggressivsten Leistung auf Vorrichttingsebene beeinträchtigen die inhärenten Eigenschaften der Architektur somit die Gesamtleistung, so daß bei dem Versuch, die geforderte Systemleistung zu erreichen, eine Anzahl von Merkmalen nicht vorteilhaft genutz; werden kann.
  • Gemäß einer Ausführungsform der Erfindung, die mehrere unterschiedliche Merkmale aufweist, wird eine pipelinegesteuerte CPU geschaffen, die Befehle mit variabler Länge ausführen kann und unter Verwendung unterschiedlicher Datenbreiten auf den Speicher zugreifen kann. Die Leistung wird durch mehrere Merkmale verbessert.
  • Es wird ein Makrobefehls-Pipelining verwendet (anstelle eines Mikrobefehls-Pipelining), so daß sich zu einem gegebenen Zeitpunkt mehrere Makrobefehle in verschiedenen Stufen der Pipeline befinden können. Zwischen den Einheiten der CPU werden Warteschlangen eingerichtet, so daß sich eine gewisse Flexibilität bei den Befehlsausführungszeiten ergibt; die Ausführung der Stufen eines Befehls muß nicht immer auf die Beendigung dieser Stufen eines vorangehenden Befehls warten. Statt dessen können die von einer Stufe erzeugten Informationen in eine Warteschlange gestellt werden, bis die nächste Stufe fertig ist.
  • Ein weiteres Merkmal ist die Verwendung einer breiten Bandbreite für Speicherzugriffe; das Holen von 64-Bit- Datenblöcken bei jedem Zyklus des Systembusses oder der Cache-Speicher bei schnelleren Zykluszeiten ergibt eine gesteigerte Leistung. Trotzdem sind immer noch Byte- und Byteketten-Typ-Speicherzugriffe verfügbar, so daß bestehende Software- und Datenstrukturen nicht hinfällig sind. Jedoch erhöhen die breiteren Datenpade und Speicherbandbreiten sowie die hierarchische Speicherorganisation die Wahrscheinlichkeit eines Cache- Treffers und reduzieren somit die Belastung, die durch die Byteoperationen dem Speicher auferlegt werden.
  • Die hierarchische Cache-Anordnung, die in der CPU des offenbarten Beispiels verwendet wird, sowie ein verbessertes Verfahren der Cache-Satz-Auswahl erhöhen die Wahrscheinlichkeit, daß ein beliebiger Speicherzugriff auf Daten zugreift, die sich im Cache statt im Speicher befinden. Genauer verwendet eine Satzauswahltechnik einen Nicht-Zuletzt-Benutzt-Auffüllalgorithmus, der verbessert worden ist, um ein Auffüllen auf einen Block im Cache zu richten, der das Ziel einer Ungültigkeit war, so daß die Datenblöcke im Cache verbleiben, die am wahrscheinlichsten verwendet werden, statt diese durch ein Auffüllen zu überschreiben.
  • Ein zusätzliches Merkmal ist die Verwendung eines Zurückschreibe-Cache für den letzten Teil des hierarchischen Speichers (anstelle des Durchschreibens, was mehr Speicherzugriffe erfordert) und das Zulassen, daß ein Zurückschreiben fortgesetzt wird, obwchl andere Zugriffe aufgrund voller Warteschlangen unterdrückt werden. Ein Merkmal ist somit die Fähigkeit zum Trennen von Zurückschreibeoperationen, so daß sie in einer Zurückschreibe-Cache-Umgebung fortgesetzt werden, während andere Typen von Datenzugriffen an der CPU-Bus- Schnittstelle verzögert werden.
  • Eine bestimmte Verbesserung wird erhalten durch ein Verzweigungsvorhersageverfahren, das in einer Ausführungsform in der CPU enthalten ist. Verzweigungen verschlechtern die Leistung in einem Pipelineprozessor hinsichtlich des Zyklus-Pro-Befehl-Aspekts, da immer dann, wenn ein Verzweigung wahrgenommen wird, die im voraus geholten Befehle in der Pipeline entfernt werden müssen und ein neuer Befehlsstrom eingeleitet wird. Durch Verwenden einer Verzweigungs-Historie-Tabelle, die die Historie der wahrgenommenen gegenüber der nicht wahrgenommenen Verzweigungs-Opcodes aufzeichnet, die zuletzt verwendet wurden, und durch Verwenden eines empirischen Algorithmus zur Vorhersage, welcher Weg beim nächsten Auftreten dieser Verzweigung eingeschlagen wird, auf der Grundlage der Historie-Tabelle, wird ein verbessertes Vorhersageergebnis erhalten. Somit wird die Leistung verbessert durch Verringern der Wahrscheinlichkeit, daß der Befehlsstrom umgeleitet werden muß.
  • Eine Gleitkomma-Prozessorfunktion ist in der Beispielausführungsform on-Chip integriert, statt sie off-Chip zu implementieren. Die Ausführungsgeschwindigkeit eines Gleitkommabefehls wird somit verbessert, da die Belastung aufgrund des Durchlaufens zweier Busschnittstellen und eines externen Busses beseitigt wird, wobei die Bandbreite des externen Busses zu diesem Zweck nicht verwendet wird. Außerdem wird die Anzahl von Zyklen der Verzögerung von dem Zeitpunkt, zu dem eine Operation zur On-Chip- Gleitkommaeinheit gesendet wird, bis zu dem Zeitpunkt, bevor das Ergebnis zurückgesendet wird, durch eine Umleitungstechnik reduziert. Es ist zu beachten, daß bei den am häufigsten verwendeten Funktionen die Rundungsoperation nur mit den niedrigwertigen Bits statt mit der gesamten Datenbreite durchgeführt werden muß, so daß ein versuchsweises Minirunden durchgeführt werden kann, um zu prüfen, ob das Ergebnis korrekt ist, wobei dann, wenn dies zutrifft, die letzte Stufe des Gleitkommaprozessors umgangen werden kann, so daß ein Latenzzyklus eingespart wird.
  • Eines der Ereignisse, die eine Verzögerung bei der Ausführung in einer CPU bewirken, ist das Auftreten eines Befehls wie z. B. einem CALL, bei dem der Zustand der CPU für einen Rücksprung gesichert werden muß. Insbesondere haben die CPUs des Standes der Technik des hier offenbarten Typs, wie im Patent 4.875.160 gezeigt, Mikrocode-Sequenzen verwendet, um alle erforderlichen Register des Registersatzes auf einen Stapel zu sichern. Um genau zu ermitteln, welche Register gesichert werden müssen, war es üblich, Mikrocoderoutinen zu verwenden, um jede Stelle einer Registermaske zu prüfen, was wenigstens einen Zyklus für jedes Register des Registersatzes erfordert. Anstelle dieser langwierigen Prozedur ist ein Merkmal der hier vorgestellten CPU die Einrichtung zum Ermitteln, welche Register gesichert werden müssen, in einer minimalen Anzahl von Zyklen, durch Untersuchen von Gruppen der Registermaskenbits zu einem Zeitpunkt. In den häufigsten Situationen müssen nur wenige Register gesichert werden, so daß ein Großteil der Registermaske Nullen enthält, und in sehr wenigen Zyklen abgetastet werden kann.
  • In dem Maße, in dem die Größe des Chips, der für eine Einzelchip-CPU-Vorrichtung verwendet wird, reduziert werden kann, können die Leistung (Geschwindigkeit), der Leistungsverbrauch, die Kasten und die Zuverlässigkeit günstig beeinflußt werden. Durch Reduzieren der Anzahl und der Länge der internen Busse und Signalpfade wird die Chipfläche minimiert. Eine der Techniken zum Erreichen dieses Ziels in der hier offenbarten CPU-Vorrichtung ist das Zugreifen auf interne Prozessorregister mit kurzen Adressen (ein Byte) anstelle von vollen physikalischen Adressen, die für Speicher- und E/A-Zugriffe verwendet werden. Es gibt mehrere interne Prozessorregister (Speicherung von Status, Steuersignalen und dergleichen außerhalb des Speichers), einige auf dem Chip und einige außerhalb des Chips. Die off-Chip-Prozessorregister sind vorzugsweise im Speicher abgebildet, wobei auf diese über dieselben Busse unter Verwendung derselben Steuersignale wie beim Speicher und bei E/A-Zugriffen zugegriffen wird, so daß kein anderer Satz von Steuersignalen implementiert werden muß. Da jedoch eine relativ kleine Anzahl von Prozessorregistern vorhanden ist, ist eine kleine Adresse angemessen, wobei eine vollständige Adresse auf dem Chip zu vermeiden ist, wo zusätzliche Steuersignale sehr viel weniger aufwendig sind als auf dem Systembus. Dementsprechend werden eine kurze Adresse und zusätzliche Steuerleitungen verwendet, um auf die Prozessorregister auf dem Chip zuzugreifen, wobei jedoch eine vollständige Adresse ohne zusätzliche Steuerleitungen verwendet wird, um auf externe Prozessorregister zuzugreifen. Somit wird eine Reduktion der Anzahl interner Leitungen erreicht, wobei jedoch die externen Zugriffe unter Verwendung der für Speicher- und E/A-Zugriffe verwendeten Busstruktur immer noch E/A-abgebildet sein können.
  • Wenn ein Zurückschreibe-Cache in einem hierarchischen Speichersystem verwendet wird, kann der Cache manchmal die einzige gültige Kopie von bestimmten Daten enthalten. Wenn im Cache ein Fehlgriff auftritt, wie durch einen nicht behebbaren Fehler demonstriert wird, der von den ECC-Schaltungen oder dergleichen detektiert wird, ist es erforderlich, daß die im Cache enthaltenen Daten für das System zur Verfügung stehen, da dies die einzige Kopie sein kann. Ferner werden die Daten im Cache vorzugsweise zu Diagnosezwecken in einem unzerstörten Zustand gehalten. Der Cache kann daher weder einfach abgeschaltet werden, noch kann er auf normale Weise seine Operation fortsetzen. Daher ist ein Fehlerübergangsmodus vorgesehen, bei dem der Cache unter beschränkten Zugriffsregeln operiert, was ein Maximum an Zugriff durch das System erlaubt, der die im Cache enthaltenen Datenblöcke verwendet, jedoch Änderungen der Cache-Daten minimiert.
  • Bei den hier ausgeführten Computersystemen werden die Daten nach Möglichkeit gepuffert oder in eine Warteschlange gestellt, so daß die unterschiedlichen Komponenten unabhängig voneinander operieren können, wann immer möglich, wodurch es möglich wird, daß viele Bustransaktionen eingeleitet werden, ohne z. B. notwendigerweise zu warten, bis eine bestimmte vorher begonnene weitere Transaktion abgeschlossen ist. Beispiele von Bustransaktionen, die in eine Warteschlange gestellt werden, sind die ankommenden Leserückgabedaten und die Cache-Ungültigkeitsoperationen. Der Systembus gibt immer dann gelesene Daten zurück, wenn der Speicher einen Zugriffszyklus abschließt, wobei eine Schnittstelle verwendet wird, um diese Leserückgaben in eine Warteschlange zu stellen, bis sie die CPU annimmt. Inzwischen werden alle Schreibvorgänge, die auf dem Systembus stattfinden, von einer CPU in einer Multiprozessorumgebung überwacht, um deren Cache aktuell zu halten; jede solche Transaktion wird eine Ungültigkeit genannt und umfaßt den Adreßmerker (die vollständige Adresse wird nicht benötigt) für einen Datenblock, für den ein Schreiben in den Speicher durch einen weiteren Prozessor ausgeführt wird. Um die Cache-Kohärenz zu erhalten, müssen die Leserückgaben und die Ungültigkeiten in chronologischer Reihenfolge gehalten werden, d. h. sie müssen im Cache in der Reihenfolge ausgeführt werden, in der sie auf dem Systembus erscheinen. Sie müssen daher in einem Puffer des FIFO-Typs in eine Warteschlange gestellt werden. Jedoch ist die Datenbreite für eine Ungültigkeit sehr viel kleiner als die diejenige einer Leserückgabe, wobei es viel mehr Ungültigkeiten als Leserückgaben gibt, so daß bei Verwendung einer für die Leserückgaben erforderlichen Warteschlangenbreite Chipfläche verschwendet wird, da für einen Großteil des Verkehrs nur ein kleiner Teil der Breite benötigt wird. Daher sind getrennte Warteschlangen für die unterschiedlichen Transaktionstypen vorgesehen, wobei jedoch die Reihenfolge durch eine Zeigeranordnung erhalten bleibt.
  • Das von der CPU verwendete Busprotokoll zum Kommunizieren mit dem Systembus weist den anhängenden Typ auf, da mehrere Transaktionen zu einem gegebenen Zeitpunkt am Bus anhängig sein können. Die Lese- und Schreibtransaktionen auf den Bus werden durch ein ID-Feld identifiziert, das den Ursprung oder den ursprünglichen Bus-Kommandanten für jede Transaktion spezifiziert. Wenn somit die Leserückgabedaten einige Zyklen nach einer Anfrage erscheinen, wird das ID-Feld von einer CPU erkannt, so daß sie die Daten vom Bus annehmen kann. Eine weitere Eigenschaft des Busses ist, daß die Zuweisung einer Buszuteilung gleichzeitig mit den Adressen/Daten- Transaktionen auf dem Bus einhergeht, so daß jeder Zyklus ein aktiver Zyklus ist, wenn der Verkehr dies erfordert.
  • Die neuartigen Merkmale, die als Eigenschaften der Erfindung betrachtet werden, sind in den beigefügten Ansprüchen ausgeführt. Die Erfindung selbst jedoch, sowie andere Merkmale und Vorteile derselben, werden am besten verstanden mit Bezug auf die genaue Beschreibung einer spezifischen Ausführungsform, wenn sie in Verbindung mit den beigefügten Zeichnungen gelesen wird, in welchen:
  • Fig. 1 ein elektrisches Blockschaltbild eines Computersystems ist, das eine Zentraleinheit gemäß einer Ausführungsform der Erfindung enthält;
  • Fig. 2 ein elektrisches Blockschaltbild eines Computersystems wie in Fig. 1 ist, gemäß einer alternativen Konfiguration;
  • Fig. 3 ein Schaubild der Datentypen ist, die im System der Fig. 1 verwendet werden;
  • Fig. 4 Zeitablaufdiagramme der Vier-Phasen-Takte zeigt, die von einem Taktgenerator in der CPU der Fig. 1 oder 2 erzeugt werden und innerhalb der CPU verwendet werden, zusammen mit einem Zeitablaufdiagramm des Buszyklus und der Takte, die verwendet werden, um den Buszyklus im System der Fig. 1 zu definieren;
  • Fig. 5 ein elektrisches Blockschaltbild der Zentraleinheit (CPU) des Systems der Fig. 1 oder 2 gemäß einer Ausführungsform der Erfindung ist;
  • Fig. 6 ein Zeitablaufdiagramm ist, das die Ereignisse zeigt, die in der pipelinegesteuerten CPU 10 der Fig. 1 in aufeinanderfolgenden Maschinenzyklen auftreten;
  • Fig. 7 ein elektrisches Blockschaltbild der CPU der Fig. 1 ist, das in zeitlich sequentiellem Format angeordnet ist, um das Pipelining der CPU gemäß der Fig. 6 zu zeigen;
  • Fig. 8 ein elektrisches Blockschaltbild der Befehlseinheit der CPU der Fig. 1 ist;
  • Fig. 9 ein elektrisches Blockschaltbild der Komplexspezifizierereinheit ist, die in der CPU der Fig. 1 verwendet wird;
  • Fig. 10 ein elektrisches Blockschaltbild des virtuellen Befehls-Cache ist, der in der CPU der Fig. 1 verwendet wird;
  • Fig. 11 ein elektrisches Blockschaltbild der Vorausholwarteschlange ist, die in der CPU der Fig. 1 verwendet wird;
  • Fig. 12 ein elektrisches Blockschaltbild der Punktetafel- Einheit ist, die in der CPU der Fig. 1 verwendet wird;
  • Fig. 13 ein elektrisches Blockschaltbild der Verzweigungsvorhersageeinheit ist, die in der CPU der Fig. 1 verwendet wird;
  • Fig. 14 ein elektrisches Blockschaltbild der Mikrobefehlssteuereinheit der CPU der Fig. 1 ist, die den Mikrosequenzer und den Steuerspeicher enthält;
  • Fig. 15 ein Schaubild der Formate der Mikrobefehlswörter ist, die vom Steuerspeicher der Fig. 14 erzeugt werden;
  • Fig. 16 ein elektrisches Blockschaltbild der Ausführungseinheit der CPU der Fig. 1 ist;
  • Fig. 17 ein elektrisches Schaltbild der Speichermanagementeinheit der CPU der Fig. 1 ist;
  • Fig. 18 ein elektrisches Blockschaltbild des Primär-Cache oder P-Cache-Speichers der CPU der Fig. 1 ist;
  • Fig. 18a ein Schaubild des Datenformats ist, das im Primär-Cache der Fig. 18 gespeichert ist;
  • Fig. 19 ein elektrisches Blockschaltbild der Cache Steuereinheit oder des C-Kastens in der CPU der Fig. 1 ist;
  • Fig. 20 ein elektrisches Blockschaltbild der Gleitkommaausführungseinheit oder des F-Kastens in der CPU der Fig. 1 ist;
  • Fig. 21 ein zeitablaufdiagramm der Ereignisse ist, die auf dem CPU-Bus im System der Fig. 1 auftreten.
  • Fig. 22 ein elektrisches Schaltbild der im CPU-Bus im System der Fig. 1 verwendeten Leiter ist;
  • Fig. 23 ein elektrisches Blockschaltbild der Busschnittstelle und der Arbitrierungseinheit des Computersystems der Fig. 1 ist; und
  • Fig. 24 ein elektrisches Blockschaltbild der Ungültigkeitswarteschlange und der Rückgabewarteschlange in der Busschnittstelle und der Arbitrierungseinheit der Fig. 23 ist.
  • Die Fig. 25 ist ein Funktionsschaubild der Fig. 24.
  • Wie in Fig. 1 gezeigt, enthält gemäß einer Ausführungsform ein Computersystem, das die Merkmale der Erfindung nutzt, einen CPU-Chip oder ein Modul 10, das über einen Systembus 11 mit einem Systemspeicher 12 und E/A-Elementen 13 verbunden ist. Obwohl in einer bevorzugten Ausführungsform die CPU 10 auf einer einzigen integrierten Schaltung ausgebildet ist, können einige Konzepte wie im folgenden beschrieben als Chipsatz implementiert sein, der auf einer einzigen Schaltungsplatine oder auf mehreren Platinen montiert ist. Wenn Befehle oder Daten geholt werden, greift die CPU 10 auf einen internen oder primären Cache 14 zu, anschließend auf einen größeren externen Cache oder Hintergrund-Cache 15. Somit wird ein hierarchischer Speicher verwendet, wobei der schnellste Speicher der Primär-Cache 14 ist, dem der Hintergrund-Cache 15 und anschließend der Hauptsystemspeicher 12 folgen, dem üblicherweise ein Plattenspeicher 16 folgt, auf den über die E/A-Elemente 13 unter Verwendung eines Betriebssystems (d. h. Software) zugegriffen wird. Es wird eine virtuelle Speicherorganisation verwendet, wobei zwischen der Platte 16 und dem Speicher 12, der zum Halten der am wahrscheinlichsten verwendeten Seiten im physikalischen Speicher 12 verwendet wird, ein Seitenaustausch stattfindet. Ein zusätzlicher Cache 17 in der CPU speichert nur Befehle, wobei die virtuellen Adressen anstelle der physikalischen Adressen verwendet werden. Physikalische Adressen werden für den Zugriff auf den primären Cache 14 und den Hintergrund-Cache 15 und auf den Bus 11 sowie den Speicher 12 verwendet. Wenn die CPU 10 einen Befehl holt, wird zuerst der virtuelle Befehls-Cache 17 geprüft, wobei dann, wenn ein Cache- Fehlgriff auftritt, die Adresse in eine physikalische Adresse übersetzt wird und der Primär-Cache 14 geprüft wird. Wenn der Befehl nicht im Primär-Cache vorhanden ist, wird auf den Hintergrund-Cache 15 zugegriffen, wobei nach einem Cache-Fehlgriff im Hintergrund-Cache auf den Speicher 12 zugegriffen wird. Der Primär-Cache 14 ist kleiner, jedoch schneller als der Hintergrund-Cache 15, wobei der Inhalt des Primär-Cache 14 eine Teilmenge des Inhalts des Hintergrund-Cache 15 ist. Der virtuelle Befehls-Cache 17 unterscheidet sich von der Operation der anderen beiden Cache-Speicher 14 und 15 insofern, als keine Schreibvorgänge in den Cache 17 seitens der CPU 10 stattfinden, mit Ausnahme dann, wenn Befehle geholt werden, und daß ferner der Inhalt dieses Cache 17 keine Teilmenge des Inhalts der Cache-Speicher 14 oder 15 sein muß, obwohl er dies sein kann.
  • Die CPU 10 greift auf den Hintergrund-Cache 15 über einen Bus 19 getrennt von einem CPU-Bus 20 zu, der für den Zugriff auf den Systembus 11 verwendet wird; daher ist auf dem CPU-Chip eine Cache-Steuervorrichtung für den Hintergrund-Cache 15 enthalten. Sowohl der CPU-Bus 20 als auch der Systembus 11 sind bidirektionale, geschachtelte 64-Bit-Adreß/Daten-Busse, denen Steuerbusse beigefügt sind, die Anfrage-, Zuteilungs- und Anweisungsleitungen und dergleichen enthalten. Der Bus 19 besitzt jedoch einen 64-Bit-Datenbus und separate Adressbusse. Der Systembus 11 ist mit dem CPU-Bus 20 über eine Schnittstelleneinheit 21 verbunden, die dazu dient, Zugriff durch die CPU 10 und die anderen Komponenten auf den CPU-Bus 20 zuzuteilen.
  • Die CPU 10 enthält eine Befehlseinheit 22 (mit I-Kasten bezeichnet), die dazu dient, Makrobefehle (Maschinenebenen-Befehle) zu holen und die Befehle zu decodieren, jeweils einen pro Zyklus, und die Operandenspezifizierer zu prüfen und anschließend das Holen des Operanden einzuleiten. Die Daten- oder Adreßmanipulation, die von den Befehlen angewiesen wird, wird von einer Ausführungseinheit oder einem E-Kasten 23 bewerkstelligt, die eine Registergruppe und eine ALU enthält. Die CPU wird mittels Mikrocode gesteuert, so daß eine Mikrobefehlssteuereinheit 24, die einen Mikrosequenzer und einen Steuerspeicher enthält, verwendet wird, um die Sequenz der Mikrobefehle zu erzeugen, die zur Implementierung der Makrobefehle erforderlich sind. Eine Speichermanagementeinheit oder ein M-Kasten 25 empfängt Befehllese- und Datenleseanfragen von der Befehlseinheit 22, sowie Datenlese- oder -schreib-Anfragen von der Ausführungseinheit 23, führt die Adreßübersetzung für das virtuelle Speichersystem durch, um physikalische Adressen zu erzeugen, und gibt Anfragen an den P-Cache 14 aus oder leitet die Anfragen im Fall eines Fehlgriffs über eine Cache-Steuervorrichtung 26 an den Hintergrund-Cache 15 weiter. Diese Cache-Steuervorrichtung oder dieser C- Kasten 26 behandelt den Zugriff auf den Hintergrund-Cache 15 (zweite Ebene) im Fall eines P-Cache-Fehlfriffs, oder den Zugriff auf den Hauptspeicher 12 bei einem Hintergrund-Cache-Fehlgriff. Ein On-Chip Gleitkommaprozessor 27 (mit F-Kasten bezeichnet) ist eine Ausführungseinheit für Gleitkomma- und Ganzzahl- Multiplikationsbefehle, die Operanden und Anweisungen von der Ausführungseinheit 23 empfängt und Ergebnisse an die Ausführungseinheit zurückgibt.
  • Obwohl die Merkmale der Erfindung mit verschiedenen Typen von CPUs genutzt werden können, soll die offenbarte Ausführungsform den VAX-Befehlssatz ausführen, so daß die Maschinenebenenbefehle oder Makrobefehle, die verwendet werden, unterschiedliche Größen besitzen. Ein Befehl kann eine minimale Länge von einem Byte bis zu einer maximalen Länge von Dutzenden von Bytes aufweisen; die Befehle sind im Durchschnitt 5 Bytes lang. Daher muß die Befehlseinheit 22 fähig sein, Befehle mit veränderlicher Länge zu handhaben, wobei außerdem die Befehle nicht notwendigerweise auf Wortgrenzen im Speicher ausgerichtet sind. Ferner manipulieren die Befehle Daten mit variabler Länge, wobei die Ganzzahldateneinheiten in Fig. 3 ausgeführt sind. Die internen Busse und Register der CPU 10 sind im allgemeinen 32 Bits breit, wobei 32 Bits in der VAX-Terminologie als ein Langwort bezeichnet werden. übertragungen von Daten zu und von den Cache-Speichern 14 und 15 und dem Speicher 12 umfassen üblicherweise 64 Bits gleichzeitig, wobei die Busse 11 und 20 64 Bits breit sind, was als ein Vierwort (vier Wörter oder acht Bytes) bezeichnet wird. Der Befehlsstrom wird im voraus in Form von Vierwörtern geholt und in einer Warteschlange gespeichert, woraufhin bestimmte Bytes des nächsten Befehls zur Ausführung von der Befehlseinheit 32 herausgegriffen werden. Die Befehle bewirken Speicherzugriffe mit einer Breite eines Bytes, eines Worts, eines Langworts oder eines Vierworts, wobei diese nicht auf Langwort- oder Vierwortgrenzen ausgerichtet sein müssen, d. h. der Speicher ist byteweise adressierbar. Einige der Befehle im Befehlssatz werden in einem Maschinenzyklus ausgeführt, wobei jedoch die meisten mehrere Zyklen benötigen und manche Dutzende von Zyklen benötigen, so daß die CPU 10 nicht nur Befehle mit variabler Größe und Befehle mit Zugriffen von variabler Datenbreite (ausgerichtet oder nicht ausgerichtet) sondern auch Befehle mit unterschiedlichen Ausführungs zeiten verarbeiten muß.
  • Obwohl die hier beschriebene Beispielausführungsform den VAX-Befehlssatz ausführen soll, gibt es trotzdem Merkmale der Erfindung, die in Prozessoren nützlich sind, die dafür ausgelegt sind, andere Befehlssätze wie z. B. denjenigen für die Typen 80386 oder 68030 auszuführen. Ferner sind einige Merkmale nicht nur in Computern mit komplexem Befehlssatz (CISC-Typ), wie hier offenbart, sondern auch in Computern mit reduziertem Befehlssatz (RISC) nützlich; bei einem RISC-Typ besitzen die Befehlswörter immer die gleiche 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 zulässig.
  • In einem Multiprozessorsystem können weitere CPUs 28 auf den Systembus 11 zugreifen. Jede zusätzliche CPU kann ihren eigenen CPU-Chip 10, Cache 15 und eine Schnittstelleneinheit 21 enthalten, wenn diese CPUs 28 denselben Entwurf aufweisen wie die CPU 10. Alternativ können diese anderen CPUs 28 eine unterschiedliche Konstruktion aufweisen, wobei sie jedoch ein kompatibles Busprotokoll zum Zugreifen auf den Hauptsystembus 11 verwenden. Diese anderen CPUs 28 können auf den Speicher 12 zugreifen, so daß die Datenblöcke in den Cache- Speichern 14 oder 15 hinfällig werden können. Wenn eine CPU 28 in eine Stelle im Speicher 12 schreibt, die im Cache 15 (oder im Primär-Cache 14) dupliziert sind, sind die Daten an dieser Stelle im Cache 15 nicht mehr gültig. Aus diesem Grund werden wie im folgenden beschrieben die Daten in den Cache-Speichern 14 und 15 "für ungültig erklärt", wenn ein Schreiben in den Speicher 12 von einer anderen Quelle ausgeführt wird als von der CPU 10 (wie z. B. von den anderen CPUs 28). Der Cache 14 arbeitet nach einem "Durchschreibe"-Prinzip, während der Cache 15 nach einem "Zurückschreibe"-Prinzip arbeitet. Wenn die CPU 10 ein Schreiben in eine Stelle durchführt, die im Primär-Cache 14 vorhanden ist, werden die Daten in diesen Cache 14 und ferner in den Hintergrund-Cache 15 (und manchmal auch in den Speicher 12, abhängig von den Bedingungen) geschrieben; dieser Typ von Operation ist das "Durchschreiben"
  • Wenn die CPU 10 ein Schreiben an eine Stelle ausführt, die sich im Hintergrund-Cache 15 befindet, wird das Schreiben nicht notwendigerweise an den Speicher 12 weitergeleitet, statt dessen findet das Zurückschreiben in den Speicher 12 nur dann statt, wenn ein weiteres Element im System (wie z. B. eine CPU 28) die Daten benötigt (d. h. versucht, auf diese Stelle im Speicher zuzugreifen), oder wenn der Block im Cache aus dem Cache 15 verschoben wird (Zuordnung aufgehoben)
  • Die Schnittstelleneinheit 21 besitzt drei Busanschlüsse. Zusätzlich zum CPU-Adreß/Daten-Anschluß über den Bus 20 und den Hauptsystembus 11 ist ein ROM-Bus 29 vorgesehen, um auf ein Start-ROM sowie ein EEPROM, einen nichtflüchtigen RAM (mit Batteneunterstützung) und einen Uhr/Kalender-Chip zuzugreifen. Der ROM-Bus 29 ist nur acht Bit breit, da die Anforderung an ROM-Buszugriffe weniger streng sind. Dieser ROM-Bus kann ferner auf eine Tastatur und/oder eine LCD-Anzeigesteuervorrichtung sowie weitere Eingabevorrichtungen wie z. B. eine Maus zugreifen. Ein serieller Eingang/Ausgang-Anschluß für eine Konsole ist ebenfalls in der Schnittstelle 21 enthalten, wird jedoch hier nicht beschrieben.
  • Mit dem Bus 20 können weitere Knoten verbunden sein; wie z. B. in Fig. 2 gezeigt, kann eine einfachere Konfiguration eines Systems, das die CPU 10 verwendet, den Schnittstellen/Zuweisungs-Chip 21 weglassen und den Speicher 12 mit dem Bus 20 verbinden (unter Verwendung einer geeigneten Speicherschnittstelle). In diesem Fall muß die E/A mit dem Bus 20 verbunden werden, da kein Systembus 11 vorhanden ist. Zu diesem Zweck wird die Platte 16 oder die andere E/A-Vorrichtung mit einem der zwei E/A-Knoten 13a und 13b verbunden, wobei jede von diesen den Besitz des Busses 20 anfordern und erhalten kann. Alle Komponenten am Bus 20 sind im Fall der Fig. 2 synchron und operieren unter der Taktsteuerung der CPU 10, während im Fall der Fig. 1 der Systembus 11 asynchron zum Bus 20 und zur CPU 10 ist und mit seinem eigenen Takt operiert.
  • Die hier offenbarte CPU 10 ist somit nützlich in vielen unterschiedlichen Klassen von Computersystemen, die von Tischgerät-Arbeitsplatzrechnern oder PCs für einzelne Nutzer bis zu Vollkonfigurationen reicht, die für größere Abteilungen oder Einrichtungen verwendet werden. In einem Beispiel kann das System der Fig. 1 einen Hintergrund- Cache 15 von 256 kBytes, einen Hauptspeicher 20 von 128 MBytes sowie eine Platte 16 mit einer Kapazität von vielleicht 1 GBytes oder mehr enthalten. In diesem Beispiel kann die Zugriffszeit auf den Hintergrund-Cache ungefähr 25 ns (2 CPU-Maschinenzyklen) betragen, während die Zugriffszeit auf dem Hauptspeicher 20 von der CPU 10 über den Bus 11 zehn oder zwanzig Mal so groß sein kann wie diejenige des Hintergrund-Cache; die Platte 16 besitzt selbstverständlich eine Zugriffszeit von mehr als dem Zehnfachen des Hauptspeichers. In einem typischen System hängt daher die Systemleistung davon ab, daß soviel wie möglich aus den Cache-Speichern ausgeführt wird.
  • Obwohl in Fig. 1 die Verwendung eines geschachtelten 64- Bit-Adreß/Daten-Busses 11 oder 20 gezeigt ist, können einige Merkmale der Erfindung in einem System implementiert werden, das getrennte Adreß- und Datenbusse verwendet, wie z. B. im US-Patent 4.875.160 gezeigt ist.
  • Wie in Fig. 3 gezeigt, enthalten die hier beschriebenen Ganzzahl-Datentypen oder Speicherzugriffe ein Byte (8 Bits), ein Wort (2 Bytes) ein Langwort (4 Bytes) sowie ein Vierwort (8 Bytes oder 64 Bits). Die Datenpfade in der CPU 10 sind im allgemeinen vier Wörter breit, ebenso wie die Datenpfade der Busse 11 und 20. In Fig. 3 nicht gezeigt, jedoch hier beschrieben, ist ein Hexawort, das 16 Wörter (32 Bytes) oder vier Vierwörter umfaßt.
  • Takte und Zeitablauf:
  • Wie in Fig. 4 gezeigt, erzeugt ein Taktgenerator 30 im CPU-Chip 10 der Fig. 1 vier überlappende Takte phi1, phi2, phi3 und phi4, die verwendet werden um vier Phasen P1, P2, P3 und P4 eines Maschinenzyklus zu definieren. In einer Beispielausführungsform beträgt der Maschinenzyklus normalerweise 14 ns, so daß die Takte phi1 und dergleichen ungefähr 71 MHz betragen; alternativ kann der Maschinenzyklus 10 ns betragen, wobei in diesem Fall die Taktfrequenz 100 MHz beträgt. Der Bus 20 und der Systembus 11 operieren jedoch mit einem Buszyklus, der drei Mal länger ist als der Maschinenzyklus der CPU, so daß in diesem Beispiel der Buszyklus, wie auch in Fig. 4 gezeigt, normalerweise 42 ns dauert (oder, bei 100 MHz Taktung, würde der Buszyklus 30 ns dauern). Der Buszyklus ist in ähnlicher Weise durch vier überlappende Takte phi1, phi2, phi3 und phi4 definiert, die vom Taktgenerator 30 erzeugt werden, um vier Phasen PB1, PB2, PG3 und PG4 des Buszyklus zu definieren. Der Systembus 11 operiert jedoch mit einem längeren Buszyklus, der ungefähr doppelt so lang ist wie derjenige des Busses 20, z. B. ungefähr 64 ns, wobei dieser Buszyklus asynchron zur CPU 10 und zum Bus 20 ist. Der Zeitablaufzyklus des Systembusses 11 wird von einem Taktgenerator 31 in der Schnittstelleneinheit 21 gesteuert.
  • Der CPU-Chip:
  • In Fig. 5 ist die interne Konstruktion des CPU-Chips 10 in allgemeiner Form dargestellt. Die Befehlseinheit 22 enthält den virtuellen Befehls-Cache 17, der ein dedizierter Nur-Befehlsstrom-Cache mit einer Größe von 2 kByte ist, der in diesem Fall die zuletzt verwendeten Blocks des Befehlsstroms speichert, wobei virtuelle Adressen statt physikalische Adressen für den Zugriff auf die Cache-Speicher 14 und 15 und den Hauptspeicher 12 verwendet werden. Das heißt, eine Adresse für einen Zugriff auf den virtuellen Befehls-Cache 17 erfordert keine Adreßübersetzung, die in der Speichermanagementeinheit 25 für andere Speicherzugriffe durchgeführt wird. Die Befehle werden aus dem Befehls- Cache 17 in eine Vorausholwarteschlange 32 geladen, die 16 Bytes hält. Die Befehlseinheit 22 besitzt eine Befehlsbündeleinheit 33, die einen Befehl in seine Bestandteile zerlegt (Opcode, Operandenspezifizierer, Spezifizierererweiterungen und dergleichen), die Makrobefehle decodiert und die Operandenspezifizierer prüft, Befehlssteuersignale erzeugt (wie z. B. Abfertigungsadressen) die über einen Bus 34 zu einer Befehlswarteschlange 35 in der Mikrobefehlssteuervorrichtung 24 gesendet werden. Die Informationen von den Spezifizierern, die für den Zugriff auf die Operanden benötigt werden, werden über einen Bus 36 zu einer Quellenwarteschlange 37 und einer Zielwarteschlange 38 in der Ausführungseinheit 23 gesendet. Die Befehlseinheit 22 enthält ferner eine Verzweigungsvorhersageeinheit 39, um vorherzusagen, ob eine bedingte Verzweigung wahrgenommen wird, und zum entsprechenden Leiten der Adressierungssequenz des Befehlsstroms. Eine Komplexspezifizierereinheit 40 in der Befehlseinheit 22 ist ein Hilfsadreßprozessor (anstelle der Verwendung der ALU in der Ausführungseinheit 23) für den Zugriff auf die Registergruppe sowie ansonsten zur Erzeugung der Adressen für die Operanden, bevor ein Befehl in der Ausführungseinheit 23 ausgeführt wird.
  • Die Ausführungseinheit 23 führt (unter der Steuerung der Mikrobefehlssteuereinheit 24) die wirkliche "Arbeit" der Makrobefehle aus, indem sie eine vierstufige Mikropipelineeinheit mit der Fähigkeit zum Anhalten und zum Trap implementiert. Diese Elemente entnehmen den Befehl und die Operandeninformationen, die von der Befehlseinheit 22 über die Warteschlangen 35, 37 und 38 zur Verfügung gestellt werden. Für Literaltypen von Operanden enthält die Quellenwarteschlange 37 den aktuellen Operandenwert aus dem Befehl, während bei Operanden des Registertyps oder des Speichertyps die Quellenwarteschlange 37 einen Zeiger auf die Daten in einer Registergruppe 41 in der Ausführungseinheit 23 hält.
  • Die Mikrobefehlssteuereinheit 24 enthält einen Mikroseguenzer 42, der dazu dient, das nächste aus dem Steuerspeicher 43 zu holende Mikrowort zu ermitteln. Der Steuerspeicher ist ein ROM oder ein anderer Speicher mit einer Größe von ungefähr 1600 Wörtern, der ein Mikrocodewort mit einer Breite von vielleicht 61 Bits erzeugt, jeweils eines pro Maschinenzyklus, als Antwort auf eine 11-Bit-Adresse, die vom Mikrosequenzer 42 erzeugt wird. Der Mikrosequenzer empfängt eine 11-Bit- Einsprungpunktadresse von der Befehlseinheit 22 über die Befehlswarteschlange 35, um eine durch den Makrobefehl angegebene Mikroroutine einzuleiten. Die in jedem Zyklus vom Steuerspeicher 43 erzeugten Mikrobefehle werden über einen Mikrobefehlsbus 44 in die Ausführungseinheit 23 eingegeben.
  • Die in der Ausführungseinheit 23 enthaltene Registergruppe 41 enthält 15 Universalregister, einen PC (Programmzähler), sechs Speicherdatenregister, sechs temporäre oder Arbeitsregister sowie zehn Zustandsregister. Die Ausführungseinheit 23 enthält ferner eine 32-Bit-ALU 45 und eine 64-Bit- Schiebevorrichtung 46, um die vom Makrobefehl angewiesene Operation durchzuführen, die durch die auf dem Bus 44 empfangenen Mikrobefehle definiert wird.
  • Die Gleitkommaeinheit 27 empfängt 32- oder 64-Bit- Operanden auf zwei 32-Bit-Bussen 47 und 48 von den Eingängen A und B der ALU 45 in der Ausführungseinheit 23 und erzeugt ein Ergebnis auf dem Ergebnisbus 49, das an die Ausführungseinheit 23 zurückgegeben whrd. Die Gleitkommaeinheit 27 empfängt eine Anweisung für die durchzuführende Operation, führt jedoch diese Operation anschließend unabhängig von der Ausführungseinheit 23 aus, signalisiert, wenn sie abgeschlossen hat, und liefert den Operanden. Wie es für das System der Fig. 1 im allgemeinen zutrifft, stellt die Gleitkommaeinheit 27 das Ergebnis in eine Warteschlange, so daß es von der Ausführungseinheit 23 angenommen werden kann, wenn sie fertig ist. Die Gleitkommaeinheit 27 führt Gleitkommaadditionen in zwei Zyklen, Multiplikationen in zwei Zyklen und Divisionen in Abhängigkeit vom Typ der Division in 17 bis 30 Maschinenzyklen aus.
  • Der Ausgang der Gleitkommaeinheit 27 auf dem Bus 49 und die Ausgänge der ALU 45 sowie der Schiebevorrichtung 46 werden mittels eines Ergebnismultiplexers oder Rmux 50 in der Befehlseinheit 23 gemischt (in jedem Zyklus wird einer ausgewählt). Der ausgewählte Ausgang vom Rmux wird entweder in die Registergruppe 45 zurückgeschrieben oder wird über einen Schreibbus 53 an die Speichermanagementeinheit 25 weitergeleitet, wobei Speicheranfragen von der Ausführungseinheit 23 über einen virtuellen Adreßbus 52 an die Speichermanagementeinheit 25 weitergeleitet werden.
  • Die Speichermanagementeinheit 25 empfängt Leseanfragen von der Befehlseinheit 22 (sowohl Befehlsstrom als auch Datenstrom) über einen Bus 53 und von der Ausführungseinheit 22 (nur Datenstrom) über den Adreßbus 52. Ein Speicherdatenbus 54 liefert Speicherlesedaten von der Speichermanagementeinheit 25 entweder zur Befehlseinheit 22 (64 Bits breit) oder zur Ausführungseinheit 23 (32 Bits breit). Die Speichermanagementeinheit 25 empfängt ferner Schreib/Lese-Anfragen von der Ausführungseinheit 23 über den Schreibdatenbus 51 sowie Ungültigkeiten, Primär- Cache-14-Auffüllungen und Rückgabedaten von der Cache- Steuereinheit 26. Die Speichermanagementeinheit 25 arbitriert zwischen diesen Anfragern, wobei sie Anfragen, die momentan nicht behandelt werden können, in Warteschlangen stellt. Sobald eine Anfrage gestartet ist, führt die Speichermanagementeinheit 25 eine Adreßübersetzung und eine Abbildung der virtuellen auf die physikalischen Adressen durch, wobei sie einen Übersetzungspuffer oder Adressen-Cache 55 verwendet. Dieses Nachschlagen im Adressen-Cache 55 erfordert einen Maschinenzyklus, wenn keine Fehlgriffe auftreten. Im Fall eines Fehlgriffs im DP 55 veranlaßt die Speichermanagementschaltung, daß ein Seitentabelleneintrag aus den Seitentabellen im Speicher gelesen wird und ein DP-Auffüllen durchgeführt wird, um die Adresse, bei der der Fehlgriff auftrat, einzusetzen.
  • Diese Speichermanagementschaltung führt ferner alle Zugriffsprüfungen durch, um die Seitenschutzfunktion und dergleichen zu implementieren. Der P-Cache 14, auf den von der Speichermanagementeinheit 25 zugegriffen wird, ist ein Zweiwege-Satzassoziativ-Durchschreibe-cache mit einer Block- und Auffüllgröße von 32 Bytes. Der P-Cache- Zustand wird als Teilmenge des Hintergrund-Cache 15 gehalten. Die Schaltung der Speichermanagementeinheit 25 stellt ferner sicher, daß die von der Befehlseinheit 22 eingeleiteten Spezifiziererlesevargänge korrekt geordnet werden, wenn die Ausführungseinheit 23 diese Daten in die Registergruppe 41 speichert; diese Ordnung, als "Punktetafelvorgang" bezeichnet, wird erreicht durch eine physikalische Adressenwarteschlange 56, die eine kleine Liste physikalischer Adressen ist, die einen anhängigen Ausführungseinheit-23-Speicher aufweist. Speicheranfragen, die von der Speichermanagementeinheit 25 empfangen werden, für die jedoch ein Fehlgriff in Primär-Cache 14 auftritt, werden zur Ausführung über einen physikalischen Adreßbus 57 und (für Schreibvorgänge) einen Datenbus 58 zur Cache Steuereinheit 26 gesendet. Ungültigkeiten werden von der Speichermanagementeinheit 25 aus der Cache-Steuereinheit 26 über einen Adreßbus 59 und Auffülldaten über den Datenbus 58 empfangen.
  • Die Cache-Steuereinheit 26 ist die Steuervorrichtung für den Hintergrund-Cache 15, und stellt die Schnittstelle zum externen CPU-Bus 20 dar. Die Cache-Steuereinheit 26 empfängt Leseanfragen und Schreibvorgänge von der Speichermanagementeinheit 25 über den physikalischen Adreßbus 57 und den Datenbus 58 und sendet Primär- Cache-14-Auffüllungen und Ungültigkeiten an die Speichermanagementeinheit 25 über den Adreßbus 59 und den Datenbus 58. Die Cache-Steuereinheit 26 stellt durch die Ungültigkeiten sicher, daß der Primär-Cache 14 als Teilmenge des Hintergrund-Cache 15 gehalten wird. Die Cache-Steuereinheit 26 empfängt Cache-Kohärenz Transaktionen vom Bus 20, auf die sie geeignet mit Ungültigkeiten und Zurückschreibevorgängen antwortet. Die Cache-Kohärenz im System der Fig. 1 und 5 basiert auf dem Konzept des Besitzes; ein Hexawortblock (16 Wörter) des Speichers kann entweder dem Speicher 12 oder einem Hintergrund-Cache 15 in einer CPU auf dem Bus 11 gehören - in einem Multiprozessorsystem kann nur einer der Cache- Speicher oder der Speicher 12 zu einem gegebenen Zeitpunkt den Hexawortblock besitzen, wobei dieser Besitz durch ein Besitzbit für jedes Hexawort sowohl im Speicher 12 als auch im Hintergrund-Cache 15 angezeigt wird (1 für Besitz, 0 für Nichtbesitz). Sowohl die Merker als auch die Daten für den Hintergrund-Cache 15 sind in Off-Chip- RAMs gespeichert, wobei die Größe und die Zugriffszeit entsprechend den Systemanforderungen gewählt sind. Der Hintergrund-Cache 15 kann eine Größe von z. B. 128 kBytes bis 2 MBytes aufweisen. Bei einer Zugriffszeit von 28 ns kann auf dem Cache in zwei Maschinenzyklus zugegriffen werden, bei Annahme eines 14ns-Maschinenzyklus der CPU 10. Die Cache-Steuereinheit 26 packt sequentielle Schreibvorgänge in dasselbe Vierwort zusammen, um die Schreibzugriffe auf den Hintergrund-Cache zu minimieren. Mehrfachschreibanweisungen von der Speichermanagementeinheit 25 werden in einer Achtwort- Schreib-Warteschlange 60 gehalten. Die Cache-Steuer einheit 26 ist ferner die Schnittstelle zum geschachtelten Adreß/Daten-Bus 20, wobei eine Eingangsdatenwarteschlange 61 Auffülldaten und Zurückschreibeanfragen vom Bus 20 in die CPU 10 lädt. Eine Nicht-Zurückschreibe-Warteschlange 62 und eine Zurückschreibe-Warteschlange 63 in der Cache- Steuereinheit 26 halten Leseanfragen bzw. Zurückschreibedaten, die über dem Bus 20 zum Hauptspeicher 12 gesendet werden sollen.
  • Pipelining in der CPU:
  • Die CPU 10 ist auf Nakrobefehlsebene pipelinegesteuert. Ein Befehl erfordert sieben Pipelinesegmente, um die Ausführung abzuschließen, wobei diese im allgemeinen ein Befehlsholsegment S0, ein Befehlsdecodierungssegment S1, ein Operandendefinitionssegment S2, ein Registergruppenzugriffssegment S3, ein ALU-Segment S4, ein Adressenübersetzungssegment S5 sowie ein Speichersegment S6 sind, wie in Fig. 6 gezeigt ist. In einem Idealzustand, in dem keine Halte vorliegen, ist die Überlappung der sequentiellen Befehle #1 bis #7 der Fig. 6 vollständig, so daß während des Segments S6 des Befehls #1 das Segment S0 des Befehls #7 ausgeführt wird, wobei die Befehle #2 bis #6 zwischensegmente sind. Wenn die Befehle sich an aufeinanderfolgenden Orten befinden (keine Sprünge oder Verzweigungen) und die Operanden entweder innerhalb des Befehlsstroms enthalten sind oder sich in der Registergruppe 41 oder im Primär-Cache 14 befinden, kann die CPU 10 zeitweise in der idealen Befehlsüberlappungssituation arbeiten, wie in Fig. 6 gezeigt ist. Wenn jedoch ein Operand nicht in einem Register 43 oder im Primär-Cache 14 vorliegt und aus dem Hintergrund-Cache 15 oder dem Speicher 12 geholt werden muß, oder wenn verschiedene andere Bedingungen zutreffen, werden Halte erzeugt und die Ausführung weicht vom Idealzustand der Fig. 6 ab.
  • In Fig. 7 sind die Hardwarekomponenten jedes Pipelinesegments 50-56 für die CPU 10 in allgemeiner Form gezeigt. Die wirklichen Schaltungen sind komplexer, wie aus der genaueren Beschreibung der verschiedenen Komponenten der CPU 10 im folgenden deutlich wird. Es ist klar, daß hier nur Makrobefehl-Pipelinesegmente beschrieben werden; es findet jedoch in den meisten Segmenten auch ein Mikropipelining der Operationen statt, d. h. wenn mehr als eine Operation erforderlich ist, um einen Makrobefehl zu verarbeiten, werden die Mehrfachoperationen innerhalb einer Sektion ebenfalls pipelinegesteuert.
  • Wenn ein Befehl nur Operanden verwendet, die bereits innerhalb der Registergruppe 41 enthalten sind, oder Literale, die innerhalb des Befehlsstroms selbst enthalten sind, dann wird aus Fig. 7 deutlich, daß der Befehl in sieben aufeinanderfolgenden Zyklen ohne Halte ausgeführt werden kann. Zuerst wird der Flus einer normalen Makrobefehlsausführung in der CPU 10 wie in Fig. 7 gezeigt beschrieben, woraufhin die Bedingungen beschrieben werden, die Halte und Ausnahmen verursachen.
  • Die Ausführung von Makrobefehlen in der Pipeline der CPU wird in viele kleinere Schritte zerlegt, die in verschiedenen verteilten Sektionen auf dem Chip implementiert sind. Da die CPU 10 eine Makrobefehlspipeline implementiert, ist jede Sektion relativ autonom, wobei zwischen den Sektionen Warteschlangen eingefügt sind, um die Verarbeitungsraten jeder Sektion zu normalisieren.
  • Die Befehlseinheit 22 holt Befehlsstromdaten für den nächsten Befehl, zerlegt die Daten in Opcode und Spezifizierer und wertet die Spezifizierer aus, mit dem Ziel, die Operanden im voraus zu holen, um die Ausführungseinheit 23 bei der Ausführung des Befehls zu unterstützen. Diese Funktionen der Befehlseinheit 22 sind auf die Segmente S0 bis S3 der Pipeline verteilt, wobei ein Großteil der Arbeit in S1 erledigt wird. In SO werden die Befehlsstromdaten aus dem virtuellen Befehls-Cache 17 unter Verwendung der im virtuellen Befehlspufferadreßregister 65 (VIBA) enthaltenen Adresse geholt. Die Daten werden in die Vorausholwarteschlange 32 geschrieben, wobei VIBA 65 auf die nächste Stelle inkrementiert wird. Im Segment S1 wird die Vorausholwarteschlange 32 gelesen, wobei die Bündeleinheit 33 den internen Zustand und die Inhalte einer Tabelle 66 (ein ROM und/ader PLA zum Nachschlagen des Befehlsformats) verwendet, um aus den Bytes in der Warteschlange 32 die nächste Befehlsstromkomponente - entweder ein Opcode oder ein Spezifizierer - auszuwählen. Einige Befehlskomponenten erfordern mehrere Zyklen zur Bündelung; z. B. erfordert ein 2-Byte-Opcode, der im VAX- Befehlssatz immer mit FDhex beginnt, zwei Bündelzyklen: einen für das Byte FD und einen für das zweite Opcode- Byte. In ähnlicher Weise erfordern Indexspezifizierer wenigstens zwei Bündelzyklen: einen für das Indexbyte und einen oder mehrere für den Basisspezifizierer.
  • Wenn ein Opcode von der Bündeleinheit 33 decodiert wird, werden die Informationen über dem Bus 67 zu einer Ausgabeeinheit 68 weitergeleitet, die die Tabelle 66 nach der Anfangsadresse (Einsprungpunkt) der Routine im Steuerspeicher 43 fragt, die den Befehl enthält. Die Ausgabeeinheit 68 sendet die Adresse und andere befehlsbezogene Informationen zur Befehlswarteschlange 35, wo diese gehalten werden, bis die Ausführungseinheit 23 diesen Befehl erreicht.
  • Wenn ein Spezifizierer decodiert wird, werden die Informationen über den Bus 67 zur Operandenwarteschlangeneinheit 69 weitergeleitet, um die Quellen- und Zielwarteschlangen 37 und 38 und möglicherweise die pipelinegesteuerte Komplexspezifizierereinheit 40 zuzuweisen. Die Operandenwarteschlangeneinheit 69 weist eine geeignete Anzahl von Einträgen für den Spezifizierer in den Quellen- und Zielwarteschlangen 37 und 38 in der Ausführungseinheit 23 zu. Diese Warteschlangen 37 und 38 enthalten Zeiger auf Operanden und Ergebnisse. Wenn der Spezifizierer kein Kurzliteral- oder Registerspezifizierer ist, die als einfache Spezifizierer bezeichnet werden, wird er somit als komplexer Spezifizierer betrachtet und von der mikrocodegesteuerten Komplexspezifizierereinheit 40 verarbeitet, die auf die Segmente S1 (Steuerspeicherzugriff), S2 (Operandenzugriff, einschließlich Registergruppe-41- Lesevorgang) und S3 (ALU-45-Operation, Speichermanagementeinheit-25-Anfrage, GPR-Schreibvorgang) der Pipeline verteilt ist. Die Pipeline der Komplexspezifizierereinheit 40 berechnet alle Spezifiziererspeicheradressen und macht die geeigneten Anfragen an die Speichermanagementeinheit 25 für den Spezifizierertyp. Um ein Lesen oder Schreiben eines GPR zu vermeiden, (GPR = Universalregister), das durch eine anhängige Ausführungseinheit-23-Referenz gesperrt ist, enthält die Komplexspezifizierereinheit-40-Pipeline eine Registerpunktetafel, die Datenabhängigkeiten aufdeckt. Die Pipeline der Komplexspezifizierereinheit 40 leitet ferner Operandeninformationen an die Ausführungseinheit 23 weiter, die kein expliziter Teil des Befehlsstroms sind; z. B. wird für Befehle, die dies erfordern, der PC als impliziter Operand weitergeleitet.
  • Während S1 überwacht die Verzweigungsvorhersageeinheit 39 jeden Opcode, der decodiert wird, um nach bedingten und unbedingten Verzweigungen zu suchen. Für unbedingte Verzweigungen berechnet die Verzweigungsvorhersageeinheit 39 den Ziel-PC und leitet den PC und die VIBA auf den neuen Pfad um. Für bedingte Verzweigungen sagt die Verzweigungsvorhersageeinheit 39 auf der Grundlage voraus, ob der Befehl verzweigt. Wenn die Vorhersage anzeigt, daß die Verzweigung wahrgenommen wird, werden der PC und die VIBA auf den neuen Pfad umgeleitet. Die Verzweigungsvorhersageeinheit 39 schreibt den bedingten Verzweigungsvorhersagemerker in eine Verzweigungswarteschlange 70 in der Ausführungseinheit 23, der von der Ausführungseinheit 23 bei der Ausführung des Befehls verwendet werden soll. Die Verzweigungsvorhersageeinheit 39 behält einen Zustand, der geeignet ist, den richtigen Befehls-PC wiederherzustellen, wenn sich herausstellt, daß die Vorhersage falsch ist.
  • Die Mikrobefehlssteuereinheit 24 operiert im Segment S2 der Pipeline und dient dazu, der Befehlseinheit 23 den nächsten auszuführenden Mikrobefehl zuzuführen. Wenn ein Makrobefehl die Ausführung von mehr als einem Mikrobefehl erfordert, führt die Mikrobefehlssteuereinheit 24 jeden Mikrobefehl der Reihe nach auf der Grundlage einer Direktive zu, die im vorangehenden Mikrobefehl enthalten ist. An den Makrobefehlsgrenzen entfernt die Mikrobefehlssteuereinheit 24 den nächsten Eintrag aus der Befehlswarteschlange 35, die die Anfangsmikrobefehlsadressen für den Makrobefehl enthält. Wenn die Befehlswarteschlange 35 leer ist, führt die Mikrobefehlssteuereinheit 24 die Adresse des NO-OP- Mikrobefehls zu. Die Mikrobefehlssteuereinheit 24 wertet ferner alle Ausnahmeanfragen aus und erzeugt ein Pipeline-Bereinigungssteuersignal für die Ausführungseinheit 23. Für bestimmte Ausnahmen und Unterbrechungen fügt die Mikrobefehlssteuereinheit 24 die Adresse eines geeigneten Mikrobefehlhantierers ein, der verwendet wird, um auf das Ereignis zu antworten.
  • Die Ausführung seinheit 23 führt alle Nicht-Gleitkomma- Befehle aus und liefert Operanden an bzw. empfängt Ergebnisse von der Gleitkommaeinheit 27 über die Busse 47, 48 und 49 und behandelt Nicht-Befehlsereignisse wie z. B. Unterbrechungen und Ausnahmen. Die Ausführungseinheit 23 ist über die Segmente S3, S4 und S5 der Pipeline verteilt; S3 enthält den Operandenzugriff, einschließlich des Lesevorgangs der Registergruppe 41; S4 enthält die Operation der ALU 45 und der Schiebevorrichtung 46, sowie RMUX-50-Anfragen; während S5 den RMUX-50-Abschluß, das Schreiben in die Registergruppe 41 und den Abschluß der Speichermanagementeinheit-25- Anfrage enthält. Für den größten Teil werden die Befehlsoperanden von der Befehlseinheit 22 im voraus geholt und indirekt über die Quellenwarteschlange 37 adressiert. Die Quellenwarteschlange 37 enthält bei Kurzliteralspezifizierern den Operanden selbst und bei anderen Operandentypen einen Zeiger auf einen Eintrag in der Registergruppe 41.
  • Ein Eintrag in einer Feldwarteschlange 71 wird vorgenommen, wenn ein Feldtypspezifizierereintrag in die Quellenwarteschlange 37 vorgenommen wird. Die Feldwarteschlange 71 liefert Mikroverzweigungsbedingungen, die der Mikrobefehlssteuereinheit 42 ermöglichen, zu ermitteln, ob ein Feldtypspezifizierer entweder ein GPR oder den Speicher adressiert. Eine Mikroverzweigung bei einem gültigen Feldwarteschlangeneintrag entnimmt den Eintrag aus der Warteschlange.
  • Die Registergruppe 41 ist in vier Teile unterteilt: die Universalregister (GPRs), die Speicherdatenregister (MD), die Arbeitsregister und die CPU-Zustandsregister. Für einen Registermodusspezifizierer zeigt die Quellenwarteschlange 37 auf das entsprechende GPR in der Registergruppe 41, während die Warteschlange im Kurzliteralmodus den Operanden selbst enthält; für andere Spezifizierermodi zeigt die Quellenwarteschlange 37 auf ein MD-Register, das die Adresse des Spezifizierers enthält (oder die Adresse der Adresse des Operanden und dergleichen). Das MD-Register wird entweder direkt von der Befehlseinheit 22 geschrieben oder als Ergebnis eines Speicherlesevorgangs, der von der Befehlseinheit 22 erzeugt wird, über die Speichermanagementeinheit 25 geschrieben.
  • Im S3-Segment der Ausführungseinheit-23-Pipeline werden die entsprechenden Operanden für die Ausführung des Befehls in der Ausführungseinheit 23 und der Gleitkommaeinheit 27 ausgewählt. Die Operanden werden auf ABUs und BBUs für die Verwendung sowohl in der Ausführungseinheit 23 als auch der Gleitkommaeinheit 27 ausgewählt. In den meisten Fällen stammen diese Operanden aus der Registergruppe 41, obwohl auch andere Datenpfadquellen von Nicht-Befehl-Operanden (wie z. B. PSL) vorhanden sind.
  • Die Berechnung der Ausführungseinheit 23 wird von der ALU und der Schiebevorrichtung 46 im S4-Segment der Pipeline mit den vom S3-Segment zugeführten Operanden durchgeführt. Die Steuerung dieser Einheiten wird durch den Mikrobefehl bewerkstelligt, der ursprünglich von Steuerspeicher 43 dem S3-Segment zugeführt worden ist und anschließend in der Mikrobefehlspipeline vorgerückt ist.
  • Das S4-Segment enthält ferner den Rmux 50, der die Ergebnisse entweder von der Ausführungseinheit 43 oder der Gleitkommaeinheit 47 auswählt und die entsprechende Register- oder speicheroperation durchführt. Die Eingänge des Rmux stammen von der ALU 45, der Schiebevorrichtung 46 und dem Ergebnisbus 49 der Gleitkommaeinheit 27 am Ende des Zyklus. Der Rmux 50 spannt die S4/S5-Grenze auf, so daß seine Ausgänge zu Beginn des S5-Segments gültig sind. Der Rmux 50 wird durch die Entnahmewarteschlange 72 gesteuert, die die Quelle (entweder die Ausführungseinheit 23 oder die Gleitkommaeinheit 27) des zu verarbeitenden (oder zu entnehmenden) nächsten Ergebnisses spezifiziert. Nicht ausgewählte Rmux-Quellen werden verzögert, bis die Entnahmewarteschlange 72 anzeigt, daß sie verarbeitet werden sollen. Die Entnahmewarteschlange 72 wird aus der Reihe der Operationen der Befehle des Befehlsstroms aktualisiert.
  • Da die Quellenwarteschlange 37 auf Befehlsoperanden zeigt, zeigt auch die Zielwarteschlange 38 auf das Ziel für die Befehlsergebnisse. Wenn das Ergebnis in einem GPR gespeichert werden soll, enthält die Zielwarteschlange 38 einen Zeiger auf das entsprechende GPR. Wenn das Ergebnis im Speicher gespeichert werden soll, zeigt die Zielwarteschlange 38 an, daß eine Anfrage an die Speichermanagementeinheit 25 erzeugt werden muß, die die physikalische Adresse des Ergebnisses in der PA- Warteschlange 56 enthält. Diese Informationen werden als Steuereingabe der Rmux-50-Logik zugeführt.
  • Sobald der Rmux die geeignete Quelle der Ergebnisinformationen auswählt, fragt er entweder nach einem Speichermanagementeinheit-25-Dienst oder sendet das Ergebnis auf dem Schreibbus 73, um es in die Registergruppe 41 oder in andere Datenpfadregister im Segment S5 der Pipeline zurückzuschreiben. Die Schnittstelle zwischen der Ausführungseinheit 2:3 und der Speichermanagementeinheit 25 ist für alle Anfragen der EM-Zwischenspeicher 74, der Steuerinformationen enthält und eine Adresse, Daten oder beides enthalten kann, in Abhängigkeit vom Typ der Anfrage. Zusätzlich zu den Operanden und Ergebnissen, die von der Befehlseinheit 22 im voraus geholt werden, kann die Ausführungseinheit 23 ferner explizit die Speicheranfragen an die Speichermanagementeinheit 23 ausgeben, um Daten zu lesen oder zu schreiben.
  • Die Gleitkommaeinheit 27 führt alle Gleitkommabefehle im Befehlssatz sowie die Langwort-Ganzzahl-Multiplikationsbefehle aus. Für jeden Befehl, den die Gleitkommaeinheit 27 ausführen soll, empfängt sie von der Mikrobefehlssteuereinheit 24 den Opcode und andere befehlsbezogene Informationen. Die Gleitkommaeinheit 27 empfängt Operandendaten von der Ausführungseinheit 23 auf den Bussen 47 und 48. Die Ausführung der Befehle wird in einer dedizierten Gleitkommaeinheit-27-Pipeline durchgeführt, die im Segment S4 der Fig. 7 erscheint, ist jedoch in Wirklichkeit mindestens drei Zyklen lang. Bestimmte Befehle, wie z. B. eine Ganzzahlmultiplikation, können mehrfache Durchläufe durch einige Segmente der Gleitkommaeinheit-27-Pipeline erfordern. Andere Befehle, wie z. B. Divisionen, sind überhaupt nicht pipelinegesteuert. Die Ergebnisse und der Status der Gleitkommaeinheit 27 werden in S4 über den Ergebnisbus 49 zum Rmux 50 in der Ausführungseinheit 23 für eine Entnahme zurückgegeben. Wenn ein F-Kasten-Befehl als nächstes entnommen werden soll, was durch die Entnahmewarteschlange 72 definiert wird, sendet der Rmux 50, wie durch die Zielwarteschlange 38 angegeben, die Ergebnisse entweder bei Registerzielen zu den GPRs oder bei Speicherzielen zur Speichermanagementeinheit 25.
  • Die Speichermanagementeinheit 25 operiert in den Segmenten 55 und S6 der Pipeline und behandelt alle Speicherzugriffe, die von den anderen Sektionen des Chips eingeleitet werden. Anfragen an die Speichermanagementeinheit 25 können von der Befehlseinheit 22 (für virtuelle Befehlscache-17- Auffüllungen und für Spezifiziererreferenzen) , von der Ausführungseinheit 23 oder der Gleitkommaeinheit 27 über den Rmux 50 und den EM-Zwischenspeicher 74 (für Befehlsergebnisspeichervorgänge und für explizite WZ Ausführungseinheit-23-Speicheranfragen), von der Speichermanagementeinheit 25 selbst (für Übersetzungspufferauffüllungen und PTE-Lesevorgänge) oder von der Cache-Steuereinheit 26 stammen (für ungültigkeiten und Cache-Auffüllungen). Alle virtuellen Referenzen werden vom DP oder dem Übersetzungspuffer 64, der im Segment S5 der Pipeline operiert, in eine physikalische Adresse übersetzt. Für Befehlsergebnisreferenzen, die von der Befehlseinheit 22 erzeugt werden, werden die übersetzten Adressen in der physikalischen Adreßwarteschlange 56 (PA-Warteschlange) gespeichert. Diese Adressen werden später mit den Daten von der Ausführungseinheit 23 oder der Gleitkommaeinheit 27 zusammengebracht, wenn das Ergebnis berechnet worden ist.
  • Die Cache-Steuereinheit 26 hält den Hintergrund-Cache 15 und greift auf diesen zu und steuert den Off-Chip-Bus (den CPU-Bus 20). Die Cache-Steuereinheit 26 empfängt Eingaben (Speicheranfragen) von der Speichermanagementeinheit 25 im 56-Segement der Pipeline und verwendet üblicherweise mehrere Zyklen zum Abschließen einer Anfrage. Aus diesem Grund ist die Cache-Steuereinheit 26 nicht in spezifischen Pipelinesegementen dargestellt. Wenn der Speicherlesevorgang im Primär-Cache 14 fehlschlägt, wird die Anfrage für eine Verarbeitung an die Cache- Steuereinheit 26 gesendet. Die Cache-Steuereinheit 26 sucht nach den Daten zuerst im Hintergrund-Cache 15 und füllt den Block im Primär-Cache 14 aus dem Hintergrund- Cache 15 auf, wenn die Daten vorhanden sind. Wenn die Daten nicht im Hintergrund-Cache 15 vorliegen, fordert die Cache-Steuereinheit 26 ein Cache-Auffüllen auf dem CPU-Bus 20 aus dem Speicher 12 an. Wenn der Speicher 12 die Daten zurückgibt, werden diese sowohl in den Hintergrund-Cache 15 als auch in den Primär-Cache 14 geschrieben (und möglicherweise in den virtuellen Befehls-Cache 17). Obwohl Primär-Cache-14-Auffüllungen durchgeführt werden, indem eine Anfrage an die Speichermanagementeinheit-25-Pipeline ausgegeben wird, werden die Daten so schnell wie möglich zu dem ursprünglichen Anfrager zurückgegeben, indem die Daten direkt auf einen Datenbus 75 gelegt und von dort auf den Speicherdatenbus 54 gelegt werden, sobald der Bus frei ist.
  • Trotz der Versuche, die Pipeline der Fig. 6 in gleichmäßigem Fluß zu halten, gibt es Bedingungen, die bewirken, daß Segmente der Pipeline angehalten werden.
  • Konzeptionell kann jedes Segment der Pipeline als Blackbox betrachtet werden, die in jedem Zyklus drei Schritte ausführt:
  • (1) Es wird die für das Pipelinesegment geeignete Task unter Verwendung von Steuer- und Eingangssignalen vom vorangehenden Pipelinesegment durchgeführt. Das Segment aktualisiert anschließend den lokalen Zustand (innerhalb des Segments), jedoch nicht den globalen Zustand (außerhalb des Segments).
  • (2) Unmittelbar vor dem Ende des Zyklus senden alle Segmente Anhaltebedingungen an den entsprechenden Zustandssequenzer für dieses Segment, der die Bedingungen bewertet und ermittelt, welche Pipelinesegmente, falls überhaupt, angehalten werden müssen.
  • (3) Wenn für ein Pipelinesegment keine Anhaltebedingungen vorliegen, erlaubt der Zustandssequenzer diesem, die Ergebnisse an das nächste Segment weiterzuleiten und die Ergebnisse vom vorangehenden Segment anzunehmen. Dies wird durch Aktualisieren des globalen Zustands bewerkstelligt.
  • Die Sequenz der Schritte wird insgesamt maximiert, indem jedem Pipelinesegment ermöglicht wird, anzunehmen, daß kein Anhalten auftritt (was der allgemeine Fall sein sollte). Wenn ein Anhalten am Ende des Zyklus auftritt, werden die Global zustand-Aktualisierungen blockiert, wobei die angehaltenen Segmente dieselbe Task (mit möglicherweise anderen Eingängen) im nächsten Zyklus (und im nächsten und übernächsten) wiederholen, bis die Anhaltebedingung beseitigt ist. Diese Beschreibung ist in einigen Fällen zu einfach, da manche globale Zustände von einem Segment aktualisiert werden müssen, bevor die Anhaltebedingung bekannt ist. Ferner müssen einige Tasks von einem Segment sofort und nur sofort durchgeführt werden. Diese werden in jedem Segment auf einer fallweisen Grundlage speziell behandelt.
  • Innerhalb einer bestimmten Sektion des Chips verursacht ein Anhalten in einem Pipelinesegment ferner Anhaltungen in allen stromaufseitig liegenden Segmenten der Pipeline (diejenigen, die in der Pipeline früher stattfinden). Im Gegensatz zum System des Patents 4.875.160 verursachen Halte in einem Segment der Pipeline keine Halte in stromabseitigen Segmenten der Pipeline. Zum Beispiel hat ein Speicherdatenhalt in diesem System auch einen Halt des stromabseitigen ALU-Segments verursacht. In der CPU 10 verursacht ein Speicherdatenhalt keinen Halt des ALU- Segments (es wird ein NO-OP in das Segment S5 eingefügt, wenn S4 zu S5 vorrückt).
  • Es gibt eine Anzahl von Haltbedingungen im Chip, die zu einem Pipelinehalt führen. Im folgenden werden alle kurz beschrieben.
  • In den Segmenten S0 und S1 der Pipeline können Halte nur in der Befehlseinheit 22 auftreten. In S0 gibt es nur einen Halt der auftreten kann:
  • (1) Vorausholwarteschlange 32 voll: im Normalbetrieb wird auf den virtuellen Befehls-Cache 17 in jedem Zyklus unter Verwendung der Adresse in VIBA 65 zugegriffen, wobei die Daten zur Vorausholwarteschlange 32 gesendet werden und VIBA 65 inkrementiert wird. Wenn die Vorausholwarteschlange 32 voll ist, wird die Inkrementierung von VIBA blockiert, wobei in jedem Zyklus erneut auf die Daten im virtuellen Befehls-Cache 17 zugegriffen werden, bis Raum für dieselben in der Vorausholwarteschlange 32 ist. Zu diesem Zeitpunkt wird das Vorausholen fortgesetzt.
  • Im Segment S1 der Warteschlange gibt es sieben Halte, die in der Befehlseinheit 22 auftreten können:
  • (1) Ungenügend Daten in der Voraushaiwarteschlange 32: die Bündeleinheit 33 versucht in jedem Zyklus, die nächste Befehlskomponente zu decodieren. Wenn nicht genug Bytes in der Voraushalwarteschlange 32 gültig sind, um die gesamte Komponente zu decodieren, wird die Bündeleinheit 33 angehalten, bis die benötigten Bytes vom virtuellen Befehls-Cache 17 geliefert werden.
  • (2) Quellenwarteschlange 37 oder Zielwarteschlange 38 voll: während der spezifiziererdecodierung muß die Quellen- und Zielwarteschlangezuweisungslogik genug Einträge in jeder Warteschlange zuweisen, um die Anforderungen der geprüften Spezifizierer zu erfüllen. Um zu garantieren, daß ausreichend Betriebsmittel verfügbar sind, müssen wenigstens zwei freie Quellenwarteschlangeneinträge und zwei freie Zielwarteschlangeneinträge vorhanden sein, um das Bündeln der Spezifizierer abzuschließen. Wenn nicht genügend freie Einträge in einer der Warteschlange vorhanden sind, hält die Bündeleinheit 33 an, bis freie Einträge verfügbar werden.
  • (3) MD-Gruppe voll: wenn ein komplexer Spezifizierer decodiert wird, muß die Quellenwarteschlange-37- Zuweisungslogik genug Speicherdatenregister in der Registergruppe 41 zuweisen, um die Anforderungen des geprüften Spezifizierers zu erfüllen. Um zu garantieren, daß genügend Betriebsmittel verfügbar sind, müssen wenigstens zwei freie Speicherdatenregister in der Registergruppe 41 verfügbar sein, um das Bündeln des Spezifizierers abzuschließen. Wenn nicht genügend freie Register vorhanden sind, wird die Bündeleinheit 33 angehalten, bis genug Datenregister verfügbar werden.
  • (4) Zweite bedingte Verzweigung decodiert: die Verzweigungsvorhersageeinheit 39 sagt den Pfad vorher, die jede bedingte Verzweigung einschlagen wird und leitet den Befehlsstrom auf der Grundlage dieser Vorhersage um. Sie behält einen Zustand, der geeignet ist, um den anderen Pfad wiederherzustellen, wenn die Vorhersage falsch war. Wenn eine zweite bedingte Verzweigung decodiert wird, bevor die erste von der Ausführungseinheit 23 aufgelöst worden ist, kann die Verzweigungsvorhersageeinheit 39 nirgendwo den Zustand speichern, so daß die Bündeleinheit 33 anhält, bis die Ausführungseinheit 23 die wahre Richtung der ersten Verzweigung auflöst.
  • (5) Befehlswarteschlange voll: wenn ein neuer Opcode von der Bündeleinheit 33 decodiert wird, versucht die Ausgabeeinheit 68 einen Eintrag für den Befehl zur Befehlswarteschlange 35 hinzuzufügen. Wenn nicht genügend freie Einträge in der Befehlswarteschlange 35 vorhanden sind, hält die Bündeleinheit 33 an, bis ein freier Eintrag verfügbar wird, was dann auftritt, wenn ein Befehl durch den Rmux 50 entnommen wird.
  • (6) Komplexspezifizierereinheit beschäftigt: wenn die Bündeleinheit 33 eine Befehlskomponente decodiert, die von der Pipeline der Komplexspezifizierereinheit 40 verarbeitet werden muß, erzeugt sie eine Anfrage für eine Bedienung durch die Komplexspezifizierereinheit 40 über einen S1-Anfragezwischenspeicher. Wenn dieser Zwischenspeicher von einer vorhergehenden Anfrage für den Dienst (entweder aufgrund eines Multizyklusflusses oder eines Komplexspezifizierereinheit-40-Halts) immer noch gültig ist, hält die Bündeleinheit 33 an, bis das gültige Bit in Anfragezwischenspeicher gelöscht ist.
  • (7) Unmittelbare Datenlänge nicht verfügbar: die Länge der Spezifizierererweiterung für unmittelbare Spezifizierer hängt von der Datenlänge des Spezifizierers für diesen speziellen Befehl ab. Die Datenlängeninformation stammt aus der Befehl.-ROM/PLA- Tabelle 66, auf die auf der Grundlage des Opcodes des Befehls zugegriffen wird. Wenn der Zugriff auf die Tabelle 66 nicht abgeschlossen ist, bevor ein unmittelbarer Spezifizierer decodiert wird (der der erste Spezifizierer des Befehls sein müßte), wird die Bündeleinheit 33 für einen Zyklus angehalten.
  • Im Segment S2 der Pipeline können Halte nur in der Befehlseinheit 22 oder der Mikrocodesteuervorrichtung 24 auftreten. In der Befehlseinheit 22 können zwei Halte auftreten:
  • (1) Ausstehendes Schreiben der Ausführungseinheit 23 oder der Gleitkommaeinheit 27: um bestimmte Spezifiziererspeicheradressen zu berechnen, muß die Komplexspezifizierereinheit 40 die Inhalte eines GPR aus der Registergruppe 41 lesen. Wenn ein anhängiges Schreiben der Ausführungseinheit 23 oder der Gleitkommaeinheit 27 in das Register vorliegt, verhindert die Befehlseinheit-22-GPR Punktetafel das GPR-Lesen durch Anhalten des Segments S2 der Pipeline der Komplexspezifizierereinheit 40. Der Halt wird fortgesetzt, bis das GPR-Schreiben abgeschlossen ist.
  • (2) Speicherdaten nicht gültig: für bestimmte Operationen erzeugt die Befehlseinheit 22 eine Speichermanagementeinheit-25-Anfrage, um Daten zurückzugeben, die zum Abschließen der Operation verwendet werden (z. B. des Lesens, das für die indirekte Adresse eines abgeleiteten Verschiebungsspezifizierers durchgeführt wird). Das Befehlseinheit-22-MD-Register enthält ein gültiges Bit, das gelöscht ist, wenn eine Anfrage durchgeführt wird, und gesetzt ist, wenn die Daten als Antwort auf die Anfrage zurückgegeben werden.
  • Wenn die Befehlseinheit 22 auf das Befehlseinheit-22-MD- Register zugreift, während das Gültigkeitsbit ausgeschaltet ist, wird das Segment S2 der Pipeline der Komplexspezifizierereinheit 40 angehalten, bis die Daten von der Speichermanagementeinheit 25 zurückgegeben werden.
  • In der Mikrocodesteuervorrichtung 24 kann während des Segments S2 ein Halt auftreten:
  • (1) Befehlswarteschlange leer: der letzte Mikrobefehl eines Ausführungsflusses eines Makrobefehls wird in der Ausführungseinheit 23 angezeigt, wenn ein Letzter-Zyklus- Mikrobefehl von der Mikrobefehlssteuereinheit 24 decodiert wird. Als Antwort auf dieses Ereignis erwartet die Ausführungseinheit 23, den ersten Mikrobefehl des nächsten Makrobefehlsflusses auf der Grundlage der Anfangsadresse in der Befehlswarteschlange 35 zu empfangen. Wenn die Befehlswarteschlange 35 leer ist, führt die Mikrobefehlssteuereinheit 24 der Befehlswarteschlange einen Halt-Mikrobefehl anslelle des nächsten Makrobefehlsflusses zu. Dies bewirkt einen Halt der Mikrobefehlssteuereinheit 24 für einen Zyklus.
  • Im segment S3 der Pipeline können Halte in der Befehlseinheit 22, in der Ausführungseinheit 23 oder entweder in der Ausführungseinheit 23 oder der Befehlseinheit 22 auftreten. In der Befehlseinheit 22 gibt es drei mögliche S3-Halte:
  • (1) Ausstehendes Ausführungseinheit-23-GPR-Lesen: zum Abschließen der Verarbeitung von Autoinkrement-, Autodekrement- und abgeleiteten Autoinkrementspezifizierern muß die Komplexspezifizierereinheit 40 das GPR mit dem neuen Wert aktualisieren. Wenn ein anhängiges Ausführungseinheit-23- Lesen des Registers über die Quellenwarteschlange 37 vorliegt, verhindert die Befehlseinheit-22-punktetafel das GPR-Schreiben durch Anhalten des Segments S3 der Pipeline der Komplexspezifizierereinheit 40. Der Halt wird fortgesetzt, bis die Ausführungseinheit 23 das GPR liest.
  • (2) Spezifiziererwarteschlange voll: für die meisten komplexen Spezifizierer gibt die Komplexspezifizierereinheit 40 eine Anfrage nach einem Dienst der Speichermanagementeinheit 25 für die vom Spezifizierer benötigte Speicheranfrage aus. Wenn in einer Spezifiziererwarteschlange 75 keine freien Einträge vorhanden sind, wird das Segment S3 der Pipeline der Komplexspezifizierereinheit 40 angehalten, bis ein freier Eintrag verfügbar wird.
  • (3) RLOG voll: Autoinkrement-, Autodekrement- und abgeleitete Autoinkrement-Spezifizierer erfordern einen freien Registerlogbuch-(RLOG)-Eintrag, in den die Änderung des GPR eingetragen wird. Wenn keine freien RLOG-Einträge vorhanden sind, während ein solcher Spezifizierer decodiert wird, wird das Segment S3 der Pipeline der Komplexspezifizierereinheit angehalten, bis ein freier Eintrag verfügbar wird.
  • In der Ausführungseinheit 23 können vier Halte im Segment S3 auftreten:
  • (1) Speicherlesedaten nicht gültig: in einigen Fällen kann die Ausführungseinheit 23 eine explizite Leseanfrage an die Speichermanagementeinheit 25 ausgeben, um Daten in eines der sechs Ausführungseinheit-23-Arbeitsregister in der Registergruppe 41 zurückzugeben. Wenn die Anfrage ausgegeben wird, wird das Gültigkeitsbit des Registers gelöscht. Wenn die Daten in das Register geschrieben werden, wird das Gültigkeitsbit gesetzt. Wenn die Ausführungseinheit 23 auf das Arbeitsregister in der Registergruppe 41 zugreift, während das Gültigkeitsbit gelöscht ist, wird das Segment 53 der Ausführungseinheit-23-Pipeline angehalten, bis der Eintrag gültig wird.
  • (2) Feldwarteschlange nicht gültig: für jeden Makrobefehl, der einen Feldtyp-Spezifizierer enthält, verzweigt der Mikrocode auf den ersten Eintrag in der Feldwarteschlange 71, um zu ermitteln, ob der Feldspezifizierer ein GPR oder den Speicher adressiert. Wenn die Ausführungseinheit 23 auf das Arbeitsregister zugreift, während das Gültigkeitsbit gelöscht ist, wird das Segment S3 der Ausführungseinheit-23-Pipeline angehalten, bis der Eintrag gültig wird.
  • (3) Ausstehendes F-Kasten-GPR-Schreiben: da die Gleitkommaeinheit-27-Berechnungspipeline mehrere Zyklen lang ist, kann die Ausführungseinheit 23 mit der Verarbeitung nachfolgender Befehle beginnen, bevor die Gleitkommaeinheit 27 den ersten Befehl abschließt. Wenn das Befehlsergebenis der Gleitkommaeinheit 27 für ein GPR in der Registergruppe 41 bestimmt ist, auf das von einem nachfolgenden Ausführungseinheit-23-Mikrowort zugegriffen wird, wird das Segment S3 der Ausführungseinheit-23- Pipeline angehalten, bis das Gleitkommaeinheit-27- Schreiben in das GPR stattgefunden hat.
  • (4) F-Kasten-Befehlswarteschlange voll: wenn ein Befehl an die Gleitkommaeinheit 27 ausgegeben wird, wird ein Eintrag in der Gleitkommaeinheit-27-Befehlswarteschlange hinzugefügt. Wenn in der Warteschlange keine freien Einträge vorhanden sind, wird das Segment S3 der Ausführungseinheit-23-Pipeline angehalten, bis ein freier Eintrag verfügbar wird.
  • Zwei Halte können in S3 entweder in der Ausführungseinheit 23 oder in der Gleitkommaeinheit 27 auftreten.
  • (1) Quellenwarteschlange leer: die meisten Befehlsoperanden werden von der Befehlseinheit 22 im voraus geholt, die einen Zeiger auf den Operandenwert in die Quellenwarteschlange 37 schreibt. Die Ausführungseinheit 23 greift anschließend auf bis zu zwei Operanden pro Zyklus indirekt über die Quellenwarteschlange 37 zu, um sie der Ausführungseinheit 23 oder der Gleitkommaeinheit 27 zu liefern. Wenn einer der Quellenwarteschlangeneinträge, auf die zugegriffen wird, nicht gültig ist, wird das Segment S3 der Ausführungseinheit-23-Pipeline angehalten, bis der Eintrag gültig wird.
  • (2) Speicheroperand nicht gültig: Speicheroperanden werden von der Befehlseinheit 22 im voraus geholt, wobei die Daten entweder von der Speichermanagementeinheit 25 oder von der Befehlseinheit 22 in die Speicherdatenregister in der Registergruppe 41 geschrieben werden. Wenn ein Quellenwarteschlangen-37- Eintrag, auf den zugegriffen wird, auf ein Speicherdatenregister zeigt, das nicht gültig ist, wird das Segment S3 der Ausführungseinheit-23-Pipeline angehalten, bis der Eintrag gültig wird.
  • Im Segment S4 der Pipeline können zwei Halte in der Ausführungseinheit 23 auftreten, einer in der Gleitkommaeinheit 27, und vier entweder in der Ausführungseinheit 23 oder der Gleitkommaeinheit 27. In der Ausführungseinheit 23 können auftreten:
  • (1) Verzweigungswarteschlange leer: Wenn von der Befehlseinheit 22 eine bedingte oder eine unbedingte Verzweigung decodiert wird, wird der Verzweigungswarteschlange 70 ein Eintrag hinzugefügt. Für bedingte Verzweigungsbefehle zeigt der Eintrag der Befehlseinheit 22 die Vorhersage der Verzweigungsrichtung an. Auf die Verzweigungswarteschlange wird von der Ausführungseinheit 23 zugegriffen, um zu überprüfen, ob die Verzweigungsverschiebung gültig war, und um die aktuelle Verzweigungsrichtung mit der Vorhersage zu vergleichen. Wenn der Verzweigungswarteschlangeneintrag von der Befehlseinheit 22 noch nicht durchgeführt worden ist, wird das Segment 54 der Ausführungseinheit-23- Pipeline angehalten, bis der Eintrag gemacht ist.
  • (2) F-Kasten-GPR-Operanden-Punktetafel voll: Die Ausführungseinheit 23 implementiert eine Registerpunktetafel, um die Ausführungseinheit 23 daran zu hindern, ein GPR zu lesen, für das ein ausstehendes Schreiben seitens der Gleitkommaeinheit 27 vorliegt. Für jeden Gleitkommaeinheit-27-Befehl, der ein GPR-Ergebnis schreiben wird, fügt die Ausführungseinheit 23 einen Eintrag in der Gleitkommaeinheit-27-GPR-Punktetafel hinzu. Wenn die Punktetafel voll ist, während die Ausführungseinheit 23 versucht, einen Eintrag hinzuzufügen, wird das Segment 54 der Ausführungseinheit-23-Pipeline angehalten, bis ein freier Eintrag verfügbar wird.
  • In der Gleitkommaeinheit 27 kann ein Halt in 54 auftreten:
  • (1) F-Kasten-Operand nicht gültig: Befehle werden dann an die Gleitkommaeinheit 27 ausgegeben, wenn der Opcode von der Mikrobefehlssteuereinheit 24 aus der Befehlswarteschlange 35 entnommen wird. Die Operanden für den Befehl können etwas später über die Busse 47, 48 eintreffen. Wenn die Gleitkommaeinheit 47 versucht, die Befehlsausführung einzuleiten, wenn die Operanden noch nicht gültig sind, wird die Gleitkommaeinheit-27-Pipeline angehalten, bis die Operanden gültig werden.
  • Entweder in der Ausführungseinheit 23 oder der Gleitkommaeinheit 27 können die folgenden vier Halte im Pipelinesegment S4 auftreten:
  • (1) Zielwarteschlange leer: Die Zielspezifizierer für die Befehle werden von der Befehlseinheit 22 verarbeitet, die einen Zeiger auf das Ziel (entweder GPR oder Speicher) in die Zielwarteschlange 38 schreibt. Auf die Zielwarteschlange 38 wird in zwei Fällen zugegriffen: Wenn die Ausführungseinheit 23 oder die Gleitkommaeinheit 27 Befehlsergebnisse über den Rmux 50 speichern, und wenn die Ausführungseinheit 23 versucht, das Ziel der Gleitkommaeinheit-27-Befehle der Ausführungseinheit-23- GPR-Punktetafel hinzuzufügen. Wenn der Zielwarteschlangeneintrag nicht gültig ist (was der Fall ist, wenn die Befehlseinheit 22 die Verarbeitung des Zielspezifizierers noch nicht abgeschlossen hat) tritt ein Halt auf, bis der Eintrag gültig wird.
  • (2) PA-Warteschlange leer: Für Speicherzielspezifizierer sendet die Befehlseinheit 22 die virtuelle Adresse des Ziels zur Speichermanageinenteinheit 25, die diese übersetzt und die physikalische Adresse zur PA- Warteschlange 26 hinzufügt. Wenn die Zielwarteschlange 38 anzeigt, daß das Befehlsergebnis in den Speicher geschrieben werden soll, wird eine Speicheranfrage an die Speichermanagementeinheit 25 erzeugt, die die Daten für das Ergebnis liefert. Die Speichermanagementeinheit 25 bringt die Daten mit der ersten Adresse in. der PA- Warteschlange 56 zusammen und führt das Schreiben durch. Wenn die PA-Warteschlange nicht gültig ist, während die Ausführungseinheit 23 oder die Gleitkommaeinheit 27 ein Speicherergebnis fertig haben, hält der Rmux 50 an, bis der Eintrag gültig wird. Als Folge hiervon wird ebenfalls die Quelle des Rmux-Eingangs (die Ausführungseinheit 23 oder die Gleitkommaeinheit 27) angehalten.
  • (3) EM-Zwischenspeicher voll: Alle impliziten und expliziten Speicheranfragen, die von der Ausführungseinheit 23 oder der Gleitkommaeinheit 27 erzeugt werden, laufen durch den EM-Zwischenspeicher 74 zur Speichermanagementeinheit 25. Wenn die Speichermanagementeinheit 25 immer noch die vorangehende Anf rage verarbeitet, während eine neue Anfrage erzeugt wird, wird der Rmux 30 angehalten, bis die vorangehende Anfrage abgeschlossen ist. Als Folge hiervon wird die Quelle des Rmux-50-Eingangs (Ausführungseinheit 23 oder Gleitkommaeinheit 27) ebenfalls angehalten.
  • (4) Rmux ausgewählt für eine andere Quelle: Makrobefehle müssen in der Reihenfolge abgeschlossen werden, in der sie im Befehlsstrom erscheinen. Die Ausführungseinheit-23-Entnahmewarteschlange 72 ermittelt, ob der nächste abzuschließende Befehl von der Ausführungseinheit 23 oder der Gleitkommaeinheit 27 stammt. Wenn der nächste Befehl aus einer Quelle stammt und die andere eine Rmux-50-Anfrage erzeugt, wird die andere Quelle angehalten, bis die Entnahmewarteschlange anzeigt, daß der nächste Befehl von dieser Quelle stammen soll.
  • Zusätzlich zu den Halten kann der Pipelinefluß durch "Ausnahmen" vom Ideal abweichen. Eine Pipelineausnahme tritt auf, wenn ein Segment der Pipeline ein Ereignis detektiert, das erfordert, daß der normale Fluß der Pipeline zu Gunsten eines weiteren Flusses angehalten wird. Es gibt zwei grundsätzliche Typen von Pipelineausnahmen: Diejenigen, die den ursprünglichen Pipelinefluß fortsetzen, sobald die Ausnahme korrigiert ist, und diejenigen, die eine Intervention des Betriebssystems erfordern. Ein Fehlgriff im Übersetzungspuffer 55 bei einem Speicherzugriff ist ein Beispiel des ersten Typs, während eine Zugriffskontrollverletzung (Speicherschutzverletzung) ein Beispiel des zweiten Typs ist.
  • Neustartfähige Ausnahmen werden vollständig innerhalb der Grenzen der Sektion behandelt, die das Ereignis detektiert hat. Andere Ausnahmen müssen der Ausführungseinheit 23 zur Verarbeitung gemeldet werden. Da die CPU 10 makropipelinegesteuert ist, können Ausnahmen von Sektionen der Pipeline detektiert werden, lange bevor der Befehl, der die Ausnahme verursacht, wirklich von der Ausführungseinheit 23 oder der Gleitkommaeinheit 27 ausgeführt wird. Die Benachrichtigung über die Ausnahme wird jedoch verzögert, bis der Befehl von der Ausführungseinheit 23 oder der Gleitkommaeinheit 27 ausgeführt wird. Zu diesem Zeitpunkt wird ein Ausführungseinheit-23-Hantierer aktiviert, um das Ereignis zu verarbeiten.
  • Da die Ausführungseinheit 23 und die Gleitkommaeinheit 27 mikropipelinegesteuert sind, muß der Zeitpunkt, zu dem ein Ausnahmehantierer aktiviert wird, sorgfältig gesteuert werden. Zum Beispiel können sich drei Makrobefehle in den Segmenten S3, S4 und D5 der Ausführungseinheit-23-Pipeline in Ausführung befinden. Wenn eine Ausnahme für den Makrobefehl im Segment S3 gemeldet wird, muß den zwei Makrobefehlen, die sich in den Segmenten S4 und S5 befinden, ermöglicht werden abzuschließen, bevor der Ausnahmehantierer aktiviert wird.
  • Um dies zu bewerkstelligen, ist die S4/S5-Grenze in der Ausführungseinheit 23 als Festschreibungspunkt für einen Mikrobefehl definiert. Der Architekturzustand wird nicht vor Beginn des Segments S5 der Pipeline modifiziert, sofern nicht ein bestimmter Mechanismus zur Wiederherstellung des ursprünglichen Zustands vorhanden ist, wenn eine Ausnahme detektiert wird (das Befehlseinheit-22-RLOG ist ein Beispiel fur einen solchen Mechanismus). Die Ausnahmemeldung wird verzögert, bis der Mikrobefehl, zu dem das Ereignis gehört, versucht, die S4/S5-Grenze zu überschreiten. Zu diesem Zeitpunkt wird die Ausnahme gemeldet und ein Ausnahmehantierer aktiviert. Durch Verzögern der Ausnahmemeldung bis zu diesem Zeitpunkt wird dem vorangehenden Mikrobefehl (der zum vorangehenden Makrobefehl gehören kann) ermöglicht, abzuschließen.
  • Die meisten Ausnahmen werden durch Anfordern eines Mikrotraps von der Mikrobefehlssteuereinheit 24 gemeldet. Wenn die Mikrobefehlssteuereinheit 24 eine Mikrotrapanfrage empfängt, veranlaßt sie die Ausführungseinheit 23, alle ihre Halte zu unterbrechen, bricht die Ausführungseinheit-23-Pipeline ab und fügt die Adresse eines Hantierers für das Ereignis in einen Adreßzwischenspeicher für den Steuerspeicher 43 ein. Dies startet eine Ausnahmeeinheit-23-Mikrocoderoutine, die die Ausnahme geeignet verarbeitet. Bestimmte andere Arten von Ausnahmen werden gemeldet durch einfaches Einfügen der geeigneten Hantiereradresse in den Steuerspeicher 43 an einen geeigneten Punkt.
  • In der CPU 10 gibt es Ausnahmen zweier Typen: Fehler und Traps. Für beide Typen veranlaßt der Mikrocodehantierer für die Ausnahme die Befehlseinheit 22, alle GPR- Modifikationen, die sich im RLOG befinden, auszusetzen, und stellt den PC aus der PC-Warteschlange wieder her. Bei Fehlern ist der zurückgegebene PC der PC des Opcodes des Befehls, der die Ausnahme verursacht hat. Bei Traps ist der zurückgegebene PC der PC des Opcodes des nächsten auszuführenden Befehls. Der Mikrocode konstruiert anschließend den geeigneten Ausnahmerahmen auf dem Stapel und übergibt ihn mittels eines geeigneten Vektors an das Betriebssystem.
  • Die Befehlseinheit (I-Kasten):
  • In Fig. 8 ist die Befehlseinheit genauer gezeigt. Die Befehlseinheit 22 dient zum Holen, Prüfen und Verarbeiten des Befehlsstroms, wobei sie versucht, eine konstante Zufuhr geprüfter Makrobefehle aufrechtzuerhalten, die für die Ausführung der Ausführungseinheit 23 zur Verfügung stehen. Die pipelinegesteuerte Konstruktion der CPU 10 ermöglicht, daß mehrere Makrobefehle innerhalb der CPU in verschiedenen Stufen der Ausführung vorhanden sind, wie in Fig. 6 gezeigt ist. Die Befehlseinheit 22, die halbautonom zur Ausführungseinheit 23 läuft, prüft die Makrobefehle, die dem Befehl folgen, der derzeit in der Ausführungseinheit 23 ausgeführt wird. Es wird eine verbesserte Leistung erhalten, wenn die Zeitspanne für das Prüfen in der Befehlseinheit 22 in der Ausführungszeit eines vorangehenden Befehls in der Ausführungseinheit 23 aufgeht. Die Befehlseinheit 22 plaziert die während des Prüfens erzeugten Informationen im voraus im Befehlsstrom in den Warteschlangen 35, 37 und 38. Die Befehlswarteschlange 35 enthält befehlsspezifische Informationen, die den Opcode (ein oder zwei Bytes), einen Merker, der einen Gleitkommabefehl anzeigt, sowie einen Einsprungpunkt für den Mikrobefehlssequenzer 42. Die Quellenwarteschlange 37 enthält Informationen über jeden einzelnen der Quellenoperanden für die Befehle in der Befehlswarteschlange 35, die entweder den aktuellen Operanden (wie bei einem Kurzliteral, das im Befehlsstrom selbst enthalten ist) oder einen Zeiger auf den Ort des Operanden enthalten. Die Zielwarteschlange 38 enthält Informationen, die Ausführungseinheit 23 benötigt, um den Speicherort für die Ergebnisse der Ausführung auszuwählen. Diese drei Warteschlangen ermöglichen der Befehlseinheit 22, parallel zur Ausführungseinheit 23 zu arbeiten; da die Ausführungseinheit 23 die Einträge in den Warteschlangen verbraucht, prüft die Befehlseinheit 22 im voraus und fügt mehr hinzu - im Idealfall bleibt die Befehlseinheit 22 weit genug vor der Ausführungseinheit 23, so daß die Ausführungseinheit 23 nie aufgrund einer leeren Warteschlange anhalten muß.
  • Die Befehlseinheit 22 benötigt Zugriff auf den Speicher für Befehls- und Operandendaten; Anfragen für diese Daten werden von der Befehlseinheit 22 über einen gemeinsamen Anschluß, einen Leseanfragebus 53, erzeugt, indem sie Adressen an die Speichermanagementeinheit 25 sendet. Alle Daten sowohl für die Befehlseinheit 22 als auch die Ausführungseinheit 23 werden auf den gemeinsam genutzten Speicherdatenbus 54 zurückgegeben. Die Speichermanagementeinheit 25 enthält Warteschlangen, um den Speicheranfragenverkehr zeitlich zu verteilen. Ein Spezifiziereranfragenzwischenspeicher oder eine Spezifiziererwarteschlange 75 hält die Anfragen von der Befehlseinheit 22 für die Operandendaten, während der Befehlsanfragenzwischenspeicher oder I-ref- Zwischenspeicher 76 Anfragen von der Befehlseinheit 22 für Befehlsstromdaten hält; diese zwei Zwischenspeicher ermöglichen der Befehlseinheit 22, Speicheranfragen über den Bus 53 sowohl für Befehls- als auch für Operandendaten auszugeben, obwohl die Speichermanagementeinheit 25 andere Anfragen verarbeiten kann.
  • Die Befehlseinheit 22 unterstützt vier Hauptfunktionen: Befehlsstrom-Vorausholen, Befehlsprüfung, Operandenspezifizierverarbeitung und Verzweigungsvorhersage. Das Befehlsstrom-Vorausholen schafft eine stetige Quelle von Befehlsstromdaten für die Befehlsprüfung. Während die Befehlsprüfungsschaltung einen Befehl verarbeitet, holt die Befehlsvorausholschaltung mehrere Befehle im voraus. Die Befehlsprüfungsfunktion prüft den ankommenden Dalenstrom, identifiziert jede der Befehlskomponenten - Opcode, Spezifizierer und dergleichen - und beginnt deren Verarbeitung. Opcodes und zugehörige Informationen werden direkt über den Bus 36 in die Befehlswarteschlange 35 weitergeleitet. Die Operandenspezifiziererinformationen werden zu der Schaltung weitergeleitet, die die Operanden in der Registergruppe 41, im Speicher (Cache oder Speicher 12) oder im Befehlsstrom (Literale) lokalisiert, und plaziert die Informationen in den Warteschlangen 37 und 38 und bewirkt die erforderlichen Speicherzugriffe über den Bus 53 und die Spezifiziererwarteschlange 75. Wenn ein bedingter Verzweigungsbefehl entdeckt wird, ist die Bedingung nicht bekannt, bis der Befehl die Ausführungseinheit 23 erreicht und alle Bedingungscodes verfügbar sind, so daß dann, wenn sich der Befehl in der Befehlseinheit 22 befindet, nicht bekannt ist, ob die Verzweigung wahrgenommen wird. Aus diesem Grund wird ein Verzweigungsvorhersageschaltung 39 verwendet, um den Befehlsstrompfad auszuwählen, der verfolgt wird, wenn die jeweilige bedingte Verzweigung entdeckt wird. Für jeden bedingten Verzweigungsbefehl des Befehlssatzes wird eine Verzweigungs-Historie-Tabelle 77 gehalten, die Einträge für die letzten vier Auftritte jeder bedingten Verzweigung enthält, die anzeigen, ob die Verzweigung wahrgenommen wurde. Auf der Grundlage dieser Historie- Tabelle 77 erzeugt eine Vorhersageschaltung 78 eine "Wahrnehmen" -Entscheidung oder "Nicht Wahrnehmen"- Entscheidung, wenn ein bedingter Verzweigungsbefehl erreicht wird, und beginnt ein Holen der neuen Adresse, wobei die bereits geholten oder im Befehls-Cache befindlichen Befehle verworfen werden, wenn die Verzweigung wahrgenommen werden soll. Nachdem der Befehl in der Ausführungseinheit 23 ausgeführt worden ist, wird anschließend die wirkliche Wahrnehm- oder Nichtwahrnehm- Entscheidung in der Historie-Tabelle 77 aktualisiert.
  • Der Spezifizierer-Steuerbus 78 liegt an einer Komplexspezifizierereinheit 40 an, die ihrerseits ein Prozessor ist, der einen Mikrosequenzer und eine ALU enthält und zum Manipulieren der Inhalte der Register in der Registergruppe 45 und zum Zugreifen auf den Speicher über den Speicherdatenbus 54 dient, um die Operanden zu erzeugen, die anschließend von der Ausführungseinheit benötigt werden, um den Makrobefehl auszuführen. Der Spezifizierer-Steuerbus 78 legt ferner an der Operandenwarteschlangeneinheit 69 an, die "einfache" Operandenspezifizierer behandelt, indem sie die Spezifizierer zu den Quellen- und Zielwarteschlangen 37 und 38 über den Bus 36 weiterleitet; diese einfachen Operanden umfassen Literale (der Operand ist im Befehl selbst enthalten) oder Registermodusspezifizierer, die einen Zeiger auf eines der Register der Registergruppe 41 enthalten. Für komplexe Spezifizierer sendet die Operandenwarteschlangeneinheit 79 einen Index auf einen Bus 80 zur Komplexspezifizierereinheit 40, um das erste der Speicherdatenregister der Registergruppe 41 zu definieren, das von der Komplexspezifizierereinheit 40 als Ziel bei der Berechnung des Spezifiziererwerts verwendet wird. Die Operandenwarteschlangeneinheit 79 kann bis zu zwei Quellenwarteschlange-37-Einträge und zwei Zielwarteschlangeneinträge über den Bus 36 in einem einzigen Zyklus senden. Der Spezifizierer-Steuerbus 78 ist ferner mit einer Punktetafeleinheit 81 verbunden, die die Anzahl der ausstehenden Referenzen auf Universalregister in der Registergruppe 41 verfolgt, die in den Quellen- und Zielwarteschlangen 37 und 38 enthalten sind. Der Zweck hiervon ist, ein Schreiben in ein Register zu verhindern, für das ein ausstehendes Lesen vorliegt, oder ein Lesen aus einem Register zu verhindern, für das ein ausstehendes Schreiben vorliegt. Wenn ein Spezifizierer entnommen wird, sendet die Ausführungseinheit 23 Informationen darüber, welches Register zurückzustellen ist, über den Bus 82 zur Komplexspezifizierereinheit 40, zur Operandenwarteschlangeneinheit 79 und zur Punktetafeleinheit 81. Der Inhalt des Spezifizierer Steuerbusses 78 enthält für jeden Spezifizierer folgendes: Eine Identifikation des Spezifizierertyps; Daten, wenn der Spezifizierer ein Kurzliteral ist; die Zugriffstyp und die Datenlänge des Spezifizierers; eine Angabe, ob er ein komplexer Spezifizierer ist; eine Abfertigungsadresse für das Steuer-ROM in der Komplexspezifizierereinheit 40. Die Befehlsbündeleinheit 33 leitet diese Informationen aus einem neuen Opcode ab, der aus der Vorausholwarteschlange 32 über die Leitung 83 angenommen worden ist, wodurch die folgenden Informationen erzeugt werden: die Anzahl der Spezifizierer für diesen Befehl; die Identifizierung einer Verzweigungsverschiebung und deren Größe, Zugriffstyp und Datenlänge für jeden einzelnen von bis zu sechs Spezifizierern, eine Angabe, ob dies ein Gleitkommaeinheit-27-Befehl ist, eine Abfertigungsadresse für das Steuer-ROM 43 und dergleichen. In jedem Zyklus bewertet die Befehlsbündeleinheit 33 die folgenden Informationen, um zu ermitteln, ob ein Operandenspezifizierer verfügbar ist und wie viele Vorausholwarteschlangen-32-Bytes entnommen werden sollten, um zum nächsten Opcode oder Spezifizierer zu gelangen: (1) Die Anzahl der verfügbaren Vorausholwarteschlange-32-Bytes, die durch einen Wert von 1 bis 6 angegeben wird, der von der Vorauswarteschlange 32 zur Verfügung gestellt wird; (2) die Anzahl der Spezifizierer, die in diesem Befehlsstrom für diesen Befehl noch zu prüfen sind, auf der Grundlage eines laufenden Zählers, der von der Befehlsbündelehnheit 33 für den aktuellen Befehl gehalten wird; (3) die Datenlänge des nächsten Spezifizierers; (4) eine Angabe, ob die Komplexspezifizierereinheit 40 beschäftigt ist (wenn sie für diesen Befehl verwendet wird); (5) eine Angabe, ob die Datenlängeninformation aus der Tabelle 66 bereits zur verfügung steht; und dergleichen.
  • Einige Befehle besitzen Ein- oder Zwei-Byte-Befehlsverschiebungen, was durch die aus dem Opcode abgeleiteten Ausgaben aus der Tabelle 66 angezeigt wird. Die Verzweigungsverschiebung ist immer das letzte Datenelement für einen Befehl und wird von der Befehlsvorhersageeinheit 39 verwendet, um das Verzweigungsziel zu berechnen, das über die Busse 22bs und 22bq zur Einheit 39 gesendet wird. Eine Verzweigungsverschiebung wird verarbeitet, wenn die folgenden Bedingungen erfüllt sind: (1) es sind keine zu verarbeitenden Spezifizierer übrig; (2) die benötigte Anzahl von Bytes (1 oder 2) ist in der Vorausholwarteschlange 32 verfügbar, (3) es ist kein Verzweigungshalt gesetzt, der auftritt, wenn eine zweite bedingte Verzweigung empfangen wird, bevor die erste abgeschlossen ist.
  • In Fig. 9 ist die Komplexspezifizierereinheit 40 genauer gezeigt. Die Komplexspezifizierereinheit 40 ist eine dreistufige (S1, S2, S3), mikrocodierte Pipeline, die zur Behandlung der Operandenspezifizierer dient, die eine komplexe Verarbeitung und/oder einen Zugriff auf den Speicher erfordern. Sie hat Lese- und Schreibzugriff auf die Registergruppe 41 und einen Anschluß zur Speichermanagementeinheit 25. Speicheranfragen werden von der Komplexspezifizierereinheit 40 empfangen und an die Speichermanagementeinheit 25 weitergeleitet, wenn sich ein Zyklus ergibt, der frei von Spezifiziererspeicheranfragen ist; d. h. es wird versucht, die Operandenanfragen für die aktuellen Befehle abzuschließen, bevor neue Befehle geholt werden. Die Komplexspezifizierereinheit 40 enthält eine ALU 84, die A- und B-Eingangsbusse 85 und 86 und einen Ausgangsbus 87 besitzt, um in die Registergruppe 41 in der Ausführungseinheit 23 zu schreiben; alle diese Datenpfade umfassen 32 Bits. Die A- und B-Eingänge werden in den S3- Zwischenspeichern 88 zwischengespeichert, die während S2 durch die Ausgänge 89 und 90 der Auswahlvorrichtungen 91 und 92 angesteuert werden. Diese Auswahlvorrichtungen empfangen Daten vom Spezifiziererdatenbus 78, vom Speicherdatenbus 54, von der Registergruppe 41 über den Bus 93, den Ausgangsbus 87 der ALU 84, vom PC über die Leitung 95, vom virtuellen Befehlscache-17-Anfragebus 96 und dergleichen. Einige von diesen werden in den S2- Zwischenspeichern 97 zwischengespeichert. Der Adreßausgang der Befehlseinheit 22 wird von einer Auswahlvorrichtung 98 erzeugt, die den ALU-Ausgang 87 empfängt, die virtuelle Befehlscache-17-Anfrage 96 und den A-Bus 85 erzeugt. Die in der ALU 84 ausgeführten Operationen und die von den Auswahlvorrichtungen 91, 92 und 98 bewerkstelligten Auswahlvorgänge werden durch einen Mikrosequenzer gesteuert, der einen Steuerspeicher 100 enthält, der ein 29 Bit breites Mikrowort auf dem Bus 101 als Antwort auf eine Mikrobefehlsadresse am Eingang 102 erzeugt. Der Steuerspeicher enthält in einem Beispiel 128 Wörter. Das Mikrowort wird in S1 auf der Grundlage einer Adresse am Eingang 102 von der Auswahlvorrichtung 103 erzeugt und in den Pipeline-Zwischenspeichern 104 und während S2 und S3 zwischengespeichert, um die Operation der ALU 84 und dergleichen zu steuern.
  • Die Befehlseinheit 22 führt ihre Operationen in den ersten vier Sequenzen der Pipeline S0-S4 aus. Im S0 wird auf den virtuellen Befehls-Cache 17 zugegriffen und die vorausholwarteschlange 32 geladen; der virtuelle Befehls- Cache 17 versucht die Vorausholwarteschlange mit bis zu 8 Bytes an Befehlsstromdaten zu füllen. Es wird angenommen, daß der virtuelle Befehls-Cache 17 voraus mit Befehlsstromblöcken geladen worden ist, die die sequentiellen Befehle enthält, die zum Auffüllen der vorausholwarteschlange 32 benötigt werden. In S1 prüft die Befehlsbündeleinheit 33 die ankommenden Befehlsdaten, d. h. sie bricht diese in Opcodes, Operandenspezifizierer, Spezifizierererweiterungen und Verzweigungsverschiebungen auf, und leitet die Ergebnisse den anderen Abschnitten der Befehlseinheit 22 zur weiteren Verarbeitung zu, woraufhin die Befehlsausgabeeinheit 68 die Opcodes, die von der Befehlsausgabeeinheit 83 zur Verfügung gestellt werden, annimmt und Mikrocodeabfertigungsadressen und andere Informationen erzeugt, die von der Mikrobefehlseinheit 24 benötigt werden, um die Befehlsausführung zu beginnen. Wie in S1 sagt die Verzweigungsvorhersageeinheit 39 vorher, ob Verzweigungen wahrgenommen werden, und leitet die Befehlseinheit-22-Befehlsverarbeitung bei Bedarf um, wobei die Operandenwarteschlangeneinheit 79 Ausgangssignale am Bus 36 für die Quellen- und Zielwarteschlangen 37 und 38 erzeugt und die Punktetafeleinheit 81 die ausstehenden Lese- und Schreibreferenzen für die GPRs in der Registergruppe 41 verfolgt. In der Komplexspezifizierereinheit 40 greift der Mikrosequenzer auf den Steuerspeicher 100 zu, um ein Mikrowort auf den Leitungen 101 in S1 zu erzeugen. In der Pipelinestufe S2 führt die Komplexspezifizierereinheit 40 ihre Leseoperation durch, greift auf die benötigten Register in der Registergruppe 41 zu und leitet die Daten an ihre ALU 84 in der nächsten Pipelinestufe weiter. Anschließend führt die ALU 84 in der Stufe S3 ihre Operation durch und schreibt das Ergebnis entweder in ein Register in der Registergruppe 41 oder in lokale temporäre Register; dieses Segment enthält ferner die Schnittstelle zur Speichermanagementeinheit 25 - Anfragen werden zur Speichermanagementeinheit 25 gesendet, um bei Bedarf Operanden zu holen (was leicht zu Halten führt, während auf die Rückgabe der Daten gewartet wird).
  • Der virtuelle Befehls-Cache (VIC):
  • In Fig. 10 ist der virtuelle Befehls-Cache 17 genauer gezeigt. Der virtuelle Befehls-Cache 17 enthält einen 2kByte-Datenspeicher 106, der ferner 64 Merker speichert. Der Datenspeicher ist in Farm von zwei Blöcken 107 und 108 mit 32 Zeilen konfiguriert. Jeder Block 107, 108 ist 256 Bits breit, so daß er ein Hexawort an Befehlsstromdaten (vier Vierwörter) enthält. Ein Zeilendecodierer 109 empfängt die Bits < 9:5> der virtuellen Adresse aus dem VIBA-Register 65 und wählt 1- Aus-32 Indizes 110 (Zeilen) aus, um zwei Hexawörter an Befehlsstromdaten auf den Spaltenleitungen 111 der Speichermatrix auszugeben. Die Spaltendecodierer 112 und 113 wählen auf der Grundlage der Bits < 4:3> der virtuellen Adresse eine von vier aus. Somit wählt der virtuelle Befehls-Cache 17 in jedem Zyklus zwei Hexawort- Stellen aus, um sie auf den Bussen 114 und 115 auszugeben. Die zwei 22-Bit-Merker von den Merkerspeichern 116 und 117, die vom 1-aus-32- Zeilendecodierer 109 ausgewählt werden, werden auf den Leitungen 118 und 119 für den ausgewählten Index ausgegeben und mit den Bits < 31:10> der Adresse im VIBA- Register 65 mittels der Merkervergleichsschaltungen 120 und 121 verglichen. Wenn einer der Merker eine Übereinstimmung erzeugt, wird auf der Leitung 122 ein Treffer signalisiert, wobei das Vierwort auf dem Bus 123 ausgegeben wird und zur Vorausholwarteschlange 32 gelangt. Wenn ein Fehlgriff signalisiert wird (Cache- Treffer auf 122 nicht gesetzt), dann wird eine Speicherreferenz erzeugt, indem die VIBA-Adresse über den Bus 96 und die Komplexspezifizierereinheit 40 auf den Adreßbus 53 gesendet wird, wie in Fig. 8 gezeigt ist; die Befehlsstromdaten werden somit aus dem Cache geholt, oder es wird bei Bedarf eine Ausnahme erzeugt, um die Befehlsstromdaten aus dem Speicher 12 zu holen. Nach einem Fehlgriff wird der virtuelle Befehls-Cache 17 vom Speicherdatenbus 54 durch die Eingänge 124 und 125 der Datenspeicherblöcke über die Spaltendecodierer 112 und 113 aufgefüllt, wobei die Merkerspeicher vom Adreßeingang über die Leitungen 126 und 127 aufgefüllt werden. Nach jedem Cache-Zyklus wird das VIDA 65 über den Pfad 128 inkrementiert (um +8, Vierwortkörnigkeit), wobei jedoch die VIBA-Adresse ferner im Register 129 gesichert wird, so daß bei Auftreten eines Fehlgriffs das VIBA wiederhergestellt wird und diese Adresse als Auffülladresse für die ankommenden Befehlsstromdaten auf dem MD-Bus 54 verwendet wird. Die Steuervorrichtung 130 des virtuellen Befehls-Cache 17 empfängt Steuersignale von der Vorausholwarteschlange 32, das Cache- Treffersignal 122 und dergleichen, und definiert den Zyklus des virtuellen Defehls-Cache 17.
  • Die Vorausholwarteschlange (PFQ) :
  • In Fig. 11 ist die Vorausholwarteschlange 32 genauer gezeigt. Eine Speichermatrix 132 hält vier Langwörter, die zu vier Bytes mal vier Bytes angeordnet sind. Die Matrix 132 kann vier Bytes an Daten in jedem Zyklus über die Leitungen 133 von einem Quellenmultiplexer 134 annehmen. Die Eingänge des Multiplexers 134 sind der Speicherdatenbus 54 und der Datenbus 123 des virtuellen Befehls-Cache 17. Wenn die Vorausholwarteschlange 32 nicht genügend verfügbaren Raum zum Laden eines weiteren Vierworts an Daten aus dem virtuellen Befehls-Cache 17 besitzt, gibt die Steuervorrichtung 135 der Vorausholwarteschlange 32 ein pfq-Voll-Signal auf der Leitung 136 aus, die zum virtuellen Befehls-Cache 17 führt. Der virtuelle Befehls-Cache 17 steuert die Zuführung von Daten zur Vorausholwarteschlange 32 und lädt bei jedem Zyklus ein Vierwort, sofern nicht die pfq- Voll-Leitung 136 gesetzt ist. Die Steuervorrichtung 135 wählt den Datenbus 123 des virtuellen Befehls-Cache 17 oder den Speicherdatenbus 54 über den Multiplexer 134 als Quelle aus, als Antwort auf Lade-VIC-Daten oder Lade-MD- Daten-Signale auf den Leitungen 137 und 138 von der Steuervorrichtung 130 des virtuellen Befehls-Cache 17. Die Steuervorrichtung 135 der Vorausholwarteschlange 32 ermittelt die Anzahl gültiger, unbenutzter Bytes an Befehlsstromdaten, die zum Prüfen zur Verfügung stehen, und sendet diese Informationen über die Leitungen 139 zur Befehlsbündeleinheit 33. Wenn die Befehlsbündeleinheit 33 die Befehlsstromdaten entnimmt, signalisiert sie auf den Leitungen 140 der Steuervorrichtung 135 der Vorausholwarteschlange 32 die Anzahl der entnommenen Befehlsstrom-Code- und Spezifiziererbytes. Diese Informationen werden verwendet, um die Zeiger auf die Matrix 132 zu aktualisieren. Der Ausgang der Matrix 132 führt über einen Multiplexer 141, der die Daten für die Verwendung seitens der Befehlsbündeleinheit 33 ausrichtet; der Ausrichtungsmultiplexer 141 nimmt (auf den Leitungen 142) die ersten und zweiten Langwörter 143 und das erste Byte 144 des dritten Langworts als Eingaben und gibt auf den Leitungen 83 sechs zusammenhängende Bytes aus, beginnend mit irgendeinem Byte im ersten Langwort, auf der Grundlage der in der Steuervorrichtung enthaltenen Zeiger. Die Vorausholwarteschlange 32 wird gelöscht, wenn die Verzweigungsvorhersageeinheit 39 ein Lade-Neuen-PC-Signal auf der Leitung 146 sendet und wenn die Ausführungseinheit 23 ein Lade-PC setzt.
  • Die Befehlsbündeleinheit 33 empfängt bis zu sechs Dytes an Daten aus der Vorausholwarteschlange 32 über die Leitungen 83 in jedem Zyklus und identifiziert die Bestandteile, d. h. die Opcodes, die Operandenspezifizierer und die Verzweigungsverschiebungen unter Bezugnahme auf die Tabelle 66. Zu Beginn eines Zyklus stehen der Befehlsbündeleinheit 33 neue Daten zur Verfügung, wobei die Anzahl der entnommenen Spezifiziererbytes über die Leitungen 140 zur Vorausholwarteschlange 32 zurückgesendet wird, so daß der nächste Satz an neuen Daten zur Verarbeitung im nächsten Zyklus zur Verfügung steht. Die Bestandteile, die von der Befehlsbündeleinheit 33 aus den Befehlstromdaten extrahiert werden, werden zur Verarbeitung zu anderen Einheiten gesendet; der Opcode wird zur Befehlsausgabeeinheit 83 und zur Verzweigungsvorhersageeinheit 39 auf dem Bus 147 gesendet, während die Spezifizierer, mit Ausnahme von Verzweigungsverschiebungen, zur Komplexspezifizierereinheit 40, der Punktetafeleinheit 81 und der Operandenwarteschlangeneinheit 79 über einen Spezifizierersteuerbus 78 gesendet werden. Die Verzweigungsverschiebung wird über den Bus 148 zur Verzweigungsvorhersageeinheit gesendet, so daß die neue Adresse erzeugt werden kann, wenn die Verzweigung wahrgenommen werden soll.
  • Punktetafeleinheit:
  • In Fig. 12 ist die Punktetafeleinheit 81 genauer gezeigt. Die Punktetafeleinheit 81 verfolgt die Anzahl der ausstehenden Referenzen auf GPRs in den Quellen- und Zielwarteschlangen 37 und 38. Die Punktetafeleinheit 81 enthält zwei Matrizen von fünfzehn Zählern: die Quellenmatrix 150 für die Quellenwarteschlange 37 und die Zielmatrix 151 für die Zielwarteschlange 38. Die Zähler 132 und 153 in den Matrizen 150 und 151 bilden die 15 GPRs in der Registergruppe 41 eins zu eins ab. Es gibt keinen Punktetafelzähler, der dem PC zugeordnet ist. Die maximale Anzahl von ausstehenden Operandenreferenzen bestimmt den maximalen Zählerwert für die Zähler 152, 153, wobei dieser Wert auf der Länge der Quellen- und Zielwarteschlangen beruht. Die Quellenmatrix zählt bis zwölf, während die Zielmatrix bis sechs zählt.
  • Jedesmal, wenn gültige Registermodus-Quellenspezifizierer auf dem Spezifiziererbus 78 erscheinen, werden die Zähler 152 in der Quellenmatrix 150 inkrementiert, die diesen Registern zugeordnet sind, was von der Auswahlvorrichtung 144 ermittelt wird, die die Registernummern als Teil der Informationen auf dem Bus 78 empfängt. Gleichzeitig fügt die Operandenwarteschlangeneinheit 79 Einträge in die Quellenwarteschlange 37 ein, die auf diese Register zeigen. Mit anderen Worten, für jeden Registermodus- Quellenwarteschlangeneintrag ergibt sich eine entsprechende Inkrementierung eines Zählers 152 in der Matrix 150 durch die Inkrementsteuerung 155. Dies ergibt ein Maximum von zwei Zählern, die jeden Zyklus inkrementiert werden, wenn ein Vierwort- Registermodusguellenoperand geprüft wird (jedes Register in der Registergruppe 41 umfaßt 32 Bits, so daß ein Vierwort zwei Register in der Registergruppe 41 belegen muß). Jeder Zähler 152 kann nur um eins inkrementiert werden. Wenn die Ausführungseinheit 23 die Quellenwarteschlangeneinträge entfernt, werden die Zähler 152 von der Dekrementsteuerung 156 dekrementiert. Die Ausführungseinheit 23 entfernt bis zu zwei Registermodus- Quellenwarteschlangeneinträge pro Zyklus, was auf dem Entnahmebus 82 angezeigt wird. Die GPR-Nummern für diese Register werden von der Ausführungseinheit 23 auf dem Entnahmebus 82 zur Verfügung gestellt und an die Inkrement- und Dekrementsteuervorrichtungen 155 und 156 angelegt. In jedem Zyklus können maximal zwei Zähler 152 dekrementiert werden, oder es kann irgendein Zähler um bis zu zwei dekrementiert werden, wenn beide Registermoduseinträge, die entnommen werden, auf dasselbe Basisregister zeigen.
  • In ähnlicher Weise wird dann, wenn ein neuer Registermodus-Zielspezifizierer auf dem Spezifiziererbus 78 erscheint, die Zählerstufe 153 der Matrix 151, die diesem Register der Registergruppe 41 entspricht, was von einer Auswahlvorrichtung 157 ermittelt wird, von der Steuervorrichtung 155 inkrementiert. Es werden in einem Zyklus maximal zwei Zähler 153 bei einem Vierwortregistermodus-Zieloperanden inkrementiert. Wenn die Ausführungseinheit 23 einen Zielwarteschlangeneintrag entfernt, wird der Zähler 153 von der Steuervorrichtung 156 dekrementiert. Die Ausführungseinheit 23 zeigt die Entnahme eines Registermodus-Zielwarteschlangeneintrags sowie die Registernummer auf dem Entnahmebus 82 an.
  • Wenn ein komplexer Spezifizierer geprüft wird, wird das diesem Spezifizierer zugeordnete GPR als Index in die Quellen- und Zielpunktetafelmatrizen über die Auswahlvorrichtungen 154 und 157 verwendet, wobei Momentaufnahmen der beiden Punktetafelzählerwerte auf dem Bus 158 zur Komplexspezifizierereinheit 40 weitergeleitet werden. Die Komplexspezifizierereinheit 40 wird angehalten, wenn sie ein GPR lesen muß, für das der Zielpunktetafelzählerwert ungleich Null ist. Ein Zielzähler 153, der nicht Null ist, zeigt an, daß wenigstens ein Zeiger auf dieses Register in der Zielwarteschlange 38 vorhanden ist. Dies bedeutet, daß ein zu erwartendes Schreiben der Ausführungseinheit 23 in dieses Register vorhanden ist und daß der aktuelle Wert ungültig ist. Die Komplexspezifizierereinheit 40 wird ferner angehalten, wenn sie in ein GPR schreiben muß, für das der Quellenpunktetafelzählerwert ungleich Null ist. Ein Quellenpunktetafelwert ungleich Null zeigt an, daß wenigstens ein Zeiger auf dieses Register in der Quellenwarteschlange 37 vorhanden ist. Dies bedeutet, daß ein zu erwartendes Lesen des Registers seilens der Ausführungseinheit 23 vohanden ist und daß dessen Inhalte nicht modifiziert werden dürfen. Für beide Punktetafeln 150 und 151 werden die Kopien in der Komplexspezifizierereinheit-40-Pipeline beim Setzen der Entnahmesignale auf dem Bus 82 von der Ausführungseinheit 23 dekrementiert.
  • Verzweigungsvorhersage:
  • In Fig. 13 ist die Verzweigungsvorhersageeinheit 39 genauer gezeigt. Die Befehlsbündeleinheit 33, die die Tabellen der Opcodewerte im ROM/PLA 66 verwendet, überwacht jeden Befehlsopcode, wenn dieser geprüft wird, und sucht nach einem Verzweigungsopcode. Wenn ein Verzweigungsopcode detektiert wird, wird der PC für diesen Opcode an die Verzweigungsvorhersageeinheit 39 über den Bus 148 angelegt. Dieser PC-Wert (in Wirklichkeit eine Teilmenge der Adresse) wird von einer Auswahlvorrichtung 162 verwendet, um die Tabelle 77 zu adressieren. Die Verzweigungs-Historie-Tabelle 77 umfaßt eine Matrix von 512 Vier-Bit-Registern 163, wobei der Wert in einem Register 163, das von 162 ausgewählt wird, über die Leitungen 164 an eine Auswahlvorrichtung 165 angelegt wird, die einen der 16 Werte in einem Register 166 adressiert, wodurch eine Wahrnehmungs- oder Nichtwahrnehmungs-Ausgabe von einem Bit erzeugt wird. Die Verzweigungsvorhersageeinheit 39 sagt somit vcrher, ob die Verzweigung wahrgenommen wird. Wenn die Verzweigungsvorhersageeinheit 39 vorhersagt, daß die Verzweigung wahrgenommen wird (ausgewählter Ausgang des Registers 166 ist gleich "1"), addiert sie die vorzeichenerweiterte Verzweigungsverschiebung auf dem Bus 148 zum aktuellen PC-Wert auf dem Bus 22 im Addierer 167 und sendet den resultierenden neuen PC zum Rest der Befehlseinheit 22 auf den Neu-PC-Leitungen 168. Der aktuelle PC-Wert im Register 169 wird über die Leitungen 170 an die Auswahlvorrichtung 162 und den Addierer 167 angelegt.
  • Die Verzweigungsvorhersageeinheit 39, die in der Weise der Fig. 13 konstruiert ist, verwendet einen "verzweigungs-Historie"-Algorithmus für die Vorhersage der Verzweigungen. Die Grundprämisse hinter diesem Algorithmus ist, daß das Verzweigungsverhalten dazu neigt, ein Muster aufzuweisen. Das Identifizieren eines bestimmten Verzweigungsbefehls in einem Programm und das Verfolgen der Historie dieses Befehls über die Zeit im Hinblick auf wahrgenommene Verzweigungen gegenüber nicht wahrgenommenen Verzweigungen ergibt in den meisten Fällen ein Muster. Verzweigungsbefehle, die in der Vergangenheit verzweigt sind, scheinen diese Historie beizubehalten und in der Zukunft wahrscheinlicher zu verzweigen als nicht zu verzweigen. Verzweigungsbefehle, die einem Muster folgen, wie z. B. verzweigen, nicht verzweigen, verzweigen, nicht verzweigen usw., behalten dieses Muster wahrscheinlich bei. Verzweigungs-Historie-Algorithmen für die Verzweigungsvorhersage versuchen, diese "Verzweigungsträgheit" auszunutzen.
  • Die Verzweigungsvorhersageeinheit 39 verwendet die Tabelle 77 der Verzweigungs-Historien und einen Vorhersagealgorithmus (im Register 166 gespeichert) auf der Grundlage der Vergangenheit der Verzweigung. Wenn die Verzweigungsvorhersageeinheit 39 den PC eines bedingten Verzweigungs-Opcodes auf dem Bus 148 empfängt, wird eine Teilmenge der PC-Bits des Opcodes von der Auswahlvorrichtung 162 verwendet, um auf die Verzweigungs-Historie-Tabelle 77 zuzugreifen. Der Ausgang der Tabelle 77 auf den Leitungen 164 ist ein Vier-Bit- Feld, das die Verzweigungs-Historie-Informationen für die Verzweigung enthält. Aus diesen vier Historie-Bits wird eine neue Vorhersage berechnet, die den erwarteten Verzweigungspfad angibt.
  • Viele verschiedene Opcode-PCs werden auf jeden Eintrag der Verzweigungstabelle 77 abgebildet, da nur eine Teilmenge (9 Bits) der PC-Bits den von der Auswahlvorrichtung 162 verwendeten Index bilden. Wenn sich ein Verzweigungsopcode außerhalb des Indexbereichs, der von dieser Teilmenge definiert wird, verändert, kann der Historie-Tabelleneintrag, der indiziert wird, auf einem anderen Verzweigungsopcode beruhen. Die Verzweigungstabelle 77 beruht auf dem Prinzip einer räumlichen Lokalität und nimmt an, daß bei geschalteten PCs der aktuelle Prozeß für eine Zeitspanne innerhalb eines kleinen Bereiches operiert. Dies ermöglicht der Verzweigungs-Historie-Tabelle 77, innerhalb weniger Verzweigungen eine neue dauerhafte Historie zu erzeugen, die sich auf den neuen PC bezieht.
  • Die Verzweigungs-Historie-Informationen im jeweiligen Vier-Bit-Register 163 der Tabelle 77 umfassen eine Kette von Einsen und Nullen, die anzeigen, wie sich die Verzweigung bei den letzten vier Auftritten verhalten hat. Zum Beispiel zeigt 1100, von rechts nach links gelesen, an, daß das letzte Mal diese Verzweigung nicht verzweigt ist. Ferner ist sie auch das Mal davor nicht verzweigt. Jedoch ist sie die zwei vorherigen Male verzweigt. Das Vorhersagebit ist das Ergebnis eines Durchlaufs der Historie-Bits, die gespeichert worden sind, durch eine Logik, die die Richtung einer Verzweigung aufgrund der gegebenen Historie ihrer letzten vier Verzweigungen vorhersagt.
  • Auf den Vorhersagealgorithmus, der vom Register 166 definiert wird, kann über die CPU-Datenpfade als internes Prozessorregister (IPR) zugegriffen werden, um die Inhalte zu prüfen oder um die Inhalte mit einem anderen Algorithmus zu aktualisieren. Nach dem Einschalten initialisiert der Ausführungseinheit-23-Mikrocode das Verzweigungsvorhersagealgorithmusregister 166 mit einem Wert, der einen Algorithmus definiert, der das Ergebnis der Simulation und gesammelter Statistiken ist, die eine optimale Verzweigungsvorhersage für einen gegebenen Satz von allgemeinen Befehlsuntersuchungen zur Verfügung stellt. Dieser Algorithmus kann verändert werden, um die Verzweigungsvorhersage für eine spezifische Befehlsverfolgung oder eine Mischung anzupassen; tatsächlich kann der Algorithmus während der Operation dynamisch verändert werden, indem in das Register 166 geschrieben wird. Dieser Algorithmus ist in der folgenden Tabelle gezeigt und entspricht einer bevorzugten Ausführungsform:
  • Die 512 Einträge in der Verzweigungstabelle 77 sind mittels der PC-Bits < 8:0> des Opcodes indiziert. Jeder Verzweigungstabelleneintragung 163 enthält die vorangehenden vier Verzweigungs-Historie-Bits für die Verzweigungsopcodes an diesem Index. Die Ausführungseinheit 23 gibt auf der Leitung 171 unter Mikrocodesteuerung eine Lösche-Verzweigungstabelle- Anweisung aus, während der Prozeßkontext umschaltet. Dieses Signal, das an einer Rücksetzsteuerleitung 172 empfangen wird, setzt alle 512 Verzweigungstabelleneinträge auf einen neutralen Wert: Historie = 0100, was zu einer nächsten Vorhersage von 0 (d. h. nicht wahrgenommen) führt.
  • Wenn ein bedingter Verzweigungs-Opcode entdeckt wird, liest die Verzweigungsvorhersageeinheit 39 den Verzweigungstabelleneintrag, der von PC < 8:0> indiziert wird, unter Verwendung der Auswahlvorrichtung 162. Wenn die Vorhersagelogik, die das Register 166 enthält, eine wahrgenommene Verzweigung anzeigt, wird die von der Befehlsbündeleinheit 33 über den Bus 147 zugeführte Verzweigungsverschiebung vom Addierer 167 vorzeichenerweitert und zum aktuellen PC addiert, woraufhin der Addierer 167 das Ergebnis auf den Neu-PC- Leitungen 168 zu Befehlseinheit 22 sendet. Wenn das Vorhersagebit im Register 166 anzeigt, daß kein Wahrnehmen einer Verzweigung erwartet wird, bleibt der aktuelle PC in der Befehlseinheit 22 unbeeinflußt. Der jeweils andere PC wird in beiden Fällen (der aktuelle PC im Fall einer vorhergesagten Verzweigung, und der Verzweigungs-PC im Fall einer nicht vorhergesagten Verzweigung) in der Verzweigungsvorhersageeinheit 39 im Register 169 gehalten, bis die Ausführungseinheit 23 die bedingte Verzweigung entnimmt. Wenn die Ausfuhrungseinheit 23 eine bedingte Verzweigung entnimmt, zeigt sie die wirkliche Richtung der Verzweigung über die Entnahmeleitungen 173 an. Die Verzweigungsvorhersageeinheit 39 verwendet den anderen PC aus dem Register 169, um die Befehlseinheit 22 über einen weiteren neuen PC auf den Leitungen 168 umzuleiten, falls eine falsche Vorhersage vorliegt.
  • Die Verzweigungstabelle 77 wird jedesmal, wenn eine bedingte Verzweigung entdeckt wird, mit einer neuen Historie aktualisiert. Eine zurückschreibeschaltung 174 empfängt den Vier-Bit-Tabelleneintrag über die Leitungen 164, schiebt diesen um eine Stelle nach links, fügt das Ergebnis von der Vorhersagelogik, das auf der Leitung 175 empfangen wird, ein und schreibt einen neuen Vier-Bit- Wert an dieselbe Stelle zurück, die von der Auswahlvorrichtung 162 angezeigt wird. Sobald eine Vorhersage gemacht ist, wird somit das älteste der Verzweigungs-Historie-Bits verworfen, wobei die übrigen drei Verzweigungs-Historie-Bits und das neu vorhergesagte Historie-Bit beim gleichen Verzweigungs-PC-Index in die Tabelle 77 zurückgeschrieben werden. Wenn die Ausführungseinheit 23 einen Verzweigungswarteschlangeneintrag für eine bedingte Verzweigung entnimmt bleibt dann, wenn keine Fehlvorhersage vorliegt, der neue Eintrag unbeeinflußt, wobei die Verzweigungsvorhersageeinheit 39 bereit ist, eine neue bedingte Verzweigung zu verarbeiten. Wenn über die Leitungen 173 eine Fehlvorhersage signalisiert wird, wird derselbe Verzweigungstabelleneintrag von der Schaltung 174 neu geschrieben, wobei dieses Mal das letzte signifikante Historie-Bit das Komplement der vorhergesagten Richtung empfängt, das die wahre Richtung der Verzweigung wiedergibt.
  • Jedesmal, wenn die Verzweigungsvorhersageeinheit 39 eine Vorhersage für einen Verzweigungsopcode trifft, sendet sie Informationen über diese Vorhersage zur Ausführungseinheit 23 auf dem Bus 176. Die Ausführungseinheit 23 hält eine Verzweigungswarteschlange 70 an Verzweigungsdateneinträgen, die Informationen über die Verzweigungen enthalten, die von der Verzweigungsvorhersageeinheit 39, jedoch noch nicht von der Ausführungseinheit 23 verarbeitet worden sind. Der Bus 176 ist zwei Bits breit: ein Gültigkeitsbit und ein Bit, das anzeigt, ob die Vorhersage der Befehlseinheit 22 ein Wahrnehmen der Verzweigung ist. Die Einträge werden sowohl für bedingte als auch unbedingte Verzweigungen in der Verzweigungswarteschlange 70 durchgeführt. Für unbedingte Verzweigungen wird der Wert von Bit 0 des Busses 176 von der Ausführungseinheit 23 ignoriert. Die Länge der Verzweigungswarteschlange 70 wird so gewählt, daß diese nicht überläuft, selbst wenn die gesamte Befehlswarteschlange 35 mit Verzweigungsbefehlen gefüllt ist und sich Verzweigungsbefehle momentan in der Ausführungseinheit-23-Pipeline befinden. Zu einem beliebigen Zeitpunkt kann sich in der Warteschlange 70 nur eine bedingte Verzweigung befinden. Ein Warteschlangeneintrag wird nicht vorgenommen, bis eine gültige Verschiebung verarbeitet worden ist. Für den Fall, daß eine zweite bedingte Verzweigung entdeckt wird, während eine erste noch aussteht, kann der Eintrag nicht vorgenommen werden, bis die erste bedingte Verzweigung entnommen worden ist.
  • Wenn die Ausführungseinheit 23 einen Verzweigungsbefehl ausführt und endgültig ermittelt, ob die Verzweigung wahrgenommen werden soll, entfernt sie das nächste Element aus der Verzweigungswarteschlange 70 und vergleicht die Richtung, die von der Befehlseinheit 22 eingeschlagen wird, mit der Richtung, die eingeschlagen werden sollte. Wenn sich diese unterscheiden, sendet die Ausführungseinheit 23 ein Fehlvorhersagesignal auf dem Bus 173 zur Verzweigungsvorhersageeinheit 39. Eine Fehlvorhersage veranlaßt die Befehlseinheit 22 die Verarbeitung anzuhalten, irgendwelche GPR-Modifikationen rückgängig zu machen, die während des Prüfens des falschen Pfades vorgenommen worden sind, und die Verarbeitung beim richtigen anderen PC neu zu beginnen.
  • Die Verzweigungsvorhersageeinheit 39 bewirkt einen Rückstau der BIU durch Setzen eines Verzweigungs- Haltsignals auf der Leitung 178, wenn sie eine neue Bedingte Verzweigung bei einer bereits ausstehenden bedingten Verzweigung entdeckt. Wenn die Verzweigungsvorhersageeinheit 39 eine bedingte Verzweigung verarbeitet hat, jedoch die Ausführungseinheit 23 diese noch nicht ausgeführt hat, bewirkt eine weitere bedingte Verzweigung, daß die Verzweigungsvorhersageeinheit 39 das Verzweigungs- Haltsignal setzt. Unbedingte Verzweigungen, die bei ausstehenden bedingten Verzweigungen auftreten, verursachen kein Problem, da der Befehlsstrom lediglich eine Umleitung erfordert. Der andere PC im Register 169 bleibt bis zur Auflösung der bedingten Verzweigung unverändert. Die Ausführungseinheit 23 informiert die Verzweigungsvorhersageeinheit 39 über den Bus 173 jedes Mal darüber, daß eine bedingte Verzweigung aus der Verzweigungswarteschlange 70 entnommen wird, so daß die Verzweigungsvorhersageeinheit 39 den anderen PC und die andere bedingte Verzweigungsschaltung frei machen kann.
  • Das Verzweigungs-Haltsignal auf der Leitung 178 hindert die Befehlseinheit 22 an der Verarbeitung weiterer Opcodes. Wenn ein Verzweigungs-Halt gesetzt ist, beendet die Befehlsbündeleinheit 33 das Prüfen des aktuellen bedingten Verzweigungsbefehls, einschließlich der Verzweigungsverschiebung und irgendwelcher Zusätze, woraufhin die Befehlsbündeleinheit 33 anhält. Der Eintrag in die Verzweigungswarteschlange 70 in der Ausführungseinheit 23 wird vorgenommen, nachdem die erste bedingte Verzweigung entnommen worden ist. Zu diesem Zeitpunkt wird der Verzweigungs-Halt zurückgesetzt und der andere PC für die erste bedingte Verzweigung durch denjenigen der zweiten bedingten Verzweigung ersetzt.
  • Die Verzweigungsvorhersageeinheit 39 verteilt alle PC- Ladevorgänge auf den Rest der Befehlseinheit 22. Die PC- Ladevorgänge der Befehlseinheit 22 aus dem Komplexspezifizierereinheit-40-Mikrocode laden einen neuen PC auf eine von zwei Arten. Wenn die Komplexspezifizierereinheit 40 den PC-Lade-Schreibbus setzt, gibt sie einen neuen PC-Wert auf den 1W- Busleitungen aus. PC-Laden-MD zeigt an, daß der neue PC auf den MD-Busleitungen 54 liegt. Die Verzweigungsvorhersageeinheit 39 antwortet durch Weiterleiten des geeigneten Werts auf den Neu-PC- Leitungen 168 und Setzen von Lade-Neu-PC. Diese Befehlseinheit-22-PC-Ladevorgänge verändern den bedingten Verzweigungszustand in der Verzweigungsvorhersageeinheit 39 nicht.
  • Die Ausführungseinheit 23 signalisiert ihre Absicht, einen neuen PC zu laden, durch Setzen von Lade-Neu-PC. Das Setzen dieses Signals zeigt an, daß das nächste Element der IPR-Daten, die auf dem MD-Bus 54 ankommen sollen, der neue PC ist. Das nächste Mal, wenn die Speichermanagementeinheit 25 eine Schreibanweisung ausgibt, wird der PC vom MD-Bus 54 entnommen und auf den Neu-PC-Leitungen weitergeleitet, wobei eine Anweisung Lade-Neuen-PC gesetzt wird.
  • Die Verzweigungsvorhersageschaltung 39 führt unbedingte Verzweigungen aus, indem sie die Vorzeichen erweiterte Verzweigungsverschiebung auf den Leitungen 147 zum aktuellen PC auf den Leitungen 170 im Addierer 167 addiert und den neuen PC auf den Neu-PC-Leitungen 168 ausgibt und ein Signal Lade-Neuen-PC setzt. Bedingte Verzweigungen laden den PC in der gleichen Weise, wenn die Logik eine wahrgenommene Verzweigung vorhersagt. Bei einer Fehlvorhersage einer bedingten Verzweigung oder bei einem Ausführungseinheit-23-PC-Ladevorgang wird jegliche anhängige bedingte Verzweigung gelöscht, wobei anhängige unbedingte Verzweigungen gelöscht werden.
  • Die Mikrobefehlssteuereinheit:
  • Wie in Fig. 14 gezeigt, definiert die Mikrobefehlssteuereinheit 24, die den Mikrosquenzer 42 und den Mikrospeicher 43 enthält, eine endliche Zustandsmaschine, die drei Ausführungseinheit-23- Abschnitte der CPU-10-Pipeline steuert: S3, S4 und S5.
  • Die Mikrobefehlssteuereinheit 24 befindet sich ihrerseits im S2-Abschnitt der Pipeline und greift auf den im On- Chip-Steuerspeicher 43 enthaltenen Mikrocode zu. Der Steuerspeicher 43 wird über einen 11-Bit-Bus 181 vom Mikrosequenzer 42 adressiert. Die aktuelle Adresse für den Steuerspeicher wird in einem Zwischenspeicher 182 gehalten, wobei dieser Zwischenspeicher von einer Auswahlvorrichtung 183 geladen wird, die mehrere Quellen für unterschiedliche Adressierungsbedingungen besitzt, wie z. B. Sprung oder Verzweigung, Mikrostapel oder Mikrotrap. Jeder Mikrowortausgang auf dem Bus 44 vom Steuerspeicher 43 besteht aus Feldern, die alle drei Pipelinestufen steuern. Ein Mikrowort wird am Ende von 82 ausgegeben (bei jedem Maschinenzyklus) und im Zwischenspeicher 184 gespeichert, um es an den Mikrobefehlsbus 185 anzulegen und in der Ausführungseinheit 23 während 53 zu verwenden, woraufhin es in der Pipeline zu den Abschnitten S3 und S4 -über die Zwischenspeicher 186 und 187 unter der Steuerung der Ausführungseinheit 23 weitergeleitet wird (schrittweise vorrückt). Jedes Mikrowort enthält ein 15-Bit-Feld (das eine 11-Bit-Adresse enthält), die auf dem Bus 188 zum Mikrosequenzer 42 zurückgeführt wird, um den nächsten Mikrobefehl im Mikrofluß zu spezifizieren. Dieses Feld kann eine explizite Adresse spezifizieren, die im Mikrowort aus dem Steuerspeicher 43 enthalten ist, oder kann den Mikrosequenzer anweisen, eine Adresse von einer weiteren Quelle anzunehmen, was dem Mikrocode z. B. erlaubt, bei unterschiedlichen Zuständen in der CPU 10 bedingt zu verzweigen.
  • Häufig verwendeter Mikrocode wird üblicherweise in Form von Mikrounterroutinen definiert, die in ausgewählten Adressen im Steuerspeicher gespeichert sind, wobei dann, wenn eine dieser Unterroutinen aufgerufen wird, die Rücksprungadresse auf einen Mikrostapel 189 geschoben wird, um sie bei der Ausführung eines Rücksprungs zu verwenden. Zu diesem Zweck wird die aktuelle Adresse auf dem Adreßeingangsbus 181 zum Mikrostapeleingang 190 zurückgeführt, nachdem sie inkrementiert worden ist, da der Rücksprung zur aktuellen Adresse plus 1 führt. Der Mikrostapel kann z. B. sechs Einträge enthalten, um sechs verschachtelte Ebenen van Unterroutinen zu ermöglichen. Der Ausgang des Mikrostapels 189 wird zum aktuellen Adressenzwischenspeicher 182 über die Auswahlvorrichtung 183 zurückgeführt, wenn die Anweisungen im Feld auf dem Bus 188 diese als die nächste Adreßquelle angeben.
  • Halte, die für die Person, die den Mikrocode schreibt, ersichtlich sind, treten auf, wenn ein CPU-Betriebsmittel nicht verfügbar ist, wie z. B. wenn die ALU 50 einen Operanden benötigt, der von der speichermanagementeinheit 25 noch nicht zur Verfügung gestellt worden ist. Der Mikrosequenzer 42 hält an, wenn das Pipelinesegment S3 der Ausführungseinheit 23 angehalten wird. Ein Halt- Eingang am Zwischenspeicher 182, am Zwischenspeicher 184 oder an der Mikrostapelsteuervorrichtung 191 veranlaßt den Steuerspeicher 43, keinen neuen Mikrobefehl auf dem Bus 44 zu Beginn von S3 auszugeben.
  • Mikrotraps ermöglichen dem Mikrocodierer, anomale Ereignisse zu handhaben, die eine sofortige Bedienung erfordern. Zum Beispiel wird bei einer Verzweigungsfehlvorhersage ein Mikrotrap angefordert, wenn die Verzweigungsberechnung in der Ausführungseinheit 23 sich von derjenigen unterscheidet, die von der Befehlseinheit 22 für einen bedingten Verzweigungsbefehl vorhergesagt worden ist. Eine Mikrotrap- Auswahlvorrichtung 192 besitzt eine Anzahl von Eingängen 193 für verschiedene Bedingungen und legt unter den spezifizierten Bedingungen eine Adresse an die Auswahlvorrichtung 183 an. Wenn ein Mikrotrap auftritt, wird das Mikrocodesteuersignal zu der Dienstmikroroutine übertragen, die bei dieser Mikrotrapadresse beginnt.
  • Das Steuerfeld (Bits < 14:0> ) des Mikroworts, das vom Steuerspeicher 43 auf dem Bus 44 über dem Bus 188 ausgegeben wird, wird verwendet, um die nächste an den Adreßeingang 181 anzulegende Adresse zu definieren. Die nächste Adresse ist explizit im aktuellen Mikrowort codiert; es gibt kein Konzept einer sequentiellen nächsten Adresse (d. h. der Ausgang des Zwischenspeichers 182 wird nicht einfach inkrementiert). Bit 14 des Steuerfeldes wählt zwischen Sprung- und Verzweigungsformaten aus. Das Sprungformat enthält die Bits < 10:1> als Sprungadresse, die Bits < 12:11> zum Auswählen der Quelle der nächsten Adresse (über die Auswahlvorrichtung 183) und Bit 13, das steuert; ob eine Pücksprungadresse über den Bus 190 auf den Mikrostapel 189 geschoben wird. Das Verzweigungsformat enthält die Bits < 7:0> als Verzweigungsoffset, die Bits < 12:8> zum Definieren die Quelle des Mikrotesteingangs, und wiederum ein Bit 13, das steuert, ob eine Rücksprungadresse über dem Bus 190 auf den Mikrostapel 189 geschoben wird. Diese bedingten Verzweigungsmikrobefehle antworten auf verschiedene Zustände innerhalb der CPU 10, wie z. B. einen ALU-Überlauf, eine Verzweigungsfehlvorhersage, Speichermanagement ausnahmen, reservierte Adressierungsmodi oder Fehler in der Gleitkommaeinheit 27.
  • Das letzte Mikrowort einer Mikroroutine enthält ein Feld, das deren letzten Zyklus definiert, wobei dieses Feld eine Auswahlvorrichtung 195 aktiviert, die ermittelt, welcher neue Mikrofluß gestartet werden soll. Die Alternativen (in der Reihenfolge ihrer Priorität) sind eine Unterbrechung, ein Fehlerhantierer, ein Erster-Teil- Erledigt-Hantierer oder der Einsprungpunkt für einen neuen Makrobefehl, der durch den obersten Eintrag in der Befehlswarteschlange 35 angezeigt wird. Alle vier Alternativen werden von den Eingängen 196 der Auswahlvorrichtung 195 dargestellt. Wenn der letzte Zyklus angezeigt wird und kein Mikrotrap von der Auswahlvorrichtung 192 vorliegt, wird die nächste Adresse von der Auswahlvorrichtung 195 an die Auswahlvorrichtung 183 angelegt, um sie in den Zwischenspeicher 182 einzugeben.
  • Die Befehlswarteschlange 35 ist ein FIFO-Speicher, der sechs Einträge tief ist und über den Bus 34 von der Befehlseinheit 22 gefüllt wird, was der Befehlseinheit 22 ermöglicht, Makrobefehle vor der Ausführung der Ausführungseinheit 23 zu holen und zu decodieren. Jeder Eintrag ist 22 Bits lang, wobei die Bits < 9:1> die Abfertigungsadresse darstellen, die für die Steuerspeicheradresse über die Auswahlvorrichtung 183 verwendet wird (alle Einsprungpunkte sind auf diese Adreßbits abgebildet), wobei die Bits < 21:13> den Opcode selbst darstellen (das Zusatzbit bezeichnet einen 2-Byte- Opcode). Bit 0 ist ein Gültigkeitsbit, das gesetzt ist, wenn der Eintrag gültig ist, während Bit 10 einen Gleitkommaeinheit-27-Befehl anzeigt und die Bits < 12:11> die ursprüngliche Datenlänge der Befehloperanden (Byte, Wort, Langwort und dergleichen) definieren. Ein Schreibzeiger 197 definiert die Stelle, an die ein neuer Eintrag vom Bus 34 während phi1 geschrieben wird, wobei dieser Schreibzeiger zu phi3 jedes Zyklus vorrückt, wenn das Gültigkeitsbit in diesem neuen Eintrag gesetzt ist. Ein Lesezeiger 198 definiert die Stelle in der Befehlswarteschlange 35, an der der nächste Befehl während phi2 zu lesen ist, auf den Ausgangsleitungen 199 für die Auswahlvorrichtung 200. Wenn das Gültigkeitsbit im Befehlswarteschlange-35-Eintrag, der ausgelesen wird, nicht gesetzt ist, verwendet die Auswahlvorrichtung 200 einen Haltadresseneingang 201 zum Weiterleiten über die Auswahlvorrichtung 195 und die Auswahlvorrichtung 183 zum Zwischenspeicher 182; das Halt-Mikrowort wird somit aus dem Steuerspeicher 43 geholt, wobei eine Halt-Anweisung zur Ausführungseinheit 23 gesendet wird. Wenn das Gültigkeitsbit in dem aus der Befehlswarteschlange 35 gelesenen Eintrag gesetzt ist, wird eine Erster-Zyklus- Anweisung zur Ausführungseinheit 23 gesendet, wobei dann, wenn das Gleitkommaeinheit-27-Bit ebenfalls gesetzt ist, eine Gleitkommaeinheit-27-Anweisung zur Gleitkommaeinheit 27 gesendet wird. Der Lesezeiger 198 rückt zu phi4 vor, wenn die Letzter-Zyklus-Auswahlvorrichtung 195 durch die Mikrowortausgabe in diesem Zyklus aktiviert wird und die Auswahlvorrichtung 195 den Ausgang 202 auswählt (und das Gültigkeitsbit im Eintrag gesetzt ist). Wenn der Lesezeiger 198 vorrückt, wird das Gültigkeitsbit für den eben gelesenen Eintrag gelöscht, so daß dieser Eintrag nicht erneut verwendet wird. Oder es wird der Lesezeiger 198 angehalten (keine Aktion während phi4), wenn eine Haltbedingung besteht.
  • Der Bus 202, der den aus der Befehlswarteschlange 35 gelesenen Eintrag enthält, enthält das Opcodefeld sowie das Mikrocodeadreßfeld (das zur Auswahlvorrichtung 195 gesendet wird). Dieses Opcodefeld wird gemeinsam mit dem Datenlängenfeld und dem Gleitkommaeinheit-27-Feld in einen Befehlskontextzwischenspeicher 203 in phi3 von S2 eingegeben, wenn die Befehlswarteschlange 35 als nächste Adreßquelle für den Steuerspeicher 43 ausgewählt wird. Wenn das Gültigkeitsbit des ausgelesenen Eintrags gelöscht ist, wird der Halt-Befehlskontext, der mit der Halt-Adresse von der Auswahlvorrichtung 200 ausgegeben wird, im Kontextzwischenspeicher 203 zwischengespeichert. Der Ausgang auf den Leitungen 204 vom Zwischenspeicher 203 wird zur Gleitkommaeinheit 27 gesendet, um den Gleitkommaeinheit-27-Befehl zu definieren, der auszuführen ist, wenn das Gleitkommaeinheit-27-Bit gesetzt ist. In phi1 vom Segment S3 werden die Inhalte des Zwischenspeichers 203 an den Slave Kontextzwischenspeicher 205 ausgegeben, wobei die Inhalte diese Slave-Zwischenspeichers während S3 von der Ausführungseinheit 23 verwendet werden.
  • Wie in Fig, 15 gezeigt, ist das Mikrowort am Steuerspeicherausgang 61 Bit breit, wobei hiervon ein 14- Bit-Feld (Bits < 14:0> ) über den Bus 24e im Mirkosequenzer 42 verwendet wir, so daß der Eingang des Mikrobefehlszwischenspeichers 24d 47 Bits (Bits < 60:15> ) breit ist. Die Mikrobefehle weisen zwei allgemeine Typen auf, die Als "Standart" und "Spezial" bezeichnet werden, in Abhängigkeit davon, ob Bit 60 eine 1 oder 0 ist. In beiden Fällen besitzt der Mikrobefehl ein Feld, Bits < 56:56> , das die ALU-Funktion (Addieren, Subtrahieren, Weiterleiten, Vergleichen und dergleichen) definiert, die für diesen Zyklus zu implementieren ist, sowie ein MRQ- Feld, Bits < 54:50> , die irgendwelche Speicheranfragen definieren, die an die Speichermanagementeinheit 25 auszugeben sind. Die Felder A und B (Bits < 25:20> und < 39:36> ) des Mikrowortes definieren die Eingänge A und B der ALU, während das DST-Feld, Bits < 31:26> , gemeinsam mit MISC-Fed, das weitere erforderliche Steuerbits enthält, das Schreibziel für den ALU-Ausgang definiert. Die Felder L, W, und V, Bits < 34:32> , definieren die Datenlänge, die Tatsache, ob der der Schreibbus anzusteuern ist, sowie die virtuelle Adreßschreibfreigabe. Bei Schiebeoperation enhält das Mikrowort ein SHF-Feld < 48:46> , um die Schiebefungktion zu definieren, sowie ein VAL-Feld, Bits < 44:40> , um das Verschiebungsmaß zu definieren. Wenn ferner Bit 45 und 2 ist, enthält das Mikrowort einen konstanten Wert in den Bits < 44:35> , der auf dem Eingang B und ALU gelegt wird; die Konstante kann 8 Bits oder 10 Bits umfassen, was im MISC-Feld definiert wird, wobei im Falle von 8 Bit ein POS-Feld die Position der Konstante definiert. Im Spezialformat ist keine Schiebeoperation möglich, wobei zwei andere MISC- Steuerfelder zur Verfügung stehen.
  • Die Ausführungseinheit:
  • Wie in Fig. 16 gezeigt, enthält der E-Kasten oder die Ausführungseinheit 23 die Registergruppe 41, die 37 32- Bit-Register besitzt, die aus 6 Speicherdatenregistern MDO-MD5, 15 Universalregistern (GPRs) R0-R14, 6 Arbeitsregistern W und den CPU-Zustandsregistern bestehen. Die MD-Register empfangen Daten von Speicherlesevorgängen, die von der Befehlseinheit 22 eingeleitet werden, sowie von direkten Schreibvorgängen von der Befehlseinheit 22. Die Arbeitsregister W halten temporäre Daten unter der Steuerung der Mikrobefehle (für den Makrobefehlssatz nicht verfügbar); diese Register können Daten von Speicherlesevorgängen empfangen, die von der Ausführungseinheit 23 eingeleitet worden sind, und empfangen Ergebnisdaten von der ALU 45, der Schiebevorrichtung 46 oder von Gleitkommaeinheit-27- Operationen. Die GPRs sind Universairegister der VAX- Architektur (obwohl der PC, R15, in dieser Gruppe 41 nicht enthalten ist) und können Daten von Speicherlesevorgängen empfangen, die von der Ausführungseinheit 23 eingeleitet worden sind, von der ALU 45, der Schiebevorrichtung 46 oder von der Befehlseinheit 22 empfangen. Die Zustandsregister halten einen semipermanenten Architekturzustand und können nur von der Ausführungseinheit 23 geschrieben werden.
  • Die Registergruppe 41 besitzt drei Leseanschlüsse und drei Schreibanschlüsse. Die Leseanschlüsse enthalten drei Leseadreßeingänge RA1, RA2 und RA3 und drei Lesedatenausgänge RD1, RD2 und RD3. Die drei Schreibanschlüsse umfassen Schreibadreßeingänge WA1, WA2 und WA3 sowie drei Schreibdateneingänge WD1, WD2 und WD3. Die in die Schreibanschlüsse der Registergruppe 41 eingegebenen Daten stammen vom Speicherdatenbus 54 für WD2, vom Befehlseinheit-22-Schreibbus 87 für WD3 oder vom Ausgang der ALU 45 auf dem Schreibbus 210 für WD1. Die Daten, die von der Registergruppe 41 ausgegeben werden, gelangen zur Auswahlvorrichtung 211 für den ALU-A-Bus 212 van RD1 (in S3), zur Auswahlvorrichtung 213 für den ALU- B-Bus 214 von RD2 (ebenfalls in S3) und zum Bus 93, der zur Befehlseinheit 22 führt, von RD3. Die Leseadressen an RA1 und RA2 für die Ausgänge RD1 und RD2 der Registergruppe 41 werden von den Auswahlvorrichtungen 215 und 216 empfangen, von denen jede Eingänge von der Quellenwarteschlange 37 oder von den Feldern A und B des Mikrobefehls über den Bus 185 empfangen; in einem Zyklus können zwei Einträge in der Quellenwarteschlange 37 die Adreßeingänge an RA1 und RA2 darstellen, um die Eingänge A und B der ALU (oder die Gleitkommaeinheit-27-Eingänge) zu erzeugen, oder der Mikrobefehl kann eine spezifische Registeradresse sowie eine spezifische Quellenwarteschlangenadressierung definieren. Der Schreibadreßeingang WA1 (der die Register kontrolliert, in die der ALU-Ausgang oder der Schreibbus 210 geschrieben wird) wird definiert durch eine Auswahlvorrichtung 217, die einen Eingang von der Zielwarteschlange 38 oder vom DST-Feld des Mikrobefehls über den Bus 185 empfängt; die Auswahlvorrichtung 217 wird durch die Entnahmewarteschlange 72 sowie den Mikrobefehl gesteuert. Der WA2-Eingang kommt von der Speichermanagementeinheit 25 über den Bus 218 und definiert, in welches Register der MD-Bus 54 an WD2 geschrieben wird; dieser MD-Anschluß wird von der Speichermanagementeinheit 25 verwendet, um Speicherdaten oder IPR-Lesedaten in die W-Register oder GPRs zu schreiben, um die von der Ausführungseinheit 23 eingeleiteten Lesevorgänge abzuschließen, wobei die Registergruppenadresse von der Speichermanagementeinheit an WA2 angelegt wird (der M-Kasten hat die Registergruppenadresse empfangen, als die Speicheroperation eingeleitet wurde). Die Komplexspezifizierereinheit 40 (in Fig. 13 gezeigt) greift auf die Registergruppe 41 mittels WA3/WD3 und RA3/RD3 für eine allgemeine Adreßberechnung und für die Verarbeitung von Autoinkrement- und Autodekrement- Operandenspezifizierern zu.
  • Ein Umleitungspfad 219 wird vom MD-Bus 54 den Eingängen der Auswahlvorrichtungen 211 und 213 zugeführt und ermöglicht, daß die Speicherlesedaten direkt an die Eingänge A oder B der ALU angelegt werden, ohne daß sie in ein Register in der Registergruppe 41 geschrieben werden und anschließend im gleichen Zyklus aus diesem Register gelesen werden. Die Daten erscheinen am MD-Bus 54 zu spät, um im gleichen Zyklus gelesen zu werden. Wenn der Umleitungspfad durch den Mikrocode freigegeben wird, werden die Daten nicht in das Register geschrieben.
  • Es gibt zwei Konstantengeneratoren. Ein Konstantengenerator 220 für den Eingang A der ALU über die Auswahlvorrichtung 221, im A-Feld des Mikrobefehls spezifiziert, erzeugt Konstanten, die hauptsächlich zum Erzeugen der Adressen von IPRs verwendet werden, wobei diese implementierungsunabhängig sind; im allgemeinen wird ein 8-Bit-Wert erzeugt, um eine IPR-Adresse intern zu definieren. Ein Konstantengenerator 222 für den B- Eingang der ALU über die Auswahlvorrichtung 223 bildet eine Langwortkonstante, indem er einen Bytewert an einer von vier Bytepositionen im Langwort ersetzt; die Position und die Konstantenfelder Pos und Constant in Mikrobefehl spezifizieren diesen Wert. Ferner kann die Konstantenguelle 222 eine niedrigerwertige 10-Bit- Konstante erzeugen, die vom Mikrobefehl spezifiziert wird, wenn ein Const.10-Feld vorhanden ist.
  • Die ALU 45 ist eine 32-Bit-Funktionseinheit, die arithmetische und logische Funktionen ausführen kann, die vom ALU-Feld des Mikrowortes definiert werden. Die Eingänge A und B 212 und 214 werden von den Auswahlvorrichtungen 211 und 213 definiert, die der Steuerung durch die Felder A und B des Mikrowortes unterliegen. Der ALU-Ausgang 223 kann über Rmux 50 auf dem Schreibbus 210 geschachtelt werden und ist direkt mit dem virtuellen Adreßregister 224 verbunden. Die ALU erzeugt ferner Bedingungscodes (Überlauf, Übertrag, Null, Negativ) auf der Grundlage der Ergebnisse einer Operation, wobei diese zum Aktualisieren der Zustandsregister verwendet werden können. Die Operationen, die in der ALU ausgeführt werden können, umfassen Addition, Subtraktion, A oder B weiterleiten, UND, ODER, EXKLUSIV-ODER und dergleichen.
  • Die Schiebevorrichtung 46 empfängt 64 Bits des Eingangs von den A- und B-Eingängen 212 und 214 und erzeugt einen nach rechts verschobenen 32-Bit-Ausgang für den Rmux 50. Die Schiebeoperation wird definiert durch das SHF-Feld des Mikrobefehls, wobei das Maß (0 bis 32 Bits) durch das VAL-Feld oder durch ein Verschiebungszählerregister 225 definiert wird. Der Ausgang 226 der Schiebevorrichtung 46 ist auf dem Schreibbus 210 mittels Rmux 50 verschachtelt und direkt mit dem Quotienten- oder Q-Register 227 verbunden.
  • Der Rmux 50 koordiniert die Ausführungseinheit 23 und die Gleitkommaeinheit 27, was zum Speichern und Entnehmen von Makrobefehlen führt, wählt die Quelle der Befehlseinheit-23-Speicheranfragen und die Quelle der nächsten Schreibbus-210-Daten und der zugehörigen Informationen aus. Die Rmux-Auswahl findet in S4 statt, ebenso wie das Ausgeben der Speicheranfrage an die Speichermanagementeinheit 25. Die neuen Daten auf dem Schreibbus 210 werden jedoch nicht vor Beginn von S5 verwendet. Der Rmux 50 wird von der Entnahmewarteschlange 72 gesteuert, die auf den Leitungen 228 eine Ausgabe erzeugt, die anzeigt, ob der nächste zu entnehmende Makrobefehl von der Ausführungseinheit 23 oder der Gleitkommaeinheit 27 ausgeführt wird, wobei der Rmux eine dieser zwei auswählt, um den Schreibbus 210 und die Speicheranfragesignale anzusteuern. Die nicht ausgewählte Einheit (Ausführungseinheit 23 oder Gleitkommaeinheit 27) wird angehalten, wenn sie den Schreibbus 210 ansteuern muß oder eine Speicheranforderung ausgeben muß. Der Lesezeiger in der Entnahmewarteschlange 72 rückt nicht vor, weshalb die Rmux-Auswahl sich nicht ändern kann, bis die momentan ausgewählte Quelle (Ausführungseinheit 23 oder Gleitkommaeinheit 27) anzeigt, daß deren Makrobefehl zu entnehmen ist. Die Quelle (Ausführungseinheit 23 oder Gleitkommaeinheit 27), die von der Entnahmewarteschlange 72 angezeigt wird, wird immer ausgewählt, um den Rmux 50 anzusteuern; wenn die Ausführungseinheit 23 das W-Feld des Mikrobefehls in 54 ausgewählt hat, wählt sie entweder die ALU 45 oder die Schiebevorrichtung 46 als Quelle für den Rmux 50 aus.
  • Das 32 Bit umfassende VA- oder virtuell-Adreß-Register 224 ist die Quelle für die Adresse für alle Ausführungseinheit-23-Speicheranfragen auf dem VA-Bus 52, mit Ausnahme von Speichervorgängen auf der Basis der zielwarteschlange 38, die den aktuellen PA- Warteschlange-56-Eintrag für eine Adresse nutzen. Im Gegensatz zum Eintrag in der PA-Warteschlange 56 ist die VA-Register-224-Adresse noch nicht übersetzt - es ergibt sich eine Virtuell-Adreß-Ausnahme, wenn die Speicheroperation keine übersetzung erfordert (wie bei IPR-Referenzen oder expliziten physikalischen Speicherreferenzen) oder wenn das Speichermanagement fehlt. 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 Mikrowortes ein Laden desselben spezifiziert. Wenn ein gegebenes Mikrowort eine Speicheroperation im MRQ-Feld spezifiziert und das VA- Register 224 lädt, wird der neue VA-Wert von der Speichermanagementeinheit 25 mit der Speicheranweisung empfangen.
  • Der Populationszähler 230 dient zum Berechnen der Anzahl der Einsen (mal vier) in den niedrigerwertigen 14 Bits des A-Busses 212 in jedem Zyklus, und erzeugt ein Ergebnis auf den Leitungen 231 für die Auswahlvorrichtung 221, so daß das Ergebnis eine Quelle darstellt, das für das nächste Mikrowort auf dem A-Bus 212 zur Verfügung steht. Die Populationszählerfunktion spart Mikrocodeschritte bei den Mikrobefehlen CALL, POP und PUSH, wie in der anhängigen Patentanmeldung PD 88-0372, eingereicht am 20. Juli 1988, erteilt an Digital Equipment Corporation, ausgeführt ist. Der Populationszähler 230 berechnet ein Ergebnis im Bereich (1 bis 14) mal vier, was der vierfachen Anzahl von Einsen auf dem A-Bus am Anfang von S4 entspricht. Wenn das Mikrowort N Daten zum A-Bus 212 lenkt, kann das Mikrowort N+1 auf das Populationszählerergebnis für diese Daten zugreifen, in dem es diese Quelle im A-Feld spezifiziert. Das Populationszählerergebnis auf den Leitungen 231 wird verwendet, um das Ausmaß des Stapelrahmens zu berechnen, das vom Makrobefehl geschrieben wird. Die zwei Enden des Stapelrahmens werden zu Speichermanagementzwecken geprüft, bevor irgendwelche Schreibvorgänge durchgeführt werden.
  • Die Maskenverarbeitungseinheit 232 hält und verarbeitet einen 14-Bit-Wert, der aus den Bits < 29:16> des B-Busses 214 geladen wird, während S4, wenn das Mikrowort durch das NISC-Feld ihr dies mitteilt. Die Einheit 232 gibt einen Satz von Bits aus, mit denen der Mikrobefehlssequenzer 42 eine Achtwegeverzweigung ausführen kann. Jede dieser Mikroverzweigungen ist eine Speicherregister-Zu-Stapel-Sequenz, wobei der Wert des Satzes der Bits definiert, welches Register der Registergruppe 43 zu speichern ist. Dieser Satz von drei Bits wird an einen Mikrotesteingang des Mikroadreßzwischenspeichers 182 der Fig. 14 angelegt, um die 8-Wege-Mikroverzweigung zu implementieren. Der Zweck hiervon ist, dem Mikrocode zu ermöglichen, Bitmasken in Makrobefehlsausführungsflüssen für CALL, RÜCKSPRUNG, POP und PUSH schnell zu verarbeiten. Die Maskenverarbeitungseinheit 232 lädt die 14 Bits während S4, bewertet den Eingang und erzeugt die in der folgenden Tabelle gezeigten Werte für die Bits < 6:0> und ferner separat für die Bits < 13:7> des B-Busses:
  • wobei X "ohne Bedeutung" bedeutet. Wenn der Mikrobefehl bei einem dieser Ausgangswerte verzweigt, nachdem diese über die Leitungen zum Mikrotesteingang des Mikrosequenzers 42 geladen worden sind, wird das niedrigstwertige Bit, das im aktuellen Maskenwert in der Maskenverarbeitungseinheit 232 eine Eins ist, automatisch auf Null zurückgesetzt, wobei diese Rücksetzung in S3 stattfindet, so daß das nächste Mikrowort beim neuen Wert der Maske verzweigen kann. Der Mikrosequenzer 42 signalisiert, daß er eine Verzweigung wahrgenommen hat, mittels des Eingangs 234 der Maskenverarbeitungseinheit 232. Der Vorteil der Maskenverarbeitungseinheit 232 liegt darin, daß eine minimale Anzahl von Mikrocodezyklen erforderlich ist, um herauszufinden, welche Register auf den Stapel zu sichern sind, wenn ein CALL oder ein anderer solcher Makrobefehl ausgeführt wird. Die auf den B-Bus geladene Maske enthält für jedes der 14 GPRs eine Eins, das auf dem Stapel zu sichern ist, wobei sich diese üblicherweise in den niedrigerwertigen Nummern der Bits < 6:0> befinden; sind z. B. Bit 1 und Bit 2 Einsen und der Rest Nullen, dann werden diese in zwei Zyklen gefunden (wodurch die Ausgänge 000 und 001 auf den Leitungen 233 erzeugt werden), wobei der Rest an Nullen in zwei Zyklen ermittelt werden kann, einer erzeugt "111" am Ausgang 233 für die Bits < 6:2> der ersten Gruppe und der nächste erzeugt "111" am Ausgang 233 für die Bits < 13:7> kollektiv (lauter Nullen) für die zweite Gruppe. Somit werden 10 Mikrozyklen eingespart.
  • Die Maskenverarbeitungseinheit 232 kann in einer Ausführungsform mittels eines Decodierers implementiert werden, um das Maskenmuster gemäß der obigen Tabelle zu bewerten und gemäß der Position der führenden "1" den angegebenen 3-Bit-Ausgang erzeugen. Als Antwort auf eine verzweigungswahrnehmungsanzeige auf der Leitung 234 vom Mikrosequenzer setzt der Decodierer die folgende "1" in der Maske und anschließend in der Einheit auf Null und führt eine weitere Bewertung durch, um den 3-Bit- Ausgangswert auf den Leitungen 233 zu erzeugen.
  • Der verzweigungsbedingungsbewerter 235 verwendet den Makrobefehlsopcode, die ALU-Bedingungscodebits sowie das Schiebevorrichtung-46-Ergebnis, um die verzweigungsbedingung für alle Makrobefehlsverzweigungen auszuwerten. Diese Auswertung wird in jedem Zyklus bewerkstelligt, wird jedoch nur dann verwendet, wenn das Mikrowort dies im MRQ-Feld spezifiziert. Das Ergebnis der Auswertung wird mit der in der Verzweigungsvorhersageeinheit 39 gemachten Befehlseinheit-22 -vorhersage verglichen. Die Befehlseinheit-22-Vorhersage wird im Eintrag in der verzweigungswarteschlange 70 angegeben. Wenn die Befehlseinheit-22-Vorhersage nicht richtig war, signalisiert die Ausführungseinheit 23 dies der Befehlseinheit 22 auf einer der Leitungen 173 und sendet eine Verzweigungsfehlvorhersage-Trapanforderung zum Mikrosequenzer 42 als eine der Eingaben 193. Ein Entnahmesignal wird auf einer der Leitungen 173 gesetzt, um der Befehlseinheit mitzuteilen, daß ein Verzweigungswarteschlangeneintrag für eine bedingte Verzweigung aus der Verzweigungswarteschlange 70 entfernt worden ist. Wenn das Entnahmesignal gesetzt ist und das Fehlvorhersagesignal nicht gesetzt ist, gibt die Befehlseinheit 22 das Betriebsmittel frei, das den anderen PC hält (die Adresse, der die Verzweigung folgen sollte, wenn die Vorhersage nicht richtig war). Wenn die Entnahme und die Fehlvorhersage beide gesetzt sind, beginnt die Befehlseinheit 22 mit dem Holen von Befehlen beim anderen PC, wobei der Mikrotrap im Mikrosequenzer 42 bewirkt, daß die Warteschlangen der Ausführungseinheit 23 und der Gleitkommaeinheit 27 geleert werden und verschiedene Warteschlangen der Befehlseinheit 22 und der Ausführungseinheit 23 gelöscht werden. Ferner löscht ein Signal an die Speichermanagementeinheit 25 die M-Kasten- Verarbeitung der Ausführungseinheit-23-Operandenzugriffe (außer den Schreibvorgängen). Der Verzweigungsmakrobefehl ist in S5 angelangt und wird somit selbst im Fall einer Fehlvorhersage entnommen; die Makrobefehle, die der Verzweigung in der Pipeline folgen, müssen über den Eingang 193 daran gehindert werden, im Fall eines Fehlvorhersage-Mikrotraps abzuschließen.
  • Die Speichermanagementeinheit (M-Kasten):
  • Wie in Fig. 17 gezeigt, enthält die Speichermanagementeinheit 25 die TB55 und dient gemeinsam mit der Betriebssystem-Speichermanagement-Software zum Zuweisen des physikalischen Speichers. Die Übersetzungen der virtuellen Adressen in physikalische Adressen werden in der Speichermanagementeinheit 25 durchgeführt, wobei Zugriffsprüfungen für das Speicherschutzsystem implementiert sind und bei Bedarf (TB-Fehlgriff, Seitenaustausch und dergleichen) der Software Speichermanagementcode aktiviert wird. Die Speichermanagementeinheit 25 weist ferner den Zugriff auf die Busse 19 oder 20 zu, wenn Speicherreferenzen gleichzeitig von der Befehlseinheit 22, der Ausführungseinheit 23 und/oder der Cache-Steuereinheit 26 empfangen werden; d. h. die Speichermanagementeinheit 25 ordnet und verarbeitet alle Speicherreferenzen und weist denselben Prioritäten zu, in einer effizienten und logisch korrekten Weise, und überträgt die Anfragen und deren zugehörige Daten zur und von der Befehlseinheit 22, der Ausführungseinheit 23, der Cache-Steuereinheit 26 und dem Primär-Cache 14. Die Speichermanagementeinheit 25 steuert ferner den Primär-Cache 14, der einen 2-Zyklus- Zugriff für einen Großteil der Befehlsstrom- und Datenstromanfragen ermöglicht.
  • Die Speichermanagementeinheit 25 empfängt Anfragen von verschiedenen Quellen. Die virtuellen Adressen werden auf dem Bus 52 von der Ausführungseinheit 23 und die Daten auf dem Schreibbus 51 von der Ausführungseinheit 23 empfangen; die Adressen dieser beiden Quellen werden im EM-Zwischenspeicher 74 zwischengespeichert. Die Befehlsstromadressen werden an die Speichermanagementeinheit 25 über den Bus 53 von der Befehlseinheit 22 angelegt. Ungültigkeitsadressen von der Cache-Steuereinheit 26 werden vom Bus 59 angelegt. Die von der Speichermanagementeinheit 25 zur Befehlseinheit 22 oder zur Ausführungseinheit 23 zurückgegebenen Daten, die aus einem Primär-Cache-14-Treffer resultieren oder von der Cache-Steuereinheit 26 stammen, nachdem eine Referenz an den Hintergrund-Cache 15 oder den Speicher 12 weitergeleitet worden ist, befinden sich auf dem Speicherdatenbus 54. Die ankommenden Anfragen werden zwischengespeichert, wobei die ausgewählte Anfrage von der Speichermanagementeinheit 25 in einem gegebenen Maschinenzyklus eingeleitet wird.
  • Eine virtuelle Adresse auf einem internen Bus 42 wird an den Merkeradreßeingang des Übersetzungspuffers 55 angelegt. Der TB ist ein inhaltsadressierbarer Speicher mit 96 Einträgen, der die Merker und die Seitentabelleneinträge für die 96 zuletzt verwendeten Seiten im physikalischen Speicher speichert. Die virtuellen Adressen, die an den virtuellen Adreßbus 240 angelegt werden, werden mit den Merkern in der TB verglichen, wobei dann, wenn eine Übereinstimmung festgestellt wird, der entsprechende Seitentabelleneintrag über den Ausgang 242 und den internen physikalischen Adreßbus 243 und über den Adreßeingang 244 zum Primär-Cache 14 weitergeleitet wird. Die physikalische Adresse wird ferner über den Pipelinezwischenspeicher 245 an den physikalischen Adreßbus 57 angelegt, der zur Cache-Steuereinheit 26 führt. Wenn ein Primär-Cache-14-Treffer auftritt, werden die Daten aus dem Primär-Cache 14 vom Ausgang 246 auf den Datenbus 58 gelegt, von wo sie auf den Speicherdatenbus 54 gelegt werden.
  • Die ankommenden virtuellen Adressen von der Befehlseinheit 22 auf den Bus 53 werden an einen Zwischenspeicher 76 angelegt, der alle Befehlsstromlesereferenzen speichert, die von der Befehlseinheit 22 angefordert werden, bis die Referenzen erfolgreich abgeschlossen sind. Ein Inkrementierer 247 ist dem Zwischenspeicher 76 zugeordnet, um die vier Wortadressen zu inkrementieren und den nächsten Block an Befehlsstromdaten zu holen.
  • Die virtuellen Adressen auf dem Bus 53 von der Befehlseinheit 22 werden ferner an die Spezifiziererwarteschlange 75 angelegt, die ein 2- Eintrag-FIFO ist, um Datenstromlese- und Datenstromschreibreferenzen zu speichern, die den von der Befehlseinheit 22 decodierten Quellen- und Zieloperanden zugeordnet sind. Jede in der Spezifiziererwarteschlange 75 zwischengespeicherte Referenz wird gespeichert, bis die Referenz erfolgreich abgeschlossen ist.
  • Der EM-Zwischenspeicher 74 speichert Referenzen, die in der Ausführungseinheit 23 entstehen, bevor diese auf den internen virtuellen Adreßbus 240 gelegt werden; jede solche Referenz wird gespeichert, bis die Speichermanagement-Zugriffsprüfelemente gelöscht sind und die Referenz erfolgreich abgeschlossen ist. Der Adreßpaarzwischenspeicher 248 speichert die Adresse des nächsten Vierwortes, wenn ein nicht ausgerichtetes Referenzpaar detektiert wird; ein Inkrementierer 249 erzeugt diese nächste Adresse durch Addieren von acht zur Adresse auf dem Bus 240.
  • Die auf dem Bus 59 von der Cache-Steuereinheit 26 ankommenden Adressen werden im Zwischenspeicher 250 der Cache-Steuereinheit 26 zwischengespeichert; diese Referenzen dienen den Befehlsstrom-Primär-Cache-14- Auffüllungen, Datenstrom-Primär-Cache-14-Auffüllungen oder den Primär-Cache-14-Hexawort-Ungültigkeiten. Jede Referenz wird im Zwischenspeicher 250 der Cache- Steuereinheit 26 gespeichert, bis sie abgeschlossen ist.
  • Wenn eine Datenstrom-Primär-Cache-14-Auffüllung angefordert wird, erscheinen die Daten auf dem Bus 58 von der Cache-Steuereinheit 26.
  • Die physikalische Adreßwarteschlange 65 ist ein FIFO mit acht Einträgen, der die physikalischen Adressen speichert, die den Zielspezifiziererreferenzen zugeordnet sind, die von der Befehlseinheit 22 über eine Zieladreßoder Lese-Modifiziere-Anweisung erzeugt werden. Die Ausführungseinheit 23 führt die entsprechenden Daten zu einem etwas späteren Zeitpunkt über eine Speicheranweisung zu. Wenn die Speicherdaten zugeführt werden, wird die Adresse der physikalischen Adreßwarteschlange 65 mit den Speicherdaten verglichen, wobei die Referenz in eine physikalische Schreiboperation umgesetzt wird. Die Adressen von der Befehlseinheit 22 werden in der gleichen Reihenfolge erwartet wie die zugehörigen Daten aus der Ausführungseinheit 23. Die Warteschlange 65 besitzt Adreßkomparatoren, die in alle acht FIFO-Einträge eingebaut sind, wobei diese Komparatoren detektieren, wenn die physikalischen Adreßbits < 8:3> eines gültigen Eintrages mit der entsprechenden physikalischen Adresse eines Datenstromlesevorgangs der Befehlseinheit 22 übereinstimmen.
  • Ein Zwischenspeicher 252 speichert die momentan ausstehende Datenstromleseadresse; ein Datenstromlesevorgang, der im Primär-Cache 14 einen Fehlgriff hervorruft, wird in diesem Zwischenspeicher 252 gespeichert, bis die entsprechende Blockauffülloperation des Primär-Cache 14 abgeschlossen ist. Der Zwischenspeicher 253 speichert die Befehlsstromlesefehlgriffadressen in entsprechender Weise. Die Lesevorgänge von IPRs werden ebenfalls im Zwischenspeicher 252 gespeichert, genauso wie die Datenstromlesevorgänge. Diese zwei Zwischenspeicher 252 und 253 besitzen eingebaute Komparatoren zum Erfassen verschiedener Bedingungen. Wenn die Hexawortadresse einer Ungültigkeit mit der in einem der Zwischenspeicher 252 oder 253 gespeicherten Hexawortadresse übereinstimmt, setzt der entsprechende Zwischenspeicher ein Bit, um anzuzeigen, daß die zugehörige Auffülloperation nicht mehr im Primär-Cache 14 gespeichert werden kann. Die Adreßbits < 11:5> adressierten einen bestimmten Index im Primär-Cache 14 (zwei Primär-Cache-14-Blöcke); wenn die Adresse < 8:5> des Zwischenspeichers 252 mit den entsprechenden Bits der physikalischen Adresse eines Befehlsstromlesevorgangs übereinstimmt, wird dieser Befehlsstromlesevorgang angehalten, bis die Datenstromauffülloperation abgeschlossen ist - dies verhindert, daß möglicherweise verursacht wird, daß eine Datenstromauffüllsequenz für einen gegebenen Primär Cache-14-Block gleichzeitig mit einer Befehlsstromauffüllsequenz für denselben Block auftritt. In ähnlicher Weise werden die Adreßbits < 8:5> des Zwischenspeichers 253 mit den Datenstromleseadressen verglichen, um eine weitere gleichzeitige I-Strom/D- Strom-Auffüllsequenz in denselben Primär-Cache-14-Block zu verhindern. Die Adreßbits < 8:5> der beiden Zwischenspeicher 252 und 253 werden bei jeder speicherschreiboperation verglichen, was erforderlich ist, um zu verhindern, daß der Schreibvorgang die Cache- Auffüllsequenz stört.
  • Die virtuelle Adresse auf dem Bus 240 wird ferner an die Speichermanagementausnahmeeinheit 254 angelegt, die dazu dient, die Zugriffsrechte des PTE zu untersuchen, der der virtuellen Adresse zugeordnet ist, um sicherzustellen, daß die Schutzebene nicht verletzt wird, oder das die Zugriffsregeln nicht verletzt werden. Wenn keine Ausnahme erzeugt wird, kann die Speicheranfrage ohne Unterbrechung fortgesetzt werden, wobei jedoch dann, wenn von der Einheit 254 eine Ausnahme festgestellt wird, die Speicherreferenz abgebrochen wird.
  • Eine wichtige Aufgabe der Funktion der Speichermanagementeinheit 25 ist, angeforderte Lesedaten so schnell wie möglich zur Befehlseinheit 22 und zur Ausführungseinheit 23 zurückzugeben, um die Makropipeline-Halte zu minimieren. Wenn die Ausführungseinheit-23-Pipeline angehalten wird, da sie auf einen Speicheroperanden wartet, der in ihre Registergruppe 41 geladen werden soll (MD-Halt-Bedingung), hängt die Zeitspanne, die die Ausführungseinheit 23 angehalten bleibt, davon ab, wie schnell die Speichermanagementeinheit 25 die Daten zurückgeben kann. Um die Leselatenzzeit der Speichermanagementeinheit 25 zu minimieren, wird eine 2- Zyklus-Pipelineorganisation der Speichermanagementeinheit 25 verwendet, wie in Fig. 17a gezeigt, was ermöglicht, das angeforderte Lesedaten in einem Minimum von 2 Zyklen zurückgegeben werden, nachdem die Lesereferenz an die Speichermanagementeinheit 25 weitergeleitet worden ist, wenn ein Primär-Cache-14-Treffer angenommen wird. In Fig. 17a gibt die Speichermanagementeinheit 25 zu Beginn des Zyklus S5 die höchste Prioritätsreferenz in die Pipeline S5 ein; die Arbitrierungsschaltung 256 ermittelt am Ende des vorangehenden Zyklus S4, welche Referenz in S5 eingegeben werden soll (über den Bus 240 an den Eingang 241 der TB55 angelegt werden soll). Die erste Hälfte des Zyklus S5 wird für das Nachschlagen in der TB und für das Übersetzen der virtuellen Adresse in eine physikalische Adresse mittels der TB verwendet. Der Primär-Cache-14-Zugriff wird während phi2 von 85 eingeleitet (bevor der TB-Ausgang verfügbar ist, unter Verwendung des Offsetabschnitts < 8:0> der virtuellen Adresse über dem Pfad 257) und bis phi1 von S6 hinein fortgesetzt, wobei die Daten auf dem Bus 246 zurückgegeben werden. Wenn die Referenz bewirken soll, daß Daten an die Befehlseinheit 22 oder die Ausführungseinheit 23 zurückgegeben werden, wird phi1- phi3 des Zyklus 86 verwendet, um die Lesedaten im Rotierer 258 zu rotieren (wenn die Daten nicht rechts ausgerichtet sind) und die Daten zur Befehlseinheit 22 und/oder Ausführungseinheit 23 über den MD-Bus 54 zu übertragen.
  • Unter der Annahme, daß eine ausgerichtete Lesereferenz im Zyklus x von der Befehlseinheit 22 oder der Ausführungseinheit 23 ausgegeben wird, kann die Speichermanagementeinheit 25 somit die angeforderten Daten im Zyklus x+2 zurückgeben, vorausgesetzt, daß 1) die übersetzte Leseadresse in der TB55 im Cache gespeichert war, 2) keine Speichermanagementausnahmen aufgetreten sind, die von der Speichermanagementausnahmeeinheit 254 detektiert werden, 3) die Lesedaten im Primär-Cache 14 gespeichert waren und 4) keine andere höhere Priorität oder anhängige Referenz die sofortige Verarbeitung dieses Lesevorgangs verhindert hat.
  • Aufgrund der Makropipelinestruktur der CPU 10 kann die Speichermanagementeinheit 25 Referenzen "außerhalb der Reihenfolge" von der Befehlseinheit 22 und der Ausführungseinheit 23 empfangen. Das heißt, die Befehlseinheit 22 kann eine Referenz senden, die sich auf einen Opcode bezieht, der decodiert worden ist, bevor die Ausführungseinheit 23 alle Referenzen gesendet hat, die sich auf den vorangehenden Opcode beziehen. Das Ausgeben von Referenzen "außerhalb der Reihenfolge" in einer Makropipeline führt zu komplizierten Vorgängen in der Speichermanagementeinheit 25, um zu garantieren, daß alle Referenzen innerhalb des Kontextes des Befehlssatzes, der CPU-Architektur, der Mkropipeline und der Speichermanagement-25-Hardware korrekt verarbeitet werden. Viele dieser komplexen Vorgänge nehmen die Form von Einschränkungen dafür an, wie und wann Referenzen von der Speichermanagementeinheit 25 verarbeitet werden können.
  • Ein synchronisierungsbeispiel ist nützlich, um die mehreren Referenzreihenfolgeneinschränkungen darzustellen. Dieses Beispiel nimmt an, daß zwei Prozessoren (z. B. ist "Prozessor 1" die CPU 10 der Fig. 1 und "Prozessor 2" die CPU 28) in einer Multiprozessorumgebung operieren und den folgenden Code ausführen:
  • Anfangs besitzt der Prozessor 1 den kritischen Abschnitt, der der Speicherstelle T entspricht. Der Prozessor 1 modifiziert die Speicherzelle C, da ihm im Moment der Besitz zugeteilt ist. Anschließend gibt der Prozessor 1 den Besitz frei, indem er eine 1 in T schreibt. Inzwischen "läuft" der Prozessor 2 auf der Stelle T und wartet, daß T ungleich 0 wird. Sobald T ungleich 0 ist, liest der Prozessor 2 den Wert von C. Auf dieses Beispiel beziehen sich mehrere Referenzreihenfolgeneinschränkungen für die Speichermanagementeinheit 25, wie in den folgenden Absätzen erläutert wird.
  • Eine Einschränkung ist "keine D-Strom-Treffer unter D- Strom-Fehlgriffen", was bedeutet, daß die Speichermanagementeinheit 25 keine Datenstromlesereferenz zur Ausführung zuläßt, die im Primär-Cache 14 trifft, solange angeforderte Daten für einen vorangehenden Datenstromlesevorgang noch nicht zugeführt worden sind. Man beachte den Code, den der Prozessor 2 im obigen Beispiel ausführt. Wenn die Speichermanagementeinheit 25 Datenstromtreffer unter Datenstromfehlgriffen erlaubt, ist es möglich, daß der Befehlseinheit-22-Lesevorgang von C während einer anhängigen Lesefehlgriffsequenz für T im Primär-Cache 14 trifft. Hierbei könnte die Speichermanagementeinheit 25 den Wert von C liefern, bevor Prozessor 1 C modifiziert hat. Somit würde der Prozessor 2 das alte C erhalten, während das neue T bewirkt, daß der Synchronisierungscode nicht richtig arbeitet.
  • Es ist zu beachten, daß dann, wenn Datenstromtreffer unter Datenstromfehlgriffen verhindert werden, die Speichermanagementeinheit 25 einen Datenstromtreffer unter einer Datenstromauffülloperation ausführt. Mit anderen Worten, die Speichermanagementeinheit 25 führt Daten für einen Lesevorgang zu, der im Primär-Cache 14 trifft, während eine Primär-Cache-14-Auffülloperation für einen vorangegangenen Fehlgrifflesevorgang in Arbeit ist, vorausgesetzt, daß die nicht gefundenen Lesedaten bereits zugeführt worden sind.
  • Die Befehlsstrom- und Datenstromreferenzen werden unabhängig voneinander behandelt. Das heißt, die Befehlsstromverarbeitung kann unabhängig davon vorrücken, ob derzeit eine Datenstromfehlgriffsequenz ausgeführt wird, unter der Annahme, daß kein Primär-Cache-14-Indexkonflikt vorliegt.
  • Eine weitere Einschränkung ist "keine Befehlsstromtreffer unter Befehlsstromfehlgriffen", was der analoge Fall für Befehlsstromlesezugriffe ist. Diese Einschränkung ist notwendig, um zu garantieren, daß die Befehlseinheit 22 immer zuerst ihre angeforderte Lesestromreferenz empfängt, bevor irgendwelche anderen Befehlsstromdaten empfangen werden.
  • Eine dritte Einschränkung ist "Einhalten der Reihenfolge der Schreibvorgänge". Es sei das obige Beispiel betrachtet: wenn die Speichermanagementeinheit 25 des Prozessors 1 den Schreibvorgang in C und den Schreibvorgang in T umordnet, könnte der Prozessor 2 den alten Wert von C lesen, bevor Prozessor 1 C aktualisiert hat. Daher darf die Speichermanagementeinheit 25 niemals die Reihenfolge der vom Ausführungseinheit-23-Mikrocode erzeugten Achreibvorgänge umordnen.
  • Eine vierte Einschränkung ist "Beibehalten der Reihenfolge der C-Kasten-Referenzen". Es sei wiederum das obige Beispiel betrachtet: der Prozessor 2 empfängt eine Ungültigkeit für C als Ergebnis des vom Prozessor 1 im Befehl MOVL #1,C ausgeführten Schreibvorgangs. Wenn diese Ungültigkeit nicht verarbeitet werden soll, bis der Prozessor 2 C gelesen hat, wurde der falsche wert von C in R0 plaziert. Genau genommen muß garantiert werden, daß die Ungültigkeit für C vor dem Lesen von C auftritt. Da jedoch C im Primär-Cache 14 des Prozessors 2 vorhanden sein kann, kann das Lesen von C nicht verhindert werden, bevor die Ungültigkeit empfangen worden ist. Im Hinbllick auf den Prozessor 2 besteht die reale Einschränkung somit darin, daß die Ungültigkeit für C vor der Ungültigkeit für T auftreten muß, was vor dem Lesen von T stattfinden muß, das den Prozessor 2 veranlaßt, die Schleife zu verlassen. Solange die Speichermanagementeinheit 25 die Cache-Steuereinheit-26-Referenzen nicht umordnet, tritt die Ungültigkeit für C auf, bevor ein Nicht-0-Wert von T gelesen wird.
  • Eine fünfte Einschränkung ist "Bewahren der Reihenfolge der Befehlseinheit-22-Lesevorgänge bezüglich irgendwelcher anhängigen Ausführungseinheits-23- Schreibvorgänge in dieselbe Vierwortadresse". Man betrachte das folgende Beispiel des in der CPU 10 ausgeführten Codes:
  • MOVL #1,C
  • MOVL C,RO
  • In der Makropipeline holt die Befehlseinheit 22 die Spezifiziereroperanden im voraus. Somit empfängt die Speichermanagementeinheit 25 ein Lesen von C, was dem Befehl "MOVL C,RO" entspricht. Dieser Lesevorgang kann jedoch nicht ausgeführt werden, bis der Schreibvorgang in C vom vorangehenden Befehl abgeschlossen ist. Andernfalls würde der falsche Wert von C gelesen. Im allgemeinen muß die Speichermanagementeinheit 25 sicherstellen, daß die Befehlseinheit-22 -Lesevorgänge nur dann ausgeführt werden, wenn alle vorangehenden Schreibvorgänge in die gleiche Stelle abgeschlossen worden sind.
  • Eine sechste Einschränkung ist "E/A-Raum-Lesevorgänge von der Befehlseinheit 22 dürfen nur dann ausgeführt werden, wenn die Ausführungseinheit 23 den zugehörigen Befehl ausführt". Anders als bei den Speicherlesevorgängen können Lesevorgänge bei bestimmten E/A-Raumadressen einen zu modifizierenden Zustand verursachen. Als Folge hiervon dürfen die E/A-Raum-Lesevorgänge nur im Zusammenhang der Befehlsausführung ausgeführt werden, denen der Lesevorgang zugeordnet ist. Aufgrund der Mikropipelinestruktur der CPU 10 kann die Befehlseinheit 22 einen E/A-Raumlesevorgang ausgeben, um einen Operanden eines Befehls im voraus zu holen, den die Ausführungseinheit 23 momentan nicht ausführt. Aufgrund von Verzweigungen bei der Befehlsausführung kann die Ausführungseinheit 23 tatsächlich niemals den Befehl ausführen, der dem E/A-Raumlesevorgang zugeordnet ist. Um eine fehlerhafte Zustandsmodifizierung zu verhindern, muß daher die Speichermanagementeinheit 25 das Verarbeiten von E/A-Raum-Lesevorgängen, die von der Befehlseinheit 22 ausgegeben werden, verhindern, bis die Ausführungseinheit 23 den Befehl ausführt, der dem E/A-Raumlesevorgang zugeordnet ist.
  • Eine siebte Einschränkung ist "Lesevorgänge im selben Primär-Cache-14-Block wie eine anhängige Lese/Auffüll- Operation müssen verhindert werden". Die Organisation der Primär-Cache 14 ist so beschaffen, daß ein Adreßmerker vier Teilblockgültigkeitsbits zugeordnet ist. Daher müssen die gültigen Inhalte aller vier Teilblöcke immer der Merkeradresse entsprechen. Wenn zwei verschiedene Primär-Cache-14-Auffülloperationen gleichzeitig denselben Primär-Cache-14-Block auffüllen, ist es möglich, daß die aufgefüllten Daten der zwei Auffülloperationen gemischt werden. Als Folge hiervon wird ein Befehlsstromlesevorgang in denselben Primär-Cache-14- Block wie ein anhängiger Datenstrom-Lese/Auffüll-Vorgang unterbunden, bis die anhängige Lese/Auffüll-Operation abgeschlossen ist. In ähnlicher Weise wird ein Datenstromlesevorgang aus demselben Primär-Cache-14-Block wie ein anhängiger Befehlsstrom-Lese/Auffüll-Vorgang unterbunden, bis das Auffüllen abgeschlossen ist.
  • Eine achte Einschränkung ist "Schreibvorgänge in denselben Primär-Cache-14-Block wie eine anhängige Lese/Auffüll-Operation müssen unterbunden werden, bis die Lese/Auffüll-Operation abgeschlossen ist". Wie bei der siebten Einschränkung ist diese Einschränkung erforderlich, um zu garantieren, daß alle gültigen Teilblöcke gültige aktuelle Daten enthalten. Man betrachte die folgende Situation: die Speichermanagementeinheit 25 führt einen Schreibvorgang in einen ungültigen Teilblock eines Primär-Cache-14- Blocks aus, der derzeit aufgefüllt wird; einen Zyklus später gelangt der Cache-Auffüllvorgang zu diesem gleichen Teilblock im Primär-Cache 14. Somit werden die letzten Teilblockdaten, die vom Schreibvorgang stammen, durch ältere Cache-Auffülldaten überschrieben. Dieser Teilblock wird nun mit "alten" Daten als gültig markiert. Um diese Situation zu vermeiden, werden Schreibvorgänge in den gleichen Primär-Cache-14-Block wie eine anhängige Lese/Auffüll-Operation unterbunden, bis die Cache- Auffüllsequenz abgeschlossen ist.
  • Wie in Fig. 17 gezeigt, gibt es in der Speichermanage menteinheit 25 sieben unterschiedliche Referenzspeichervorrichtungen (z. B. EM-Zwischenspeicher 74, Iref-Zwischenspeicher 75, C-Kasten-Zwischenspeicher 250, VAP-Zwischenspeicher 248, Spezifiziererwarteschlange 76, MME-Zwischenspeicher und dergleichen), die in S5 auf dem virtuellen Adreßbus 240 gelegt werden können. Um aufzulösen, welcher angesteuert werden soll, wird mittels der Arbitrierungsschaltung 256 eine Referenzzuweisung implementiert. Der Zweck dieser sieben Vorrichtungen ist, anhängige Referenzen, die von unterschiedlichen Sektionen des Chips stammen, zu puffern, bis sie von der Speichermanagementeinheit 25 verarbeitet werden können. Um die Leistung der CPU-Pipeline zu optimieren und um eine funktionelle Richtigkeit der Referenzverarbeitung hinsichtlich der Speichermanagement-25-Schaltung und der Referenzreihenfolgeneinschränkungen aufrecht zu erhalten, bedient die Speichermanagementeinheit 25 Referenzen auf diesen sieben Warteschlangen unter Beachtung einer Priorität.
  • Während jedes Zyklus der Speichermanagementeinheit 25 ermittelt die Referenzarbitrierungsschaltung 256, welche unbedienten Referenzen im nächsten Zyklus verarbeitet werden sollen, entsprechend einer Arbitrierungspriorität. Die Referenzquellen sind im folgenden von der höchsten zur niedrigsten Priorität aufgelistet:
  • 1. Der Zwischenspeicher 250 mit C-Kasten-Referenzen
  • 2. Der Neuversuch-Fehlgriff-Zwischenspeicher 257
  • 3. Der Speichermanagementausnahme-Zwischenspeicher 258
  • 4. Der Virtuell-Adreßpaar-Zwischenspeicher 248
  • 5. Der E-Kasten-Zu-M-Kasten-Zwischenspeicher 74
  • 6. Die Spezifiziererwarteschlange 75
  • 7. Der Befehlseinheit-22-Referenzzwischenspeicher 247
  • Wenn keine angesteuert werden kann, gibt die Speichermanagementeinheit 25 in S5 eine NOP-Anweisung aus. Dieses Prioritätsschema gibt nicht direkt an, welche anhängige Referenz als nächstes angesteuert wird, sondern gibt statt dessen an, in welcher Reihenfolge die anhängigen Referenzen geprüft werden, um zu ermitteln, welche verarbeitet werden soll. Konzeptionell ist die höchste anhängige Referenz, die alle Bedingungen zum Ansteuern der Referenz erfüllt, diejenige, der ermöglicht wird, während des nachfolgenden Zyklus ausgeführt zu werden.
  • Dieses Prioritätsschema basiert auf einer bestimmten Begründung. Erstens, alle Referenzen, die von der Cache- Steuereinheit 26 stammen, werden immer bedient, sobald sie zur Verfügung stehen. Da die Cache-Steuereinheit-26- Referenzen garantiert in S5 in einem Zyklus abgeschlossen werden, wird die Notwendigkeit zum Einreihen der Cache- Steuereinheit-26-Referenzen in eine Warteschlange und zum Schaffen eines Rückstaumechanismus, um die Cache- Steuereinheit 26 zu veranlassen, das Senden von Referenzen einzustellen, beseitigt. Zweitens, eine Datenstromlesereferenz im Neuversuch-Datenfehlgriff- Zwischenspeicher 257 hat garantiert alle möglichen Speichermanagementprobleme beseitigt; daher wird jede Referenz, die in diesem Zwischenspeicher gespeichert ist, als zweite Referenz für die Verarbeitung vorgesehen. Drittens, Wenn eine Referenz, die sich auf die Speichermanagementverarbeitung bezieht, im Speichermanagementausnahme zwischenspeicher 258 anhängig ist, wird sie gegenüber den übrigen vier Quellen bevorzugt, da die Speichermanagementeinheit 25 alle Speichermanagementausnahmen beseitigen muß, bevor die normale Verarbeitung fortgesetzt werden kann. Viertens, Der Virtuell-Adreßpaar-Zwischenspeicher 248 speichert die zweite Referenz eines nicht ausgerichteten Referenzpaares; da es notwendig ist, die vollständige nicht ausgerichtete Referenz abzuschließen, bevor eine weitere Referenz eingeleitet wird, besitzt der Zwischenspeicher 248 die nächst höchste Priorität, um die nicht ausgerichtete Sequenz abzuschließen, die von einer Referenz mit geringerer Priorität eingeleitet worden ist. Fünftens, der EM-Zwischenspeicher 74 speichert Referenzen von der Ausführungseinheit 23; dieser hat Vorrang vor der Spezifiziererwarteschlange 75 und den Quellen des Befehlseinheit-22-Referenzzwischenspeichers 76, da die Referenzen der Ausführungseinheit 23 in der Pipeline physikalisch weiter vorgerückt sind als die Referenzen der Befehlseinheit 22 - die angenommene Implikation dieser Tatsache ist, daß die Befehlseinheit 23 einen unmittelbaren Bedarf zur Befriedigung ihrer Referenzanfragen hat als die Befehlseinheit 22, da die Ausführungseinheit 23 immer wirkliche Arbeit verrichtet und die Befehlseinheit 22 Operanden im voraus holt, die möglicherweise tatsächlich nie verwendet werden. Sechstens, die Spezifiziererwarteschlange 75 speichert Operandenreferenzen der Befehlseinheit 22 und kommt als nächste in der Reihe in Betracht; die Spezifiziererwarteschlange besitzt eine höhere Priorität als der Befehlseinheit-22-Referenzzwischenspeicher 76, da Spezifiziererreferenzen in der Pipeline wiederum weiter vorgerückt sind als das Befehlsstrom-Vorausholen. Und schließlich siebtens, wenn keine andere Referenz der Zeit angesteuert werden kann, kann der Befehlseinheit-22- Referenzzwischenspeicher 76 eine Befehlsstromlesereferenz ansteuern, um der Befehlseinheit 22 Daten zuzuführen. Wenn im Augenblick keine Referenz in S5 angesteuert werden kann, gibt die Speichermanagementeinheit 25 automatisch eine NOP-Anweisung aus.
  • Der Arbitrierungsalgorithmus, der in der Schaltung 256 ausgeführt wird, beruht auf dem eben beschriebenen Prioritätsschema; die Arbitrierungslogik prüft jede Referenz, um zu ermitteln, ob sie im nächsten Zyklus verarbeitet werden kann, indem der aktuelle Zustand der Speichermanagementeinheit 25 ausgewertet wird. Es gibt bestimmte Tests, die jedem Zwischenspeicher zugeordnet sind. Erstens, da die Cache-Steuereinheit-26-Referenzen immer sofort verarbeitet werden müssen, veranlaßt ein gültiger Zwischenspeicher 250, daß die Cache- Steuereinheit-26-Referenz immer vor allen anderen anhängigen Referenzen angesteuert wird. Zweitens, eine anhängige Datenstromlesereferenz wird vom Neuversuch- Zwischenspeicher 257 angesteuert, vorausgesetzt, daß der Auffüllzustand des Primär-Cache 14 sich seit der letzten versuchten Zwischenspeicher-257 -Referenz geändert hat; wenn sich der Primär-Cache-14-Zustand verändert hat, ist es sinnvoll, die Referenz neu zu versuchen, da sie nun im Primär-Cache 14 einen Treffer hervorrufen kann. Drittens, eine anhängige MME-Referenz wird angesteuert, wenn die Inhalte der Speichermanagementausnahme gültig sind. Viertens, eine Referenz vom Virtuell-Adreßpaar- Zwischenspeicher 248 wird angesteuert, wenn der Inhalt gültig ist. Fünftens, eine Referenz vom E-Kasten-Zu-M- Kasten-Zwischenspeicher 74 wird angesteuert, vorausgesetzt, daß der Inhalt gültig ist. Sechstens, eine gültige Referenz in der Spezifiziererwarteschlange 75 wird angesteuert, vorausgesetzt, daß die Spezifiziererwarteschlange nicht aufgrund in Bearbeitung befindlicher, expuziter Ausführungseinheit-23- Schreibvorgänge angehalten worden ist. Siebtens, eine Referenz von der Befehlseinheit 22 im Zwischenspeicher 76 wird angesteuert, vorausgesetzt, daß dieser Zwischenspeicher nicht aufgrund einer anhängigen Leseverriegelungs/Schreibfreigabe-Sequenz angehalten worden ist. Wenn keine dieser sieben Bedingungen erfüllt ist, gibt die Speichermanagementeinheit 25 eine NOP- Anweisung auf den Anweisungsbus 259 aus, wodurch die S5- Pipeline in einen Leerlaufzustand versetzt wird.
  • Die Leseverarbeitung in der Speichermanagementeinheit 25 wird im folgenden untersucht, wobei mit generischen Lesetreffer- und Lesefehlgriff/Cache-Auffüllsequenzen begonnen wird. Es sei angenommen, daß eine Leseoperation eingeleitet wird und kein TB-Fehlgriff vorliegt (und kein Halt aus irgendeinem der vielen unterschiedlichen Gründe), wobei sich die Operation der Speichermanagementeinheit 25 wie folgt ergibt. Erstens, der Bytemaskengenerator 260 erzeugt die entsprechende Bytemaske durch Betrachten der Bits < 2:0> der virtuellen Adresse auf dem Bus 243 und des Datenlängenfeldes DL < 1:0> auf dem Anweisungsbus 261, woraufhin er die Bytemaske an die 8 Bits des Steuerbusses 261 anlegt. Die Bytemaskendaten werden bei der Leseoperation erzeugt, um die Byteausrichtungsinformationen der Cache-Steuereinheit 26 ader einem E/A-Raumlesevorgang zuzuführen.
  • Wenn in der S5-Pipeline eine Lesereferenz eingeleitet wird, wird die Adresse mittels der TB (unter der Annahme, daß die Adresse virtuell war) während der ersten Hälfte des Zyklus S5 in eine physikalische Adresse übersetzt, wodurch eine physikalische Adresse auf dem Bus 243 erzeugt wird. Der Primär-Cache 14 leitet eine Cache- Nachschlagsequenz unter Verwendung dieser physikalischen Adresse während der zweiten Hälfte des Zyklus S5 ein. Diese Cache-Zugriffssequenz überlappt bis in den folgenden Zyklus S6. Während phi4 des Zyklus S5 ermittelt der Primär-Cache 14, ob die Lesereferenz in seiner Matrix vorhanden ist. Wenn der Primär-Cache 14 ermittelt, daß die angeforderten Daten vorhanden sind, tritt eine "Cache-Treffer"- oder "Lesetreffer"-Bedingung auf. In diesem Fall liegt der Primär-Cache 14 die angeforderten Daten auf den Datenbus 246. Ein Referenzfreigabesignal auf dem Bus 262 wird zurückgesetzt, um die Cache- Steuereinheit 26 zu informieren, daß sie den S6- Lesevorgang nicht weiter verfolgen soll, da die Speichermanagementeinheit 25 die Daten aus dem Primär- Cache 14 zuführt.
  • Wenn der Primär-Cache 14 ermittelt, daß die angeforderten Daten nicht vorliegen, tritt eine "Cache-Fehlgriff"- oder "Lesefehlgriff"-Bedingung auf. In diesem Fall wird die Lesereferenz in den Zwischenspeicher 252 oder den Zwischenspeicher 253 geladen (in Abhängigkeit davon, ob das Lesen den Befehlsstrom oder den Datenstrom betrifft) wobei die Cache-Steuereinheit 26 angewiesen wird, die Verarbeitung des Lesevorgangs mittels des Setzens des Referenzfreigabesignals durch die Speichermanagementeinheit 25 auf dem Bus 262 fortzusetzen. Zu einem bestimmten späteren Zeitpunkt erhält die Cache-Steuereinheit 26 die angeforderten Daten aus dem Hintergrund-Cache 15 oder aus dem Speicher 12. Die Cache-Steuereinheit 26 sendet anschließend vier Vierwörter an Daten unter Verwendung der Befehlsstrom- Cache-Auffüll- oder Datenstrom-Cache-Auffüll-Anweisungen. Die vier Cache-Auffüllanweisungen werden gemeinsam verwendet, um den gesamten Primär-Cache-14-Block aufzufüllen, der der Hexawortleseadresse auf dem Bus 57 zugeordnet ist. Im Fall von Datenstromauffüllvorgängen wird eine der vier Cache-Auffüllanweisungen durch ein Signal qualifiziert, das anzeigt, das dieser Vierwortauffüllvorgang die angeforderten Datenstromdaten enthält, die der Vierwortadresse des Lesevorgangs zugeordnet sind. Wenn dieser Auffüllvorgang entdeckt wird, wird er verwendet, um die angeforderten Lesedaten der Speichermanagementeinheit 25, der Befehlseinheit 22 und/oder der Ausführungseinheit 23 zuzuführen. Wenn jedoch die physikalische Adresse, die der Cache- Auffüllanweisung zugeordnet ist, in den E/A-Raum fällt, wird nur ein Vierwortauffüllvorgang zurückgegeben, wobei die Daten nicht im Primär-Cache 14 gespeichert werden. Nur Speicherdaten werden im Primär-Cache 14 gespeichert.
  • Jede Cache-Auffüllanweisung, die zur Speichermanagementeinheit 25 gesendet wird, wird im Cache-Steuereinheit-26- Zwischenspeicher 250 zwischengespeichert; es ist zu beachten, daß weder die vollständige Cache-Auffülladresse noch die Auffülldaten in diesem Zwischenspeicher geladen werden. Die Adresse in den I-Fehlgriff- oder D-Fehlgriff- Zwischenspeichern 252, 253 wird gemeinsam mit den zwei Vierwortausrichtungsbits, die im Zwischenspeicher 257 der Cache-Steuereinheit 26 zwischengespeichert sind, verwendet, um die Vierwort-Cache-Auffülladresse zu erzeugen, wenn die Cache-Auffüllanweisung in S5 ausgeführt wird. Wenn die Auffülloperation in S6 vorrückt, legt die Cache-Steuereinheit 26 die entsprechenden Cache-Auffülldaten auf den Datenbus 58, so daß der Primär-Cache 14 das Auffüllen über den Eingang- Ausgang 246 durchführt.
  • Die aus einer Leseoperation resultierenden Daten werden vom Primär-Cache 14 auf den Bus 58 gelegt (im Fall eines Cache-Treffers) oder von der Cache-Steuereinheit 26 auf den Bus 58 gelegt (im Fall eines Cache-Fehlgriffs). Diese Daten werden anschließend vom Rotierer 258 in rechts ausgerichteter Form auf den MD-Bus 54 gelegt. Die Signale werden mit diesen Daten bedingt auf den Bus 262 gesetzt, um die Ziele der Daten anzuzeigen, wie z. B. den virtuellen Befehls-Cache 17, die Befehlseinheit-22-Daten, die Befehls-Einheit-22-IPR-Schreibvorgänge, die Ausführungseinheit-23-Daten oder die Speichermanagementeinheit-25-Daten.
  • Um die angeforderten Lesedaten an die Befehlseinheit 22 und/oder die Ausführungseinheit 23 so bald wie möglich zurückzugeben, implementiert die Cache-Steuereinheit 26 einen Primär-Cache-14-Datenumleitungsmechanismus. Wenn dieser Mechanismus aktiviert wird, können die angeforderten Lesedaten einen Zyklus früher zurückgegeben werden als in dem Fall, in dem die Daten für die S6- Cache-Auffülloperation angelegt werden. Der Umleitungsmechanismus arbeitet so, daß die Speichermanagementeinheit 25 die Cache-Steuereinheit 26 darüber informiert, daß der nächste Zyklus S6 ein Leerlaufzyklus sein wird, wobei somit der Bus 58 für die Cache-Steuereinheit 26 zur verfügung steht. Wenn die Cache-Steuereinheit 26 über den Leerlaufzyklus S6 informiert ist, legt sie die angeforderten Lesedaten auf den Bus 58, wenn die Lesedaten im Augenblick zur Verfügung stehen (wenn während eines Umleitungszyklus keine Lesedaten zur Verfügung stehen, gibt die Cache- Steuereinheit 26 irgendwelche unbestimmten Daten aus und es werden keine gültigen Daten umgeleitet). Die Lesedaten werden anschließend mittels des Rotierers 258 formatiert und auf den MD-Bus 54 übertragen, um sie zur Befehlseinheit 22 und/oder zur Ausführungseinheit 23 zurückzugeben, was durch die VIC-Daten-, I-Kasten-Daten- oder E-Kasten-Daten-Signale auf dem Anweisungsbus 262 bestimmt wird.
  • Der Speicherzugriff auf den gesamten Befehlsstromcode wird mittels der Speichermanagementeinheit 25 im Auftrag der Befehlseinheit 22 implementiert. Die Befehlseinheit 22 verwendet die Befehlsstromdaten, um ihre Vorausholwarteschlange 32 zu laden und den virtuellen Befehls-Cache 17 auf zufüllen. Wenn die Befehlseinheit 22 die Befehlsstromdaten anfordert, die nicht in der Vorausholwarteschlange 32 oder im virtuellen Befehls- Cache 17 gespeichert sind, gibt die Befehlseinheit 22 eine Befehlsstromleseanforderung aus, die vom Iref Zwischenspeicher 76 zwischengespeichert wird. Die Befehlseinheit-22-Adresse wird immer von der Speichermanagementeinheit 25 als ausgerichtete Vierwortadresse interpretiert. In Abhängigkeit davon, ob der Lesevorgang im Primär-Cache 14 trifft oder einen Fehlgriff hervorruft, ändert sich die Menge der zurückgegebenen Daten. Die Befehlseinheit 22 nimmt kontinuierlich Befehlsstromdaten von der Speichermanagementeinheit 25 an, bis die Speichermanagementeinheit 25 Befehlsstrom-MD-Bus-54-Daten mit dem Letzte-Auffüllung-Signal qualifiziert und die Befehlseinheit 22 informiert, daß der aktuelle Auffüllvorgang die anfängliche I-Lesetransaktion beendet.
  • Wenn die angeforderten Daten im Primär-Cache 14 vorhanden sind, wandelt die Speichermanagementeinheit 25 die Iref- Zwischenspeicher-76-Referenz in eine Serie von Befehlsstromlesevorgängen um, um einen virtuellen Befehls- Cache-17-"Vorwärtsauffüll"-Algorithmus zu implementieren. Der Vorwärtsauffüllalgorithmus erzeugt ansteigende Vierwortleseadressen ausgehend von der ursprünglichen Adresse im Iref-Zwischenspeicher 76 bis zur höchsten Vierwortadresse der ursprünglichen Hexawortadresse. Mit anderen Worten, die Speichermanagementeinheit 25 erzeugt Lesereferenzen, so daß der Hexawortblock des virtuellen Befehls-Cache 17, der der ursprünglichen Adresse zugeordnet ist, ausgehend von dem Punkt der Anfrage bis zum Ende des Blocks aufgefüllt wird. Die Theorie hinter diesem Vorwärtsauffüllschema ist, daß ein Zuführen von Befehlsstromdaten nur dann sinnvoll ist, wenn es der angeforderten Referenz folgt, da die Befehlsstromausführung monoton ansteigende Befehlsstromadressen erzeugt (wenn Verzweigungen vernachlässigt werden).
  • Das Vorwärtsauffüllschema wird mittels des Iref-Zwischenspeichers 76 implementiert. Sobald der Iref-Zwischenspeicherlesevorgang in 55 abschließt, modifiziert der Iref- Zwischenspeicher-Vierwortadreßinkrementierer 247 die gespeicherte Adresse des Zwischenspeichers 76, so daß sein Inhalt für den nächsten Vierwort-I-Lesevorgang vorbereitet wird. Sobald diese "neue" Referenz in S5 abschließt, wird die nächste I-Lesereferenz erzeugt. Wenn der Iref-Zwischenspeicher schließlich den I-Lesevorgang ausgibt, der der höchsten Vierwortadresse der Hexawortadresse zugeordnet ist, wird der Vorwärtsauffüllvorgang durch Ungültigmachen des Iref- Zwischenspeichers 76 beendet.
  • Der obenbeschriebene Vorwärtsauffüllalgorithmus wird beim Empfang eines I-Lesevorgangs immer aktiviert. Wenn jedoch festgestellt wird, daß einer der I-Lesevorgänge im Primär-Cache 14 einen Fehlgriff hervorgerufen hat, werden die nachfolgenden I-Lesereferenzen aus der S5-Pipeline und dem Iref-Zwischenspeicher 76 gelöscht. Der fehlgreifende I-Lesevorgang bewirkt, daß der I-Fehlgriff- Zwischenspeicher 253 geladen wird und die Cache-Steuereinheit 26 die Verarbeitung des Lesevorgangs fortsetzt.
  • Wenn die Cache-Steuereinheit 26 die resultierenden vier Vierwörter der Primär-Cache-14-Daten zurückgibt, werden alle vier Vierwörter zur Befehlseinheit 22 zurückübertragen, qualifiziert durch die VIC-Daten. Dies führt im Endeffekt zu einem "Vollfüll"-Algorithmus des virtuellen Befehls-Cache 17, da der gesamte virtuelle Befehls-Cache-17-Block aufgefüllt wird. Das Vollfüllen wird anstelle des Vorwärtsauffüllens durchgeführt, da es einfach zu implementieren ist. Die Speichermanagementeinheit 25 muß einen Black von Zyklen zuweisen, um die vier Cache-Auffüllvorgänge zu verarbeiten; somit können alle Primär-Cache-14- Auffülldaten zum virtuellen Befehls-Cache 17 ohne zusätzlichen Aufwand bei den Speichermanagementeinheit-25-Zyklen übertragen werden, da der MD-Bus 54 ansonsten während dieser Auffüllzyklen im Leerlauf läuft.
  • Es ist zu beachtenf daß die Befehlseinheit 22 nicht darauf achtet, in welchem Auffüllmodus die Speichermanagementeinheit 25 im Augenblick operiert. Der virtuelle Befehls-Cache 17 fährt mit dem Auffüllen von Befehlsstromdaten vom MD-Bus 54 immer dann fort, wenn VIC-Daten gesetzt sind, unabhängig vom Speichermanagementeinheit-25-Auffüllmodus. Die Speichermanagementeinheit 25 setzt das Letzte-Auffüllung- Signal für die Befehlseinheit 22 während des Zyklus, in dem die Speichermanagementeinheit 25 dem letzten Befehlsstromauffüllvorgang für die Befehlseinheit 22 durchführt. Das Letzte-Auffüllung-Signal informiert die Befehlseinheit 22 darüber, daß sie in diesem Zyklus die letzte Auffüllung des virtuellen Befehls-Cache 17 empfängt und daß sie keine weitere erwarten soll. Im Vorwärtsauffüllmodus setzt die Speichermanagementeinheit 25 das Letzte-Auffüllung-Signal, wenn die Vierwortausrichtung gleich "11" ist (d. h. das oberste Vierwort des Hexawortes). Im Vollfüllmodus empfängt die Speichermanagementeinheit 25 die Letzte-Auffüllung Information von der Cache-Steuereinheit 26 und überträgt diese über das Letzte-Auffüllung-Signal zur Befehlseinheit 22.
  • Es ist möglich, im Vorwärtsauffüllmodus die Verarbeitung von Befehlsstromlesevorgängen zu beginnen, anschließend jedoch auf Vollfüllen umzuschalten. Dies kann auftreten, wenn eine der Referenzen in der Kette der Vorwärtsauffüll-I-Lesevorgänge aufgrund einer kurz zurückliegenden Ungültigkeit oder aufgrund einer Verschiebung der Primär-Cache-14-Befehlsstromdaten durch eine Datenstrom-Cache-Auffüllung einen Fehlgriff verursacht. In diesem Fall empfängt die Befehlseinheit 22 mehr als vier Auffüllungen, bleibt jedoch synchron zur Speichermanagementeinheit 25, da sie kontinuierlich Aüffüllungen erwartet, bis das Letzte-Auffüllung-Signal gesetzt wird.
  • Die Speicherzugriffe für alle Datenstromreferenzen werden von der Speichermanagementeinheit 25 im Auftrag der Befehlseinheit 22 (für die Spezifiziererverarbeitung), der Speichermanagementeinheit 25 (für PTE-Referenzen) und der Ausführungseinheit 23 (für alle anderen Datenstromreferenzen) implementiert.
  • Im allgemeinen verhält sich die Datenstromleseverarbeitung genauso wie die Befehlsstromleseverarbeitung, mit der Ausnahme, daß es kein Vorwärtsauffüll- oder Vollfüllschema gibt. Mit anderen Worten, nur die angeforderten Daten werden an den Initiator des Lesevorgangs geliefert. Aus dem Blickwinkel des Primär-Cache 14 ist jedoch ein Datenstromvollfüllschema implementiert, da immer noch vier D-CF-Anweisungen an den Primär-Cache 14 ausgegeben werden.
  • D-Stromlesevorgänge können eine Datenlänge von einem Byte, einem Wart, einem Langwort oder einem Vierwort aufweisen. Mit Ausnahme der Seitenüberschreitungsprüffunktion wird ein Vierwortlesevorgang so behandelt, als ob seine Datenlänge ein Langwort beträgt. Somit gibt ein Datenstrom- Vierwortlesevorgang die untere Hälfte des entsprechenden Vierworts zurück. Die Quelle der meisten Datenstrom- Vierwortlesevorgänge ist die Befehlseinheit 22. Die Befehlseinheit 22 gibt einen Datenstrom Langwortlesevorgang für die obere Hälfte des entsprechenden Vierwortes unmittelbar nach der Ausgabe des Vierwortlesevorgangs aus. Somit wird mittels zweier zusammenhängender Datenstromleseoperationen auf das gesamte Vierwort an Daten zugegriffen.
  • Eine D-Leseverriegelung-Anweisung auf dem Anweisungsbus 261 erzwingt immer eine Primär-Cache-14-Lesefehlgriffsequenz, unabhängig davon, ob die entsprechenden Daten wirklich im Primär-Cache 14 gespeichert sind. Dies ist erforderlich, damit der Lesevorgang bis zur Cache- Steuereinheit 26 vorrückt, so daß die Speicher-Verriegelungs/Freigabe-Protokolle geeignet verarbeitet werden können.
  • Die Speichermanagementeinheit 25 versucht, einen Datenstromlesevorgang zu verarbeiten, nachdem die angeforderte Auffüllung einer vorangehenden Datenstromauffüllsequenz abgeschlossen ist. Dieser Mechanismus, mit "Lesen unter Auffüllungen" bezeichnet, wird durchgeführt, um zu versuchen, Lesedaten so schnell wie möglich zur Befehlseinheit 22 und/oder Ausführungseinheit 23 zurückzugeben, ohne darauf zu warten, daß die vorangehende Auffüllsequenz abgeschlossen wird. Wenn der versuchte Lesevorgang im Primär-Cache 14 einen Treffer hervorruft, werden die Daten zurückgegeben und der Lesevorgang wird abgeschlossen. Wenn der Lesevorgang in der Pipeline S6 einen Fehlgriff hervorruft, wird die entsprechende Auffüllsequenz aus zwei Gründen nicht sofort eingeleitet: (1) Eine Datenstrom-Cache-Auffüllsequenz für diesen Lesevorgang kann nicht eingeleitet werden, da der D-Fehlgriff- Zwischenspeicher 253 aufgrund der derzeit ausstehenden Cache-Auffüllsequenz voll ist. (2) Der Datenstromlesevorgang kann im Primär-Cache 14 einen Treffer hervorrufen, sobald die aktuelle Auffüllsequenz abgeschlossen ist, da die aktuelle Auffüllsequenz die Daten zuführen kann, die erforderlich sind, um den neuen Datenstromlesevorgang zu befriedigen. Da der D- Lesevorgang bereits durch die Pipeline S5 vorgerückt ist, muß der Lesevorgang irgendwo gespeichert werden, so daß er im S5 neu eingeleitet werden kann. Der Neuversuch-D- Fehlgriff-Zwischenspeicher 257 ist der Mechanismus, mit dem der S6-Lesevorgang gesichert und in der S5-Pipeline neu gestartet wird. Sobald der Lesevorgang im Neuversuch- Zwischenspeicher 257 gespeichert ist, wird er in S5 neu eingeleitet, nachdem eine neue Datenstrom-Primär- Cache-14-Auffülloperation in die S5-Pipeline eingetreten ist. Der Zweck dieses Schemas ist, zu versuchen, den Lesevorgang so schnell wie möglich zu abzuschließen, indem er zwischen den Primär-cache-14-Auffüllungen erneut eingeleitet wird, in der Hoffnung, daß die letzte Primär- Cache-14-Auffüllung die vom Lesevorgang angeforderten Daten zugeführt hat. Der Neuversuch-Zwischenspeicher 257 wird ungültig, wenn eine der zwei folgenden Bedingungen wahr ist: (1) Der neu versuchte Lesevorgang bewirkt schließlich im Primär-Cache 14 einen Treffer ohne einen Primär-Cache-14-Paritätsfehler, oder (2) der neu versuchte Lesevorgang verursacht einen Fehlgriff, nachdem die derzeit ausstehende Auffüllsequenz abgeschlossen ist. In diesem Fall wird der Lesevorgang in den D-Fehlgriff- Zwischenspeicher 252 geladen und wie ein normaler Datenstromfehlgriff verarbeitet.
  • Bei Lesevorgängen, die den E/A-Raum adressieren, sind die physikalischen Adreßbits < 31:29> gesetzt. E/A-Raum-Lesevorgänge werden von der Speichermanagementeinheit 25 in genau der gleichen Weise behandelt wie irgendwelche anderen Lesevorgänge, mit Ausnahme der folgenden Unterschiede:
  • (1) E/A-Raum-Daten werden niemals im Primär-Cache 14 gespeichert - daher erzeugt ein E/A-Raum-Lesevorgang immer eine Lesefehlgriffseguenz und veranlaßt die Cache- Steuereinheit 26, anstelle der Speichermanagementeinheit 25 die Referenz zu verarbeiten.
  • (2) Im Gegensatz zu einer Speicherraumfehlgriffsequenz, die ein Hexawort an Daten über vier I_CF- oder D_CF- Anweisungen zurückgibt, gibt ein E/A-Raum-Lesevorgang nur ein Datenelement über eine I_CF- oder D_CF-Anweisung zurück - daher setzt die Cache-Steuereinheit 26 immer das Letzte-Auffüllung-Signal bei der ersten und einzigen I_CF- oder D_CF-E/A-Raum-Operation; wenn der E/A-Raum- Lesevorgang den Datenstrom betrifft, sind die zurückgegebenen D-CF-Daten immer genauso lang oder kürzer als ein Langwort.
  • (3) E/A-Raum-Datenstromlesevorgänge werden niemals vor der Ausführung der Ausführungseinheit 23 im voraus geholt; ein von der Befehlseinheit 22 ausgegebener E/A- Raum-Datenstromlesevorgang wird nur dann verarbeitet, wenn bekannt ist, daß die Ausführungseinheit 23 bei diesem bestimmten E/A-Raum-Lesevorgang angehalten wird. Befehlsstrom-E/A-Raum-Lesevorgänge müssen ein Vierwort an Daten zurückgeben.
  • Als nächstes wird die Schreibverarbeitung der Speichermanagementeinheit 25 untersucht. Alle Schreibvorgänge werden von der Speichermanagementeinheit 25 im Auftrag der Ausführungseinheit 23 eingeleitet. Der Mikrocode der Ausführungseinheit 23 kann Schreibreferenzen mit Datenlängen eines Bytes, eines Wortes, eines Langwortes oder eines Vierwortes erzeugen. Mit Ausnahme der Seitenüberschreitungsprüfungen behandelt die Speichermangementeinheit 25 Vierwortschreibreferenzen wie Langwortschreibreferenzen, da der Datenpfad der Ausführungseinheit 23 nur ein Langwort an Daten pro Zyklus zuführt. Die Schreibvorgänge der Ausführungseinheit 23 brauchen nicht ausgerichtet sein.
  • Die Speichermanagementeinheit 25 führt während einer Schreibreferenz die folgenden Funktionen aus: (1) Speichermanagementprüfungen - die MME-Einheit 254 der Speichermangementeinheit 25 prüft, um sicherzustellen, daß die Seite oder die Seiten, auf die zugegriffen wird, den geeigneten Schreibzugriff aufweisen, und daß die gültigen virtuellen Adreßübersetzungen zur Verfügung stehen. (2) Die zugeführten Daten werden geeignet mittels des Rotierers 258 zur speicherausgerichteten Langwortgrenze rotiert. (3) Bytemaskenerzeugung - der Bytemaskengenerator 260 der Speichermanagementeinheit 25 erzeugt die Bytemaske der Schreibreferenz durch Untersuchen der Schreibadresse und der Datenlänge der Referenz. (4) Primär-Cache-14-Schreibvorgänge - der Primär-Cache 14 ist ein Durchschreibe-Cache; somit werden Schreibvorgänge nur in den Primär-Cache 14 geschrieben, wenn die Schreibadresse mit einem gültigen Primär- Cache-14-Merkereintrag übereinstimmt. (5) Eine Ausnahme für diese Regel gilt dann, wenn der Primär-Cache 14 im erzwungenen Datenstromtreffermodus konfiguriert ist; in diesem Modus werden die Daten immer in den Primär-Cache 14 geschrieben, unabhängig davon, ob der Merker paßt oder nicht. (6) Alle Schreibreferenzen, die die Speichermanagementprüfungen durchlaufen, werden über den Datenbus 58 zur Cache-Steuereinheit 26 übertragen; der C- Kasten verarbeitet Schreibvorgänge im Hintergrund-Cache und steuert die Protokolle, die sich auf das Zurückschreibe-Speicheruntersystem beziehen.
  • Wenn Schreibdaten im EM-Zwischenspeicher 74 zwischengespeichert sind, rotiert die Vierwege- Byterollschiebevorrichtung 263, die dem EM- Zwischenspeicher 74 zugeordnet ist, die Daten in eine geeignete Ausrichtung auf der Grundlage der unteren zwei Bits der zugehörigen Adresse. Das Ergebnis dieser Datenrotation ist, daß sich nun alle Datenbytes in den richtigen Bytepositionen bezüglich der Speicherlangwortgrenzen befinden.
  • Wenn Schreibdaten vom EM-Zwischenspeicher 74 angesteuert werden, wird der interne Datenbus 264 vom Ausgang der Rollschiebevorrichtung 263 angesteuert, so daß die Daten immer geeignet auf Speicherlangwortadressen ausgerichtet sind. Es ist zu beachten, daß der Bus 58 ein Vierwort breit ist, obwohl der Datenbus 264 ein Langwort (32 Bits) breit ist; der Bus 58 ist ein Vierwort breit, da die Primär-Cache-14-Zugriffsgröße ein Vierwort breit ist. Die Vierwort-Zugriffsgröße erleichtert die Auffüllvorgänge des Primär-Cache 14 und des virtuellen Befehls-Cache 17. Bei allen schreibvorgängen wird jedoch meistens die Hälfte des Busses 58 verwendet, um in den Primär-Cache 14 zu schreiben, da alle schreibanweisungen ein Langwort oder weniger an Daten modifizieren. Wenn eine Schreibreferenz von S5 nach S6 vorrückt, werden die ausgerichteten Langwortdaten auf dem Bus 264 sowohl auf die oberen als auch die unteren Hälften des Busses 58 übertragen, um zu garantieren, daß die Daten auch für den Primär-Cache 14 und die Cache-Steuereinheit 26 auf ein Vierwort ausgerichtet sind. Die der Referenz zugeordnete Bytemaske kontrolliert, welche Bytes des Busses 58 in den Primär-Cache 14 oder den Hintergrund-Cache 15 geschrieben werden.
  • Schreibreferenzen werden mittels zweier unterschiedlicher Mechanismen gebildet. Erstens, Zielspezifiziererschreibvorgänge sind diejenigen Schreibvorgänge, die von der Befehlseinheit 22 aufgrund der Decodierung eines Zielspezifizierers eines Befehls eingeleitet werden. Wenn ein Zielspezifizierer für den Speicher decodiert wird, gibt die Befehlseinheit 22 ein Referenzpaket aus, das der Zieladresse zugeordnet ist. Es ist zu beachten, daß in diesem Paket keine Daten vorhanden sind, da die Daten erzeugt werden, wenn die Ausführungseinheit 23 anschließend den Befehl ausführt. Das Anweisungsfeld dieses Pakets ist entweder eine Zieladreßanweisung (wenn der Spezifizierer den Zugriffstyp Schreiben besitzt) oder eine D-Lese-Modifiziere-Anweisung (wenn der Spezifizierer den Zugriffstyp der Modifizierung besitzt). Die Adresse dieses Anweisungspakets wird mittels des TB übersetzt, wobei Speichermanagementzugriffsprüfungen mittels der MME-Einheit 254 durchgeführt werden und die zugehörige Bytemaske von der Einheit 260 erzeugt wird. Die physikalische Adresse, DL und andere Qualifiziererbits werden in die PA-Warteschlange 65 geladen. Wenn die Zieladressenanweisung in S5 abgeschlossen wird, wird sie in eine NOP-Anweisung in S6 umgewandelt, da ohne die aktuellen Schreibdaten keine weitere Verarbeitung stattfinden kann. Wenn die Ausführungseinheit 23 den Opcode ausführt, der dem Befehlseinheit-22- Zielspezifizierer zugeordnet ist, werden die entsprechenden zu schreibenden Speicherdaten erzeugt. Diese Daten werden mittels einer Speicheranweisung zur Speichermanagementeinheit 25 gesendet. Das Speicherpaket enthält nur Daten. Wenn die Speichermanagementeinheit 25 die Speicheranweisung in S5 ausführt, wird das entsprechende PA-Warteschlange-65-Paket auf die S5- Pipeline gelegt. Die Daten im EM-Zwischenspeicher werden in die geeignete Langwortausrichtung rotiert, unter Verwendung des Byterotierers und der unteren zwei Bits der zugehörigen PA-Warteschlange-Adresse, und werden anschließend in S5 ausgegeben. Dies bewirkt, daß die Zieladresse und die Speicheranweisungen miteinander gemischt werden, um eine Schreiboperation mit vollständiger physikalischer Adresse auszubilden. Diese Schreiboperation rückt durch die S5/S6-Pipeline vor, um den Schreibvorgang im Primär-Cache 14 (wenn die Adresse im Primär-Cache 14 einen Treffer hervorruft) und im Speicheruntersystem durchzuführen.
  • Ein "expliziter Schreibvorgang" wird nur von der Ausführungseinheit 23 erzeugt. Dies sind Schreibvorgänge, die nicht von der einen Zielspezifizierer decodierenden Befehlseinheit 22 stammen, vielmehr Schreibvorgänge, die explizit eingeleitet und von der Ausführungseinheit 23 vollständig erzeugt werden. Ein Beispiel eines expliziten Schreibvorgangs ist ein Schreibvorgang, der während eines MOVC-Befehls ausgeführt wird. In diesem Beispiel erzeugt die Ausführungseinheit 23 die virtuelle Schreibadresse für jeden Schreibvorgang und führt die zugehörigen Daten zu. Die physikalische Adreßwarteschlange 65 ist bei der Verarbeitung eines expliziten Schreibvorgangs niemals beteiligt. Explizite Schreibvorgänge werden zur Speichermanagementeinheit 25 in Form einer Schreibanweisung übertragen, die von der Ausführungseinheit 23 ausgegeben wird. Diese Schreibvorgänge werden direkt in S5 und S6 in der gleichen Weise ausgeführt, wie wenn ein Schreibpaket aus den PA-Warteschlange-65-Inhalten und den Speicherdaten gebildet wird.
  • Eine Schreibanweisung, die den E/A-Raum adressiert, besitzt gesetzte physikalische Adreßbits < 31:29> . E/A Raum-Schreibvorgänge werden von der Speichermanagementeinheit 25 in genau der gleichen Weise behandelt wie irgendwelche anderen Schreibvorgänge, mit der Ausnahme, daß E/A-Raum-Daten niemals im Primär-Cache 14 gespeichert werden; daher verursacht ein E/A-Raum Schreibvorgang im Primär-Cache 14 immer einen Fehlgriff.
  • Wie oben erwähnt, wird die Bytemaskenerzeugung in der Speichermanagementeinheit 25 durchgeführt. Da der Speicher byteweise adressiert werden kann, müssen alle Speicherschreibvorrichtungen fähig sein, wahlweise spezifische Bytes der Daten zu schreiben, ohne den gesamten Satz an Bytes zu schreiben, die der Schreibvorrichtung zur Verfügung stehen. Das Bytemaskenfeld des Schreibreferenzpakets spezifiziert, welche Bytes innerhalb der Vierwortzugriffsgröße des Primär-Cache 14 geschrieben werden. Die Bytemaske wird in der Speichermanagementeinheit vom Bytemaskengenerator 260 auf der Grundlage der drei niedrigwertigen Bits der Adresse auf dem Bus 243 und der Datenlänge der auf dem Anweisungsbus 261 als DL-Feld enthaltenen Referenz erzeugt. Die Bytemaskendaten werden sowohl bei einem Lesevorgang als auch bei einem Schreibvorgang erzeugt, um die Byteausrichtungsinformationen der Cache-Steuereinheit 26 auf dem Bus 262 bei einem E/A-Raum-Lesevorgang zuzuführen.
  • Die Speichermanagementeinheit 25 stellt den Pfad dar, über 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 eine Lade-PC-Anweisung gesendet, wobei dieser Wert durch die Speichermanagementeinheit 35 zum ND-Bus 54 vorrückt. Der MD-Bus ist ein Eingang der Ausführungseinheit 23 zum Schreiben in die Registergruppe 41, wobei jedoch die Ausführungseinheit 23 nicht auf den MD-Bus schreibt.
  • Der Primär-Cache (P-Cache):
  • Wie in Fig. 18 gezeigt, ist der Primär-Cache 14 ein Zweiwege-Satzassoziativ-Durchschreibe-Cache mit Lesezuweisung, Nicht-Schreibe-Zuweisung und physikalischer Adresse für Befehlsstrom- und Datenstromdaten. Der Primär-Cache 14 besitzt einen Ein- Zyklus-Zugriff und eine Ein-Zyklus-Wiederholrate sowohl für Lesevorgänge als auch für Schreibvorgänge. Der Primär-Cache 14 enthält eine 8kByte-Datenspeichermatrix 268, die 256-Hexawort-Blöcke speichert und 256 Merker in den Merkerspeichern 269 und 270 speichert. Die Datenspeichermatrix 268 ist zu zwei Blöcken 271 und 272 mit 128 Zeilen konfiguriert. Jeder Block ist 256 Bits breit, so daß er ein Hexawort an Daten (vier Vierwörter oder 32 Bytes) enthält; es gibt vier Vierwortunterblöcke pro Block, wobei jedem Unterblock ein Gültigkeitsbit zugeordnet ist. Ein Merker ist 20 Bits breit, entsprechend den Bits < 31:12> der physikalischen Adresse auf dem Bus 243. Die Organisation des Primär-Cache 14 ist in Fig. 18a genauer gezeigt; jeder Index (ein Index ist eine Zeile der Speichermatrix 268) enthält einen Zuweisungszeiger A und zwei Blöcke, wobei jeder Block aus einem 20-Bit-Merker, einer Ein-Bit-Merkerparität, vier Gültigkeitsbits VB (eins für jedes Vierwort), 256 Bits an Daten und 32 Bits an Datenparität besteht. Ein Zeilendecodierer 273 empfängt die Bits < 5:11> der Primär- Cache-14-Eingangsadresse vom Bus 243 und wählt einen aus 128 Indizes (Zeilen) 274 für die Ausgabe auf den Spaltenleitungen der Speichermatrix aus, wobei die Spalterdecodierer 275 und 276 auf der Grundlage der Bits < 3:4> der Adresse eine von vier Spalten auswählen. Somit wählt der Primär-Cache 14 in jedem Zyklus zwei Vierwortstellen aus den Hexawortausgängen der Matrix aus, wobei die ausgewählten Vierwörter auf den Eingang/Ausgang-Leitungen 277 und 278 zur Verfügung stehen. Die zwei 20-Bit-Merker aus den Merker-Speichern 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 mittels der Merkervergleichsschaltungen 281 und 282 verglichen. Die Gültigkeitsbits werden ebenfalls ausgelesen und geprüft; wenn sie für den adressierten Block gleich Null sind, wird ein Fehlgriff signalisiert. Wenn einer der Merker eine Übereinstimmung erzeugt und das Gültigkeitsbit gesetzt ist, wird auf der Leitung 283 ein Treffer signalisiert, wobei das ausgewählte Vierwort auf dem Bus 246 ausgegeben wird. Ein Primär-Cache-14-Fehlgriff führt zu einem Vierwortauffüllvorgang; ein Speicherlesevorgang wird erzeugt, was dazu führt, daß ein Vierwort über dem Bus 246 und dem Bus 277 oder 278 in den Block 271 oder 272 geschrieben wird. Gleichzeitig werden die Daten in die Datenspeichermatrix geschrieben, wobei die Adresse über die Leitungen 279 oder 280 in den Merkerspeicher 269 oder 270 geschrieben wird. Wenn von der Cache- Steuereinheit 26 bei Auftreten eines Schreibvorgangs in den Hintergrund-Cache 15 oder den Speicher 12 eine Ungültigkeit gesendet wird, werden die Gültigkeitsbits für den Index zurückgesetzt.
  • Der Primär-Cache 14 muß immer in bezug auf den Hintergrund-Cache 15 ein kohärenter Cache sein. Der Primär-Cache 14 muß immer eine strenge Teilmenge der Daten enthalten, die im Hintergrund-Cache 15 gespeichert sind. Wenn die Cache-Kohärenz nicht aufrechterhalten wird, können sich in Multiprozessorsystem-Konfigurationen beim Auslesen von "alten" Daten aus dem Primär-Cache 14 falsche Berechnungssequenzen ergeben.
  • Eine Ungültigkeit ist der Mechanismus, mit dem der Primär-Cache 14 zum Hintergrund-Cache 15 kohärent gehalten wird, und findet statt, wenn Daten vom Hintergrund-Cache 15 verschoben werden, oder wenn die Daten im Hintegrund-Cache 15 ihrerseits ungültig werden. Die Cache-Steuereinheit 26 leitet eine Ungültigkeit ein, indem sie eine physikalische Hexawortadresse spezifiziert, die von der Ungültigkeitsanweisung auf dem Bus 59 angegeben wird, die in den Zwischenspeicher 250 der Cache-Steuereinheit 26 geladen worden ist. Die Ausführung einer Ungültigkeitsanweisung garantiert, daß die Daten, die der spezifizierten Hexawortadresse zugeordnet sind, im Primär-Cache 14 nicht gültig sind. Wenn die Hexawortadresse der Ungültigkeitsanweisung mit keinem Primär-Cache-14-Merker in den Merkerspeichern 269 oder 270 im adressierten Index 274 übereinstimmt, findet keine Operation statt. Wenn die Hexawortadresse mit einem der Merker übereinstimmt, werden die vier zugehörigen Teilblockgültigkeitsbits gelöscht, um zu garantieren, daß irgendwelche nachfolgenden Primär-Cache-14-Zugriffe auf dieses Hexawort einen Fehlgriff erzeugen, bis dieses Hexawort durch eine nachfolgende Primär-Cache-14- Auffüllsequenz erneut gültig wird. Wenn eine Cache- Auffüllsequenz für dieselbe Hexawortadresse in Bearbeitung ist, während die Ungültigkeit ausgeführt wird, wird ein Bit im zugehörigen Fehlgriff- Zwischenspeicher 252 oder 253 gesetzt, um irgendwelche weiteren Cache-Auffüllungen daran zu hindern, für diesen Cache-Block Daten zu laden oder Daten ungültig zu machen.
  • Wenn ein Lesefehlgriff auftritt, da kein gültiges Merkerfeld mit einer Leseadresse übereinstimmt, wird der Wert des Zuweisungsbits A im Fehlgriff zwischenspeicher 252 oder 253 zwischengespeichert, der dem Lesefehlgriff zugeordnet ist. Dieser zwischengespeicherte Wert wird als Bankauswahleingang während der nachfolgenden Auffüllsequenz verwendet. Wenn die jeweilige Auffülloperation stattfindet, wird die Umkehrung des im Fehlgriffzwischenspeicher gespeicherten Zuweisungswerts in das Zuweisungsbit A des adressierten Primär-Cache-14- Index 244 geschrieben. Während der Lese- oder Schreibvorgänge des Primär-Cache 14 wird der Wert des Zuweisungsbits so gesetzt, daß er auf die gegenüberliegende Bank zeigt, auf die eben zugegriffen worden ist, da dies nun für diesen Index die "nicht zuletzt benutzte Bank 271 oder 272 ist.
  • Die einzige Ausnahme für diesen Algorithmus tritt während einer Ungültigkeit auf. Wenn eine Ungültigkeit die Gültigkeitsbits eines bestimmten Merker innerhalb eines Index löscht, ist es nur sinnvoll, das Zuweisungsbit so zu setzen, daß es auf die Bankauswahl zeigt, die während der Ungültigkeit verwendet wird, unabhängig davon, welche Bank zuletzt zugewiesen wurde. Hierdurch wird garantiert, daß der nächste zugewiesene Block innerhalb des Index nicht irgendeinen Gültigkeitsmerker verschiebt, da das zuweisungsbit auf den Merker zeigt, der eben ungültig wurde.
  • Eine Primär-Cache-14-Auffülloperation wird von einer Befehlsstrom- oder Datenstrom-Cache-Auffüllreferenz eingeleitet. Eine Auffüllung ist eine spezielle Form einer Schreiboperation, die funktional identisch ist zu einem Primär-Cache-14-Schreibvorgang, mit der Ausnahme der folgenden Unterschiede:
  • (1) Die Bank 271 oder 272 innerhalb des adressierten Primär-Cache-14-Index 274 wird durch diesen Algorithmus ausgewählt: wenn ein gültiges Merkerfeld 269 oder 270 innerhalb des adressierten Index 274 mit der Cache- Auffülladresse übereinstimmt, wird der Block, der diesen Merker zugeordnet ist, für die Auffülloperation verwendet - während dann, wenn dies nicht zutrifft, der Wert des entsprechenden zuweisungsbits A auswählt, welcher Block für die Auffüllung verwendet wird.
  • (2) Die erste Auffülloperation für einen Block bewirkt, 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. Alle nachfolgenden Auffüllungen bewirken nur, daß das Gültigkeitsbit der zugehörigen Auffülldaten gesetzt wird.
  • (3) Jede Auffülloperation bewirkt, daß die Auffülladreßbits < 31:12> in das Merkerfeld der ausgewählten Bank geschrieben werden. Die Merkerparität wird ferner in analoger Weise geschrieben.
  • (4) Eine Auffülloperation bewirkt, daß in das zuweisungsbit A das Komplement des Werts geschrieben wird, der vom zugehörigen Fehlgriffzwischenspeicher 252 oder 253 während des ursprünglichen Lesefehlgriffereignisses zwischengespeichert worden ist.
  • (5) Eine Auffülloperation erzwingt, daß alle Bits des entsprechenden Bytemaskenfeldes gesetzt werden. Somit werden bei einer Auffülloperation immer alle acht Bytes der Auffülldaten in die Matrix des Primär-Cache 14 geschrieben.
  • Eine primär-Cache-14-Ungültigkeitsoperation wird durch die Ungültigkeitsreferenz eingeleitet und wird vom Primär-Cache 14 wie ein NOP interpretiert, wenn die Adresse nicht mit einem der Merkerfelder im adressierten Index 274 übereinstimmt. Wenn eine Übereinstimmung mit einem der Merker detektiert wird, tritt bei diesem Merker ein Ungültigkeit auf. Es ist zu beachten, daß diese Feststellung nur bei einer Übereinstimmung der Merkerfeldbits gemacht wird, statt bei der Befriedigung aller Kriterien für eine Cache-Trefferoperation (primär- Cache-14-Trefferfaktoren in Gültigkeitsbits und überprüfte Merkerparität in der Operation). Wenn eine Ungültigkeit auftritt, werden die vier Gültigkeitsbits des übereinstimmenden Merkers mit Nullen gefüllt, wobei in das zuweisungsbit A der Wert der Bankauswahl geschrieben wird, die während der aktuellen Ungültigkeitsoperation verwendet wird.
  • Die Cache-Steuereinheit (C-Kasten):
  • Wie in Fig. 19 gezeigt, enthält die Cache-Steuereinheit 26 einen Datenpfad und eine Steuervorrichtung zur Kommunikation mit der Speichermanagementeinheit 25, dem Hintergrund-Cache 15 und dem CPU-Bus 20. Der obere Abschnitt der Fig. 19, der in erster Linie mit der Speichermanagementeinheit 25 und dem Hintergrund-Cache 15 verbunden ist, ist die Cache-Steuervorrichtung, während der untere Abschnitt der Figur, der in erster Linie mit dem CPU-Bus 20 verbunden ist, die Busschnittstelleneinheit ist. Der Datenpfad der Cache- Steuereinheit 26 ist um eine Anzahl von Warteschlangen und Zwischenspeichern, einem internen Adreßbus 288 und einem internen Datenbus 289 im Cache-Steuerabschnitt sowie zwei interne Adreßbusse 290 und 291 und einen internen Datenbus 292 in der Busschnittstelleneinheit organisiert. Ein separater Zugriff auf die Daten-RAMs 15x und die Merker-RAMs 15y des Hintergrund-Cache 15 wird von den internen Adreß- und Datenbussen 288 und 289 über die Leitungen 19a und 19b und die Leitungen 19c und 19d im Bus 19 bewerkstelligt. Die Schnittstelle zur Speichermanagementeinheit 25 führt über den physikalischen Adreßbus 57, dem Datenbus 58 und den Ungültigkeits- und Auffülladreßbus 59.
  • Der Ausgangszwischenspeicher 296 ist einen Eintrag tief und hält sowohl die Adresse als auch die Daten für die Auffülldaten oder Adressen für Ungültigkeiten, die zur Speichermanagementeinheit 25 auf den Bussen 58 und 59 gesendet werden. Die zwei Auffülldatenpipelines 297 und 298 sind 64-Bit-Zwischenspeicher für die Pipelinedaten, die zur Speichermanagementeinheit 25 gesendet werden. Der Datenlesezwischenspeicher 299 ist einen Eintrag tief und hält die Adresse einer Datenstromleseanfrage, die auf dem physikalischen Adreßbus 57 von der Speichermanagementeinheit 25 kommt. Der Befehllese- Zwischenspeicher 300 ist einen Eintrag tief und hält die Adresse einer Befehlsstromleseanfrage, die über den physikalischen Adreßbus 57 von der Speichermanagementeinheit 25 kommt. Der Schreibpacker 301 ist einen Eintrag tief und hält sowohl Adressen als auch Daten und dient zum Zusammenfassen sequentieller Speicherschreibvorgänge für dasselbe Vierwort. Die Schreibwarteschlange 60 ist acht Einträge tief und hält sowohl Adressen als auch Daten für Schreibanfragen, die über den Datenbus 58 und den physikalischen Adreßbus 57 (über den Schreibpacker 301) von der Speichermanagementeinheit 25 kommen. Der Auffüll-CAM 302 ist zwei Einträge tief und hält die Adressen für Lese- und Schreibfehlgriffe, die bei einem Lesen des Speichers entstanden sind; einer kann die Adresse einer in Bearbeitung befindlichen D-Datenleseverriegelung halten, die keine ausstehende Speicheranfrage besitzt. Auf der Seite des Busses 20 ist die Eingangswarteschlange 61 zehn Einträge tief und hält die Adressen oder Daten für bis zu acht Vierwortauffüllungen und bis zu zwei Cache-Kohärenz transaktionen vom CPU-Bus 20. Die Zurückschreibewarteschlange 63 ist zwei Einträge tief (mit einem Datenfeld von 256 Bits) und hält Zurückschreibeadressen und Daten, die auf den CPU-Bus 20 gelegt werden sollen; diese Warteschlange hält bis zu 2 Hexawort - Zurückschreibevorgänge. Die Zurückschreibewarteschlange 63 wird ferner für Vierwort- Schreibfreigaben verwendet. Die Nicht-Zurückschreibe- Warteschlange 62 umfaßt zwei Einträge für Adressen und Daten und hält alle Nicht-Schreibe-Freigabetransaktionen, die auf den CPU-Bus 20 ausgegeben werden; diese umfassen Lesevorgänge, E/A-Raum-Transaktionen sowie normale Schreibvorgänge, die ausgeführt werden, wenn der Hintergrund-Cache 15 ausgeschaltet ist oder wenn der Fehlerübergangsmodus aktiv ist. Es ist zu beachten, daß einige dieser Warteschlangen parallel Adreß- und Dateneinträge enthalten (der Ausgangszwischenspeicher 296, der Schreibpacker 301, die Schreibwarteschlange 60 und die Zurückschreibe- und Nicht-Zurückschreibe- Warteschlangen 63 und 62), einige nur Daten enthalten (Auffülldaten-Pipelines 297 und 298) und einige nur Adressen enthalten (Datenlesezwischenspeicher 299, Befehlslesezwischenspeicher 300 und der Auffüll-CAM 302). Da der CPU-Bus 20 ein verschachtelter Bus ist, sind auf dem Bus 20 zwei Zyklen erforderlich, um die Adresse und die Daten eines Eintrags in der Nicht-Zurückschreibe- Warteschlange 62 z. B. auf dem Bus 20 zu laden. Ferner wird der Bus 20 mit einer Zykluszeit getaktet, die der dreifachen Zykluszeit der Busse 288, 289 und 292 entspricht.
  • Bei einer Schreibanfrage gelangen die Schreibdaten vom Datenbus 58 in die Cache-Steuereinheit 26 in die Schreibwarteschlange 60, während die Schreibadresse vom physikalischen Adreßbus 57 stammt; wenn ein Cache-Treffer vorliegt, werden die Daten in die Daten-RAMs des Hintergrund-Cache 15 über den Bus 289 unter Verwendung der Adresse auf den Bus 288 über den Bus 19 geschrieben. Wenn ein Zurückschreiben des Blocks stattfindet, werden die über die Busse 19 und 289 aus den Daten-RAMs ausgelesenen Daten zur Zurückschreibewarteschlange 63 über die Schnittstelle 303 und die Busse 291 und 292 übertragen und anschließend auf den CPU-Bus 20 ausgegeben. Eine Leseanfrage kommt über den physikalischen Adreßbus 57 und die Zwischenspeicher 299 oder 300 und wird über den internen Adreßbus 288 an den Hintergrund-Cache 15 über den Bus 19 angelegt, wobei dann, wenn ein Treffer vorliegt, die resultierenden Daten über den Bus 19 und den Bus 289 zum Datenzwischenspeicher 304 im Ausgangszwischenspeicher 296 gesendet werden, von dem aus sie zur Speichermanagementeinheit 25 über den Datenbus 58 gesendet werden. Wenn die Lesedaten aus dem Speicher 12 zurückkehren, treten sie über die Eingangswarteschlange 61 in die Cache-Steuereinheit 26 ein und werden auf den Bus 292 gelegt und anschließend über die Schnittstelle 303 auf den internen Datenbus 289 gelegt und in die Daten-RAMs des Hintergrund-Cache 15 sowie in die Speichermanagementeinheit 25 über den Ausgangszwischenspeicher 296 und den Bus 258 geschrieben, wie vorher.
  • Wenn ein Lese- oder Schreibvorgang, der von der Speichermanagementeinheit 25 in die Cache-Steuereinheit 26 gelangt, nicht zu einem Hintergrund-Cache-15-Treffer führt, wird die Fehlgriffadresse in den Auffüll-CAM 302 geladen, der die Adressen der ausstehenden Lese- und Schreibfehlgriffe hält; die Adresse wird ferner über die Schnittstelle 303 und über den Bus 291 zur Nicht- Zurückschreibe-Warteschlange 62 weitergeleitet; sie gelangt in die Warteschlange 62 und wartet, bis sie ihrerseits auf den CPU-Bus 20 ausgegeben wird. Viele Zyklen später kehren die Daten auf den CPU-Bus 20 zurück (nach einem Zugriff auf den Speicher 12) und gelangen in die Eingangswarteschlange 61. Die CPU 10 hat mit der Ausführung von Haltezyklen nach dem Hintergrund-Cache-15- Fehlgriff in den verschiedenen Pipelines begonnen. Die Rückgabe der Daten wird begleitet von einem Steuerbit auf dem Steuerbus im CPU-Bus 20, das angibt, welcher der zwei Adreßeinträge im Auffüll-CAM 302 auf den Bus 288 ausgegeben werden soll, um für das Schreiben der Daten- RAMs und der Merker-RAMs des Hintergrund-Cache 15 verwendet zu werden.
  • Wenn eine Cache-Kohärenztransaktion auf dem CPU-Bus 20 stattfindet, kommt eine Adresse über die Eingangswarteschlange 61 herein und wird über den Bus 290 und die Schnittstelle 303 auf den Bus 288 ausgegeben, von wo aus sie an die Merker-RAMs des Hintergrund-Cache 15 über den Bus 19 angelegt wird. Wenn ein Treffer vorliegt, wird das Gültigkeitsbit gelöscht, wobei die Adresse über den Adreßzwischenspeicher 305 im Ausgangszwischenspeicher 296 an die Speichermanagementeinheit 25 für eine Primär- Cache-14-Ungültigkeit gesendet wird (wo es einen Treffer hervorrufen kann, oder nicht, in Abhängigkeit davon, welche Blöcke der Hintergrund-Cache-15-Daten im Primär- Cache 14 vorhanden sind). Falls erforderlich werden das Gültigkeits- und/oder Besitzbit im Hintergrund-Cache-15- Eintrag gelöscht. Für Ungültigkeiten werden nur die Adreßbits < 31:5> verwendet, da sich die Ungültigkeit immer auf ein Hexawort bezieht.
  • Wenn aufgrund dieser Cache-Kohärenztransaktion ein Zurückschreiben erforderlich ist, wird der Index an die Daten-RAMs des Hintergrund-Cache 15 angelegt, so daß die Daten ausgelesen werden können. Anschließend wird die Adresse an die Zurückschreibe-Warteschlange 62 für den Zurückschreibevorgang angelegt; kurz danach folgen die Zurückschreibedaten auf den Datenbussen.
  • Ein 5-Bit-Anweisungsbus 262 von der Speichermanagementeinheit 25 liegt an einer Steuervorrichtung 306 an, um die internen Busaktivitäten der Cache-Steuereinheit 26 zu definieren. Dieser Anweisungsbus zeigt an, ob die jeweilige Speicheranfrage einem von acht Typen entspricht: Befehlsstromlesen, Datenstromlesen, Datenstromlesen mit Modifizierung, verriegeltes Datenstromlesen, normales Schreiben, Schreiben mit aufgehobener Verriegelung oder Lesen oder Schreiben eines internen oder externen Prozessorregisters. Diese Anweisungen beeinflussen die Befehls- oder Datenlesezwischenspeicher 299 und 300 oder den Schreibpacker 301 und die Schreibwarteschlange 60. In ähnlicher Weise führt ein Anweisungsbus 262 zurück zur Speichermanagementeinheit 25 und zeigt an, daß die während des Zyklus übertragenen Daten eine Datenstrom- Cache-Auffüllung, eine Befehlsstrom-Cache-Auffüllung, eine Ungültigkeit eines Hexawortblocks im Primär-Cache 14 ein NOP darstellen. Diese Anweisungsfelder begleiten z. B. auch die Daten in der Schreibwarteschlange.
  • Die Gleitkommaausführungseinheit (F-Kasten):
  • Wie in Fig. 20 gezeigt, ist die Gleitkommaeinheit 27 ein vierstufiger, pipelinegesteuerter Gleitkommaprozessor, der mit drei verschiedenen Segmenten der Haupt-CPU- Pipeline in Wechselwirkung steht, nämlich mit dem Mikrosequenzer 42 im 52 und der Ausführungseinheit 23 im S3 und S4. Die Gleitkommaeinheit 27 läuft halbautonom bezüglich des Restes der CPU 10 und unterstützt verschiedene Operationen. Erstens, sie bietet Befehlsund Datenunterstützung für Gleitkommabefehle im Befehlssatz; d. h., ein Befehl des Gleitkommatyps (der verschiedene Datentypen enthält) wird von der Befehlseinheit 22 erkannt und zur Ausführung zur Gleitkommaeinheit 27 statt zur Ausführungseinheit 23 gesendet. Zweitens, Langwort- Ganzzahlmultiplikationsbefehle werden in der Gleitkommaeinheit 27 effizienter ausgeführt als in der Ausführungseinheit 23, so daß dann, wenn die Befehlseinheit 22 diese Befehle erkennt, die Anweisung und die Daten zur Gleitkommaeinheit 27 gesendet werden. Die Gleitkommaeinheit 27 ist pipelinegesteuert, so daß mit Ausnahme der Divisionsbefehle die Gleitkommaeinheit 27 in jedem Zyklus einen neuen Gleitkommabefehl mit einfacher Genauigkeit starten kann und alle zwei Zyklen einen neuen Gleitkommabefehl mit doppelter Genauigkeit oder einen Ganzzahlmultiplikationsbefehl starten kann. Die Ausführungseinheit 23 kann der Gleitkommaeinheit 27 zwei 32-Bit-Operanden oder einen 64-Bit-Operanden in jedem Maschinenzyklus auf den zwei Eingangsoperandenbussen 47 und 48 zuführen. Die Gleitkommaeinheit 27 gibt den Ergebnisoperanden auf dem 32-bit-Ergebnisbus an die Ausführungseinheit 23 aus.
  • Wie in Fig. 20 gezeigt, sind die zwei 32-Bit-Datenbusse 47 und 48 an einen Schnittstellenabschnitt 310 angelegt, wobei die Steuerbits von einem Mikrobefehlsbus und der Befehlskontext über einen Eingang 311 angelegt werden. Dieser Schnittstellenabschnitt 310 dient zum Überwachen des Protokolls, das bei der Kommunikation mit der Ausführungseinheit 23 verwendet wird. Das Protokoll umfaßt die Sequenz des Empfangens des Opcodes und der Steuersignale über die Leitungen 311, der Operanden über die Leitungen 47 und 48 sowie ferner des Ausgebens des Ergebnisses über den Bus 49 zusammen mit dem zugehörigen Status. Der Opcode und die Operanden werden vom Schnittstellenabschnitt 310 über die Leitungen 313, 314, 315 und 316 zur Stufe-1-Einheit 312 übertragen (für alle Operationen mit Ausnahme der Division). Das heißt, die Dividierereinheit 317 wird von allen Operationen mit Ausnahme der Division umgangen. Die Leitungen 313 führen die Mantissendaten der formatierten Gleitkommadaten, während die Leitungen 314 die Exponentendaten führen und die Leitungen 315 das Vorzeichen und die Leitungen 316 die Steuerinformationen führen. Der Dividierer 317 seine Eingänge von der Schnittstelle 313 und gibt seine Ausgaben an die Stufe-1-Einheit 317 aus, und wird nur verwendet, um die Divisionsoperation zu unterstützen, für die er den Quotienten und den Rest in einem redundanten Format berechnet.
  • Die Stufe-1-Einheit 312 empfängt ihre Eingänge entweder vom Dividierer 317 oder vom Schnittstellenabschnitt 310 über die Leitungen 313, 314, 315 und 316 und gibt ihre Ausgänge 313a, 314a, 315a und 316a an den Stufe-2- Abschnitt 318 aus. Die Stufe 1 wird verwendet, um die Differenz zwischen den Exponenten der zwei Operanden zu ermitteln, die Mantissenfelder so subtrahieren, die Umcodierung des Multiplizierers durchzuführen und das Dreifache des Multiplikanden auszubilden und die Eingänge für die ersten zwei Zeilen der Multiplizierermatrix auszuwählen.
  • Die Stufe-2-Einheit 318 empfängt ihre Eingänge von der Stufe-1-Einheit 312 und gibt ihre Ausgänge über die Leitungen 313b, 314b, 315b und 316b an die Stufe-3- Einheit 319 aus. Die Stufe-2-Einheit-Funktionen sind eine Rechtsverschiebung zum Ausrichten, ein Multiplizieren der Mantissenfelder der Operanden sowie eine Null- und Führende-Eins-Erfassung der Zwischenmantissenergebnisse.
  • Die Stufe-3-Einheit 319 empfängt einen Großteil ihrer Eingänge von der Stufe-2-Einheit 318 und gibt ihre Ausgaben über die Leitungen 313c, 314c, 315c und 316c an die Stufe-4-Einheit 320 aus, oder gibt ihre Ausgänge bedingt über die Leitungen 313d, 314d, 315d und 316d an den Ausgabeschnittstellenabschnitt 321 aus. Die Hauptfunktionen der Stufe-3-Einheit 319 sind eine Linksverschiebung (Normierung) und ein Addieren der Mantissenfelder der ausgerichteten Operanden oder die redundanten Multiplikationsmatrixausgänge. Die Stufe-3- Einheit 319 kann ferner eine "Minirundungs"-Operation mit den niedrigstwertigen Bits der Mantisse für die Addiere-, Subtrahiere- und Multipliziere-Gleitkommabefehle durchführen; wenn die Minirundung keinen Übertrag erzeugt und wenn keine möglichen Ausnahmen vorhanden sind, gibt die Stufe 3 das Ergebnis direkt an den Ausgangsabschnitt 321 aus, wobei die Stufe-4-Einheit 320 umgangen wird und ein Latenzzyklus eingespart wird.
  • Die Stufe-4-Einheit 320 empfängt ihre Eingänge von der Stufe-3-Einheit 319 und gibt ihre Ausgaben an den Ausgabeschnittstellenabschnitt 321 aus. Diese Stufe 4 wird verwendet, um die Abschlußoperationen wie z. B. Runden, Ausnahmedetektion (Überlauf, Unterlauf und dergleichen) durchzuführen und die Bedingungscodes zu ermitteln.
  • Die Gleitkommaeinheit 27 ist hinsichtlich der Lieferung der Befehlsopcodes und der Operanden über die Busse 47, 48 und 311 und bezüglich des Speicherns des Ergebnisses, das über den Bus 49 und die Steuerleitungen 322 gesendet wird, von der Ausführungseinheit 23 abhängig. Die Gleitkommaeinheit 27 benötigt jedoch keine Unterstützung seitens der Ausführungseinheit 23 bei der Ausführung der Gleitkommaeinheit-27-Befehle. Die Gleitkommamakrobefehle werden von der Befehlseinheit genauso wie irgendwelche anderen Makrobefehle decodiert, wobei der Mikrosequenzer 24 zu einem Ausführungsfluß verwiesen wird, der die Quellenoperanden, die während der Pipelinestufe S3 geholt worden sind, am Anfang der Stufe S4 zur Gleitkommaeinheit 27 überträgt. Sobald alle Operanden geliefert worden sind, führt die Gleitkommaeinheit 27 den Makrobefehl aus. Nach Abschluß fordert die Gleitkommaeinheit 27 eine Rückübertragung des Ergebnisses zur Ausführungseinheit 23 an. Wenn der aktuelle Entnahmewarteschlangeneintrag in der Ausführungseinheit 23 ein Gleitkommaeinheit-27-Ergebnis anzeigt und die Gleitkommaeinheit 27 eine Ergebnisübertragung über die Leitungen 322 angefordert hat, wird das Ergebnis über den Bus 49 am Ende von S4 der Pipeline zur Ausführungseinheit 23 übertragen, wobei der Makrobefehl in S5 entnommen wird.
  • Die Eingangsschnittstelle 310 der Gleitkommaeinheit 27 besitzt zwei Eingangsoperandenregister 323, die alle Daten für einen Befehl halten können, sowie eine 3- Segment-Opcode-Pipeline. Wenn der Gleitkommaeinheit-27- Eingang unfähig ist, neue Opcodes oder Operanden zu behandeln, wird ein Eingangshaltesignal von der Gleitkommaeinheit 27 an die Ausführungseinheit 23 ausgegeben, wodurch die nächste Gleitkommaeinheit-27- Dateneingabeoperation die CPU-Pipeline am Ende ihrer Pipelinestufe S3 anhält.
  • Die Ausgangsschnittstelle 321 der Gleitkommaeinheit 27 besitzt einen Formatmultiplexer sowie zwei Ergebniswarteschlangen, nämlich die Datenwarteschlange 324 und die Steuerwarteschlange 325. Der Formatmultiplexer wird verwendet, um das Ergebnis in das VAX-Speicherformat umzusetzen. Die Warteschlangen 324 und 325 werden verwendet, um die Ergebnisse und Steuerinformationen immer dann zu halten, wenn die Ergebnisübertragungen zur Ausführungseinheit 23 angehalten werden.
  • Immer wenn die Gleitkommaeinheit 27 anzeigt, daß sie bereit ist, neue Informationen zu empfangen, indem das sie Eingangshaltsignal negiert, kann die Ausführungseinheit 23 die nächste Opcode- oder Operandenübertragung einleiten. Die Gleitkommaeinheit 27 empfängt die Befehle vom Mikrosequenzer (52 der CPU- Pipeline) auf einem 9-Bit-Opcode-Bus (Teil der Steuerleitungen 311).
  • Die Stufe-3-Einheit 319 wird in erster Linie verwendet, um einen Eingang nach links zu schieben, oder um die Addition der zwei Eingänge in einem Addierer 326 durchzuführen. Diese Stufe enthält einen Steuerabschnitt und Abschnitte der Mantissen-Exponenten- und Vorzeichendatenpfade. Zusätzlich besitzt diese Stufe-3- Einheit die Fähigkeit, die Rundungsoperation der Stufe-4- Einheit bei bestimmten Befehlen zu umgehen. Der Mantissendatenpfadabschnitt der Stufe 3 umfaßt eine Linksschieberichtung 327, einen Addierer 326 sowie Minirundungsinkrementierer 328. Die Linksschiebevorrichtung 327 wird für subtraktionsähnliche Operationen verwendet. Der Addierer 326 wird von allen anderen Operationen verwendet, um entweder einen Eingang zum Ausgang 329 weiterzuleiten (durch eine Addition mit 0), oder um zwei Vektoren zu addieren - z. B. die zwei Eingangsoperanden (richtig ausgerichtet) für die Addition/Subtraktion oder die Summen- und Übertragsvektoren für die Multiplikation. Die Minirundungsinkrementierer 328 werden verwendet, um das Mantissenergebnis während einer Stufe-4- Umgehungsoperation zu runden.
  • Bei bestimmten Befehlen und Bedingungen kann die Stufe-3- Einheit 319 das Ergebnis direkt der Ausgangsschnittstelte 321 zuführen, was als Stufe-4-Umgehung bezeichnet wird und die Latenzzeit der Gleitkommaeinheit 27 verbessert, indem ein Ergebnis einen ganzen Zyklus früher geliefert wird als in dem Fall, als wenn das Stufe-4-Ergebnis geliefert wird. Um die Stufe 4 zu umgehen, muß die Stufe 3 die erforderlichen Operationen ausführen, die normalerweise unter denselben Bedingungen die Stufe 4 ausführen würde. Diese umfassen die Rundung der Mantisse sowie das Liefern des richtigen Exponenten und das Erzeugen der Bedingungscodes und der Statusinformationen, die sich auf das Ergebnis beziehen. Diese Umleitung wird nur für Additions-, Subtraktions- und Multiplikations- Gleitkommabefehle versucht. Die Stufe 3 führt die Rundungsoperation unter Verwendung der Inkrementierer 328 durch, die nur auf die niedrigstwertigen Bits wirken. Das heißt, aufgrund zeitlicher Einschränkungen sind diese Inkrementierer 328 in ihrer Breite viel kleiner als die entsprechenden Rundungselemente beim Runden über die volle Breite, das in der Stufe 4 durchgeführt wird. Aufrund der begrenzten Größe der Inkrementierer können von der Stufe 3 nicht alle Mantissendaten richtig gerundet werden. Das Minirunden ist erfolgreich, wenn der Inkrementierer 328 für einen umgeleiteten Befehl keinen Übertragsausgang erzeugt. Wenn das Minirunden fehlschlägt, wird die unveränderte Mantisse über den Ausgang 329 und die Leitungen 313c der Stufe 4 zugeführt und das Umleiten abgebrochen.
  • Die Stufe-3-Einheit 319 und die Stufe-4-Einheit 320 nutzen Busse gemeinsam, um die Ergebnisse der Ausgangsschnittstelle 321 zuzuführen. Die Stufe 4 steuert die Leitungen 313d, 314d, 315d und 316d während phi3, wenn sie gültige Daten besitzt. Die Stufe 3 steuert die Leitungen 313d, 314d, 315d und 316d während phi3, wenn sie einen Befehl erfolgreich umleiten kann und die Stufe 4 keine gültigen Daten besitzt. Wenn die Stufe 3 detektiert hat, daß eine Umleitung möglich sein kann, signalisiert sie dies der Ausgangsschnittstelle 321 durch Setzen einer Umleitungsanforderung auf einer der Steuerleitungen 316d. Die folgenden Bedingungen müssen erfüllt sein, um eine Stufe-4-Umgehungsanfrage zu erzeugen: Ein Umleitungsfreigabesignal muß gesetzt sein; Der Befehl muß eine Addition, eine Subtraktion oder eine Multiplikation sein; im vorangehenden Zyklus darf kein Ergebnis zur Stufe 4 gesendet worden sein; den Daten sind keine Fehler zugeordnet. Um eine Stufe-4-Umgehung abzubrechen, muß während phi2 ein Umgehungsabbruchsignal gesetzt werden. Eine der zwei Bedingungen brechen eine Stufe-4-Umgehung ab, unter der Annahme, daß die Umgehungsanforderung erzeugt worden ist: ein Minirundungsfehler, was bedeutet, daß der Inkrementierer 328 in seiner höchstwertigen Bitstelle einen Übertragsausgang erzeugt hat; oder ein Exponentenüberlauf oder -unterlauf wird bei einem Exponentenergebnis im Exponentenabschnitt der Stufe 3 detektiert.
  • Die Fähigkeit zum Umgehen der letzten Stufe der Pipeline der Gleitkommaeinheit 27 für die meisten Befehle dient zum Steigern der Leistung um ein beträchtliches Maß. Analysen zeigen, daß ein Großteil der von der Gleitkommaeinheit 27 ausgeführten Befehle die Anforderungen für eine Umgehungsoperation erfüllt, so daß die durchschnittliche Ausführungszeit um einen Zyklus verkürzt wird.
  • Interne Prozessorregister:
  • Jede Komponente der obenbeschriebenen CPU 10 besitzt bestimmte interne Prozessorregister, wie es allgemein üblich ist. Zum Beispiel enthält die Ausführungseinheit 23 den PSL oder Prozessorzustandszwischenspeicher und verschiedene andere Register, während die Speichermanagementeinheit 25 Prozessorregister zum Halten des Zustands und der Steuerungs- oder Anweisungssignale besitzt, ebenso wie die Gleitkommaeinheit 27 und die Cache-Steuereinheit 26 und dergleichen. Die Anzahl dieser Register beträgt weniger als 256, so daß eine 8-Bit- Adresse verwendet werden kann, um diese Register zu adressieren. Die 8-Bit-Adresse wird vom Mikrocode aus dem Steuer-ROM 43 erzeugt. Innerhalb des Chips der CPU 10 wird die Adresse eines Prozessorregisters auf einem 8- Bit-Abschnitt eines internen Adreßbusses geführt, wobei die Steuerleitungen so geführt sind, daß sie spezifizieren, daß die aktuelle Referenz sich auf ein Prozessorregister bezieht statt z. B. auf eine Speicherreferenz oder eine E/A-Referenz. Einige der Prozessorregister befinden sich jedoch außerhalb des Chips und müssen über den Bus 20 erreicht werden. Der Bus 20 verwendet eine im Speicher abgebildete E/A und besitzt im allgemeinen eine Minizahl von zusätzlichen Steuerleitungen, um anzugeben, welche spezielle Transaktion auf den Bus ausgegeben wird. Um somit zu vermeiden, daß Prozessorregistersignalleitungen zum Bus hinzugefügt werden müssen und ein im Speicher abgebildeter Zugriff auf die externen Prozessorregister verwendet werden muß, wird die interne 8-Bit-Adresse (plus deren Steuersignal, das einen Prozessorregisterzugriff anzeigt) in der C-Kasten- Steuervorrichtung 306 in eine Adresse mit voller Breite übersetzt, indem die Bits < 31:30> z. B. zur abgehenden Adresse auf dem Bus 20 hinzuaddiert werden, um ein externes Prozessorregister zu spezifizieren. Die externe Adresse ist die Kombination der internen niedrigwertigen 8-Bit-Adresse, wie sie vom Mikrocode erzeugt wird, plus der hinzugefügten höherwertigen Bits, um auf dem Bus 20 zu spezifizieren, daß auf ein Prozessorregister zugegriffen wird.
  • Der CPU-Bus:
  • Der CPU-Bus 20 ist ein hängender, synchroner Bus mit zentralisierter Zuweisung. Mit "hängend" ist gemeint, daß mehrere Transaktionen zu einem gegebenen Zeitpunkt in Bearbeitung sein können, statt immer zu warten, bis eine Speicheranfrage erfüllt worden ist, bevor einer weiteren Speicheranfrage erlaubt wird, auf den Bus 11 ausgegeben zu werden. Die Cache-Steuereinheit 26 der CPU 10 kann eine Speicherleseanfrage senden, wobei mehrere Buszyklen bevor der Speicher 12 die Daten als Antwort auf diese Anfrage zurückgibt, andere Speicheranfragen auf dem Bus ausgegeben werden können. Das ID-Feld auf dem Anweisungsbusabschnitt des Busses 20 spezifiziert dann, wenn die Daten auf dem Bus 20 ausgegeben werden, welcher Knoten die Daten angefordert hat, so daß der anfordernde Knoten nur seine eigenen Daten annehmen kann. In Fig. 21 ist ein Zeitablaufdiagramm der Operation des Busses 20 während dreier Zyklen gezeigt. Diese drei Zyklen sind ein Nullzyklus 0, gefolgt von einer Schreibsequenz; die Schreibadresse wird in Zyklus 1 ausgegeben, gefolgt von den Schreibdaten in Zyklus 2. Die Fig. 21a zeigt die Daten oder Adressen auf dem 64-Bit-Daten/Adreßbus. Die Fig. 21b-21e zeigen die Zuweisungssequenz. Im Zyklus setzt die CPU 10 eine Anfrage zur Durchführung eines Schreibvorgangs mittels einer Anfrageleitung, die von P2 bis P4 dieses Zyklus auf Niedrigpegel gesteuert wird, wie in Fig. 21b gezeigt. Wie in Fig. 21d gezeigt, setzt der Arbitrierer in der Busschnittstelle 21 ein CPU-Zuteilungssignal beginnend mit P2 des Zyklus 0, wobei diese Leitung auf Niedrigpegel gehalten (gesetzt) wird, da die CPU 10 wie in Fig. 21c gezeigt, die CPU-Halt-Leitung setzt. Das Haltsignal garantiert, daß die CPU 10 die Kontrolle über den Bus behält, selbst wenn ein weiterer Knoten wie z. B. eine E/A 13a oder 13b eine Anfrage ausgibt. Das Haltsignal wird für Mehrfachzyklenübertragungen verwendet, bei denen der Knoten die Kontrolle über den Bus für aufeinanderfolgende Zyklen behalten muß. Nachdem die CPU die Halteleitung am Ende von P4 des Zyklus 1 freigegeben hat, kann der Arbitrierer in der Schnittstelleneinheit 21 die Zuteilungsleitung zur CPU im Zyklus 2 zurücksetzen. Die Bestätigungsleitung wird von der Busschnittstelle 21 für die CPU 10 in dem Zyklus gesetzt, nachdem sie ohne Paritätsfehler die Schreibadresse hat, die von der CPU in Zyklus 1 ausgegeben worden ist. In Fig. 21 ist eine weitere Bestätigung nicht gezeigt, die von der Busschnittstelle 21 im Zyklus 3 gesetzt wird, wenn die Schreibdaten des Zyklus 2 ohne Paritätsfehler empfangen worden sind. Die Bestätigung muß gesetzt werden, wenn in dem Zyklus, der dem Ausgeben der Daten folgt, kein Paritätsfehler detektiert wird.
  • Wie in Fig. 22 gezeigt, besteht der Bus 20 aus einer Anzahl von Leitungen zusätzlich zu den 64 Bits, geschachtelten Adreß/Daten-Leitungen 20a, die die Adressen und Daten in abwechselnden Zyklen führen, wie in Fig. 21a gezeigt ist. Die von den Knoten gemeinsam genutzten Leitungen auf dem Bus 20 (die CPU 10, die E/A 13a, die E/A 13b und der Schnittstellenchip 21) umfassen den Adreß/Daten-Bus 20a, einen 4-Bit-Anweisungsbus 20b, der die aktuelle Bustransaktion während eines gegebenen Zyklus spezifiziert (Schreiben, Befehlsstromlesen, Datenstromlesen und dergleichen), einen 3-Bit-ID-Bus 20c, der die Identifikation des Buskommandanten während der Adreß- und Rückgabedatenzyklen enthält (jeder Kommandant kann zwei ausstehende Lesetransaktionen besitzen), einen 3-Bit-Paritätsbus 20d sowie die Bestätigungsleitung 20e.
  • Alle Anweisungscodierungen für den Anweisungsbus 20d und die Definitionen dieser Transaktionen sind in der folgenden Tabelle A ausgeführt. Die CPU liefert ferner die 4-Phasen-Bustakte der Fig. 3 vom Taktgenerator 30 auf den Leitungen 20f.
  • Zusätzlich zu diesen gemeinsam genutzten Leitungen im Bus 20 besitzt jede der drei aktiven Knoten CPU 10, E/A 13a und E/A 131b individuell die Anfrage-, Halte- und Zuteilungsleitungen 20g, 20h und 20i, wie oben beschrieben, die mit dem Arbitrierer 325 im Speicherschnittstellenchip 21 verbunden sind. Eine weitere Funktion wird durch eine Unterdrückungsleitung 20j zur verfügung gestellt, die von der CPU gesetzt wird, um z. B. neue Transaktionen auf dem Bus 20 zu unterdrücken, die die CPU 10 als Cache Kohärenztransaktionen behandelt. Sie tut dies, wenn ihre 2-Eintrag-Cache-Kohärenz-Warteschlange 61 überzulaufen droht. Während des Zyklus, wenn die CPU 10 die Unterdrückungsleitung 20j setzt, nimmt die CPU 10 eine neue Transaktion an, wobei jedoch Transaktionen beginnend mit dem folgenden Zyklus unterdrückt werden (keinem Knoten wird der Bus zugeteilt). Während die Unterdrückungsleitung 20j gesetzt ist, wird nur Auffüllvorgängen und Zurückschreibevorgängen von irgendwelchen anderen Knoten als der CPU erlaubt, fortzufahren. Die CPU 10 kann weiterhin alle Transaktionen auf den Bus 20 ausgeben (solange die Nur- WB-Leitung 20k nicht gesetzt ist). Da die Eingangswarteschlange 61 voll ist und die höchste Priorität innerhalb der Cache-Steuereinheit 26 annimmt, verarbeitet die CPU 10 meistens Cache Kohärenztransaktionen, während die Unterdrückungsleitung 20j gesetzt ist, wodurch die CPU 10 veranlagt werden kann, Schreibfreigaben auf den Bus 20 auszugeben. Die CPU kann jedoch einen beliebigen Typ von Transaktion ausgeben und tut dies, während ihre Unterdrückungsleitung 20j gesetzt ist. Die E/A-Knoten 13a und 13b besitzen eine ähnliche Unterdrückungsleitungsfunktion.
  • Die Nur-Zurückschreibe- oder Nur-WB-Leitung 20k bedeutet, wenn sie vom Arbitrierer 325 gesetzt wird, daß der Knoten, an den sie gerichtet ist (z. B. die CPU 10), nur Schreibfreigabeanweisungen ausgibt, einschließlich der Schreibfreigaben aufgrund von Schreibentwicklungen, wenn der Cache ausgeschaltet ist. Ansonsten gibt die CPU 10 keine neuen Anfragen aus. Während des Zyklus, indem die Nur-WB-Leitung 20k für die CPU 10 gesetzt ist, muß das System darauf vorbereitet werden, eine zusätzliche Nicht- Zurückschreibe-Anweisung von der CPU 10 anzunehmen. Beginnend mit dem Zyklus, der dem Setzen von Nur-WB folgt, gibt die CPU 10 Nur-Zurückschreibe-Anweisungen aus. Die getrennten Zurückschreibe- und Nicht- Zurückschreibe-Warteschlangen 63 und 62 in der Cache- Steuereinheit 26 der Fig. 19 ermöglichen, daß die Warteschlangentransaktionen getrennt werden, so daß dann, wenn die Nur-WB-Leitung 20k gesetzt ist, die Zurückschreibewarteschlange 62 bei Bedarf geleert werden kann, so daß den anderen Knoten des Systems weiterhin aktualisierte Daten im Speicher 12 zur verfügung stehen.
  • Wenn ein Knoten seine Unterdrückungsleitung 20j setzt, dürfen auf den Bus 20 beginnend mit dem folgenden Zyklus keine anderen Transaktionen als Zurückschreibevorgänge oder Auffüllvorgänge ausgegeben werden. Wenn z. B. die CPU 10 ihre Unterdrückungsleitung 20j setzt, kann der Arbitrierer sich durch Setzen von Nur-WB sowohl für E/A 13a und E/A 13b anpassen, so daß diese Knoten den Bus anfordern, außer für Auffüllvorgänge und Zurückschreibevorgänge. Somit veranlaßt das Setzen der Unterdrückung durch die CPU 10 den Arbitrierer 325, Nur- WB für die anderen zwei Knoten 13a und 13b zu setzen. Oder das Setzen der Unterdrückung durch E/A 13a veranlaßt den Arbitrierer 325, Nur-WB für die CPU 10 und die E/A 13b zu setzen. Die Halteleitung 20h geht der Unterdrückungsfunktion vor.
  • Die vom Arbitrierer 325 angewendeten Regeln sind folgende: (1) Jeder Knoten kann seine Anfrageleitung 20g während eines beliebigen Zyklus setzen; (2) eine Zuteilungsleitung 20i eines Knotens muß gesetzt werden, bevor dieser Knoten den Bus 20 ansteuert; (3) ein Treiber des Busses 20 kann nur dann seine Halteleitung 20h setzen, wenn ihm der Bus vor dem aktuellen Zyklus zugeteilt worden ist; (4) wenn einem Knoten der Bus 20 zugeteilt worden ist und er seine Halteleitung setzt, ist garantiert, daß ihm der Bus 20 im folgenden Zyklus zugeteilt ist; (5) die Halteleitung 20h kann in zwei Fällen verwendet werden, einmal zum Halten des Busses für die Datenzyklen eines Schreibvorgangs und zum anderen zum Senden aufeinanderfolgender Auffüllzyklen; (6) es muß ein Halt verwendet werden, um den Bus für die Datenzyklen eines Schreibvorgangs zu behalten, da die Zyklen mit den Schreibadreßzyklen zusammenhängen müssen; (7) ein Halt darf nicht verwendet werden, um den Bus 20 für neue Transaktionen zu halten, da ansonsten die Zuweisungsgerechtigkeit nicht aufrechterhalten würde; (8) wenn ein Knoten den Bus 20 anfordert und den Bus zugeteilt bekommt, muß er den Bus während des zugeteilten Zyklus mit einer gültigen Anweisung - NOP ist eine gültige Anweisung - ansteuern, wobei die CPU 10 diese einen Schritt später annimmt und NOP ausgibt, wenn ihr der Bus zugeteilt wird und sie ihn nicht angefordert hat; (9) jeder Knoten, der einen Lesevorgang ausgibt, muß fähig sein, die entsprechenden Ausfüllungen anzunehmen, da sie nicht unterdrückt oder verlangsamt werden können; (10) wenn eine Nur-WB-Leitung 20k eines Knotens gesetzt ist, kann dieser den Bus 20 nur mit NOP, Lesedatenrückgabe, Schreibfreigabe und anderen Situationen, die hier nicht sachdienlich sind, ansteuern; (11) wenn ein Knoten seine Unterdrückungsleitung 20j setzt, darf der Arbitrierer 325 den Bus im nächsten Zyklus keinem anderen Knoten als diesem zuteilen - gleichzeitig muß der Arbitrierer die entsprechenden Nur- WB-Leitungen setzen (im folgenden Zyklus muß der Arbitrierer den Bus normal zuteilen); (12) die Regeln für das Halten gehen den Regeln für die Unterdrückung vor; (13) der Bus 20 muß während jedes Zyklus aktiv angesteuert werden.
  • Der Bus 20a, Bits < 63:0> , wird für die Informationsübertragung verwendet. Die Verwendung dieses Feldes < 63:0> des Busses 20a ist zwischen den Adreß- und Dateninformationen verschachtelt aufgeteilt. Bei Datenzyklen stellen die Leitungen < 63:0> des Busses 20a 64 Bits der Lese- oder Schreibdaten dar. Bei Adreßzyklen stellen die Leitungen < 63:0> des Busses 20a in den Bits < 31:0> die Adresse, in den Bits < 55:40> die Bytefreigabe und in den Bits < 63:62> die Längeninformation dar. Es gibt mehrere Typen von Buszyklen, die in Tabelle A definiert sind. Die vier Typen von Datenzyklen sind: Daten schreiben, schlechte Daten schreiben, Lesedaten zurückgeben und Lesedatenfehler. Während der schreibdatenzyklen steuert der Kommandant (z. B. die Cache-Steuereinheit 26 der CPU 10) zuerst den Adreßzyklus auf den Bus 20 an, der seine ID auf dem ID-Bus 20c enthält, und legt anschließend im nächsten Zyklus Daten auf dem Bus 20a, wiederum mit seiner ID. Während aller vier Datenzyklen werden für Hexawortschreibvorgänge alle 64 Bits der Daten auf die Busleitungen 20a geschrieben; für Achtwort- und Vierwort-Schreibvorgänge entsprechen die Datenbytes, die geschrieben werden, den Bytefreigabebits, die während des Adreßzyklus gesetzt wurden, der die Transaktion eingeleitet hat. Während der Lesedatenrückgabe- und Lesedatenfehlerzyklen gibt der Antworter auf den Leitungen 20c die ID des ursprünglichen Kommandanten aus (d. h. den Knoten, der den Lesevorgang eingeleitet hat, wie z. B. die CPU 10).
  • Der Adreßzyklus auf dem Bus 20a wird vom Kommandant (d. h. vom ursprünglichen Knoten, wie z. B. der CPU 10) verwendet, um eine Bus-20-Transaktion einzuleiten. In Adreßzyklen wird die Adresse in das untere Langwort < 31:0> des Busses eingegeben, wobei die Bytefreigabe und die Transaktionslänge im oberen Langwort enthalten sind. Der vom Bus 20 unterstützte Adreßraum ist in den Speicherraum und den E/A-Raum unterteilt. Die unteren 32 Bits der Adreßzyklusbits < 31:0> definieren die Adresse einer Lese- oder Schreibtransaktion auf den Bus 20. Der Bus 20 unterstützt einen Adreßraum von 4 Gigabyte (232 Byte). Die höchstwertigen Bits dieser Adresse (entsprechend den Leitungen < 31:29> ) wählen den 512-MB- E/A-Raum (< 31:29> = 111) oder den 3,5GB-Speicherraum (< 31:29> = 000...110) aus. Die Aufteilung des Adreßraums im E/A-Bereich ist weiter definiert, um den Bedarf an getrennten Adreßräumen für den CPU-10-Knoten und die E/A- Knoten 13a und 13b zu befriedigen. Die Adreßbits < 31:0> sind alle signifikante Bits in einer Adresse für den E/A- Raum. Obwohl das Längenfeld < 63:62> auf den Bus bei E/A- Raum-Lesevorgängen und -schreibvorgängen immer ein Vierwort spezifiziert, kann die wirklich gelesene oder geschriebene Datenmenge weniger als ein Vierwort umfassen. Das Bytefreigabefeld < 55:40> wird verwendet, um nur die angeforderten Bytes zu lesen. Wenn das Byte- Freigabefeld einen 1-Byte-Lesevorgang oder -schreibvorgang anzeigt, ist jedes Bit der Adresse signifikant. Die unteren Bits der Adresse sind manchmal im Hinblick auf das Bytefreigabefeld redundant, werden jedoch auf den Bus 2a ausgegeben, so daß die E/A-Adapter die Adresse nicht aus dem Bytefreigabefeld ableiten müssen. Alle Lesevorgänge besitzen in ihrer Adresse signifikante Bits bis hinunter zum Vierwort (Bit < 3> ) der Adresse. Obwohl Auffüllvorgänge (die ein Hexawort lang sind) mit Vierwörtern in beliebiger Reihenfolge zurückgegeben werden können, ergibt sich ein Leistungsvorteil, wenn der Speicher 12 das angeforderte Vierwort zuerst zurückgibt. Das Bus-20-Protokoll identifiziert jedes Vierwort unter Verwendung einer der vier Lesedatenrückgabeanweisungen auf dem Bus 20b, wie in Tabelle A ausgeführt ist, so daß die Vierwörter an den richtigen Stellen im Hintergrund-Cache 15 von der Cache- Steuereinheit 26 plaziert werden können, unabhängig von der Reihenfolge, in der sie zurückgegeben werden. Vierwort-, Achtwort- und Hexawortschreibvorgänge seitens der CPU 10 sind immer natürlich ausgerichtet und werden in der Reihenfolge vom niedrigsten adressierten Vierwort zum höchsten auf den Bus 20 ausgegeben.
  • Das Bytefreigabefeld ist in den Bits < 55:40> des Busses 20a während des Adreßzyklus angeordnet. Es wird verwendet, um Byteebenen-Freigabeinformationen für Besitzlesevorgänge, I-Strom-Lesevorgänge, D-Strom- Lesevorgänge mit einer Länge eines Vierworts und Schreibvorgänge und Schreibfreigaben mit der Länge eines Achtworts zu liefern. Von diesen Transaktionstypen, die Bytefreigaben verwenden, erzeugt die CPU 10 nur Vierwort- I-Stromlesevorgänge und D-Stromschreibvorgänge für den E/A-Raum, Vierwortschreibvorgänge für den E/A-Raum sowie Vierwortschreibvorgänge und Schreibfreigaben für den Speicherraum.
  • Das Längenfeld in den Bits < 63:62> des Adreßzyklus auf dem Bus 20a wird verwendet, um die zu lesende oder zu schreibende Datenmenge für die aktuelle Transaktion anzugeben, nämlich Hexawort, Vierwort oder Achtwort (Achtwort wird in einer typischen Ausführungsform nicht verwendet).
  • Die schlechte-Daten-Schreibanweisung, die auf dem Bus 20b erscheint, wie in Tabelle A aufgelistet, dient dazu, der CPU zu ermöglichen, ein schlechtes Vierwort der Schreibdaten zu identifizieren, wenn ein Hexawort-Zurück- schreibevorgang ausgeführt wird. Die Cache-Steuereinheit 26 prüft die aus dem Hintergrund-Cache 15 ausgelesenen Daten auf ihrem Weg zum Bus 20 über die Zurückschreibewarteschlange 62. Wenn ein Vierwort des Hexawortes in diesem Test eine falsche Parität aufweist, wird dieses Vierwort von der Cache-Steuereinheit 26 mit einer schlechte-Daten-Schreibanweisung auf dem Bus 20b auf den Bus 20 ausgegeben, wobei in diesem Fall der Speicher 12 drei gute Vierwörter und ein schlechtes Vierwort im Hexawortschreibvorgang empfängt. Da der Schreibblock ein Hexawort ist, wäre sonst das gesamte Hexawort im Speicher 12 ungültig und stünde somit anderen CPUs nicht zur Verfügung. Selbstverständlich müssen Fehlerbehebungsalgorithmen vom Betriebssystem ausgeführt werden, um festzustellen, ob das mit der schlechte-Daten- Schreibanweisung gesendete schlechte Vierwort katastrophal ist oder überarbeitet werden kann.
  • Wie oben beschrieben, ist der Bus 20 ein hängender, verschachtelter 64-Bit-Adreß/Daten-Bus, der synchron zur CPU 10 arbeitet, mit einer zentralisierten Zuweisung, die vom Schnittstellenchip 21 bewerkstelligt wird. Zu einem gegebenen Zeitpunkt können mehrere Transaktionen in Bearbeitung sein, da ein Lesevorgang mehrere Zyklen benötigt, um die Rückgabedaten aus dem Speicher 12 zu erzeugen, und inzwischen andere Transaktionen eingeschoben werden können. Die Zuweisung und die Datenübertragung finden gleichzeitig (parallel) auf dem Bus 20 statt. Es werden vier Knoten unterstützt: die CPU 10, der Systemspeicher (über den Bus 11 und den Schnittstellenchip 21) sowie zwei E/A-Knoten 13a und 13b. Auf dem 64-Bit-Bus 20a wechseln sich die Datenzyklen (64 Bits an Daten) mit Adreßzyklen ab, die 32-Bit- Adressen sowie Bytemasken- und Datenlängenfelder enthalten; ein paralleler Anweisungs- und Zuweisungsbus führt eine Anweisung auf den Leitungen 20b, ein Identifiziererfeld auf den Leitungen 20c, das den sendenden Knoten definiert, sowie eine Bestätigung auf der Leitung 20e; separate Anfrage-, Halte-, Zuteilungs-, Unterdrückungs- und Nur-Zurückschreibe-Leitungen sind vorgesehen, um jeden Knoten mit dem Arbitrierer 325 zu verbinden.
  • Fehlerübergangsmodus:
  • Der Hintergrund-Cache 15 für die CPU 10 ist ein "Zurückschreibe"-Cache, so daß es Zeitpunkte gibt, zu denen der Hintergrund-Cache 15 die einzige gültige Kopie eines bestimmten Datenblocks im gesamten System der Fig. 1 enthält. Der Hintergrund-Cache 15 (sowohl Merkerspeicher als auch Datenspeicher) wird mittels ECC geschützt. Es werden Prüfbits gespeichert, wenn die Daten in den Cache-15-Daten-PAM geschrieben werden oder in den Merker-PAM geschrieben werden, woraufhin diese Bits erneut mit den Daten verglichen werden, wenn der Cache 15 ausgelesen wird, wobei die ECC-Prüfschaltungen 330 und 331 der Fig. 19 verwendet werden. Wenn von diesen ECC- Prüfschaltungen ein Fehler detektiert wird, wird von der C-Kasten-Steuervorrichtung 306 ein Fehlerübergangsmodus eingeleitet; der Hintergrund-Cache 15 kann nicht einfach für ungültig erklärt werden, da andere Systemknoten 28 möglicherweise Daten benötigen, die vom Hintergrund-Cache gehalten werden. Bei diesem Fehlerübergangsmodus werden die Daten im Hintergrund-Cache 15 so weit möglich für eine Diagnose gesichert, wobei jedoch die Operation fortgesetzt wird; das Ziel ist, die Daten, für die dieser Hintergrund-Cache 15 die einzige Kopie im System besitzt, so schnell wie möglich in den Speicher 12 auszulagern, ohne jedoch die Leistung unnötig zu beeinträchtigen. Für Blöcke (Hexawörter), die nicht im Hintergrund-Cache 15 gehalten werden, werden die Referenzen von der Speichermanagementeinheit 25, die von der Cache- Steuereinheit 26 empfangen werden, zum Speicher 12 gesendet, statt sie im Hintergrund-Cache 15 auszuführen, selbst wenn ein Cache-Treffer vorliegt. Für Blöcke, die vom Hintergrund-Cache 15 gehalten werden, bewirkt eine Schreiboperation durch die CPU 10, die im Hintergrund- Cache 15 hervorruft, daß der Block vom Hintergrund-Cache 15 in den Speicher 12 zurückgeschrieben wird, wobei die Schreiboperation ferner zum Speicher 12 weitergeleitet wird, statt in den Hintergrund-Cache 15 zu schreiben; nur die Besitzbits werden im Hintergrund-Cache 15 für diesen Block geändert.
  • Ein Lesetreffer in einem gültigen besessenen Block wird vom Hintergrund-Cache 15 ausgeführt. Es werden keine Cache-Auffülloperationen gestartet, nachdem in den Fehlerübergangsmodus gewechselt worden ist. Cache- Kohärenz-Transaktionen vom Systembus 20 werden normal ausgeführt, jedoch ändern diese nicht die Daten oder Merker im Hintergrund-Cache 15, lediglich die Gültigkeits- und Besitzbits. Auf diese Weise setzt das System die Operation fort, wobei die Daten im Hintergrund-Cache 15 bestmöglich für eine spätere Diagnose gesichert werden.
  • Wenn die Cache-Steuereinheit 26 unter Verwendung der ECC Schaltungen 330 und 331 unkorrigierbare Fehler detektiert, geht sie in den Fehlerübergangsmodus (ETM) über. Die Ziele der Cache-Steuereinheit-26-Operation während des ETM sind folgende: (1) Sichern des Zustands des Cache 15 soweit möglich für eine Diagnosesoftware; (2) Anerkennen von Speichermanagement-25-Referenzen, die im Hintergrund-Cache 15 besessene Blöcke treffen, da dies die einzige Quelle an Daten im System ist; (3) normales Antworten auf Cache-Kohärenzanfragen, die im Bus 20 empfangen werden.
  • Sobald die Cache-Steuereinheit 26 in den Fehlerübergangsmodus eintritt, verbleibt sie im ETM, bis die Software explizit den Cache 15 sperrt oder freigibt.
  • Um die Cache-Kohärenz sicherzustellen, muß der Cache 15 vollständig von gültigen Blöcken geleert werden, bevor er erneut freigegeben wird, da einige Daten veralten können, während sich der Cache im ETM befindet.
  • Die Tabelle B beschreibt, wie der Hintergrund-Cache 15 sich verhält, während er sich im ETM befindet. Irgendwelche Lesevorgänge oder Schreibvorgänge, die während des ETM keinen gültigen besessenen Block treffen, werden zum Speicher 12 gesendet: die Lesedaten werden vom Speicher 12 empfangen, wobei die Schreibvorgänge in den Speicher 12 unter vollständiger Umgehung des Cache 15 schreiben. Der Cache 15 liefert Daten für I-Lesevorgänge und D-Lesevorgänge, die einen gültigen besessenen Block treffen; dies ist das normale Cache-Verhalten. Wenn ein Schreibvorgang einen gültigen besessenen Block im Hintergrund-Cache 15 trifft, wird der Block in den Speicher 12 zurückgeschrieben, wobei der Schreibvorgang ebenfalls zum Speicher 12 gesendet wird. Der Schreibvorgang verläßt die Cache-Steuereinheit 26 über die Nicht-Zurückschreibe-Warteschlange 62, was eine Schreibreihenfolge bezüglich vorangehender Schreibvorgänge erzwingt, die im Hintergrund-Cache 15 einen Fehlgriff verursacht haben können. Wenn eine Leseverriegelung einen gültigen besessenen Block im Cache 15 trifft, wird ein Zurückschreiben des Blocks erzwungen und die Leseverriegelung zum Speicher 12 gesendet (als Besitzt-Lesen auf dem Bus 20). Dieses Verhalten erzwingt eine Schreibreihenfolge unter vorangehenden Schreibvorgängen, die im Cache einen Fehlgriff verursacht haben können, und der Schreibfreigabe, die der Leseverriegelung folgt.
  • Das erwähnte Schreibreihenfolgeproblem ist folgendes: es sei angenommen, daß sich der Cache 15 im ETM befindet. Es sei ferner angenommen, daß im ETM Schreibvorgänge, die einenm besessenen Block im Cache 15 treffen, in den Cache geschrieben werden, während Schreibvorgänge, die einen Fehlgriff verursachen, zum Speicher 12 gesendet werden. Der Schreibvorgang A verursacht im Cache 15 einen Fehlgriff und wird zur Nicht-Zurückschreibe-Warteschlange 62 gesendet auf seinem Weg zum Speicher 12. Der Schreibvorgang B trifft einen besessenen Block im Cache und wird in den Cache geschrieben. Eine Cache- Kohärenzanfrage kommt für den Block B an, wobei dieser Block in der Zurückschreibe-Warteschlange 63 enthalten ist. Wenn der Schreibvorgang A noch nicht den Bus 20 erreicht hat, kann der Zurückschreibevorgang B diesen überholen, da die Zurückschreibewarteschlange eine höhere Priorität besitzt als die Nicht-Zurückschreibe- Warteschlange. Wenn dies geschieht, sieht das System den Schreibvorgang B, während es noch die alten Daten in Block A liest, da der Schreibvorgang A noch nicht den Speicher erreicht hat.
  • Wie in Tabelle B gezeigt, ist zu beachten, daß eine Schreibfreigabe, die während des ETM einen besessenen Block trifft, direkt in den Cache 15 geschrieben wird. Es gibt nur einen Fall, bei dem eine Schreibfreigabe während des ETM einen besessenen Block trifft: Wenn die Leseverriegelung, die vorangeht, ausgeführt ist, bevor der Cache in den ETN eingetreten ist. (Entweder die Leseverriegelung selbst oder eine Ungültigkeit, die zwischen der Leseverriegelung und der Schreibfreigabe ausgeführt worden ist, hat den Eintritt in den ETM verursacht.) In diesem Fall ist bekannt, daß keine vorangehenden Schreibvorgänge in der Nichtzurückschreibe-Warteschlange sind, da Schreibvorgänge nicht in die Nicht-Zurückschreibe-Warteschlange gestellt werden, wenn der ETM nicht aktiv ist. (Es können E/A- Raum-Schreibvorgänge in der Nicht-Zurückschreibe- Warteschlange sein, jedoch ist die Einordnung mit E/A- Raum-Schreibvorgängen nicht zwingend.) Daher ergibt sich kein Schreibreihenfolgeproblem wie im vorangehenden Absatz.
  • Die Tabelle B zeigt, daß während des ETM Cache- Kchärenzanfragen wie während der normalen Operation behandelt werden, mit einer Ausnahme, wie durch eine Notiz angegeben ist. Auffüllvorgänge als Ergebnis irgendeines Typs von Lesevorgang, der ausgegeben worden ist, bevor der Cache in den ETM eingetreten ist, werden in der üblichen Weise verarbeitet. Wenn der Auffüllvorgang ein Ergebnis eines Schreibfehlgriffs ist, werden die Schreibdaten wie üblich gemischt, wenn die angeforderte Auffülloperation zurückgegeben wird. Auffülloperationen, die durch irgendeinen Typ eines Lesevorgangs verursacht werden, der während des ETM ausgegeben worden ist, werden nicht in den Cache geschrieben oder im Merkerspeicher gültig. Während des ETM wird der Zustand des Cache so wenig wie möglich modifiziert. Tabelle 10 zeigt, wie jede Transaktion den Zustand des Cache modifiziert.
  • Systembusschnittstelle:
  • Wie in Fig. 23 gezeigt, dient die Schnittstelleneinheit 21 zum Verbinden des CPU-Busses 20 mit dem Systembus 11. Der Systembus 11 ist ein hängender, synchroner Bus mit zentralisierter Zuweisung. Mehrere Transaktionen können zu einem gegebenen Zeitpunkt in Verarbeitung sein, was eine sehr effiziente Nutzung der Busbandbreite erlaubt. Die Zuweisung und die Datenübertragungen finden gleichzeitig statt, wobei die Daten- und Adreßleitungen geschachtelt sind. Der Bus 11 unterstützt Zurückschreib- Cache-Speicher durch Vorsehen eines Satzes von Besitzanweisungen, wie oben beschrieben ist. Der Bus 11 unterstützt Vierwort-, Achtwort- und Hexawort- Lesevorgänge und Schreibvorgänge für den Speicher 12. Zusätzlich unterstützt der Bus 11 Langwort-Lese- und Schreiboperationen für den E/A-Raum, wobei diese Langwortoperationen Byte- und Wort-Modi implementieren, die von einigen E/A-Vorrichtungen benötigt werden. Beim Betrieb mit einem Buszyklus von 64 ns besitzt der Bus eine Bandbreite von 125 MBytes/s.
  • Die Informationen auf dem CPU-Bus 20 werden über einen Eingangsbus 335 an einen Empfangszwischenspeicher 336 angelegt. Diese Informationen werden bei jedem Zyklus des Busses 20 zwischengespeichert. Der Bus 335 führt die 64- Bit-Daten/Adresse, die 4-Bit-Anweisung, die 3-Bit-ID und die 3-Bit-Parität, wie oben beschrieben ist. Der Zwischenspeicher 336 erzeugt eine Datenausgabe auf dem Bus 337 und eine Steuerausgabe auf dem Bus 338, die an eine Zurückschreibewarteschlange 339 und eine Nicht- Zurückschreibe-Warteschlange 340 angelegt werden, so daß die Zurückschreibvorgänge selbst dann fortgesetzt werden können, wenn wie oben beschrieben Nicht-Zurückschreibe- Transaktionen unterdrückt werden. Aus der Zurückschreibewarteschlange 339 werden die Ausgänge 341 nur an eine Schnittstelle 342 zum Systembus 11 angelegt, während die Ausgänge 343 der Nicht-Zurückschreibe- Warteschlange 340 entweder an die Schnittstelle 342 zum Systembus 11 oder an die Schnittstelle 344 zum ROM-Bus 29 angelegt werden. Zurückschreibevorgänge werden immer zum Speicher 12 weitergeleitet, während Nicht-Zurückschreibevorgänge zum Speicher 12 oder zum ROM-Bus 29 geleitet werden können. Die vom Systembus 11 an der Sende/Empfangs-Schnittstelle 342 empfangenen Daten werden über den Bus 345 zu einer Antwortwarteschlange 346 gesendet, wie später genauer beschrieben wird, wobei der Ausgang dieser Antwortwarteschlange über einen Bus 347 an eine Sendeschnittstelle 348 angelegt wird, von wo er über einen Ausgang 349 der Schnittstelle 348 auf den Bus 20 gelegt wird. Die auf dem Bus 347 ankommenden Daten, die vom Systembus 11 zur CPU 10 gelangen, sind entweder Rückgabedaten, die aus einem Speicherlesevorgang resultieren, oder eine Ungültigkeit, die aus einem Schreibvorgang in den Speicher 12 über einen weiteren Prozessor 28 auf dem Systembus 11 resultieren. Ankommende Daten vom ROM-Bus 29 werden von der Sende/Empfangs- Schnittstelle 344 über den Bus 351 direkt ohne Warteschlange zur Schnittstelle 348 geleitet, da die Datenrate auf diesem Kanal niedrig ist. Der Arbitrierer 125 im Schnittstellenchip 21 erzeugt die Zuteilungssignale für die CPU 10, wie oben beschrieben, und empfängt ferner Anfragesignale auf der Leitung 352 von der Sendeschnittstelle 348, wenn die Schnittstelle 348 die Kontrolle über den Bus 20 anfordert, um Daten zu senden, und erzeugt Zuteilungssignale auf der Leitung 353, um den Bus 20 der Schnittstelle 348 zuzuteilen.
  • Wie in Fig. 24 gezeigt, verwendet die Antwortwarteschlange 346 getrennte Warteschlangen 355 und 356 für die Ungültigkeiten bzw. für die Rückgabedaten. Die Ungültigkeitswarteschlange 355 kann z. B. 12 Einträge oder Schlitze 357 umfassen, wie in Fig. 25 gezeigt, während die Rückgabedatenwarteschlange vier Schlitze 358 besitzt. In einem Multiprozessorsystem gibt es viel mehr Ungültigkeiten als Lesedatenrückgaben. Jeder Eintrag oder Schlitz 357 in der Ungültigkeitswarteschlange enthält eine Ungültigkeitsadresse 359, einen Typindikator, ein Gültigkeitsbit 360 und einen Nächster-Zeiger 361, der auf die Schlitznummer des nächsten Eintrags in der chronologischen Empfangsreihenfolge zeigt. Ein Endezeiger 362 für die Warteschlange 355 wird gehalten, wobei ein separater Endezeiger 363 für die Warteschlange 356 gehalten wird; wenn ein neuer Eintrag auf den Bus 345 vom Systembus 11 ankommt, wird er in eine der Warteschlangen 355 oder 356 geladen, in Abhängigkeit von seinem Typ (Ungültigkeit oder Lesedaten), und in den Schlitz 357 oder 358 dieser Warteschlange geladen, was durch den Endezeiger 362 oder 363 angegeben wird. Bei jeder solchen Ladeoperation wird der Endezeiger 362 oder 363 inkrementiert, wobei er zyklisch zum Anfang übergeht, wenn er das Ende erreicht. Die Einträge werden aus den Warteschlangen 355 und 356 entnommen und über den Bus 347 zum Sender 348 gesendet, wobei der Schlitz, aus dem ein Eintrag entnommen wird, durch einen Anfangszeiger 364 angegeben wird. 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 der gleichen Reihenfolge, wie sie vom Systembus 11 empfangen worden sind, an die CPU 10 weitergeleitet werden. Der Anfangszeiger 364 ist ein Eingang für die Auswahlvorrichtungen 365, 366 und 367, die auswählen, welcher der Einträge auf den Bus 347 ausgegeben wird. Eine Steuervorrichtung 368 enthält den Anfangszeiger 364 und die Endezeiger 362 und 363 und sendet eine Anfrage auf der Leitung 369 zum Sender 348 immer dann, wenn ein Eintrag zum Senden bereit ist, und empfängt eine Antwort auf der Leitung 370, die anzeigt, daß der Eintrag angenommen und auf den Bus 20 gesendet worden ist. Zu diesem Zeitpunkt wird der gerade gesendete Schlitz durch die Leitung 371 ungültig, wobei der Anfangszeiger 364 auf den nächsten Zeigerwert 361 im gerade gesendeten Schlitz bewegt wird. Der nächste Zeigerwert kann der nächste Schlitz in der gleichen Warteschlange 355 oder 356 sein oder kann auf einen Schlitz in der anderen Warteschlange zeigen. Nach dem Laden eines Eintrags in die Warteschlangen 355 oder 356 wird der Wert im nächsten Zeiger 361 nicht eingesetzt, bis der folgende Eintrag geladen worden ist, da bis dahin nicht bekannt ist, ob dies ein Ungültigkeits- oder ein Rückgabedateneintrag sein wird.
  • Der Schnittstellenchip 21 bietet die Speicherschnittstelle für die CPU 10 durch Behandeln der CPU-Speicher- und E/A-Anfragen auf dem Systembus 11. Bei einem Speicherlesefehlgriff oder Schreibfehlgriff im Hintergrund-Cache 15 sendet die Schnittstelle 21 einen Lesevorgang auf dem Systembus 11, gefolgt von einer Cache-Auffülloperation, um den Block aus dem Hauptspeicher 12 zu holen. Der Schnittstellenchip 21 überwacht den Speicherlese- und Schreibverkehr, der von den anderen Knoten auf dem Systembus 11, wie z. B. den CPUs 28 erzeugt wird, um sicherzustellen, daß die Cache- Speicher 14 und 15 der CPU 10 konsistent zum Hauptspeicher 12 bleiben. Wenn ein Lese- oder Schreibvorgang von einem weiteren Knoten im Cache 15 einen Treffer bewirkt, wird wie oben beschrieben vom CPU-10-Chip ein Zurückschreiben oder eine Ungültigkeit ausgeführt. Der Schnittstellenchip 21 behandelt ferner Unterbrechnungstransaktionen zur und von der CPU.
  • Der Systembus 11 enthält ein Unterdrückungssignal, wie oben mit Bezug auf den CPU-Bus 20 beschrieben (nämlich die Leitung 20j), wobei dieses verwendet wird, um das Einleiten neuer Systembus-11-Transaktionen zu steuern. Das Setzen des Untersuchungssignals am Systembus 11 blockiert alle Buskommando-Anfragen, wodurch das Einleiten neuer Systembus-11-Transaktionen unterdrückt wird. Dieses Bus-11-Unterdrückungssignal kann von einem beliebigen Knoten am Bus 11 zu Beginn jedes Bus-11-Zyklus gesetzt werden, um die Zuweisung für den Zyklus nach dem nächsten System Bus-11-Zyklus zu steuern. Der Schnittstellenchip 21 verwendet dieses Unterdrückungssignal, um Transaktionen (mit Ausnahme eines Zurückschreibens und einer Leseantwort) auf den Systembus 11 zu unterdrücken, wenn seine Ungültigkeitswarteschlange 355 nahezu voll ist, um einen Überlauf der Ungültigkeitswarteschlange 355 zu verhindern.
  • Der Schnittstellenchip 21 nimmt an allen Bus-20- Transaktionen teil, antwortet auf Lesevorgänge und Schreibvorgänge, die im Hintergrund-Cache 15 einen Fehlgriff verursachen, was zu einer Systembus-11- Besitzleseoperation und einer Cache-Auffülloperation führt. Der Schnittstellenchip 21 bewirkt eine Zwischenspeicherung des Adreß/Daten-Busses 20a, des Anweisungsbusses 20b, des ID-Busses 20c sowie der Parität 20d im Zwischenspeicher 336 während jedes Bus-20-Zyklus, und prüft anschließend die Parität und decodiert die Anweisung und die Adresse. Wenn die Parität in Ordnung ist und die Adresse im Schnittstellenchip-21-Raum liegt, wird anschließend die Bestätigungsleitung 20e gesetzt und die Information in die Halteregister in den Warteschlangen 339 oder 340 bewegt, so daß die Zwischenspeicher 336 frei sind, um den nächsten Zyklus abzutasten. Die Informationen in diesen Halteregistern werden für die Dauer der Transaktion gesichert.
  • Der Arbitrierer 325 für den Bus 20 ist im Schnittstellenchip 21 enthalten. Die zwei Knoten, die CPU und der Schnittstellenchip 21, wirken beide als Kommandant und Antworter am Bus 20. Sowohl die CPU 10 als auch der Schnittstellenchip 21 besitzen Lesedatenwarteschlangen, die so beschaffen sind, daß sie alle ausstehenden Auffülltransaktionen handhaben. Die CPU-Unterdrückungsleitung 20j unterbindet eine Zuteilung für einen Bus-20-Zyklus, während dem das Nur-WB-Signal vom Schnittstellenchip 20 auf der Leitung 20k gesetzt wird.
  • Wenn die Eingangswarteschlange 61 in der Cache- Steuereinheit 26 aufgefüllt wird, setzt sie die CPU- Unterdrückungsleitung 20j, wobei der Schnittstellenchip 21 das Senden von Ungültigkeiten auf den Bus 20 stoppt (der Systembus 11 wird nur unterdrückt, wenn die Eingangswarteschlange 355 des Schnittstellenchips 21 aufgefüllt wird) . Der Schnittstellenchip 21 setzt das Senden von Auffülldaten fort, bis eine Ungültigkeit entdeckt wird.
  • Wenn die Zurückschreibewarteschlange 339 des Schnittstellenchips 21 aufgefüllt wird, stoppt sie das Ausgeben der Zuteilung an die CPU 10 auf der Leitung 20i. Wenn die Nicht-Zurückschreibe-Warteschlange 340 des Schnittstellenchips 21 aufgefüllt wird, setzt sie das Nur-WB-Signal für die CPU 10 auf der Leitung 20k.
  • Die folgenden, von der CPU 10 erzeugten Anweisungen werden alle als Speicherlesevorgang vom Schnittstellenchip 21 behandelt (der einzige Unterschied, der vom Schnittstellenchip 21 gesehen wird, ist, wie jede spezifische Anweisung auf den Systembus 11 abgebildet wird: (1) Speicherraum-Befehlsstromlese-Hexawort; (2) Speicherraum-Datenstromlese-Hexawort (Besitz); und (3) Speicherraum-Datenstromlese-Hexawort (keine Verriegelung oder Besitz). Wenn irgendeine dieser Speicherleseanweisungen am Bus 20 auftritt und wenn die Anweisung/Adreß-Parität in Ordnung ist, plaziert der Schnittstellenchip 21 die Informationen in einem Halteregister.
  • Wenn bei Lesefehlgriffen und Auffülloperationen ein Lesevorgang in der CPU 10 einen Fehlgriff hervorruft, gelangt die Anfrage über den Bus 20 zum Schnittstellenchip 21. Wenn die Speicherschnittstelle die Daten zurückgibt, schiebt die Cache-Steuereinheit 26 der CPU 10 den Auffüllvorgang in die Eingangswarteschlange 61. Da die Blockgröße 32 Bytes beträgt und der Bus 20 acht Bytes breit ist, resultiert aus der Leseanfrage eine Hexawort-Lesetransaktion auf dem Bus 20. Wenn die Auffülldaten zurückgegeben werden, verfolgt die Cache- Steuereinheit 26, wieviele Vierwörter empfangen worden sind unter Verwendung eines 2-Bit-Zählers im Auffüll-CAM 302. Wenn zwei Lesefehlgriffe ausstehen, können Auffüllvorgänge von den zwei Fehlgriffen verschachtelt zurückgegeben werden, so daß jeder Eintrag im Auffüll-CAM 302 einen geeigneten Zähler besitzt. Wenn das letzte Vierwort eines Lesefehlgriffs ankommt, wird der neue Merker geschrieben und das Gültigkeitsbit im Cache 15 gesetzt. Das Besitzbit wird gesetzt, wenn die Auffüllung einem Besitz-Lesevorgang galt.
  • Wenn bei Schreibfehlgriffoperationen das Merkerspeicher- Nachschlagen der CPU 10 im Cache 15 für einen Schreibvorgang durchgeführt wird und das Besitzbit nicht gesetzt ist, wird ein Besitz-Lesevorgang an den Schnittstellenchip 21 ausgegeben. Wenn das erste Vierwort über die Eingangswarteschlange 61 zurückkehrt, werden die Schreibdaten mit den Auffülldaten gemischt, ECC berechnet und die neuen Daten in die Cache-RAMs 15 geschrieben. Wenn das vierte Vierwort zurückkehrt, werden das Gültigkeitsbit und das Besitzbit im Merkerspeicher für den Cache 15 gesetzt, wobei der Schreibvorgang aus der Schreibwarteschlange entfernt wird.
  • Bei CPU-Speicherschreiboperationen werden die folgenden vier von der CPU 10 erzeugten Anweisungen vom Schnittstellenchip 21 als Speicherschreibvorgänge behandelt. Der einzige Unterschied, der vom Schnittstellenchip 21 gesehen wird, ist, wie jede spezifische Anweisung auf den Systembus 11 abgebildet wird: (1) maskiertes Speicherraum-Schreib-Vierwort (keine Freigabe oder Entriegelung); (2) Speicherraum-Schreib Freigabevierwort; (3) Speicherraum-Schreib-Freigabe Hexawort; und (4) Speicherraum-Schlechte-Schreibdaten- Hexawort.
  • Für Zuweisungsrücknahmen während der CPU-Lesevorgänge und Schreibvorgänge, wenn irgendein Merkernachschlagen der CPU 10 für einen Lesevorgang oder einen Schreibvorgang zu einem Fehlgriff führt, wird die Zuweisung des Cache- Blocks zurückgenommen, um zu ermöglichen, daß die Auffülldaten dessen Stelle einnehmen. Wenn der Block nicht gültig ist, wird zur Zuweisungszurücknahme keine Maßnahme ergriffen. Wenn der Block gültig ist, jedoch nicht besessen wird, wird der Block ungültig. Wenn der Block gültig ist und besessen wird, wird der Block auf dem Bus 20 zum Schnittstellenchip 21 gesendet und in den Speicher 12 zurückgeschrieben und im Merkerspeicher ungültig. Die Hexawort-Freigabe-Schreibanweisung wird verwendet, um die Daten zurückzuschreiben. Wenn ein Zurückschreiben erforderlich ist, wird es ausgeführt, unmittelbar nachdem der Lese- oder Schreibfehlgriff aufgetreten ist. Der Fehlgriff und die Zuweisungsrücknahme sind zusammenhängende Ereignisse und werden für keine anderen Transaktionen unterbrochen.
  • Für Leseverriegelungs- und Schreibfreigabeoperationen empfängt die CPU-10-Cache-Steuereinheit 26 Leseverriegelungs/Schreibfreigabe-Paare von der Speichermanagementeinheit 25; sie gibt diese Anweisungen niemals auf den Bus 20 aus, sondern verwendet statt dessen Besitz-Lesefreigabe-Schreibvorgänge und ist abhängig von der Verwendung des Besitzbits im Speicher 12, um Verriegelungen zu bewirken. Eine Leseverriegelung, die keinen Treffer eines im Hintergrund-Cache 15 besessenen Blocks erzeugt, führt zu einem O-Lesevorgang auf dem Bus 20, unabhängig davon, ob der Cache 15 eingeschaltet oder ausgeschaltet ist. Wenn der Cache eingeschaltet ist, wird die Schreibfreigabe in den Hintergrund-Cache 15 geschrieben und nur dann in den Speicher 12 geschrieben, wenn dies durch eine Kohärenz- Transaktion angefordert wird. Wenn der Cache 15 ausgeschaltet ist, wird die Schreibfreigabe zu einem Vierwort-Freigabeschreibvorgang auf dem Bus 20.
  • Hinsichtlich der Ungültigkeiten überwacht der Schnittstellenchip 21 den gesamten Lese- und Schreibverkehr der anderen Knoten 28 zum Speicher 12, um die Cache-Kohärenz zwischen den Cache-Speichern 14 und 15 und dem Hauptspeicher 12 aufrechtzuerhalten und den anderen Systembus-11-Knoten zu ermöglichen, auf Speicherstellen zuzugreifen, die von der CPU 10 beansprucht werden. Der Schnittstellenchip 21 leitet die Adressen dieser Referenzen über den Bus 20 zur CPU-10- Cache-Steuereinheit 26 weiter. Die Cache-Steuereinheit 26 schlägt die Adresse im Merkerspeicher des Cache 15 nach und ermittelt, ab der zugehörige Cache-Unterblock ungültig gemacht oder zurückgeschrieben werden muß. Es gibt keinen Filtermechanismus für Ungültigkeiten, was bedeutet, daß der Bus 20 für jede mögliche Ungültigkeit verwendet werden muß.
  • Die CPU 10 bestätigt die Cache-Kohärenzzyklen nicht und erwartet statt dessen, daß der Schnittstellenchip 21 für seine eigenen Ungültigkeitszyklen eine Bestätigung setzt. Ein Cache-Kohärenzzyklus ist ein Lesevorgang oder ein Schreibvorgang, der nicht von der CPU gesteuert wird. Wenn der Schnittstellenchip 21 eine Speicherreferenz von einem weiteren Knoten 28 am Systembus 11 detektiert, plaziert er die Adresse in der Antworterwarteschlange 346. Diese Adresse wird auf den Bus 20 gelegt und fordert implizit die Cache-Steuereinheit 26 auf, einen Cache- Nachschlagvorgang auszuführen.
  • Die Ungültigkeitswarteschlange 355 ist in diesem Beispiel 12 Einträge tief. Der Schnittstellenchip 21 verwendet die Systembus-11-Unterdrückungsleitung, um Bus-11- Transaktionen zu unterdrücken und die Antworter- Warteschlange 355 vor einem Überlauf zu bewahren. Wenn (z. B.) zehn oder mehr Einträge in der Antworterwarteschlange 355 gültig sind, setzt der Schnittstellenchip 21 die Unterdrückungsleitung für den Systembus 11. Bis zu zwei weiteren Bus-11- Schreibvorgängen oder drei Bus-11-Lesevorgängen können auftreten, sobald der Schnittstellenchip 21 das Unterdrückungssignal gesetzt hat. Die Unterdrückung der Systembus-11-Anweisungen ermöglicht den Schnittstellenchip 21 und der CPU-10-Cache-Steuereinheit 26 mit der Ungültigkeitsverarbeitung aufzuholen und Warteschlangeneinträge für zukünftige Ungültigkeitsadressen zu öffnen. Wenn die Anzahl der gültigen Einträge unter neun (z. B.) fällt, setzt der Schnittstellenchip 21 die Unterdrückungsleitung für den Systembus 11 zurück.
  • Es besteht ein mögliches Problem, wenn eine Ungültigkeitsadresse empfangen wird, die im gleichen Cache-Unterblock liegt wie ein ausstehender, im Cache speicherbarer Speicherlesevorgang. Der Merkernachschlag der Cache-Steuereinheit 26 erzeugt einen Cache-Fehlgriff, da dieser Unterblock noch nicht gültig geworden ist. Da die Systembus-11-Anfrage, die diese Ungültigkeitsanfrage erzeugt hat, aufgetreten sein kann, nachdem der Anweisungszyklus auf den Systembus 11 gelangt ist, muß diese Ungültigkeit verarbeitet werden. Die Cache- Steuereinheit 26 der CPU 10 hält einen internen Zustand, der erzwingt, daß dieser Cache-Unterblock ungültig oder in den Speicher zurückgeschrieben wird, sobald die Cache- Auffüllung abgeschlossen ist. Die Cache-Steuereinheit 26 verarbeitet weitere Ungültigkeiten normal, während sie darauf wartet, daß die Cache-Auffüllung abgeschlossen wird.
  • Frühere VAX-Systeme verwendeten einen nicht hängenden Bus und wiesen separate Ungültigkeits- und Rückgabedatenwarteschlangen für die Durchführung der Funktionen der Warteschlangen 355 und 356 auf. Diese früheren Warteschlangen besaßen keine exakten "Reihenfolge der Übertragung" -Qualitäten, sondern "markierten" die Ungültigkeiten, wenn sie in die entsprechende Warteschlange eingereiht wurden, so daß sie vor irgendwelchen nachfolgenden Lesevorgängen verarbeitet wurden.
  • Die CPU 10 verwendet jedoch hängende Busse 11 und 20, wobei die Ungültigkeiten denselben Pfad entlanglaufen wie die Rückgabedaten. Es ist notwendig, eine strikte Reihenfolge der Übertragung aufrechtzuerhalten, so daß Ungültigkeiten und Rückgabedatenwörter in genau dergleichen Reihenfolge zur Verarbeitung zur CPU 10 gesendet werden müssen, in der sie vom Systembus 11 in die Warteschlange 346 gelangt sind. Dieses Ziel kann erreicht werden, indem einfach eine vereinte Warteschlange vorgesehen wird, die groß genug ist, um entweder Ungültigkeiten oder Rückgabedatenwörter zu behandeln, wobei dies jedoch die Chipgröße für den Schnittstellenchip 21 unzulässig vergrößern würde. Genauer bedeutet in der Praxis eine vereinigte Warteschlange, daß jeder Schlitz groß genug sein muß, um die Rückgabedaten aufzunehmen, da das Wort das größere der beiden Elemente ist. Tatsächlich sind das Rückgabedatenwort und seine zugeordneten Steuerbits mehr als zweimal so groß wie die Ungültigkeitsadresse und deren Steuerbits. Der Ungültigkeitsabschnitt der Warteschlange muß ebenfalls ungefähr zweimal so groß sein wie der Rückgabedatenabschnitt. Somit werden ungefähr zwei Drittel der Warteschlange nur halb genutzt, oder ein Drittel der Warteschlange wird verschwendet.
  • Außerdem müssen die Systembus-11-Protokollmandate, die Daten zurückgeben, Raum aufweisen, wenn sie schließlich vom Speicher 12 geliefert werden. Wenn die Warteschlange vereinigt ist, können Ungültigkeiten Raum einnehmen, der für Rückgabedaten benötigt wird. Unter der Annahme, daß ein Hexawort an Rückgabedaten zu irgendeinem bestimmten Zeitpunkt erwartet wird, da die Hauptquelle von Rückgabedaten Hexawort-Besitz-Lesevorgänge sind), müssen vier Warteschlangenschlitze garantiert frei sein.
  • Das Busprotokoll verwendet den Busunterdrückungsmechanismus wie oben beschrieben, um neue Ungültigkeiten zu unterbinden, während das Liefern von Rückgabedaten erlaubt wird. Aufgrund der inhärenten Verzögerung bei der Entscheidung, wann das Unterdrückungssignal gesetzt werden muß, und einer weiteren Verzögerung bei dessen Erkennung in der Arbitrierungseinheit 325 müssen drei oder vier zusätzliche Ungültigkeitsschlitze vorhanden sein, um während dieser Unterdrückungstotzeit Ungültigkeiten aufzunehmen. Wenn vier Schlitze für echte Ungültigkeiten zugelassen werden sollen, muß der Ungültigkeitsabschnitt der Warteschlange sieben oder acht Schlitze lang sein. Weniger Schlitze würden eine häufige Systembus-11- Unterdrückung bedeuten. Dies bedeutet, daß 12 Schlitze für die kombinierte Daten/Ungültigkeit-Warteschlange benötigt werden, wobei jeder Schlitz groß genug sein muß, um das Datenwort und dessen zugehörige Steuerbits aufzunehmen. Es können weniger Schlitze und eine frühere Unterdrückung oder mehr Schlitze und eine längere Warteschlange vorhanden sein. In jedem Fall wächst die Warteschlange doppelt so schnell als es für das Ziel erforderlich wäre. Wenn mehr als ein ausstehender Lesevorgang zugelassen werden soll, muß die Warteschlange 15 oder 16 Schlitze umfassen, da ein Zwangslösungsansatz erforderlich ist.
  • Gemäß diesem Merkmal des erfinderischen Konzepts sind die Ungültigkeits- und Lesedatenwarteschlangen in separate Elemente 355 und 356 aufgeteilt, die jeweils nur so groß sind (in der Tiefe und der Länge) wie für ihre Aufgabe erforderlich ist. Das Problem besteht selbstverständlich darin, wie die strenge Reihenfolge der Übertragung garantiert wird. Dies muß unter Verwendung einer hardwareverknüpften Liste zwischen den zwei Warteschlangen bewerkstelligt werden, die in diesem Beispiel mittels der Nächster-Zeiger-Felder 361 und des Anfangszeigers 364 implementiert wird. Jeder Schlitzeintrag besitzt einen "Nächster"-Zeiger 361, der die Entnahmelogik anweist, wo sie nach dem nächsten Dateneintrag zu suchen hat (entweder Ungültigkeit oder Lesedaten).
  • Die gleiche Funktion kann unter Verwendung eines Universalzeigers für jeden Schlitz bewerkstelligt werden oder durch einfaches Vorsehen eines Merkers, der angibt "gehe nun zur anderen Warteschlange, bis zurückgeschaltet wird". Da die Ungültigkeitswarteschlange 335 und die Lesedatenwarteschlange 356 in sich jeweils vollständig zyklisch sind, wird die strikte Reihenfolge innerhalb der gesamten Antworterwarteschlange 346 sichergestellt.
  • Der Lösungsansatz der Fig. 17 und 18 weist mehrere Vorteile gegenüber der Verwendung einer einzelnen Warteschlange auf, ohne die Komplexität des Entwurfs zu steigern. Die Vorteile betreffen alle das zur Verfügung stellen der erforderlichen Leistung, während die chipgröße reduziert wird. Die spezifischen Hauptvorteile sind: (1) die gleiche Leistung, die mit einer großen, vereinigten Warteschlange erreicht wird, kann unter Verwendung des Verfahrens der geteilten Warteschlange mit viel weniger Raum verwirklicht werden; (2) jede Warteschlange kann für einen speziellen Typ von Daten markiert sein, und es kann keine Verwechslung des einen Datentyps mit den anderen vorkommen. Somit können die zwei Typen von Warteschlangen (Ungültigkeit und Rückgabedaten) auf ihre optimale Größe getrimmt werden. Zum Beispiel kann die Ungültigkeitswarteschlange sieben (kleine) Schlitze umfassen, während die Rückgabedatenwarteschlange fünf oder sechs (große) Schlitze enthalten kann. Dies schafft eine gleichmäßige Leseanweisungsüberlappung, während zugelassen wird, daß Ungültigkeiten verarbeitet werden, ohne den Systembus 11 unnötig zu unterdrücken; (3) die Lesedatenwarteschlange 356 kann vergrößert werden, um zwei ausstehende Lesevorgänge aufzunehmen, ohne sich um die Größe der Ungültigkeitswarteschlange zu kümmern, die die gleiche Größe auf der Grundlage ihrer eigenen Bedürfnisse behalten kann. Tabelle A - CPU-Bus-Anweisungscodierungen und -definitionen Tabelle B - Hintergrund-Cache-Verhalten während des ETM
  • * mit der Ausnahme, daß die Cache-Kohärenz-Transaktion aufgrund eines O-Lesevorgangs oder Schreibvorgangs immer zu einer Ungültigkeit für den P-Cache führt, um die P- Cache-Kohärenz aufrechtzuerhalten, unabhängig von einem B-Cache-Treffer, da der P-Cache keine Teilmenge mehr ist. Tabelle C - Hintergrund-cache-status ändert sich während des ETM

Claims (15)

1. Verfahren zum Betreiben eines Computersystems, wobei das Computersystem eine CPU (10), einen Cache-Speicher (14), der der CPU zugeordnet ist, einen Systembus (11) und einen Speicher (12) enthält, wobei der Speicher durch den Systembus an die CPU angeschlossen ist, wobei das Verfahren gekennzeichnet ist durch die Schritte:
Empfangen von Rückkehrdatenelementen vom Speicher und von Entwertungen für Daten im Cache-Speicher über den Systembus;
getrenntes Puffern der Entwertungen und der Rückkehrdatenelemente in Einträgen in einen ersten bzw. in einem zweiten Puffer (355, 356), wobei der erste und der zweite Puffer unterschiedliche Größen besitzen, wobei die Einträge im ersten und im zweiten Puffer vom Systembus als Antwort auf eine Stellung separater Endezeiger (362, 363) für den ersten bzw. zweiten Puffer geladen werden;
in jedem Eintrag sowohl im ersten Puffer als auch im zweiten Puffer Aufrechterhalten einer Identifizierung einer Stelle sowohl im ersten als auch im zweiten Puffer eines nächsten Eintrags in kombinierter Reihenfolge des Empfangs der Datenelemente und der Entwertungen;
Aufrechterhalten eines Kopfzeigers (364) auf den kombinierten nächsten Eintrag des ersten Puffers und des zweiten Puffers, der an die CPU geschickt werden soll, wobei der Zeiger als Antwort auf die Identifizierung des nächsten Eintrags und auf die Bezugnahme auf ihn unabhängig davon gesetzt wird, ob er sich im ersten Puffer oder im zweiten Puffer befindet.
2. Verfahren nach Anspruch 1, wobei das System ein Multiprozessorsystem mit zusätzlichen CPUs (28) ist, mit dem Schritt des Zugreifens auf den Speicher durch die zusätzlichen CPUs, um Entwertungen zu erzeugen.
3. Verfahren nach Anspruch 1, mit den Schritt des Speicherns der Entwertungseinträge in ersten Multibit-Registern im ersten Puffer und den Schritt des Speicherns der Rückkehrdateneinträge in zweiten Multibit-Registern im zweiten Puffer, wobei die zweiten Multibit-Register viel größer als die ersten Multibit-Register sind.
4. Verfahren nach Anspruch 1, ferner mit den Schritten:
Erzeugen von Leseanforderungen durch eine CPU an den Systenspeicher, bevor Rückkehrdatenelemente vom Speicher und Entwertungen für Daten im Cache-Speicher empfangen werden; und
Speichern einer Untermenge des Systenspeichers in einen von der CPU betriebenen Cache-Speicher.
5. Verfahren nach Anspruch 1, ferner mit dem Schritt des Sendens der Einträge vom ersten oder vom zweiten Puffer zur CPU in einer durch den Kopfzeiger definierten Reihenfolge.
6. Verfahren nach Anspruch 1, wobei der zweite Puffer größer als der erste Puffer ist.
7. Verfahren nach Anspruch 1, wobei eine Busschnittstellenvorrichtung die CPU mit dem Systembus verbindet.
8. Schnittstellenvorrichtung zum Verbinden eines Prozessors (10) mit einem Bus (11), wobei die Schnittstellenvorrichtung vom Bus erste Datenelemente eines ersten Datentyps empfängt und vom Bus zweite Datenelemente eines zweiten Datentyps empfängt, dadurch gekennzeichnet,
ein erster Puffer (355) die ersten Datenelemente des ersten Datentyps vom Bus empfängt, wobei jedes erste Datenelement des ersten Datentyps in den ersten Puffer als Eintrag geladen wird;
ein zweiter Puffer (356) die zweiten Datenelemente des zweiten Datentyps vom Bus empfängt, wobei jedes zweite Datenelement des zweiten Datentyps in den zweiten Puffer als Eintrag geladen wird;
jeder der Einträge im ersten Puffer und im zweiten Puffer eine Stelle eines kombinierten chronologisch nächsten Eintrags entweder im ersten Puffer oder im zweiten Puffer speichert;
getrennte Endzeiger (362, 363) im ersten und im zweiten Puffer auf die Stelle der Einträge in jedem Puffer ansprechen; und
ein Kopfzeiger (364) auf die gespeicherte Stelle anspricht, um einen kombinierten nächsten Eintrag der Einträge des ersten oder des zweiten Puffers zu identifizieren, der an den Prozessor unabhängig davon weitergeleitet werden soll, ob sich der nächste Eintrag im ersten Puffer oder im zweiten Puffer befindet, so daß die Schnittstellenvorrichtung die ersten und die zweiten Datenelemente in der Reihenfolge des Empfangs an den Prozessor weiterleitet
9. Vorrichtung nach Anspruch 8, wobei der Prozessor ein Multiprozessorsystem ist, das zusätzliche CPUs enthält, die auf die Puffer zugreifen.
10. Vorrichtung nach Anspruch 8, wobei die zweiten Datenelemente in zweiten Multibit-Registern im zweiten Puffer enthalten sind und die ersten Datenelemente in ersten Multibit-Registern im ersten Puffer enthalten sind und wobei die zweiten Multibit-Register viel größer als die ersten Multibit-Register sind.
11. Vorrichtung nach Anspruch 8, wobei der zweite Puffer größer als der erste Puffer ist.
12. Vorrichtung nach Anspruch 8, ferner mit Einrichtungen zum Laden der Einträge vom Bus in den ersten und in den zweiten Puffer als Antwort auf eine Stellung eines der separaten Endezeiger für die ersten bzw. zweiten Puffer.
13. Vorrichtung nach Anspruch 8, mit Einrichtungen zum Ändern des Kopfzeigers, damit er als Antwort auf die gespeicherte Stelle entweder auf den ersten oder auf den zweiten Puffer zeigt.
14. Vorrichtung nach Anspruch 8, wobei die ersten Datenelemente des ersten Datentyps Cache-Speicher-Entwertungen sind.
15. Vorrichtung nach Anspruch 9, wobei die Daten des zweiten Typs Leserückkehrdaten sind.
DE69127726T 1990-06-29 1991-06-27 Kombinierte Warteschlange für Entwertungen und Rücklaufdaten in einem Multiprozessorsystem Expired - Lifetime DE69127726T2 (de)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US54785090A 1990-06-29 1990-06-29

Publications (2)

Publication Number Publication Date
DE69127726D1 DE69127726D1 (de) 1997-10-30
DE69127726T2 true DE69127726T2 (de) 1998-04-02

Family

ID=24186407

Family Applications (1)

Application Number Title Priority Date Filing Date
DE69127726T Expired - Lifetime DE69127726T2 (de) 1990-06-29 1991-06-27 Kombinierte Warteschlange für Entwertungen und Rücklaufdaten in einem Multiprozessorsystem

Country Status (5)

Country Link
US (1) US5333296A (de)
EP (1) EP0465320B1 (de)
JP (1) JPH06103167A (de)
CA (1) CA2045756C (de)
DE (1) DE69127726T2 (de)

Families Citing this family (82)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0619759B2 (ja) * 1990-05-21 1994-03-16 富士ゼロックス株式会社 マルチプロセッサシステムにおける相互通信方法
JP3095229B2 (ja) * 1990-08-31 2000-10-03 株式会社日立製作所 マイクロプロセッサ及び複合論理回路
US5627987A (en) * 1991-11-29 1997-05-06 Kabushiki Kaisha Toshiba Memory management and protection system for virtual memory in computer system
US5813030A (en) * 1991-12-31 1998-09-22 Compaq Computer Corp. Cache memory system with simultaneous access of cache and main memories
JPH0667980A (ja) * 1992-05-12 1994-03-11 Unisys Corp 4ブロックキャッシュメモリへのアクセスを最適化するためのキャッシュ論理システムおよびメインフレームコンピュータの高速キャッシュメモリへのアクセス時のダブルミスを防ぐ方法
US5634041A (en) * 1992-08-12 1997-05-27 Massachusetts Institute Of Technology Rationally clocked communication interface
US5450547A (en) * 1992-10-01 1995-09-12 Xerox Corporation Bus interface using pending channel information stored in single circular queue for controlling channels of data transfer within multiple FIFO devices
US5437017A (en) * 1992-10-09 1995-07-25 International Business Machines Corporation Method and system for maintaining translation lookaside buffer coherency in a multiprocessor data processing system
US5448708A (en) * 1992-10-30 1995-09-05 Ward; James P. System for asynchronously delivering enqueue and dequeue information in a pipe interface having distributed, shared memory
EP0619547A1 (de) * 1993-04-05 1994-10-12 Motorola, Inc. Verfahren zur Datenabfrage und Einrichtung dafür
US5598551A (en) * 1993-07-16 1997-01-28 Unisys Corporation Cache invalidation sequence system utilizing odd and even invalidation queues with shorter invalidation cycles
US5553270A (en) * 1993-09-01 1996-09-03 Digital Equipment Corporation Apparatus for providing improved memory access in page mode access systems with pipelined cache access and main memory address replay
US6101597A (en) * 1993-12-30 2000-08-08 Intel Corporation Method and apparatus for maximum throughput scheduling of dependent operations in a pipelined processor
US6393550B1 (en) * 1993-12-30 2002-05-21 Intel Corporation Method and apparatus for pipeline streamlining where resources are immediate or certainly retired
US5553256A (en) * 1994-02-28 1996-09-03 Intel Corporation Apparatus for pipeline streamlining where resources are immediate or certainly retired
US5546599A (en) * 1994-03-31 1996-08-13 International Business Machines Corporation Processing system and method of operation for processing dispatched instructions with detected exceptions
US5535345A (en) * 1994-05-12 1996-07-09 Intel Corporation Method and apparatus for sequencing misaligned external bus transactions in which the order of completion of corresponding split transaction requests is guaranteed
US5621896A (en) * 1994-06-01 1997-04-15 Motorola, Inc. Data processor with unified store queue permitting hit under miss memory accesses
US5581713A (en) * 1994-10-25 1996-12-03 Pyramid Technology Corporation Multiprocessor computer backplane bus in which bus transactions are classified into different classes for arbitration
US5640526A (en) * 1994-12-21 1997-06-17 International Business Machines Corporation Superscaler instruction pipeline having boundary indentification logic for variable length instructions
US5737756A (en) * 1995-04-28 1998-04-07 Unisys Corporation Dual bus computer network using dual busses with dual spy modules enabling clearing of invalidation queue for processor with store through cache while providing retry cycles for incomplete accesses to invalidation queue
US5943494A (en) * 1995-06-07 1999-08-24 International Business Machines Corporation Method and system for processing multiple branch instructions that write to count and link registers
US5983025A (en) * 1995-06-07 1999-11-09 International Business Machines Corporation Computer system buffers for providing concurrency and avoid deadlock conditions between CPU accesses, local bus accesses, and memory accesses
US5778437A (en) * 1995-09-25 1998-07-07 International Business Machines Corporation Invalidation bus optimization for multiprocessors using directory-based cache coherence protocols in which an address of a line to be modified is placed on the invalidation bus simultaneously with sending a modify request to the directory
US5933651A (en) * 1995-09-29 1999-08-03 Matsushita Electric Works, Ltd. Programmable controller
JP3123413B2 (ja) 1995-11-07 2001-01-09 株式会社日立製作所 コンピュータシステム
US5745728A (en) * 1995-12-13 1998-04-28 International Business Machines Corporation Process or renders repeat operation instructions non-cacheable
US5701422A (en) * 1995-12-13 1997-12-23 Ncr Corporation Method for ensuring cycle ordering requirements within a hierarchical bus system including split-transaction buses
US6141692A (en) * 1996-07-01 2000-10-31 Sun Microsystems, Inc. Directory-based, shared-memory, scaleable multiprocessor computer system having deadlock-free transaction flow sans flow control protocol
US5881303A (en) * 1996-07-01 1999-03-09 Sun Microsystems, Inc. Multiprocessing system configured to perform prefetch coherency activity with separate reissue queue for each processing subnode
US5895486A (en) * 1996-12-20 1999-04-20 International Business Machines Corporation Method and system for selectively invalidating cache lines during multiple word store operations for memory coherence
US5898850A (en) * 1997-03-31 1999-04-27 International Business Machines Corporation Method and system for executing a non-native mode-sensitive instruction within a computer system
US5878242A (en) * 1997-04-21 1999-03-02 International Business Machines Corporation Method and system for forwarding instructions in a processor with increased forwarding probability
US6000016A (en) * 1997-05-02 1999-12-07 Intel Corporation Multiported bypass cache in a bypass network
US6378047B1 (en) 1997-07-07 2002-04-23 Micron Technology, Inc. System and method for invalidating set-associative cache memory with simultaneous set validity determination
US6079002A (en) * 1997-09-23 2000-06-20 International Business Machines Corporation Dynamic expansion of execution pipeline stages
DE19742378A1 (de) * 1997-09-25 1999-04-22 Siemens Ag Ringspeicher für eine TDMA-Datenübertragungsstation und entsprechende Datenübertragungsstation
US6065114A (en) * 1998-04-21 2000-05-16 Idea Corporation Cover instruction and asynchronous backing store switch
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
US6272594B1 (en) * 1998-07-31 2001-08-07 Hewlett-Packard Company Method and apparatus for determining interleaving schemes in a computer system that supports multiple interleaving schemes
US7225436B1 (en) 1998-12-08 2007-05-29 Nazomi Communications Inc. Java hardware accelerator using microcode engine
US20050149694A1 (en) * 1998-12-08 2005-07-07 Mukesh Patel Java hardware accelerator using microcode engine
US6332215B1 (en) 1998-12-08 2001-12-18 Nazomi Communications, Inc. Java virtual machine hardware for RISC and CISC processors
US6826749B2 (en) 1998-12-08 2004-11-30 Nazomi Communications, Inc. Java hardware accelerator using thread manager
US6321303B1 (en) * 1999-03-18 2001-11-20 International Business Machines Corporation Dynamically modifying queued transactions in a cache memory system
US6473834B1 (en) * 1999-12-22 2002-10-29 Unisys Method and apparatus for prevent stalling of cache reads during return of multiple data words
US6415357B1 (en) 1999-12-23 2002-07-02 Unisys Corporation Caching method and apparatus
US6711671B1 (en) * 2000-02-18 2004-03-23 Hewlett-Packard Development Company, L.P. Non-speculative instruction fetch in speculative processing
US6581138B2 (en) * 2000-02-29 2003-06-17 Stmicroelectronics, Inc. Branch-prediction driven instruction prefetch
JP3498673B2 (ja) 2000-04-05 2004-02-16 日本電気株式会社 記憶装置
US6725341B1 (en) * 2000-06-28 2004-04-20 Intel Corporation Cache line pre-load and pre-own based on cache coherence speculation
US6434673B1 (en) * 2000-06-30 2002-08-13 Intel Corporation Optimized configurable scheme for demand based resource sharing of request queues in a cache controller
EP1197847A3 (de) * 2000-10-10 2003-05-21 Nazomi Communications Inc. Java-Hardwarebeschleuniger mit Mikrokodemaschine
US6732236B2 (en) * 2000-12-18 2004-05-04 Redback Networks Inc. Cache retry request queue
US6895520B1 (en) 2001-03-02 2005-05-17 Advanced Micro Devices, Inc. Performance and power optimization via block oriented performance measurement and control
US7221381B2 (en) * 2001-05-09 2007-05-22 Clairvoyante, Inc Methods and systems for sub-pixel rendering with gamma adjustment
US8769508B2 (en) 2001-08-24 2014-07-01 Nazomi Communications Inc. Virtual machine hardware for RISC and CISC processors
US7313658B2 (en) * 2001-10-23 2007-12-25 Via Technologies, Inc. Microprocessor and method for utilizing disparity between bus clock and core clock frequencies to prioritize cache line fill bus access requests
US6985999B2 (en) * 2001-10-23 2006-01-10 Ip-First, Llc Microprocessor and method for utilizing disparity between bus clock and core clock frequencies to prioritize cache line fill bus access requests
US6842822B2 (en) 2002-04-05 2005-01-11 Freescale Semiconductor, Inc. System and method for cache external writing
US6850999B1 (en) * 2002-11-27 2005-02-01 Cisco Technology, Inc. Coherency coverage of data across multiple packets varying in sizes
US7124318B2 (en) * 2003-09-18 2006-10-17 International Business Machines Corporation Multiple parallel pipeline processor having self-repairing capability
US7290253B1 (en) * 2003-09-30 2007-10-30 Vmware, Inc. Prediction mechanism for subroutine returns in binary translation sub-systems of computers
KR101034514B1 (ko) 2003-11-13 2011-05-17 코닌클리즈케 필립스 일렉트로닉스 엔.브이. 전자 데이터 프로세싱 회로 및 데이터 프로세싱 방법
JP2009508247A (ja) 2005-09-14 2009-02-26 コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ バス調停に関する方法及びシステム
US20070180156A1 (en) * 2006-02-01 2007-08-02 International Business Machines Corporation Method for completing IO commands after an IO translation miss
US7533237B1 (en) * 2006-05-11 2009-05-12 Nvidia Corporation Off-chip memory allocation for a unified shader
US7533236B1 (en) * 2006-05-11 2009-05-12 Nvidia Corporation Off-chip out of order memory allocation for a unified shader
US8151084B2 (en) * 2008-01-23 2012-04-03 Oracle America, Inc. Using address and non-address information for improved index generation for cache memories
WO2011088526A1 (en) * 2010-01-25 2011-07-28 Idatamap Pty Ltd Improved content addressable memory (cam)
US9418035B2 (en) * 2012-10-22 2016-08-16 Intel Corporation High performance interconnect physical layer
US11768689B2 (en) 2013-08-08 2023-09-26 Movidius Limited Apparatus, systems, and methods for low power computational imaging
US10001993B2 (en) * 2013-08-08 2018-06-19 Linear Algebra Technologies Limited Variable-length instruction buffer management
US10671349B2 (en) 2017-07-24 2020-06-02 Tesla, Inc. Accelerated mathematical engine
US11157441B2 (en) 2017-07-24 2021-10-26 Tesla, Inc. Computational array microprocessor system using non-consecutive data formatting
US11893393B2 (en) 2017-07-24 2024-02-06 Tesla, Inc. Computational array microprocessor system with hardware arbiter managing memory requests
US11157287B2 (en) * 2017-07-24 2021-10-26 Tesla, Inc. Computational array microprocessor system with variable latency memory access
US11409692B2 (en) 2017-07-24 2022-08-09 Tesla, Inc. Vector computational unit
US11561791B2 (en) 2018-02-01 2023-01-24 Tesla, Inc. Vector computational unit receiving data elements in parallel from a last row of a computational array
US11106466B2 (en) * 2018-06-18 2021-08-31 International Business Machines Corporation Decoupling of conditional branches
JP2021157604A (ja) * 2020-03-27 2021-10-07 株式会社村田製作所 データ通信装置、データ通信モジュール

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4322795A (en) * 1980-01-24 1982-03-30 Honeywell Information Systems Inc. Cache memory utilizing selective clearing and least recently used updating
FR2475330A1 (fr) * 1980-01-31 1981-08-07 Thomson Csf Mat Tel Dispositif d'aiguillage de donnees numeriques
US4543626A (en) * 1982-12-06 1985-09-24 Digital Equipment Corporation Apparatus and method for controlling digital data processing system employing multiple processors
US4600986A (en) * 1984-04-02 1986-07-15 Sperry Corporation Pipelined split stack with high performance interleaved decode
US4674032A (en) * 1984-04-02 1987-06-16 Unisys Corporation High-performance pipelined stack with over-write protection
US4949301A (en) * 1986-03-06 1990-08-14 Advanced Micro Devices, Inc. Improved pointer FIFO controller for converting a standard RAM into a simulated dual FIFO by controlling the RAM's address inputs
US5133062A (en) * 1986-03-06 1992-07-21 Advanced Micro Devices, Inc. RAM buffer controller for providing simulated first-in-first-out (FIFO) buffers in a random access memory
US4855904A (en) * 1986-08-27 1989-08-08 Amdahl Corporation Cache storage queue
US4959777A (en) * 1987-07-27 1990-09-25 Motorola Computer X Write-shared cache circuit for multiprocessor system
US4995401A (en) * 1988-02-26 1991-02-26 Board Of Regents, The University Of Texas System Device for measuring anterior fontanelle pressure
JPH01255035A (ja) * 1988-04-05 1989-10-11 Matsushita Electric Ind Co Ltd プロセサ
EP0343567A3 (de) * 1988-05-25 1991-01-09 Hitachi, Ltd. Mehrprozessoranordnung und Cache-Speichervorrichtung zur Verwendung in dieser Anordnung
US5058006A (en) * 1988-06-27 1991-10-15 Digital Equipment Corporation Method and apparatus for filtering invalidate requests
US5023828A (en) * 1988-07-20 1991-06-11 Digital Equipment Corporation Microinstruction addressing in high-speed CPU
US5109495A (en) * 1989-02-03 1992-04-28 Digital Equipment Corp. Method and apparatus using a source operand list and a source operand pointer queue between the execution unit and the instruction decoding and operand processing units of a pipelined data processor
US5019965A (en) * 1989-02-03 1991-05-28 Digital Equipment Corporation Method and apparatus for increasing the data storage rate of a computer system having a predefined data path width
US5107457A (en) * 1989-04-03 1992-04-21 The Johns Hopkins University Stack data cache having a stack management hardware with internal and external stack pointers and buffers for handling underflow and overflow stack

Also Published As

Publication number Publication date
CA2045756C (en) 1996-08-20
EP0465320A3 (de) 1995-03-22
JPH06103167A (ja) 1994-04-15
CA2045756A1 (en) 1991-12-30
DE69127726D1 (de) 1997-10-30
US5333296A (en) 1994-07-26
EP0465320A2 (de) 1992-01-08
EP0465320B1 (de) 1997-09-24

Similar Documents

Publication Publication Date Title
DE69127726T2 (de) Kombinierte Warteschlange für Entwertungen und Rücklaufdaten in einem Multiprozessorsystem
DE69127936T2 (de) Busprotokoll für Prozessor mit write-back cache
DE69111707T2 (de) Fehlerübergangsmodus für eine Mehrrechneranordnung.
DE69233493T2 (de) RISC-Prozessor mit erweiterbarer Architektur
US5809320A (en) High-performance multi-processor having floating point unit
DE69031433T2 (de) Speicherzugriffsausnahmebehandlung bei vorausgelesenen Befehlswörtern in dem Befehlsfliessband eines Rechners mit virtuellem Speicher
EP0466550B1 (de) Umwandlung der Befehle von internen Prozessorregistern in I/O-Adressraum
US5394529A (en) Branch prediction unit for high-performance processor
US5471591A (en) Combined write-operand queue and read-after-write dependency scoreboard
US6240508B1 (en) Decode and execution synchronized pipeline processing using decode generated memory read queue with stop entry to allow execution generated memory read
DE10296989B4 (de) Multi-Thread-Prozessor mit der Fähigkeit einer impliziten Multi-Thread-Ausführung eines Ein-Thread-Programms
DE68922326T2 (de) Speicherwarteschlange für eine festgekoppelte Mehrprozessorenkonfiguration mit einem zweistufigen Cache-Pufferspeicher.
DE60011797T2 (de) Ausführung von mehreren fäden in einem parallelprozessor
DE68923490T2 (de) Prüfpunkt-Wiederholungssystem.
DE69127242T2 (de) Sicherung der Datenintegrität in einem Multipipelineprozessorsystem
DE102018130441A1 (de) Einrichtung, Verfahren und Systeme mit konfigurierbarem räumlichem Beschleuniger
DE69233313T2 (de) Hochleistungsarchitektur für RISC-Mikroprozessor
DE3801361A1 (de) Verfahren und einrichtung zum detektieren und fuer die spezialbehandlung von memory-mapped eingabe/ausgabereferenzen in einem pipelinemikroprozessor
DE19506734A1 (de) Computersystem und Verfahren zum Aufrechterhalten der Speicherkonsistenz in einer Busanforderungswarteschlange
US5450555A (en) Register logging in pipelined computer using register log queue of register content changes and base queue of register log queue pointers for respective instructions
DE102010053088A1 (de) Sammeln und Streuen mehrerer Datenelemente
DE112011100715T5 (de) Hardware-hilfs-thread
DE3740834A1 (de) Aufrechterhaltung der kohaerenz zwischen einem mikroprozessorenintegrierten cache-speicher und einem externen speicher
DE102012211978A1 (de) Millicode-Steueroperation außerhalb der Reihenfolge
DE68924501T2 (de) Speichersubsystem mit Fehlerkorrekturcache-Speicher.

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