DE69433339T2 - Lade-/Speicherfunktionseinheiten und Datencachespeicher für Mikroprozessoren - Google Patents

Lade-/Speicherfunktionseinheiten und Datencachespeicher für Mikroprozessoren Download PDF

Info

Publication number
DE69433339T2
DE69433339T2 DE69433339T DE69433339T DE69433339T2 DE 69433339 T2 DE69433339 T2 DE 69433339T2 DE 69433339 T DE69433339 T DE 69433339T DE 69433339 T DE69433339 T DE 69433339T DE 69433339 T2 DE69433339 T2 DE 69433339T2
Authority
DE
Germany
Prior art keywords
reservation station
address
memory
signal
entry
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
DE69433339T
Other languages
English (en)
Other versions
DE69433339D1 (de
Inventor
William M. Austin Johnson
David B. Austin Witt
Murali Austin Chinnakonda
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.)
Advanced Micro Devices Inc
Original Assignee
Advanced Micro Devices Inc
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 Advanced Micro Devices Inc filed Critical Advanced Micro Devices Inc
Publication of DE69433339D1 publication Critical patent/DE69433339D1/de
Application granted granted Critical
Publication of DE69433339T2 publication Critical patent/DE69433339T2/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/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • 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/30181Instruction operation extension or modification
    • 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, look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3816Instruction alignment, e.g. cache line crossing
    • 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, 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, look ahead
    • G06F9/3824Operand accessing
    • G06F9/3834Maintaining memory consistency
    • 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, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution

Description

  • Die vorliegende Erfindung betrifft Mikroprozessoren und insbesondere die Versorgung von Mikroprozessoren mit Daten-Cachespeichern hoher Leistungsfähigkeit und Lade/Speicher-Funktionseinheiten.
  • Mikroprozessoren sind Prozessoren, die in einem oder einer sehr kleinen Anzahl von Halbleiter Chips implementiert sind. Die Halbleiter Chiptechnologie erhöht seit jeher die Packungsdichten und Geschwindigkeiten der Schaltungen innerhalb der Mikroprozessoren, jedoch wird die Verbindung zwischen dem Mikroprozessor und externem Speicher durch die Verpackungstechnologie beschränkt. Obwohl auf dem Chip angeordnete Verbindungen extrem günstig sind, sind Verbindungen außerhalb des Chips sehr teuer. Jegliche Technik, die beabsichtigt, die Leistungsfähigkeit des Mikroprozessors zu verbessern, muss einen Vorteil ziehen aus den steigenden Packungsdichten und Geschwindigkeiten der Schaltungen, während sie in den Beschränkungen der Verpackungstechnologie und der physikalischen Trennung, zwischen dem Prozessor und seinem externen Speicher bleibt. Während steigende Packungsdichten der Schaltung einen Pfad zu immer komplexeren Designs bilden, muss der Betrieb des Mikroprozessors für Benutzer einfach und verständlich bleiben, um zu verstehen, wie der Mikroprozessor zu benutzen ist.
  • Während die Mehrzahl der existierenden Mikroprozessoren auf eine skalare Berechnung abzielen, sind superskalare Mikroprozessoren der nächste logische Schritt in der Entwicklung der Mikroprozessoren. Der Ausdruck superskalar beschreibt eine Implementierung des Computers, welche die Leistungsfähigkeit durch eine gleichzeitige Ausführung von skalaren Befehlen verbessert. Skalare Befehle sind der Typ von Befehlen, der üblicherweise in Mehrzweck-Mikroprozessoren zu finden ist. Unter Benutzung der heutigen Herstellungstechnologie für Halbleiter kann ein einzelner Prozessorchip Techniken hoher Leistungsfähigkeit in sich haben, die einst nur auf wissenschaftliche Groß-Prozessoren anwendbar waren. Jedoch sind viele der auf die Groß-Prozessoren angewandten Techniken entweder ungeeignet für eine skalare Berechnung oder zu teuer, um auf Mikroprozessoren angewendet zu werden.
  • Ein Mikroprozessor betreibt Anwendungsprogramme. Ein Anwendungsprogramm weist eine Gruppe von Befehlen auf. Bei dem Betreiben des Anwendungsprogramms ruft der Prozessor in einigen Abfolgen Befehle ab und führt sie aus. Es umfasst einige Schritte, selbst einen einzelnen Befehl auszuführen, einschließlich Abrufen des Befehls, Dekodieren desselben, Zusammensetzen seiner Operanden, Durchführen der von dem Befehl angegebenen Operationen und Schreiben der Ergebnisse des Befehls in den Speicher. Die Ausführung von Befehlen wird von einem periodischen Taktsignal gesteuert. Die Periode des Taktsignals ist die Taktzeit des Prozessors.
  • Die von einem Prozessor genommene Zeit, um ein Programm abzuschließen, wird von drei Faktoren bestimmt: der Anzahl der Befehle, die zur Ausführung des Programms erforderlich sind; die durchschnittliche Anzahl von Prozessortakten, die zur Ausführung eines Befehls erforderlich ist und die Taktzeit des Prozessors. Die Leistungsfähigkeit des Prozessors wird verbessert durch eine Reduzierung der benötigten Zeit, was die Verringerung eines oder mehrerer dieser Faktoren aufzwingt.
  • Ein Weg zur Verbesserung der Leistungsfähigkeit des Mikroprozessors ist die Überlappung von verschiedenen Befehlen, unter Benutzung einer Technik, die Pipelining genannt wird. Um Befehle in eine Pipeline einzureihen werden die verschiedenen Schritte der Ausführung von Befehlen von unabhängigen Einheiten, Pipelinestufen genannt, ausgeführt. Die Stufen der Pipeline sind durch getaktete Register getrennt. Die Schritte von verschiedenen Befehlen werden unabhängig in verschiedenen Stufen der Pipeline ausgeführt. Das Pipelining verringert die durchschnittliche Anzahl von Takten, die für die Ausführung eines Befehls erforderlich ist, aber nicht den Gesamtbetrag an Zeit, der zum Ausführen eines Befehls erforderlich ist, indem dem Prozessor erlaubt wird, mehr als einen Befehl zu einem Zeitpunkt zu behandeln. Dies geschieht ohne eine nennenswerte Erhöhung der Taktzeit des Prozessors. Pipelining reduziert üblicherweise die durchschnittliche Anzahl von Takten pro Befehl um so viel wie den Faktor drei. Jedoch kann, wenn ein Verzweigungsbefehl ausgeführt wird, die Pipeline still stehen bis das Ergebnis der Verzweigungsoperation bekannt ist und der korrekte Befehl für die Ausführung abgerufen ist. Diese Verzögerung ist bekannt als die Verzweigungsverzögerungsstrafe. Die Erhöhung der Anzahl der Stufen der Pipeline erhöht üblicherweise auch die Verzweigungsverzögerungsstrafe im Vergleich zu der durchschnittlichen Anzahl von Takten pro Befehl.
  • Ein weiterer Weg zur Verbesserung der Leistungsfähigkeit eines Prozessors ist es, die Geschwindigkeit zu erhöhen, mit welcher der Mikroprozessor die Operanden eines Befehls zusammensetzt und die Ergebnisse des Befehls schreibt; diese Funktionen werden als ein Ladevorgang beziehungsweise ein Speichervorgang bezeichnet. Diese beiden Funktionen sind abhängig von der Verwendung des Daten-Cachespeichers des Mikroprozessors.
  • Während der Entwicklung von frühen Mikroprozessoren benötigten Befehle eine im Vergleich zu der Ausführungszeit lange Zeit, um abgerufen zu werden. Dies trieb die Entwicklung von komplexer Befehlssatz Computer (CISC) Prozessoren voran. CISC Prozessoren basierten auf der Beobachtung, dass bei gegebener verfügbarer Technologie die Anzahl der Takten pro Befehl zum großen Teil von der Anzahl der Takte bestimmt wurde, die zum Abrufen des Befehls benötigt wurde. Um die Leistungsfähigkeit zu verbessern, waren es die zwei hauptsächlichen Ziele der CISC Architektur die Anzahl von Befehlen zu verringern, die für eine bestimmte Aufgabe benötigt werden und diese Befehle dicht zu kodieren. Es war akzeptabel, diese Ziele durch die Erhöhung der durchschnittlichen Anzahl von Takten zu erreichen, die zum Dekodieren und Ausführen eines Befehls gebraucht werden, weil wegen der Verwendung von Pipelining die Dekodier- und Ausführungstakte meistens überlappend sein würden mit einem relativ langen Abrufen der Befehle. Mit diesem Bündel von Annahmen entwickelten CISC Prozessoren dicht kodierte Befehle auf Kosten der Dekodierungs- und Ausführungszeit in dem Prozessor. Befehle über mehrere Takte reduzierten die Gesamtzahl von Befehlen und verringerten damit die gesamte Ausführungszeit, weil sie die Abrufzeit für die Befehle verringerten.
  • In den späten 1970ern und den frühen 1980ern wandelte sich die Speicher- und Verpackungstechnologie sehr schnell. Die Dichten und die Geschwindigkeit von Speicher stiegen bis zu dem Punkt an, an dem lokale Speicher mit hoher Geschwindigkeit, Cachespeicher genannt, nahe dem Prozessor implementiert werden konnten. Cachespeicher werden von dem Prozessor verwendet, um Befehle und Daten temporär zwischenzuspeichern. Wenn Befehle unter Verwendung von Cachespeichern schneller abgerufen werden, wird die Leistungsfähigkeit von der Dekodierungs- und Ausführungszeit begrenzt, die vorher in der Zeit für das Abrufen von Befehlen versteckt war. Die Anzahl von Befehlen beeinflusst die Leistungsfähigkeit nicht so sehr wie die durchschnittliche Anzahl von Takten, die es zu der Ausführung eines Befehls braucht.
  • Die Verbesserung bei der Speicher- und Verpackungstechnologie bis zu dem Punkt, wo das Abrufen eines Befehls nicht viel länger dauert als die Ausführung des Befehls, motivierte die Entwicklung von reduzierten Befehlssatz Computer (RISC) Prozessoren. Um die Leistungsfähigkeit zu verbessern, ist es das vorrangige Ziel einer RISC Architektur, die Anzahl von Takten zu reduzieren, die für die Ausführung eines Befehls benötigt werden, was einigen Anstieg in der gesamten Anzahl von Befehlen erlaubt. Die Abwägung zwischen Takten pro Befehl und der Anzahl der Befehle ist nicht eins zu eins. Im Vergleich zu CISC Prozessoren reduzieren RISC Prozessoren üblicherweise die Anzahl von Takten pro Befehl um Faktoren von drei bis fünf, während sie üblicherweise die Anzahl der Befehle um dreißig bis fünfzig Prozent erhöhen. RISC Prozessoren vertrauen auf nebengestellte Merkmale wie eine große Anzahl von Mehrzweck-Registern und Befehls- und Daten-Cachespeichern, um dem Compiler zu helfen, die Gesamtzahl an Befehlen zu verringern, oder um zu helfen, die Anzahl von Takten pro Befehl zu reduzieren.
  • Ein typischer RISC Prozessor führt einen Befehl in jedem Prozessortakt aus. Ein superskalarer Prozessor verringert die durchschnittliche Anzahl von Takten pro Befehl über das was in einem skalaren RISC Prozessor mit Pipeline möglich ist durch Erlauben der gleichzeitigen Ausführung von Befehlen in der gleichen Stufe der Pipeline als auch der gleichzeitigen Ausführung von Befehlen in unterschiedlichen Stufen der Pipeline. Der Ausdruck superskalar betont mehrere gleichzeitige Operationen auf skalaren Quantitäten wie unterschieden von mehreren gleichzeitigen Operationen auf Vektoren oder Arrays, wie es bei der wissenschaftlichen Berechnung verbreitet ist.
  • Während superskalare Prozessoren vom Konzept her einfach sind, benötigt es mehr als ein Aufweiten der Pipeline des Prozessors, um eine gesteigerte Leistungsfähigkeit zu erreichen. Das Aufweiten der Pipeline macht es möglich, mehr als einen Befehl pro Takt auszuführen, aber es gibt keine Garantie, dass jegliche gegebene Abfolge von Befehlen Vorteil aus dieser Fähigkeit nehmen kann. Befehle sind nicht unabhängig voneinander, sondern stehen in wechselseitiger Beziehung miteinander; diese Beziehungen hindern einige Befehle daran, die gleiche Stufe der Pipeline zu besetzen. Des weiteren können die Mechanismen des Prozessors für das Dekodieren und die Ausführung von Befehlen einen großen Unterschied machen für seine Fähigkeit, Befehle ausfindig zu machen, die gleichzeitig ausgeführt werden können.
  • Superskalare Techniken betreffen zum großen Teil die Organisation des Prozessors, unabhängig von dem Befehlssatz und anderen Merkmalen der Architektur. Daher ist einer der Reize der superskalaren Techniken die Möglichkeit, einen Prozessor zu entwickeln, der im Code mit einer bestehenden Architektur kompatibel ist. Viele superskalare Techniken sind genau so gut entweder auf RISC oder CISC Architekturen anwendbar. Jedoch sind, wegen der Regelmä ßigkeit von vielen der RISC Architekturen, superskalare Techniken ursprünglich auf RISC Prozessordesigns angewendet worden.
  • Die Merkmale des Befehlssatzes eines RISC Prozessors, die sich für eine Einzeltaktdekodierung eignen, eignen sich auch zum Dekodieren mehrerer RISC Befehle in dem gleichen Taktzyklus. Diese umfassen eine allgemeine drei Operanden Lade/Speicher-Architektur, Befehle haben nur wenige Befehlslängen, Befehle verwenden nur wenige Adressierungsmodi, Befehle, die auf Registern mit fester Breite arbeiten, und Register-Identifizierer nur an wenigen Stellen in dem Befehlsformat. Techniken zum Entwerfen eines superskalaren RISC Prozessors sind beschrieben in Superscalar Microprocessor Design, von William Michael Johnson, 1991, Prentice-Hall, Inc. (eine Abteilung von Simon & Schuster), Englewood Cliffs, New Jersey.
  • Im Gegensatz zu RISC Architekturen verwenden CISC Architekturen eine große Anzahl von verschiedenen Befehlsformaten. Eine CISC Mikroprozessor-Architektur, die eine weit verbreitete Akzeptanz erreicht hat, ist die x86 Architektur. Diese Architektur, zuerst eingeführt in dem i386TM Mikroprozessor, ist auch die Basisarchitektur von sowohl dem i486TM Mikroprozessor als auch dem PentiumTM Mikroprozessor, alle erhältlich von der Intel Corporation aus Santa Clara, Kalifornien. Die x86 Architektur stellt drei getrennte Typen von Adressen zur Verfügung, eine logische Adresse, eine lineare Adresse und eine physikalische Adresse.
  • Die logische Adresse stellt einen Versatz von einer Basisadresse eines Segments dar. Der Versatz, als effektive Adresse bezeichnet, basiert auf dem Typ des Adressierungsmodus, den der Mikroprozessor verwendet. Diese Adressierungsmodi stellen unterschiedliche Kombinationen von vier Adresselementen zur Verfügung, eine Verschiebung, eine Basis, einen Index und eine Skalierung. Auf die Basisadresse des Segments wird über einen Selektor zugegriffen. Genauer gesagt ist der Selektor ein Index, der auf eine Stelle in der glo balen Deskriptortabelle (GDT) zeigt. Die GDT Stelle speichert die lineare Adresse, die der Basisadresse des Segments entspricht.
  • Die Übersetzung zwischen den logischen und den linearen Adressen hängt, davon ab, ob der Mikroprozessor in dem Real Mode oder dem Protected Mode ist. Wenn der Mikroprozessor in dem Real Mode ist, dann schiebt eine Aufteilungseinheit den Selektor um vier Bits nach links und addiert das Ergebnis zu dem Versatz, um die lineare Adresse zu bilden. Wenn der Mikroprozessor in dem Protected Mode ist, dann addiert die Aufteilungseinheit die lineare Basisadresse, auf die von dem Selektor gezeigt wird, zu dem Versatz, um die lineare Adresse zur Verfügung zu stellen.
  • Die physikalische Adresse ist die Adresse, welche an den Adresspins des Mikroprozessors erscheint und verwendet wird, um den externen Speicher physikalisch zu adressieren. Die physikalische Adresse muss nicht notwendigerweise der linearen Adresse entsprechen. Falls die Abbildung nicht ermöglicht ist, dann entspricht die 32 Bit Adresse lineare Adresse der physikalischen Adresse. Falls die Abbildung ermöglicht ist, dann muss die lineare Adresse in die physikalische Adresse übersetzt werden. Eine Abbildungseinheit führt diese Übersetzung durch.
  • Die Abbildungseinheit verwendet zwei Ebenen von Tabellen, um die lineare Adresse in eine physikalische Adresse zu übersetzen. Die Tabelle der ersten Ebene ist ein Seitenverzeichnis und die Tabelle der zweiten Ebene ist eine Seitentabelle. Das Seitenverzeichnis umfasst mehrere Einträge im Seitenverzeichnis, wobei jeder Eintrag die Adresse einer Seitentabelle und Information über die Seitentabelle umfasst. Die oberen Flash Speicher 10 Bits der linearen Adresse (A22–A31) werden als ein Index verwendet, um einen Eintrag in dem Seitenverzeichnis auszuwählen. Die Seitentabelle enthält mehrere Einträge in der Seitentabelle, wobei jeder Eintrag in der Seitentabelle eine Startadresse eines Seitenrahmens, bezeichnet als die reale Seitennummer des Seitenrahmens, und statistische Informationen über die Seite enthält. Die Ad ressbits A12–A21 der linearen Adresse werden als ein Index verwendet, um einen der Einträge in der Seitentabelle auszuwählen. Die Startadresse des Seitenrahmens wird mit den unteren 12 Bits der linearen Adresse verkettet, um die physikalische Adresse zu bilden.
  • Weil das Zugreifen auf zwei Ebenen der Tabelle für jede Speicheroperation die Leistungsfähigkeit des Mikroprozessors erheblich beeinflusst stellt die x86 Architektur einen Cachespeicher für die Einträge der Seitentabelle, auf die zuletzt zugegriffen wurde, zur Verfügung, dieser Cachespeicher wird als ein Übersetzungs-Seitenblick-Puffer (TLB) bezeichnet. Der Mikroprozessor verwendet nur die Abbildungseinheit, wenn ein Eintrag nicht in der TLB ist.
  • Der erste der x86 Architektur entsprechende Prozessor, der einen Cachespeicher enthielt, war der 486 Prozessor, der einen 8 KByte großen gemeinsamen Cachespeicher enthielt. Der PentiumTM Prozessor umfasst separate 8 KByte Befehls- und Daten-Cachespeicher. Auf die Cachespeicher des 486 Prozessors und die Cachespeicher des PentiumTM Prozessors wird über physikalische Adressen zugegriffen; jedoch arbeiten die Funktionseinheiten dieser Prozessoren mit logischen Adressen. Entsprechend muss, wenn die Funktionseinheiten einen Zugriff auf den Cachespeicher erfordern, die logische Adresse in eine lineare Adresse und dann in eine physikalische Adresse konvertiert werden.
  • Es ist festgestellt worden, dass durch Versorgung eines Mikroprozessors mit einem Ladebereich, der mehrere Einträge in Reservierungsstationen enthält, auf die parallel zugegriffen wird, es möglich ist, mehrere Ladeoperationen parallel durchzuführen.
  • In Übereinstimmung mit der vorliegenden Erfindung ist eine Lade-Funktionseinheit zum parallelen Durchführen mehrerer Ladevorgänge von einem Speicher vorgesehen, wobei der Speicher ein Speicherarray mit mehreren mit der Lade-Funktionseinheit parallel gekoppelten Speicherbereichen aufweist und in Reaktion auf Ladesignale Daten parallel zu der Lade-Funktionseinheit liefert, wobei die Lade-Funktionseinheit aufweist: eine Reservierungsstationsschaltung zum temporären Halten von Ladeoperationen, mit: einem ersten Eintrag in der Reservierungsstation und einem zweiten Eintrag in der Reservierungsstation, der mit dem ersten Eintrag in der Reservierungsstation gekoppelt ist und ein Ausgangssignal des Eintrags in der Reservierungsstation an den ersten Eintrag in der Reservierungsstation liefert, einer Eingangssignal-Multiplexerschaltung, die Ladesignale parallel empfängt und ein erstes Ladesignal zu den ersten und zweiten Einträgen in der Reservierungsstation und ein zweites Ladesignal zu den ersten und zweiten Einträgen in der Reservierungsstation liefert, und einer Reservierungsstations-Treiberschaltung, welche die Daten von dem Speicher parallel empfängt und die Daten von dem Speicher parallel zu ersten und zweiten Ergebnisbussen liefert, und einer Lade-Steuerschaltung zum Steuern, welches der ersten und zweiten Ladesignale von den ersten und zweiten Einträgen in der Reservierungsstation empfangen wird.
  • In einem Ausführungsbeispiel der Erfindung ist der Speicher ein Daten-Cachespeicher und jeder der mehreren Speicherbereiche des Speicherarrays ist über jeweilige erste und zweite Daten-Cachespeicher-Anschlüsse mit den ersten und zweiten Einträgen in der Reservierungsstation der Lade-Funktionseinheit gekoppelt, wobei das Speicherarray die Daten aus dem Daten-Cachespeicher in Reaktion auf die ersten und zweiten Ladesignale parallel zu der Lade-Funktionseinheit liefert, und der Daten-Cachespeicher eine mit der Lade-Steuerschaltung gekoppelten Steuerschaltung aufweist.
  • Eine Lade/Speicher-Funktionseinheit enthält eine Lade-Funktionseinheit, welche die Erfindung verkörpert und Ladeoperationen und Speicheroperationen in einen Cachespeicher parallel durchführt, und enthält weiter eine Speicher-Pufferschaltung zum temporären Halten von Speicheroperationen, die erste und zweite Einträge in dem Speicher-Puffer zum temporären Halten von Speicheroperationen aufweist, wobei mindestens einer der Einträge in dem Speicher-Puffer mit mindestens einem der Einträge in der Reservierungsstation gekoppelt ist; wobei die Lade-Steuerschaltung ferner die Einträge in dem Speicher-Puffer steuert und die Steuerschaltung mit der Reservierungsstationsschaltung, der Speicher-Pufferschaltung und dem Cachespeicher gekoppelt ist.
  • In den begleitenden Zeichnungen zeigen beispielhaft:
  • 1 ein Blockdiagramm eines superskalaren Mikroprozessors in Übereinstimmung mit der vorliegenden Erfindung;
  • 2 ein Blockdiagramm einer Lade/Speicher-Funktionseinheit und eines Daten-Cachespeichers in Übereinstimmung mit der vorliegenden Erfindung;
  • 3 ein Blockdiagramm einer Reservierungsstation der Lade/Speicher-Funktionseinheit aus 2;
  • 4 ein Blockdiagramm aus den Inhalten eines Eintrags in der Reservierungsstationsschaltung aus 3;
  • 5 ein Blockdiagramm einer Addiererschaltung aus der Reservierungsstationsschaltung aus 3.
  • 6 ein Blockdiagramm einer Speicher-Pufferschaltung aus der Lade/ Speicher-Funktionseinheit aus 2;
  • 7 ein Blockdiagramm aus den Inhalten eines Eintrags in der Speicher-Pufferschaltung aus 6;
  • 8 ein Blockdiagramm eines Eintrags des Speicher-Puffers der Speicher-Pufferschaltung aus 6;
  • 9 ein Blockdiagramm eines Eintrags aus dem Daten-Cachespeichers aus 2;
  • 10 ein Blockdiagramm eines Speicherarrays und eines linearen Markierungsarrays des Daten-Cachespeichers aus 2;
  • 11 und 12 Blockdiagramme der Bereichsstruktur des Speicherarrays aus 10;
  • 13 ein Zeitablaufdiagramm einer Ladeoperation in Übereinstimmung mit der vorliegenden Erfindung;
  • 14 ein Zeitablaufdiagramm einer Speicheroperation in Übereinstimmung mit der vorliegenden Erfindung;
  • 15 ein Zeitablaufdiagramm eines Fehltreffers im Daten-Cachespeicher während einer spekulativen Zugriffsoperation in Übereinstimmung mit der vorliegenden Erfindung;
  • 16 ein Zeitablaufdiagramm einer Nachladeoperation im Daten-Cachespeicher in Übereinstimmung mit der vorliegenden Erfindung;
  • 17 ein Zeitablaufdiagramm einer falsch ausgerichteten Zugriffsoperation in Übereinstimmung mit der vorliegenden Erfindung;
  • Bezug nehmend auf 1 kann das vorliegende Ausführungsbeispiel am besten verstanden werden in dem Kontext von dem superskalaren x86 Mikroprozessor 100, welcher den x86 Befehlssatz ausführt. Der Mikroprozessor 100 ist mit einem physikalisch adressierten externen Speicher 101 über einen 486 XL Bus oder einen anderen konventionellen Mikroprozessorbus verbunden. Der Mikroprozessor 100 enthält einen Befehls-Cachespeicher 104, der an eine Byte Warteschlange 106 angeschlossen ist, die mit einem Befehlsdekodierer 108 verbunden ist. Der Befehlsdekodierer 108 ist mit einem RISC Kern 100 verbunden. Der RISC Kern 100 enthält eine Registerdatei 112 und einen Umordnungspuffer 114 sowie verschiedene Funktionseinheiten wie die arithmetischen Logikeinheiten 131, 132 (ALU0 und ALU1), den speziellen Registerblock 133 (SRB), die Lade/Speicher-Einheit 134 (LSSEC), die Verzweigungssektion 135 (BRNSEC) und die Gleitkommaeinheit 136 (FPU).
  • Der RISC Kern 110 enthält A und B Operanden Busse 116, einen Typ und Versendung (TAD) Bus 118 und einen Ergebnisbus 140, die sowohl mit den Funktionseinheiten verbunden sind als auch mit einem Versetzung und Befehl, Lade/Speicher (INLS) Bus 119, der zwischen den Befehlsdekodierer 108 und die Lade/Speicher-Einheit 134 gekoppelt ist. Die A und B Operanden Busse 116 sind auch mit der Registerdatei 112 und dem Umordnungspuffer 114 verbunden. Der TAD Bus 118 ist ebenfalls mit dem Befehlsdekodierer 108 verbunden. Der Ergebnisbus 140 ist auch mit dem Umordnungspuffer 114 verbunden. Des weiteren ist die Verzweigungssektion 135 mit dem Umordnungspuffer 114, dem Befehlsdekodierer 108 und dem Befehls-Cachespeicher 104 über den Xtarget Bus 103 verbunden. Die A und B Operanden Busse 116 enthalten vier parallele 41 Bit breite A Operanden Busse und vier parallele 41 Bit breite B Operanden Busse sowie vier parallele 12 Bit breite A Markierungsbusse, vier parallele 12 Bit breite B Markierungsbusse, einen 12 Bit breiten A Markierung Gültig Bus, einen 12 Bit breiten B Markierung Gültig Bus, vier 4 Bit breite Ziel Markierungsbusse und vier 8 Bit breite Opcode Busse. Der Typ und Versendungsbus 118 enthält vier 3 Bit breite Type-Code Busse und einen 4 Bit breiten Versendungsbus. Der Versetzungs- und INLS Bus 119 enthält zwei 32 Bit breite Versetzungsbusse und zwei 8 Bit breite INLS Busse.
  • Zusätzlich zu dem Befehls-Cachespeicher 104 enthält der Mikroprozessor 100 auch einen Daten-Cachespeicher 150 (DCache) und eine physikalische Markierungsschaltung 162. Der Daten-Cachespeicher 150 ist mit der Lade/Speicher-Einheit 134 des RSIC Kerns und mit dem Intraprozessor Adress- und Daten- (IAD) Bus 102 verbunden. Der Befehls-Cachespeicher 104 ist ebenfalls mit dem IAD Bus 102 verbunden. Die physikalische Markierungsschaltung 162 agiert sowohl mit dem Befehls-Cachespeicher 104 als auch mit dem Daten-Cachespeicher 150 über den IAD Bus. Der Befehls-Cachespeicher 104 und der Daten-Cachespeicher 150 sind beide linear adressierbare Cachespeicher. Der Befehls-Cachespeicher 104 und der Daten-Cachespeicher 150 sind physikalisch getrennt, jedoch sind beide Cachespeicher unter Verwendung der gleichen Architektur organisiert.
  • Der Mikroprozessor 100 enthält auch eine Speicherverwaltungseinheit (MMU) 164 und eine Businterfaceeinheit 160 (BIU). Der TLB 164 ist mit dem IAD Bus und der physikalischen Übersetzungsschaltung 162 verbunden. Die Businterfaceeinheit 160 ist verbunden mit der physikalischen Übersetzungsschaltung 162, dem Daten-Cachespeicher 150 und dem IAD Bus 102 und auch einem externen Mikroprozessorbus wie dem 486 XL Bus.
  • Der Mikroprozessor 100 führt Computerprogramme aus, die Sequenzen von Befehlen enthalten. Computerprogramme sind üblicherweise auf einer Festplatte, einer Diskette oder anderen nicht flüchtigen Speichermedien gespeichert, welche in dem Computersystem vorhanden sind. Wenn das Programm läuft, wird das Programm von dem Speichermedium in den Hauptspeicher 101 geladen. Sobald die Befehle des Programms und die dazu gehörigen Daten in dem Hauptspeicher 101 sind, werden einzelne Befehls für die Ausführung vorbereitet und schließlich von dem Mikroprozessor 100 ausgeführt.
  • Nachdem sie in dem Hauptspeicher 101 gespeichert sind, werden die Befehle über die Businterfaceeinheit 160 an den Befehls-Cachespeicher 104 weiter geleitet, wo die Befehle temporär gehalten werden. Der Befehlsdekodierer 108 holt die Befehle aus dem Befehls-Cachespeicher 104, untersucht die Befehle und bestimmt die geeignete Aktion, die auszuführen ist. Zum Beispiel kann der Befehlsdekodierer 108 feststellen, ob ein bestimmter Befehl ein PUSH, POP, LOAD, STORE, AND, OR, EX, ADD, SUB, NOP, JUMP, JUMP on condition (BRANCH) oder ein anderer Befehl ist. Abhängig davon, welcher bestimmte Befehl, den der Befehlsdekodierer 108 bestimmt, vorhanden ist, wird der Befehl an die geeignete Funktionseinheit des RISC Kerns 110 verschickt. LOADs und STOREs sind die primären beiden Befehle, die an den Lade/Speicher-Bereich 134 verschickt werden. Weitere Befehle, die von der Lade/Speicher-Funktionseinheit 134 ausgeführt werden, umfassen PUSH und POP.
  • Die Befehle enthalten üblicherweise mehrere Felder in dem folgenden Format: OP CODE, OPERAND A, OPERAND B und ZIEL. Zum Beispiel bedeutet der Befehl ADD A, B, C addiere die Inhalte des Registers A zu den Inhalten des Registers B und platziere das Ergebnis in dem Register C. LOAD und STORE Operationen verwenden ein geringfügig anderes Format. Zum Beispiel bedeutet der Befehl LOAD A, B, C platziere von einer Adresse geholte Daten auf dem Ergebnisbus, wobei A, B und C Teile der Adresse darstellen, die auf dem A Operandenbus, dem B Operandenbus und dem Versetzungsbus angeordnet sind, diese Teile der Adresse werden kombiniert, um eine logische Adresse zur Verfügung zustellen, die mit einer Segmentbasis kombiniert wird, um die lineare Adresse zur Verfügung zu stellen, von der die Daten geholt werden.
  • Die OP-CODEs werden von dem Befehlsdekodierer 108 über den Opcode-Bus n die Funktionseinheiten des RISC Kerns 110 zur Verfügung gestellt. Nicht nur muss der OP CODE für einen bestimmten Befehl der geeigneten Funktionseinheit zur Verfügung gestellt werden, ebenso müssen die bezeichneten OPERANDEN für den Befehl geholt werden und an die Funktionseinheiten gesendet werden. Falls der Wert eines bestimmten Operanden noch nicht berechnet worden ist, dann muss dieser Wert zuerst berechnet werden und den Funktionseinheiten zur Verfügung gestellt werden bevor die Funktionseinheit den Befehl ausführen kann. Zum Beispiel muss, falls ein aktueller Befehl von einem vorherigen Befehl abhängig ist, das Ergebnis des vorherigen Befehls bestimmt werden bevor der aktuelle Befehl ausgeführt werden kann. Diese Situation wird als eine Abhängigkeit bezeichnet.
  • Die Operanden, welche für einen bestimmten von einer Funktionseinheit auszuführenden Befehl benötigt werden, werden entweder von der Registerdatei 112 oder dem Umordnungspuffer 114 an den Operandenbus zur Verfügung gestellt. Der Operandenbus befördert die Operanden an die geeigneten Funktionseinheiten. Sobald eine Funktionseinheit den OP CODE, OPERAND A und OPERAND B empfängt, führt die Funktionseinheit den Befehl aus und platziert das Ergebnis auf einem Ergebnisbus 140, der mit den Ausgängen aller Funktionseinheiten und dem Umordnungspuffer 114 verbunden ist.
  • Der Umordnungspuffer 114 wird als ein Zuerst Rein, Zuerst Raus (FIFO) Gerät verwaltet. Wenn ein Befehl von dem Befehlsdekodierer 108 dekodiert wird, wird ein entsprechender Eintrag in dem Umordnungspuffer 114 zugeordnet. Der von dem Befehl berechnete Ergebniswert wird dann in den zugeordneten Eintrag geschrieben, wenn die Ausführung des Befehls abgeschlossen ist. Der Ergebniswert wird nachfolgend in die Registerdatei 112 geschrieben und der Befehl wird zurückgezogen, wenn keine Ausnahmen mit dem Befehl zusammenhängen und wenn keine spekulativen Verzweigungen anhängig sind, welche den Befehl betreffen. Falls der Befehl nicht vollständig ist, wenn sein zugehöriger Eintrag den Kopf des Umordnungspuffers 114 erreicht, wird das Weiterschreiten des Umordnungspuffers 114 angehalten, bis der Befehl vollständig ist. Zusätzliche Einträge können jedoch weiterhin zugewiesen werden.
  • Jede Funktionseinheit enthält jeweilige Reservierungsstationsschaltungen (RS) 120–126 zum Speichern von OP-CODEs von Befehlen, die noch nicht vollständig sind, weil Operanden für diesen Befehl noch nicht für die Funktionseinheiten verfügbar sind. Jede Reservierungsstationsschaltung speichert den OP CODE des Befehls zusammen mit Markierungen, welche Stellen für die fehlenden Operanden reservieren, die später an der Reservierungsstationsschaltung ankommen werden. Diese Technik verbessert die Leistungsfähigkeit, indem dem Mikroprozessor 100 erlaubt wird, mit dem Ausführen anderer Befehle fortzufahren, während der anhängige Befehl mit seinen Operanden an der Reservierungsstation zusammengesetzt wird.
  • Der Mikroprozessor 100 bietet eine außer der Reihe Ausführung durch eine Isolation des Befehlsdekodierers 108 von den Funktionseinheiten des RISC-Kerns 110. Genauer gesagt etablieren der Umordnungspuffer 114 und die Reservierungsstationen der Funktionseinheiten effektiv ein verteiltes Befehlsfenster. Entsprechend kann der Befehlsdekodierer 108 mit der Dekodierung von Befehlen fortfahren, sogar wenn die Befehle nicht unmittelbar ausgeführt werden können. Das Befehlsfenster agiert wie ein Pool von Befehlen, von dem die Funktionseinheiten ziehen, wenn sie weiter voran gehen und Befehle ausführen. Das Befehlsfenster stellt damit dem Mikroprozessor 100 eine Fähigkeit zur Vorausschau zur Verfügung. Wenn Abhängigkeiten aufgelöst werden und Operanden verfügbar werden, werden mehr Befehle in dem Fenster von den Funktionseinheiten ausgeführt und der Dekodierer fährt fort, das Fenster mit noch mehr dekodierten Befehlen zu füllen.
  • Der Mikroprozessor 100 verwendet die Verzweigungssektion 135 des RISC-Kerns, um seine Leistungsfähigkeit zu verbessern. Weil, wenn eine Verzweigung auftritt, der nächste Befehl von dem Ergebnis der Verzweigung abhängt, hindern Verzweigungen in den Befehlsstrom eines Programms die Fähigkeit des Mikroprozessors, Befehle abzurufen. Die Verzweigungssektion 135 sagt die Ergebnisse der Verzweigungen vorher, die während des Abrufens von Befehlen auftreten. Das heißt die Verzweigungssektion 135 sagt vorher, ob Verzweigungen genommen werden sollten. Zum Beispiel wird ein Verzweigungszielpuffer eingesetzt, um einen fortlaufenden Verlauf der Ergebnisse von vorherigen Verzweigungen zu unterhalten. Basierend auf diesem Verlauf wird eine Entscheidung getroffen während einer bestimmten abgerufenen Verzweigung, um festzustellen, welche Verzweigung der abgerufene Verzweigungsbefehl nehmen wird. Falls eine Ausnahme oder eine Fehlvorhersage einer Verzweigung auftritt, dann werden die Inhalte des Umordnungspuffers 114 verworfen, die nachfolgende der falsch vorher gesagten Verzweigung zugeordnet sind.
  • Bezug nehmend auf 2 ist die Lade/Speicher-Einheit 134 die Funktionseinheit, welche mit dem Daten-Cachespeicher 150 interagiert und alle LOAD Befehle und alle STORE Befehle ausführt. Die Lade/Speicher-Einheit 134 enthält eine Reservierungsstationsschaltung 124, eine Speicherpufferschaltung 180 und eine Lade/Speicher-Steuerung 182. Die Reservierungsstationsschaltung 124 enthält vier Einträge in der Reservierungsstation (RS0–RS3) und die Speicherpufferschaltung 180 enthält vier Einträge in dem Speicherpuffer (SB0 –SB3).
  • Die Reservierungsstationsschaltung 124 hält alle der Felder, welche zum Durchführen einer Ladeoperation oder einer Speicheroperation erforderlich sind. Datenelemente können an zwei Einträge in der Reservierungsstation pro Taktzyklus ausgegeben werden und es können zwei Einträge in der Reservierungsstation pro Taktzyklus zurückgezogen werden. Die Reservierungsstationsschaltung 124 ist mit den vier Ergebnisbussen verbunden, 40 Bit der vier 41 Bit A Operanden Busse, 32 Bit der vier B 41 Bit Operanden Busse, den A und B Markierung Gültig Bussen, den vier A Markierungsbussen, den vier B Markierungsbussen, den vier Zielmarkierungsbussen, den vier Type Kodierungsbussen, den zwei Versetzungsbussen und den zwei INLS Bussen und auch den 32 Bit Datenbereichen der Anschlüsse A und B des Daten-Cachespeichers 150. Die Reservierungsstationsschaltung 124 ist mit der Speicherpufferschaltung 180 verbunden über einen 40 Bit A Operanden Bus, einen 32 Bit Reservierungsstation Datenbus (RDATA A beziehungsweise RDATA B), einen 12 Bit A Markierungsbus (TAG A) und einen 12 Bit B Markierungsbus (TAG B) und auch zwei 32 Bit Adressbusse (ADDR A, ADDR B); die beiden Adressbusse sind auch mit den Adressbereichen der Anschlüsse A und B des Daten-Cachespeichers 150 verbunden. Die Reservierungsstationsschaltung 124 ist mit der Steuerung 182 über einen Reservierungsstation Ladebus und einen Reservierungsstation Schiebebus verbunden.
  • Zusätzlich dazu mit der Reservierungsstationsschaltung 124 verbunden zu sein, ist die Speicherpufferschaltung 180 mit den vier Ergebnisbussen verbun den und ebenso mit der Lade/Speicher-Steuerung 182 über den Speicherpuffer Ladebus und den Speicherpuffer Schiebebus verbunden. Die Speicherpufferschaltung 180 ist auch an den IAD Bus 102 angeschlossen.
  • Zusätzlich dazu mit der Reservierungsstationsschaltung 124 und der Speicherpufferschaltung 180 verbunden zu sein, ist die Lade/Speicher-Steuerung 182 mit der physikalischen Markierungsschaltung 162 und dem Umordnungspuffer 114 verbunden. Die Steuerung 182 ist auch mit der Cachespeichersteuerung 190 des Daten-Cachespeichers 150 verbunden.
  • Der Daten-Cachespeicher 150 ist ein linear adressierter 4 Wege interleaved, 8 KByte 4 Wege satzassoziativer Cachespeicher, der zwei Zugriffe pro Taktzyklus unterstützt, das heißt der Daten-Cachespeicher 150 unterstützt eine doppelte Ausführung. Jeder Satz des Daten-Cachespeichers 150 enthält 128 Einträge; jeder Eintrag enthält einen Block mit sechzehn Byte an Information. Jeder Block mit sechzehn Byte an Information ist in einer Zeile von vier einzeln adressierbaren Bänken mit 32 Bit gespeichert. Durch die Versorgung des Daten-Cachespeichers 150 mit vier einzeln adressierbaren Bänken, funktioniert der Daten-Cachespeicher 150 wie doppelt zugreifbarer Daten-Cachespeicher, ohne das Erfordernis der Verwaltung, die zu einer Bereitstellung von zwei Anschlüssen gehört. Auf den Daten-Cachespeicher 150 kann über den Anschluss A des Daten-Cachespeichers und den Anschluss B des Daten-Cachespeichers doppelt zugegriffen werden, was dem Daten-Cachespeicher 150 erlaubt, zwei Ladeoperationen gleichzeitig durchzuführen. Der Anschluss A des Daten-Cachespeichers enthält einen Datenbereich, DATA A, und einen Adressbereich, ADDR A, der Anschluss B des Daten-Cachespeichers enthält einen Datenbereich, DATA B, und einen Adressbereich, ADDR B.
  • Der Daten-Cachespeicher 150 enthält eine Daten-Cachespeichersteuerung 190 und ein Daten-Cachespeicher Array 192. Die Cachespeichersteuerung 190 stellt Steuersignale zur Verfügung, um die verschiedenen Operationen des Daten-Cachespeichers 150 zu leiten. Das Daten-Cachespeicher Array 192 speichert Daten unter der Steuerung der Daten-Cachespeichersteuerung 190. Das Daten-Cachespeicher Array 192 ist in zwei Arrays organisiert, das Datenspeicher Array 200 und das lineare Markierungs- und Status-Array 202. Das Datenspeicher Array 200 stellt zwei Datensignale, DATA A, DATA B, der Lade/ Speicher-Einheit 134 zur Verfügung. Das lineare Markierungs-Array 202 empfängt zwei lineare Adressen, ADDR A, ADDR B, die von der Lade/Speicher-Einheit 134 zur Verfügung gestellt werden und stellt zwei 4 Bit Markierungstreffersignale, COL HITA 0 –3, COL HITA 0 –3, dem Cachespeicher Array 200 zur Verfügung. Die linearen Adressen ADDR A und ADDR B werden auch dem Datenspeicher Array 200 zur Verfügung gestellt.
  • Während einer Ladeoperation stellt die Reservierungsstationsschaltung 124 der Lade/Speicher-Einheit 134 dem Daten-Cachespeicher 150 eine Adresse zur Verfügung; wenn diese Adresse einen Treffer im Cachespeicher erzeugt, dann stellt der Daten-Cachespeicher 150 der Reservierungsstationsschaltung 124 die Daten zur Verfügung, welche in der entsprechenden Bank und dem Block des Speicher Arrays 200 gespeichert sind. Falls die Adresse dem Daten-Cachespeicher 150 über den Anschluss A zur Verfügung gestellt wurde, dann werden die Daten der Reservierungsstationsschaltung 124 über den Anschluss A zur Verfügung gestellt; alternativ, wenn die Adresse dem Daten-Cachespeicher 150 über den Anschluss B zur Verfügung gestellt wurde, werden die Daten dann der Reservierungsstationsschaltung 124 über den Anschluss B zur Verfügung gestellt. Adressen werden dem Daten-Cachespeicher 150 gleichzeitig zur Verfügung gestellt wie Daten von dem Daten-Cachespeicher 150 über den Anschluss A und den Anschluss B empfangen werden.
  • Während einer Speicheroperation werden die Speicherdaten von der Reservierungsstationsschaltung 124 der Speicherpufferschaltung 180 zur Verfügung gestellt. Wenn die Speicheroperation frei gegeben wird, werden die Daten und die entsprechende Adresse, die gespeichert wird, über den IAD Bus 102 an den Daten-Cachespeicher 150 zur Verfügung gestellt.
  • Bezug nehmend auf 3 ist die Reservierungsstationsschaltung 124 eine Reservierungsstation mit doppeltem Zugriff, die als ein Zuerst Rein, Zuerst Raus (FIFO) Puffer funktioniert. Die Reservierungsstationsschaltung 124 enthält eine Eingang 0 Multiplexerschaltung 206, eine Eingang 1 Multiplexerschaltung 208 und vier Einträge in der Reservierungsstation RS0 210, RS1 211, RS2 212 und RS3 213 als auch eine Reservierungsstation 0 Addiererschaltung 216, eine Reservierungsstation 1 Addiererschaltung 218 und eine Reservierungsstation Treiberschaltung 220.
  • Die Multiplexerschaltungen 206, 208 empfangen als Eingänge die vier A Operandenbusse, die vier B Operandenbusse, die A und B Markierung Gültig Busse, die vier A Markierungsbusse, die vier B Markierungsbusse, die vier Zielmarkierungsbusse, die vier Opcode-Busse, die zwei INLS Busse und die zwei Versetzungsbusse. Die Multiplexerschaltungen 206, 208 empfangen auch die Busauswahlsignale von der Lade/Speicher-Steuerung 182. Die Busauswahlsignale werden basierend auf Übereinstimmungen bei der Typ Kodierung erzeugt.
  • Eine Übereinstimmung bei der Typ Kodierung tritt auf, wenn eine Typ Kodierung auf einem der vier Typ Kodierungsbusse der Typ Kodierung entspricht, welche der Lade/Speicher-Funktionseinheit zugewiesen ist. Wenn eine Typ Kodierung übereinstimmt, erzeugt die Lade/Speicher-Steuerung 182 ein Busauswahlsignal, das anzeigt, von welchem Bus Information geholt werden sollte. Die Reservierungsstationsschaltung 124 kann Signale von zwei Bussen gleichzeitig holen. Entsprechend werden von der Lade/Speicher-Steuerung 182 erste und zweite Sätze von Busauswahlsignalen für die Eingang 0 Multiplexerschaltung 206 beziehungsweise die Eingang 1 Multiplexerschaltung 208 erzeugt.
  • Unter der Steuerung des ersten Satzes der Busauswahlsignale stellt die Multiplexerschaltung 206 ein erstes gemultiplextes Reservierungsstation Eingangssignal (INPUT 0) zur Verfügung, das der Reservierungsstation als ein Eingangssignal zur Verfügung gestellt wird. Das INPUT 0 Signal enthält ein Signal von einem der A Operanden Busse, ein Signal von einem der B Operanden Busse, eine Markierung von einem der A Markierungsbusse, Markierung Gültig Bits, die der A Markierung entsprechen, von dem entsprechenden Markierung Gültig Bus, eine Markierung von einem der B Markierungsbusse, Markierung Gültig Bits, die der B Markierung entsprechen, von dem entsprechenden Markierung Gültig Bus, eine Zielmarkierung von einem der Zielmarkierungsbusse, ein Opcode von einem der Opcode-Busse und eine Versetzung von einem der Versetzungsbusse.
  • Unter der Steuerung des zweiten Satzes der Busauswahlsignale stellt die Multiplexerschaltung 208 ein zweites gemultiplextes Reservierungsstation Eingangssignal (INPUT 1) zur Verfügung, das der Reservierungsstation als ein zweites Eingangssignal zur Verfügung gestellt wird. Das INPUT 1 Signal enthält ein Signal von einem der A Operanden Busse, ein Signal von einem der B Operanden Busse, eine Markierung von einem der A Markierungsbusse, Markierung Gültig Bits, die der A Markierung entsprechen, von dem entsprechenden Markierung Gültig Bus, eine Markierung von einem der B Markierungsbusse, Markierung Gültig Bits, die der B Markierung entsprechen, von dem entsprechenden Markierung Gültig Bus, eine Zielmarkierung von einem der Zielmarkierungsbusse, ein Opcode von einem der Opcode-Busse und eine Versetzung von einem der Versetzungsbusse.
  • Die Einträge in der Reservierungsstation 210213 empfangen parallel jeweils die zwei Eingangssignale INPUT 0, INPUT 1, als auch die entsprechenden Lade und Schiebe Bits. Die Einträge in der Reservierungsstation 210213 empfangen auch Eingänge von jedem der vier Ergebnisbusse; diese Eingänge der Ergebnisbusse werden nur den A und B Operanden Bereichen des Eintrags zur Verfügung gestellt. Information wird von diesen Ergebnisbussen abgerufen basierend auf der A Operanden Markierung und der B Operanden Markierung. Wenn zum Beispiel eine A Operanden Markierung einen Treffer zu Information zur Verfügung stellt, die auf einem der Zielmarkierungsbusse ist, dann wird Information von dem entsprechenden Ergebnisbus geholt und in das A Operanden Feld des Eintrags der Reservierungsstation geladen.
  • Des weiteren empfängt der Eintrag der Reservierungsstation RS0 einen Eintrag der Reservierungsstation entweder von der Reservierungsstation RS0 oder RS1; der Eintrag der Reservierungsstation RS0 stellt einen Bereich des Eintrags der Reservierungsstation RS0 (den A Operanden Bereich) der Speicherpufferschaltung 180 als das RDATA A Signal zur Verfügung und stellt den gesamten Eintrag der Reservierungsstation RS0 dem R0 Addierer 216 zur Verfügung. Der R0 Addierer 216 verwendet diesen Eintrag der Reservierungsstation, um das ADDR A Signal zu erzeugen. Der Eintrag der Reservierungsstation RS1 empfängt einen Eintrag der Reservierungsstation entweder von der Reservierungsstation RS2 und RS3; der Eintrag der Reservierungsstation RS1 stellt einen Bereich des Eintrags der Reservierungsstation RS1 (den A Operanden Bereich) der Speicherpufferschaltung 180 als das RDATA B Signal zur Verfügung und stellt den gesamten Eintrag der Reservierungsstation RS1 dem R1 Addierer 218 zur Verfügung. Der R1 Addierer 218 verwendet diesen Eintrag der Reservierungsstation, um das ADDR B Signal zu erzeugen. Die Reservierungsstation RS2 empfängt einen Eintrag der Reservierungsstation von der Reservierungsstation RS3; der Eintrag der Reservierungsstation RS2 stellt den Eintrag der Reservierungsstation RS2 den Reservierungsstationen RS1 und RS0 zur Verfügung. Die Reservierungsstation RS3 stellt den Eintrag der Reservierungsstation RS3 den Reservierungsstationen RS2 und RS1 zur Verfügung.
  • Durch die Bereitstellung der parallelen Eingänge und Ausgänge von den Reservierungsstationen und auch der parallelen Struktur zur Weiterleitung, kann die Reservierungsstationsschaltung 124 entweder eine oder zwei Ladeoperationen pro Takt ausführen. Genauer gesagt steuert die Steuerung 182 unter Verwendung der Lade und Schiebe Signale das Laden und Schieben der Einträge der Reservierungsstationen, so dass entweder ein oder zwei Einträge der Reservierungsstationen in einem gegebenen Takt geladen oder geschoben werden können.
  • Wenn ein Eintrag der Reservierungsstation pro Takt ausgeführt wird, dann stellt die Reservierungsstation RS0 einen Eintrag der Reservierungsstation der RS0 Addiererschaltung 216 für sowohl die Lade- als auch die Speicheroperationen zur Verfügung; des weiteren stellt der Eintrag der Reservierungsstation für eine Speicheroperation RS0 den Eintrag der Reservierungsstation dem Speicherpuffer 180 zur Verfügung. Die Reservierungsstation RS1 stellt einen Eintrag der Reservierungsstation der Reservierungsstation RS0 zur Verfügung, die Reservierungsstation RS2 stellt einen Eintrag der Reservierungsstation der Reservierungsstation RS1 zur Verfügung und die Reservierungsstation RS3 stellt einen Eintrag der Reservierungsstation der Reservierungsstation RS2 zur Verfügung. Für eine Ladeoperation werden die Daten, welche der von der RS0 Addiererschaltung 216 erzeugten Adresse entsprechen, der Treiberschaltung 220 zur Verfügung gestellt.
  • Wenn zwei Einträge der Reservierungsstation pro Takt ausgeführt werden, dann stellen die Reservierungsstationen RS0 und RS1 jeweilige Einträge der Reservierungsstation den Addiererschaltungen 216, 218 für sowohl Lade- als auch Speicheroperationen zur Verfügung. Die Reservierungsstation RS2 und RS3 stellen Einträge der Reservierungsstation den Reservierungsstationen RS0 beziehungsweise RS1 zur Verfügung. Für Ladeoperationen werden die Daten, die den von den RS0 und RS1 Addiererschaltungen Adressen entsprechen, als DATA A und DATA B von dem Daten-Cachespeicher 150 zur Verfügung gestellt. Wenn pro Takt zwei Einträge der Reservierungsstation ausgeführt werden und eine Operation ein Ladevorgang und die andere Operation ein Schreibvorgang ist, dann wird der Eintrag von der Reservierungsstation, von der die Speicheroperation ausgeführt wird, dem Speicherpuffer 180 zur Verfügung gestellt.
  • Falls ein Ladevorgang einen Fehltreffer im Cachespeicher erzeugt, dann muss ein Lade-Fehltreffer Algorithmus ausgeführt werden. Da diese Ladeoperation spekulativ ist, wird die Fehltrefferoperation nicht eingeleitet, bevor der Ladevorgang in der nächsten ROP ist, um zurückgezogen zu werden. Deswegen hält der Ladevorgang in der Reservierungsstation und wartet auf das Freigabesignal von dem Umordnungspuffer. Eine Statusangabe wird zusammen mit der Zielmarkierung an den Umordnungspuffer zurück getrieben, um diese Bedingung anzuzeigen.
  • Bezug nehmend auf 4 enthält jeder Eintrag der Reservierungsstation 124 ein Gültig Bit für den Eintrag der Reservierungsstation (v), ein 40 Bit A Operanden Feld, ein 32 Bit B Operanden Feld, ein 32 Bit Versetzungsfeld, ein 4 Bit Zielmarkierung (DTAG) Feld, ein 8 Bit Opcode-Feld und ein 8 Bit zusätzliche Opcode-Information (INLS) Feld. Des weiteren enthält jeder Eintrag der Reservierungsstation auch eine 4 Bit A Operanden oberes Byte Markierung (A-TAGU), eine 4 Bit A Operanden mittleres Byte Markierung (ATAGM) und eine 4 Bit A Operanden unteres Byte Markierung (ATAGL), eine 4 Bit B Operanden oberes Byte Markierung (BTAGU), eine 4 Bit B Operanden mittleres Byte Markierung (BTAGM) und eine 4 Bit B Operanden unteres Byte Markierung (BTAGL), zusammen mit den entsprechenden A und B Operanden Markierung Gültig Bits. Jeder Eintrag der Reservierungsstation enthält auch ein entsprechendes Abbruchbit (C).
  • Die A Operanden oberes, mittleres und unteres Byte Markierungen sind Markierungen für obere, mittlere und untere Bereiche eines Integer Operanden. Der Integer Operand wird auf diese Weise unterteilt, weil es unter der x86 Architektur möglich ist, entweder auf das obere oder untere Byte des unteren Halbwortes, das untere Halbwort oder das gesamte 32 Bit Doppelwort eines x86 Integers zu verweisen. Entsprechend beziehen sich das M und das L auf das obere und untere Byte des unteren Halbwortes und das U bezieht sich auf das obere Halbwort für einen B Operanden und die verbleibenden oberen Bits für einen A Operanden (weil der verbleibende Bereich des A Operanden ent weder 16 Bit oder 32 Bit sein kann). Wenn auf das untere Halbwort verwiesen wird, werden die L und M Markierungen auf den gleichen Wert gesetzt. Alle drei Markierungen werden auf den gleichen Wert gesetzt, wenn auf einen 32 Bit verwiesen wird, der in dem Eintrag der Reservierungsstation anhängig ist.
  • Das Abbruchbit zeigt an, dass ein bestimmter Opcode abgebrochen werden sollte; dieses Bit wird gesetzt, wenn irgendein Opcode in einer falsch vorher gesagten Verzweigung ist. Der Opcode wird abgebrochen um zu verhindern, dass abgebrochene Speichervorgänge, die in dem Daten-Cachespeicher 150 treffen, die Speicherpufferschaltung 180 als Speichervorgänge betreten, die bei Ausführung den Zustand eines Eintrags aktualisieren, der in dem Daten-Cachespeicher 150 gespeichert ist. Ladevorgänge, die abgebrochen werden, geben nur die Ergebnisse zurück, wenn ein Treffer in dem Daten-Cachespeicher 150 vorhanden ist und sind daher nicht problematisch, da ein Ladevorgang keinen Zustand aktualisiert.
  • Das Gültig Bit des Eintrags der Reservierungsstation des Eintrags der Reservierungsstation ist mit dem Versendung Gültig Bit Bereich der INPUT 0 und INPUT 1 Signale verbunden. Jedes Eingangssignal Gültig Bit, das mit dem Absendungsbus gekoppelt ist, wird gesetzt, wenn das Absendung Gültig Bit gesetzt wird. Das A Operanden Feld des Eintrags der Reservierungsstation ist mit dem A Operandenbereich der INPUT 0 und INPUT 1 Eingangssignale gekoppelt. Das B Operanden Feld des Eintrags der Reservierungsstation ist mit dem B Operandenbereich der INPUT 0 und INPUT 1 Eingangssignale gekoppelt. Das Versetzungsfeld des Eintrags der Reservierungsstation ist mit dem Versetzungsbereich der INPUT 0 und INPUT 1 Eingangssignale gekoppelt. Das Zielmarkierungsfeld des Eintrags der Reservierungsstation ist mit dem Zielmarkierungsbereich der INPUT 0 und INPUT 1 Eingangssignale gekoppelt. Das Opcode-Feld des Eintrags der Reservierungsstation ist mit dem Opcode-Bereich der INPUT 0 und INPUT 1 Eingangssignale gekoppelt. Das zusätzliche Opcode-Information (INLS) Feld des Eintrags der Reservierungsstation ist mit dem INLS Bereich der INPUT 0 und INPUT 1 Eingangssignale über die INLS Busse gekoppelt.
  • Die A Operanden oberes Byte Markierung, die mittleres Byte Markierung und die unteres Byte Markierung des Eintrags der Reservierungsstation sind mit dem A Markierungsbereich der INPUT 0 und INPUT 1 Eingangssignale gekoppelt. Die B Operanden oberes Byte Markierung, die mittleres Byte Markierung und die unteres Byte Markierung des Eintrags der Reservierungsstation sind mit dem B Markierungsbereich der INPUT 0 und INPUT 1 Eingangssignale gekoppelt. Die A und B Operanden Markierung Gültig Bits des Eintrags der Reservierungsstation sind mit dem Markierung Gültig Bereich der INPUT 0 und INPUT 1 Eingangssignale gekoppelt. Das Abbruchbit des Eintrags der Reservierungsstation ist mit der Lade/Speicher-Steuerung 182 gekoppelt und wird gesetzt basierend auf der Steuerinformation, die von dem Umordnungspuffer 114 und der Verzweigungssektion 135 empfangen wird.
  • Die Typ Übereinstimmung Signale, die von der Lade/Speicher-Steuerung 182 erzeugt werden, bestimmen, ob beliebige Befehle an die Lade/Speicher-Funktionseinheit abgesendet worden sind. Wenn genauer gesagt die Lade/Speicher-Steuerung 182 feststellt, dass der Typ Code der Lade/Speicher-Funktionseinheit mit einem Typ Code übereinstimmt, der auf einem der vier TAD Busse zur Verfügung gestellt wird, dann wählt die Lade/Speicher-Steuerung 182 diese bestimmte Absendeposition für das INPUT 0 Signal aus. Wenn die Lade/Speicher-Steuerung 182 feststellt, dass der Typ Code der Lade/Speicher-Funktionseinheit mit einem Typ Code übereinstimmt, der auf einem anderen als den vier TAD Bussen zur Verfügung gestellt wird, dann wählt die Lade/Speicher-Steuerung 182 diese bestimmte Absendeposition für das INPUT 1 Signal aus.
  • Bezug nehmend auf 5 empfängt die RS0 Addiererschaltung 216 Komponenten der Adresse von der Reservierungsstation 210 und stellt das lineare Adresssignal ADDR A und auch ein Gültiger Segmentzugriff Signal zur Verfü gung. Die RS0 Addiererschaltung 216 enthält einen Addierer für logische Adressen 240 und einen Addierer für lineare Adressen 242. Der Addierer für logische Adressen 240 stellt dem Addierer für lineare Adressen 242 eine logische Adresse zur Verfügung. Der Addierer für logische Adressen 240 empfängt ein A Operanden Addierersignal von einem A Operanden Multiplexer 244, ein B Operanden Addierersignal von einem B Operanden Multiplexer 246 und ein Versetzung Addierersignal von einem Versetzungsmultiplexer 248.
  • Die A Operanden Multiplexerschaltung 244 empfängt den A Operanden von dem Eintrag der Reservierungsstation 210, ebenso wie die Quantität 0; der Wert, der multiplext wird und als das A Operanden Addierersignal zur Verfügung gestellt wird, wird durch die Steuerinformation für den Adressmodus bestimmt, die von der Lade/Speicher-Steuerung 182 empfangen wird. Die B Operanden Multiplexerschaltung 246 empfängt einen skalierten B Operanden von einer Schiebeschaltung 247. Der B Operand wird skaliert basierend auf dem Skalierungssignal, das von dem Befehlsdekodierer 108 über die INLS Busse empfangen wird. Die B Operanden Multiplexerschaltung 246 empfängt auch eine Startadresse, die in einem Startadress-Register 249 unter der Steuerung der Lade/Speicher-Steuerung 182 gespeichert wird, und die falsch ausgerichteter Zugriff 1 Adresse, die in einem falsch ausgerichteter Zugriff Register 451 von einem vorherigen falsch ausgerichteten Zugriff gespeichert ist; der Wert, der multiplext wird und als das B Operanden Addierersignal zur Verfügung gestellt wird, wird durch die Steuerinformation für den Adressmodus bestimmt. Die Versetzungsmultiplexerschaltung 248 empfängt die Versetzungskomponente der Adresse von dem Eintrag der Reservierungsstation 210. Die Versetzungsmultiplexerschaltung 248 empfängt auch die Quantitäten vier, fünf, minus vier und minus zwei; der Wert, der multiplext wird und als das Versetzung Addierersignal zur Verfügung gestellt wird, wird durch die Steuerinformation für den Adressmodus bestimmt.
  • Für eine Ladeoperation mit ausgerichtetem Zugriff wird der A Operand von dem Multiplexer 244 ausgewählt, der B Operand wird von dem Multiplexer 246 ausgewählt und die Versetzung wird von 248 ausgewählt. Für eine Ladeoperation mit falsch ausgerichtetem Zugriff, das heißt jeglicher Zugriff, der eine Grenze des Doppelworts überschreitet, wird die erste falsch ausgerichtete Zugriffsadresse als eine normale Ladeoperation erzeugt und der Addierer 240 erzeugt eine falsch ausgerichteter Zugriff 1 Adresse. Das falsch ausgerichteter Zugriff 1 Register 251 hält diese falsch ausgerichteter Zugriff 1 Adresse. In dem nächsten. Taktzyklus wird der Wert 0 von dem A Operanden Multiplexer 244 ausgewählt und der Wert 4 wird von dem B Operanden Multiplexer 246 ausgewählt und die falsch ausgerichteter Zugriff 1 Adresse wird von dem Multiplexer 248 ausgewählt, was den Addierer 240 veranlasst, die Quantität 4 zu der falsch ausgerichteter Zugriff 1 Adresse zu addieren. Für eine vielfach ROP Operation, zum Beispiel eine 64 Bit Ladeoperation, wird die erste Zugriffsadresse als eine normale Ladeoperation erzeugt und der Addierer 240 erzeugt eine vielfach ROP Startadresse. Das Startadress-Register 249 hält diese Start Adresse. Wenn auf die zweite ROP zugegriffen wird, wird die zweite ROP Adresse gebildet durch die Addition der Startadresse von dem Multiplexer 248 und dem Wert 4 von dem Multiplexer 246. Für eine 80 Bit vielfach ROP Operation wird der Wert 5 von dem Multiplexer 246 zur Verfügung gestellt. Jede vielfach ROP Operation kann falsch ausgerichtet sein; in diesem Fall ist die Startadresse funktional die gleiche wie die falsch ausgerichtete Zugriff 1 Adresse. Für eine PUSH Operation wird ein Wert von der B Operanden Adresse subtrahiert, abhängig von der Größe des Zugriffs der Operation. Falls die Größe des Zugriffs ein Doppelwort ist, dann wird der Wert 4 subtrahiert; falls die Größe des Zugriffs ein Wort ist, dann wird der Wert 2 subtrahiert. Der Skalierungsfaktor, der die Schiebeschaltung 247 steuert, wird von der Lade/Speicher-Steuerung 182 basierend auf der INLS Information erzeugt.
  • Die Addiererschaltung 216 enthält auch ein Segmentdeskriptor-Array 250 und eine Grenzüberprüfungsschaltung 252. Das Segmentdeskriptor-Array 250 stellt der Grenzüberprüfungsschaltung 252 ein Segmentgrenzsignal und der Addiererschaltung 242 ein Segmentbasis Adresssignal zur Verfügung. Die Grenzüberprüfungsschaltung 252 empfängt auch die logische Adresse von dem Addierer für logische Adressen 240 und stellt ein Gültiger Segmentzugriff Signal zur Verfügung, das anzeigt, dass die logische Adresse in den Grenzen des Segments ist, wie von der Grenze gesetzt, die von dem Segmentdeskriptor-Array 250 zur Verfügung gestellt wird.
  • Die Addiererschaltung 240 empfängt das A Operanden Addierersignal, das B Operanden Addierersignal und das Versetzung Addierersignal und addiert diese Signale, um ein logische Adresse Signal zur Verfügung zu stellen. Die Addiererschaltung 242 addiert die Segmentbasis Adresse, die von dem Segmentdeskriptor-Array 250 empfangen wird, zu der logischen Adresse, um die lineare Adresse zur Verfügung zu stellen.
  • Der RS1 Addierer 218 ist ähnlich zu dem RS0 Addierer, mit der Ausnahme, dass der RS1 Addierer 218 den Multiplexer 248 nicht enthält, weil nicht ausgerichtete Zugriffe nur unter Verwendung der RS0 Reservierungsstation ausgeführt werden. In dem RS1 Addierer 218 wird die Versetzung dem Addierer 240 direkt als das Versetzung Addierersignal zugeführt. Des weiteren wird, weil nicht ausgerichtete Zugriffe nicht durchgeführt werden, der Multiplexer 246 für den RS1 Addierer 218 nicht mit den Werten 4 und 5 beliefert.
  • Bezug nehmend auf 6 enthält der Speicherpuffer vier Einträge im Speicherpuffer SB0 300, SB1 302, SB2 304 und SB3 303 sowie eine Anschluss A Zusammenführungsschaltung 306 und eine Anschluss B Zusammenführungsschaltung 308. Die Anschluss A Zusammenführungsschaltung 306 empfängt das Anschluss A Datensignal von dem Daten-Cachespeicher 150 und das Anschluss A Datensignal von dem Eintrag der Reservierungsstation RS0 der Reservierungsstationsschaltung 124 und führt diese Signale zusammen, um ein zusammengeführtes A Daten Signal den Einträgen im Speicherpuffer SB0– SB3 zur Verfügung zu stellen. Die Anschluss B Zusammenführungsschaltung 306 empfängt das Anschluss B Datensignal von dem Daten-Cachespeicher 150 und das Anschluss B Datensignal von dem Eintrag der Reservierungssta tion RS1 der Reservierungsstationsschaltung 124 und führt diese Signale zusammen, um ein zusammengeführtes B Daten Signal den Einträgen im Speicherpuffer SB0–SB3 zur Verfügung zu stellen. Durch die Bereitstellung der Zusammenführungsschaltungen 306, 308 wird eine Steuerfunktion zur Verfügung gestellt.
  • Zum Beispiel könnte ein Byte des vier Byte DATA A Signals aktualisiert worden sein, wenn es von der Reservierungsstationsschaltung 124 zur Verfügung gestellt wird. Dieses aktualisierte Byte wird dann mit den drei verbleibenden Bytes des DATA A Signals, das von dem Daten-Cachespeicher 150 zur Verfügung gestellt wird, zusammengeführt. Die Zusammenführungsschaltungen 306, 308 werden von der Lade/Speicher-Steuerung 182 basierend auf der Größe des Zugriffs, den niederwertigsten zwei Bits der linearen Adresse und ob ein Zugriff ein falsch ausgerichteter Zugriff 1 oder ein falsch ausgerichteter Zugriff 2 ist, gesteuert. Die Steuerfunktion, die von den Zusammenführungsschaltungen 306, 308 zur Verfügung gestellt wird, ist möglich, weil Speichervorgänge behandelt werden wie lesemodifizierende Schreiboperationen. Durch die Bereitstellung dieser Steuerfunktion erfordert der Daten-Cachespeicher 150 keine komplexe Steuerungsschaltung, weil alle Zugriffe auf den Daten-Cachespeicher 150 32 Bit Doppelwortzugriffe sind. Des weiteren ist, egal welche Information in dem Eintrag des Speicherpuffers ist, dies ein Spiegelbild von dem, was in dem Daten-Cachespeicher 150 gespeichert werden wird, wodurch der Lade/Speicher-Funktionseinheit 134 erlaubt wird, eine Ladeweiterleitungsoperation zur Verfügung zu stellen. Bei einer Ladeweiterleitungsoperation können Ladevorgänge durchgeführt werden, bevor Speichervorgänge tatsächlich in dem Daten-Cachespeicher 150 gespeichert sind, durch Zugreifen auf die Einträge des Speicherpuffers; die Ladeweiterleitung entfernt Speicheroperationen aus dem kritischen Zeitablaufpfad des Mikroprozessors.
  • Jeder Eintrag des Speicherpuffers empfängt auch Eingangssignale von den vier Ergebnisbussen, die ADDR A und ADDR B Adresssignale von der Reservierungsstation 124 und die TAG A und TAG B Markierung Signale von der Reservierungsstation 124 und auch Steuersignale von der Lade/Speicher-Steuerung 182. Diese Steuersignale umfassen die Lade Signale und die Schiebe Signale. Des weiteren empfängt der Eintrag des Speicherpuffers SB0 einen Ausgang von dem Eintrag des Speicherpuffers SB1 und stellt einen Speicherausgang zu dem IAD Bus 102 zur Verfügung. Der Eintrag des Speicherpuffers SB1 empfängt einen Ausgang des Eintrags des Speicherpuffers von dem Eintrag des Speicherpuffers SB2 und empfängt auch einen Ausgang des Eintrags des Speicherpuffers von dem Eintrag des Speicherpuffers SB0 und stellt einen Ausgang des Eintrags des Speicherpuffers an SB0 zur Verfügung. Der Eintrag des Speicherpuffers SB2 empfängt einen Ausgang des Eintrags des Speicherpuffers von dem Eintrag des Speicherpuffers SB3 und empfängt auch einen Eintrag von den Einträgen des Speicherpuffers SB0 und SB1 und stellt einen Ausgang des Eintrags des Speicherpuffers an SB1 zur Verfügung. Der Speicherpuffer SB3 empfängt einen Ausgang des Eintrags des Speicherpuffers von den Einträgen des Speicherpuffers SB0, SB1 und SB2 und stellt einen Ausgang des Eintrags des Speicherpuffers an SB2 zur Verfügung.
  • Durch die Bereitstellung der Einträge des Speicherpuffers SB1–SB3 mit der Rückkopplung von den niederwertigsten Einträgen des Speicherpuffers ist eine Speicherweiterleitungsoperation möglich. Zum Beispiel wird der Eintrag des Speicherpuffers SB0 den höherwertigen Einträgen des Speicherpuffers SB1– SB3 zur Verfügung gestellt, um diesen Einträgen des Speicherpuffers zu erlauben, den Eintrag des Speicherpuffers SB0 mit den höherwertigen Einträgen zu kombinieren, wenn Einträge die gleiche lineare Adresse haben. Entsprechend enthält er, wenn der Eintrag des Speicherpuffers gespeichert wird, alle Modifikationen an diesem Eintrag. Die Speicherweiterleitungsfunktion wird detaillierter unten diskutiert.
  • Die Speicherweiterleitung erlaubt es dem System zu operieren, ohne dass eine Reservierungsstation angehalten werden muss, bis ein vorheriger Speichervorgang in dem Daten-Cachespeicher 150 gespeichert ist. Weil bei der x86 Architektur eine erhebliche Anzahl von aufeinander folgenden Bytezugrif fen auftritt, verbessert die Speicherweiterleitung die Geschwindigkeit erheblich, mit der Ladevorgänge durchgeführt werden, durch die Entfernung der Abhängigkeit einer Ladeoperation von einer Speicheroperation.
  • Bezug nehmend auf 7 enthält jeder Eintrag des Speicherpuffers SB0– SB3 der Speicherpufferschaltung 180 die Information, die in einem Eintrag des Speicherpuffers 339 gehalten ist. Der Eintrag des Speicherpuffers 339 enthält ein 32 Bit Daten Doppelwort 340, einen Markierungsbereich 341, eine 32 Bit lineare Adresse 342 und einen Steuerinformationsbereich 344. Das Datendoppelwort 340 enthält vier Datenbytes, Datenbyte 0 – Datenbyte 3.
  • Der Markierungsbereich 341 enthält vier Bytemarkierungsbereiche, die den Datenbytes 0–3 entsprechen. Der Byte 0 Markierungsbereich enthält eine Byte 0 Markierung (Markierungsbyte 0), ein Byte 0 Steuerbit (B0) und ein Byte 0 Markierung Gültig Bit (TV). Der Byte 1 Markierungsbereich enthält eine Byte 1 Markierung (Markierungsbyte 1), ein Byte 1 Steuerbit (B1) und ein Byte 1 Markierung Gültig Bit (TV). Der Byte 2 Markierungsbereich enthält eine Byte 2 Markierung (Markierungsbyte 2), Byte 2 Steuerbits (B0, B1) und ein Byte 2 Markierung Gültig Bit (TV). Der Byte 3 Markierungsbereich enthält eine Byte 3 Markierung (Markierungsbyte 3), Byte 3 Steuerbits (B0, B1) und ein Byte 3 Markierung Gültig Bit (TV).
  • Die Bytemarkierungen Markierungsbyte 0–3 stellen Markierungen zur Verfügung, um die Datenbytes 0–3 von den Ergebnisbussen zu holen. Die Bytesteuerbits zeigen an, von welchem Ergebnisbusbyte ein Datenbyte geholt werden soll. Genauer gesagt zeigt es an, wenn das Byte 0 Steuerbit B0 gesetzt ist, dass Daten von einem Ergebnisbusbyte 1 weiter geleitet werden sollen; falls das Byte 0 Steuerbit B0 nicht gesetzt ist, dann sollten Daten von einem Ergebnisbusbyte 0 weiter geleitet werden. Wenn das Byte 1 Steuerbit B1 gesetzt ist, zeigt dies an, dass Daten von einem Ergebnisbusbyte 0 weiter geleitet werden sollen; falls das Byte 1 Steuerbit B1 nicht gesetzt ist, dann sollten Daten von einem Ergebnisbusbyte 1 weiter geleitet werden. Wenn das Byte 2 Steuerbit B1 gesetzt ist, zeigt dies an, dass Daten von einem Ergebnisbusbyte 1 weiter geleitet werden sollen und wenn das Byte 2 Steuerbit B0 gesetzt ist, zeigt dies an, dass Daten von einem Ergebnisbusbyte 0 weiter geleitet werden sollen; falls die Byte 2 Steuerbits B0 und B1 nicht gesetzt sind, dann sollten Daten von einem Ergebnisbusbyte 2 weiter geleitet werden. Wenn das Byte 3 Steuerbit B1 gesetzt ist, zeigt dies an, dass Daten von einem Ergebnisbusbyte 1 weiter geleitet werden sollen und wenn das Byte 3 Steuerbit B0 gesetzt ist, zeigt dies an, dass Daten von einem Ergebnisbusbyte 0 weiter geleitet werden sollen; falls die Byte 3 Steuerbits B0 und B1 nicht gesetzt sind, dann sollten Daten von einem Ergebnisbusbyte 3 weiter geleitet werden. Die Bytemarkierung Gültig Bits TV zeigen an, dass das entsprechende Markierungsfeld eine gültige Bytemarkierung enthält.
  • Die Markierungen des Speicherpuffers zeigen an, dass die tatsächlichen Bytestellen in dem Speicher hingegen mit den Markierungen der Reservierungsstation, es keine eins zu eins Entsprechung zwischen der Markierung und der Stelle gibt. Mit den Markierungen der Reservierungsstation können die L und M Markierungen auf beliebige Stellen in den Markierungen des Speicherpuffers abgebildet werden. Nicht ausgerichtete Zugriffe mit gültigen Markierungen sind in dem Speicherpuffer nicht erlaubt. Für Speichervorgänge mit nicht ausgerichtetem Zugriff warten die Einträge der Reservierungsstation Rs0 und RS1, bis gültige Daten von der Reservierungsstation empfangen werden und dann werden die Daten dem Speicherpuffer als zwei Einträge des Speicherpuffers zur Verfügung gestellt.
  • Der Steuerbereich 344 enthält ein Speicherpuffer Eintrag Gültig Bit (V), ein 2 Bit nicht ausgerichteter Zugriff Steuer Signal (UA), ein Schreibschutzbit (WP), ein nicht zwischen speicherbares Speicherbit (NC), ein Eingangs/Ausgangs Zugriffsbit (IO), ein Gleitkomma Aktualisierungszeiger Bit (FP), ein physikalischer Zugriff Bit (P), ein verriegelter Zugriff Bit (L) und ein 2 Bit Spalten Hinweis Bit (C1). Das Speicherpuffer Eintrag Gültig Bit zeigt an, dass der bestimmte Eintrag gültig ist, das heißt dass dort eine beliebige gültige Informa tion in diesem Eintrag des Speicherpuffers gespeichert ist. Das nicht ausgerichteter Zugriff Steuer Signal zeigt an, welcher Bereich, das heißt der erste oder der zweite Bereich, eines nicht ausgerichteten Zugriffs in dem Eintrag gespeichert ist. Das nicht zwischen speicherbare Speicherbit zeigt an, dass der Eintrag des Speichervorgangs nicht zwischen speicherbar ist und dass entsprechend der Eintrag nicht in den Daten-Cachespeicher 150 geschrieben werden sollte. Das I/O Zugriffsbit zeigt dem externen Interface an, dass ein I/O Zugriff auftritt. Das physikalischer Zugriff Bit zeigt an, dass die Speicherverwaltungseinheit von der linearen zu der physikalischen Übersetzung ausweichen sollte, weil die Speicheradresse eine physikalische Adresse ist; dies geschieht wenn die Lade/Speicher-Funktionseinheit entweder das Seitenverzeichnis oder den TLB der Speicherverwaltungseinheit 164 aktualisiert. Das verriegelter Zugriff Bit zeigt an, den externen Bus zu entriegeln, der von einem vorherigen Ladevorgang verriegelt worden sein könnte. Das Spalten Hinweis Signal zeigt eine von vier Spalten in dem Daten-Cachespeicher an, in die geschrieben wird; entsprechend ist kein Bedarf, einen Nachschlagevorgang nach einer Spalte in dem Daten-Cachespeicher 150 durchzuführen, wenn eine Speicheroperation durchgeführt wird.
  • Bezug nehmend auf 8 ist die Schaltung SB2 für den Eintrag des Speicherpuffers 302 als ein Beispiel für jede Schaltung für den Eintrag des Speicherpuffers gezeigt. Die Schaltung für den Eintrag des Speicherpuffers 302 enthält ein Register für den Eintrag des Speicherpuffers 360 und auch Bytedaten Multiplexer für den Eintrag des Speicherpuffers 362, 363, 364, 365, die den Datenbytes 0–3 des Eintrags im Speicherpuffer 339 entsprechen, einen Markierung Multiplexer für den Eintrag des Speicherpuffers 370, welcher den Markierungen des Eintrags im Speicherpuffer 339 entspricht, und einen Adress-Multiplexer für den Eintrag des Speicherpuffers 372, welcher der Adresse des Eintrags im Speicherpuffer Multiplexer 339 entspricht. Die Schaltung für den Eintrag des Speicherpuffers 302 enthält auch eine Schaltung zum Vergleichen von Markierungen 374 und eine Schaltung zum Vergleichen von Adressen 376. Das Register für den Eintrag des Speicherpuffers 360 enthält ein Register für den Dateneintrag des Speicherpuffers 380, ein Register für den Markierungseintrag des Speicherpuffers 384 und ein Register für den Steuereintrag des Speicherpuffers 386.
  • Die Schaltung des Registers für den Eintrag des Speicherpuffers 360 ist ein Register, das einen Eintrag im Speicherpuffer 339 parallel von den Bytedaten Multiplexern für den Eintrag des Speicherpuffers 362365, dem Markierung Multiplexer 370 und dem Adress-Multiplexer 372 empfängt, und einen Eintrag im Speicherpuffer 339 den Schaltungen für den Eintrag im Speicherpuffer SB1 und SB3 parallel zur Verfügung stellt. Des weiteren stellt das Register für den Dateneintrag des Speicherpuffers 380 die Datenbytes 0–3 dem Datenanschluss A und dem Datenanschluss B der Mischerschaltung der Reservierungsstation 220 zur Verfügung. Diese Datenbytes werden zur Verfügung gestellt, um es der Lade/Speicher-Funktionseinheit 134 zu erlauben, eine Ladeweiterleitungsoperation durchzuführen.
  • Die Byte Multiplexer Schaltungen 362365 empfangen jeweilige Bytes von der A Zusammenführungsschaltung 306, der B Zusammenführungsschaltung 308 und den vier Ergebnisbussen, als auch von den Schaltungen für den Eintrag des Speicherpuffers SB3, SB0 und SB1. Die Byte Multiplexer Schaltungen 362365 werden von den Steuersignalen des Speicherpuffers gesteuert, die von der Lade/Speicher-Steuerung 182 basierend auf den linearen Adressen für jeden Eintrag des Speicherpuffers und Übereinstimmungen der linearen Adressen aus Einträgen in der Reservierungsstation zur Verfügung gestellt werden. Die Ergebnisbusse werden von den Steuersignalen des Speicherpuffers gesteuert, die von der Lade/Speicher-Steuerung 182 basierend darauf, ob ein Markierung Gültig Bit für ein bestimmtes Byte vorhanden ist, zur Verfügung gestellt werden. Falls das Markierung Gültig Byte für ein bestimmtes Byte gesetzt ist, dann überwacht dieses bestimmte Byte die Ergebnisbusse und multiplext welchen Ergebnisbus auch immer, der einen Wert hat, der mit der Markierung übereinstimmt.
  • Zum Beispiel empfängt die Byte Multiplexerschaltung 362 die Byte 0 Daten von jedem der A Zusammenführungssignal, B Zusammenführungssignal, der vier Ergebnissignale und den Einträgen im Speicherpuffer SB3, SB0 und SB1. Basierend auf den Steuersignalen des Speicherpuffers stellt die Byte Multiplexerschaltung 362 eines von jedem der Datenbytes als den SB2 Eintrag des, Speicherpuffers zur Verfügung, der in der Registerschaltung für den Eintrag des Speicherpuffers 360 gehalten wird.
  • Jedes Byte, das in dem Register für den Eintrag des Speicherpuffers 360 gespeichert ist, ist eine direkte Abbildung von dem, was im Speicher gespeichert ist, entsprechend ist eine Bytesteuerung zur Verfügung gestellt, um die Datenbytes, die dem entsprechen, was im Speicher gespeichert ist, anzuordnen. Die Bytesteuerung wird zur Verfügung gestellt, indem die Byte Multiplexer 0 362 und Byte Multiplexer 1 363 bereit gestellt werden mit parallelen Eingängen von den vier Byte 0's der Ergebnisbusse und den vier Byte 1 der Ergebnisbusse, der Bereitstellung des Byte Multiplexers 2 364 mit parallelen Eingängen von den vier Byte 0's der Ergebnisbusse, den vier Byte 1's der Ergebnisbusse und den vier Byte 2's der Ergebnisbusse, und der Bereitstellung des Byte Multiplexers 3 365 mit parallelen Eingängen von den vier Byte 0's der Ergebnisbusse, den vier Byte 1's der Ergebnisbusse und den vier Byte 3's der Ergebnisbusse. Die 2 und 3 der Multiplexer 364, 365 empfangen die Bytes 0 und 1 der Ergebnisbusse, weil die L und M Bytes des Ergebnissignals jeder einzelnen der Bytepositionen in dem Speicherpuffer entsprechen könnten. Wohingegen das Ergebnisbyte 2 nur dem Datenbyte 2 entsprechen kann und das Ergebnisbyte 3 nur dem Datenbyte 3 entsprechen kann.
  • Der Adress-Multiplexer 372 empfängt das ADDR A Signal und das ADDR B Signal von der Reservierungsstation 124 und stellt eine dieser drei Adressen dem Adressregister des Speicherpuffers 382 als die lineare Adresse 342 zur Verfügung. Das Adressregister des Speicherpuffers 382 stellt den Adressbereich 342 des Eintrags im Speicherpuffer 339 dem Adressbereich 342 des Eintrags im Speicherpuffer 339 zur Verfügung, um die Adressvergleichsschaltung 372 zu adressieren, die auch die ADDR A und ADDR B Signale von der Reservierungsstation 124 empfängt. Die Adressvergleichsschaltung 372 vergleicht jeden Taktzyklus die ADDR A und die ADDR B Signale mit den linearen Adressen 342. Falls es eine Übereinstimmung zwischen ADDR A oder ADDR B und der linearen Adresse 342 gibt, dann veranlasst die Lade/Speicher-Steuerung 182 die Reservierungsstation 124, die Daten aus dem Register für den Dateneintrag des Speicherpuffers 380 über den Anschluss zu lesen, welcher der Übereinstimmung bei dem Vergleich der Adressen entspricht, anstatt über den entsprechenden Anschluss des Daten-Cachespeichers 150.
  • Der Markierung Multiplexer 370 empfängt die Markierungen von den Einträgen im Speicherpuffer SB0, SB1 und SB3. Der Markierung Multiplexer 370 empfängt auch Markierungen von den A und B Markierungen des Eintrags in der Reservierungsstation. Markierungsbytes, die in dem Markierungsregister 384 gehalten werden und einer Weiterleitung unterworfen sind, aber das Markierungsregister 384 empfängt keine Markierungseingänge von den Ergebnisbussen. Die Markierungen von den Ergebnisbussen werden von der Steuerschaltung für Markierungen 374 überwacht. Wenn eine Markierung, die von dem Markierungsregister 384 gehalten wird, mit einer Markierung von einem der Ergebnisbusse übereinstimmt, dann steuert die Steuerschaltung für Markierungen 374 die Byte Multiplexer 362365, um den Ergebnisbus, der die übereinstimmende Markierung zur Verfügung stellt, zu veranlassen, die Daten dem entsprechenden Datenregister des Speicherpuffers zur Verfügung zu stellen.
  • Der Steuerbereich 344 des Eintrags im Speicherpuffer 339 wird von der Lade/Speicher-Steuerung 182 dem Register für den Steuerregister des Speicherpuffers 386 zur Verfügung gestellt.
  • Die Schaltungen der Einträge des Speicherpuffers SB0, SB1 und SB3 unterscheiden sich nur in den Eingangssignalen, die von den anderen Einträgen im Speicherpuffer zur Verfügung gestellt werden. Genauer gesagt empfängt der Eintrag im Speicherpuffer SB0 nur den Ausgang von dem Eintrag im Speicherpuffer SB1. Der Eintrag im Speicherpuffer SB1 empfängt den Ausgangeintrag von dem Speicherpuffer SB0 und SB2. Der Eintrag im Speicherpuffer SB3 empfängt die Ausgangeinträge von den Speicherpuffern SB0, SB1 und SB2.
  • Bezug nehmend auf die 68 stellt der Speicherpuffer 180 einen temporären Speicher für anhängige Speicheroperationen zur Verfügung. Durch die Verwendung der Speicherbytemarkierungen müssen diese anhängigen Speicheroperationen nicht notwendigerweise abgeschlossene Speicherdaten haben. Des weiteren führt der Speicherpuffer 180 Speicherweiterleitungsoperationen durch, indem die Speicherbytemarkierungen zusammen mit der Rückkopplung des Eintrags des Speicherpuffers verwendet werden. Des weiteren, weil Ladeoperationen abhängig von Speicheroperationen sein können, die noch nicht in dem Daten-Cachespeicher 150 gespeichert worden sind, kann der Speicherpuffer 180 Ladeweiterleitungsoperationen durchführen.
  • Zum Beispiel, für einen Doppelwort Speichervorgang eines Registers mit einer anhängigen 32 Bit Aktualisierung, sind die Byte Markierungen 0–3 gültig in dem Eintrag der Reservierungsstation, wie von den entsprechenden Markierung Gültig Bits angezeigt. Eine Aktualisierung ist anhängig, wenn eine Funktionseinheit dabei ist, einen Wert für eine Speicheroperation zu erzeugen, aber noch nicht hat. Falls der Zugriff auf einen Cachespeicher einen Treffer im Cachespeicher erzeugt, überträgt die Speicheroperation von dem Eintrag der Reservierungsstation RS0 zu der Speicherpufferschaltung 180. Die A Operanden oberes Byte Markierung ATAGU des Eintrags der Reservierungsstation wird als Byte 3 und Byte 2 in dem Eintrag des Speicherpuffers vervielfältigt. Die ATAGL und ATAGM Byte Markierungen der Reservierungsstation werden als die Byte 0 beziehungsweise Byte 1 Markierung des Speicherpuffers zur Verfügung gestellt. (Für den Fall eines Doppelwort Schreibvorgangs sind alle diese Markierungen tatsächlich gleich). Keines der Byte Steuerbits B0 und B1 sind gesetzt. Wenn das Ergebnis von der Funktionseinheit verfügbar gemacht ist, vergleicht der Speicherpuffer 180 jede Byte Markierung mit den auf den Ergebnisbussen erscheinenden Markierungen, unter Verwendung der Schaltung zum Vergleichen von Markierungen 374 und füllt unter Verwendung der Multiplexer 362365 Daten von dem entsprechenden Byte auf dem Ergebnisbus ein, wann immer eine Übereinstimmung bei einer Markierung auftritt. In dem Fall eines Doppelwort Speichervorgangs stimmt jedes Byte gleichzeitig überein.
  • Für einen Doppelwort Speichervorgang eines Registers mit einem anhängigen Doppelwort und einer nachfolgenden anhängigen Byteaktualisierung zu einem Byte des gleichen Doppelworts erscheinen zumindest zwei Markierungen in dem endgültigen Doppelwort; die gleiche Markierung wird für die Bytes 1, 2 und 3 verwendet und eine unterschiedliche Markierung wird für das Byte 1 verwendet. Diese unterschiedliche Markierung stellt dar, dass der zweite Byte Speichervorgang aufgetreten ist. Genauer gesagt wird das erste Doppelwort in dem Eintrag des Speicherpuffers SB0 mit vier Gültig Markierungen gespeichert und der Byte Speichervorgang wird in dem höherwertigen Eintrag des Speicherpuffers SB1 mit einer neuen Markierung gespeichert, die in dem Byte 1 platziert wird, während die Markierungen von den Bytes 0, 2 und 3 von SB0 weiter geleitet werden. Entsprechend wird die Speicherweiterleitung erreicht, welche das Byte 1 Ergebnis auf dem Ergebnisbus zur Verfügung stellt und das Byte 1 Ergebnis in den Doppelwort Eintrag des Speicherpuffers ohne Steuerung schreibt, indem die Bytesteuerbits verwendet werden.
  • Für einen Wort Speichervorgang eines Wortregisters mit einer anhängigen Aktualisierung der Bytes 2 und 3 im Speicher, werden die Markierungen für die Bytes 0 und 1 in den Bytes 2 und 3 platziert, wobei das B1 Bit im Byte 3 gesetzt ist und das B0 Bit im Byte 2 gesetzt ist. Wenn diese Markierung auf den Ergebnisbus getrieben wird, werden diese Bytes gleichzeitig von den Bytes 0 und 1 auf den Ergebnisbus weiter geleitet, der dieser Markierung in dem Datenregister des Speicherpuffers 380 entspricht. Dieses Beispiel gilt auch für den Fall, in dem zwei anhängige Byteaktualisierungen für ein Wort da sind, das in einem Eintrag des Speicherpuffers gespeichert ist. Die beiden Bytes in dem Eintrag des Speicherpuffers leiten von verschiedenen Ergebnisbussen weiter, möglicherweise zu der gleichen Zeit.
  • Für einen Byte Speichervorgang wird ein einzelnes Byte mit einer Markierung ersetzt, die das B1 oder B0 Bit gesetzt hat, abhängig davon, ob das Quellbyte ein hohes Byte oder ein niedriges Byte ist. Wenn diese Markierung übereinstimmt, füllt sie Daten von dem angezeigten Byte des Ergebnisbusses ein. Dies funktioniert sogar für einen Byte Speichervorgang eines Registers, das eine anhängige Wort oder Doppelwort Aktualisierung hat. In diesem Fall wird das Byte an der entsprechenden Stalle auf dem Ergebnisbus erwartet, sogar wenn der gesamte Bus gültige Daten enthalten könnte.
  • Manchmal kann bei der Durchführung einer Speicheroperation die Lesephase des Speichervorgangs Daten empfangen, die von einem niederwertigeren Eintrag des Speicherpuffers statt von dem Daten-Cachespeicher 150 weiter geleitet werden. Als ein Ergebnis fügt der Speicherpuffer 180 eine Markierung in ein Datenwort ein, das bereits eine Markierung in sich hat. Dies kann zum Beispiel geschehen, wenn innerhalb einer kurzen Zeitspanne mehr als ein Byte in das gleiche Doppelwort geschrieben wird. Entsprechend kann die Information, die in dem Eintrag des Speicherpuffers gespeichert ist, mehr als eine Markierung enthalten, wobei jede ein unterschiedliches Ergebnis repräsentiert. Während des Betriebs vergleicht jede Markierung gegenüber den Ergebnisbussen und füllt das geeignete Byte zu dem richtigen Zeitpunkt ein. Weil nicht ausgerichtete Speichervorgänge zum Schreiben von Markierungen in den Speicherpuffer 180 nicht erlaubt sind, treten Fälle einer merkwürdigen Weiterleitung nicht auf.
  • Wenn eine Ladeoperation durchgeführt wird, vergleicht die Schaltung zum Vergleichen von Adressen 376 des Speicherpuffers 180 die lineare Adresse, welche von den RS0 und RS1 Addierern zur Verfügung gestellt werden, mit den linearen Adressen der Einträge des Speicherpuffers. Falls es eine Übereinstimmung zwischen der Ladeadresse und der in einem der Einträge des Spei cherpuffers gespeicherten Adresse gibt, wie es durch das Treffersignal angezeigt wird, das die Schaltung zum Vergleichen von Adressen 376 zur Verfügung stellt, stellt die Lade/Speicher-Steuerung 182 fest, dass der Ladevorgang von dem Speichervorgang abhängig ist. Falls der Ladevorgang von dem Speichervorgang abhängig ist, werden die Daten von dem Eintrag des Speicherpuffers, der die übereinstimmende lineare Adresse zur Verfügung stellte, über welchen Anschluss auch immer, über den die übereinstimmende Adresse geliefert wurde, zur Verfügung gestellt. Diese Operation wird als eine Ladeweiterleitungsoperation bezeichnet.
  • Bezug nehmend auf 9 ist der Daten-Cachespeicher 150 ein linear adressierter Cachespeicher. Die parallel eingereichte Anmeldung EP-A-0651332 führt diese Struktur und den Betrieb der Aspekte der linearen Adressierung des Daten-Cachespeichers 150 detaillierter aus.
  • Ein Eintrag 400 des Daten-Cachespeichers 150 ist gezeigt. Für jeden Eintrag in dem Daten-Cachespeicher 150 stellen die mittleren Bits jeder linearen Adresse, die dem Eintrag des Cachespeichers entsprechen, einen Index des Cachespeichers zur Verfügung, der verwendet wird, um die linearen Markierungsarrays zu adressieren und einen Eintrag von jedem linearen Markierungsarray zu holen. Die oberen Bits jeder linearen Adresse werden mit den linearen Datenmarkierungen verglichen, die in den von dem Adressmarkierungsarray 310 geholten Einträgen gespeichert sind. Die untersten Bits jeder linearen Adresse stellen einen Versatz in den geholten Eintrag zur Verfügung, um das tatsächlich von der linearen Adresse adressierten Byte zu finden. Weil auf den Daten-Cachespeicher 150 immer in 32 Bit Worten zugegriffen wird, werden diese niedrigsten Bits nicht verwendet, wenn auf den Daten-Cachespeicher 150 zugegriffen wird.
  • Der Daten-Cachespeicher-Eintrag 400 des Daten-Cachespeichers 150 enthält einen linearen Adressmarkierungseintrag 402 und einen Dateneintrag 404. Der Dateneintrag 404 enthält einen sechzehn Byte (DBYTE0–DBYTE15) gro ßen Block an Daten. Der lineare Datenadressmarkierungseintrag 402 enthält einen Daten lineare Markierungswert (DTAG), ein lineare Markierung gültig Bit (TV) und ein gültige physikalische Übersetzung Bit (P). Der Daten lineare Markierungswert, der den oberen 21 Bit der linearen Adresse entspricht, zeigt die Rahmenadresse des linearen Blocks von einem Block an, der in dem entsprechenden Eintrag des Speicherarrays gespeichert ist. Das lineare Markierung gültig Bit zeigt an, ob die lineare Markierung gültig ist oder nicht. Das gültige physikalische Übersetzung Bit zeigt an, ob ein Eintrag einen erfolgreichen physikalischen Markierungstreffer zur Verfügung stellt oder nicht, wie unten diskutiert ist.
  • Bezug nehmend auf 10 sind die lineare Markierungsschaltung des Daten-Cachespeichers 202 und das Speicherarray des Daten-Cachespeichers 200 des linear adressierbaren Daten-Cachespeichers 150 gezeigt. Der Daten-Cachespeicher 150 ist in vier 2 KByte Spalten, Spalte 0, Spalte 1, Spalte 2 und Spalte 3 angeordnet. Die Daten lineare Markierungsschaltung 202 empfängt gleichzeitig die zwei linearen Adressen ADDR A, ADDR B und das Datenspeicher Array 312 stellt gleichzeitig die beiden Datensignale DATA A, DATA B zur Verfügung, das heißt der Daten-Cachespeicher 150 funktioniert wie ein Daten-Cachespeicher, auf den doppelt zugegriffen werden kann.
  • Das Datenspeicher Array 200 enthält vier getrennte Datenspeicherarrays, ein Spalte 0 Speicherarray 430, ein Spalte 1 Speicherarray 431, ein Spalte 2 Speicherarray 432 und ein Spalte 3 Speicherarray 433 und auch eine Multiplexer (MUX) Schaltung 440. Der Multiplexer 440 empfängt Steuersignale von der Daten lineare Markierungsschaltung 202, die anzeigen, ob eine Übereinstimmung zu einem linearen Markierungswert vorhanden ist, der in einem entsprechenden linearen Markierungsarray gespeichert ist. Der Multiplexer 440 empfängt die Daten von den Speicherarrays 430433 und stellt diese Daten der Lade/Speicher-Funktionseinheit 134 zur Verfügung.
  • Die lineare Markierungsschaltung 202 enthält lineare Markierungsarrays 450453, welche den Spalten 0–3 entsprechen. Jedes lineare Markierungsarray ist mit einer dazu gehörigen Vergleichsschaltung 454457 verbunden. Entsprechend enthält jede Spalte des Daten-Cachespeichers 150 ein Speicherarray, ein lineares Markierungsarray und eine Vergleichsschaltung. Die Speicherarrays 430433, die Adressmarkierungsarrays 450453 und die Vergleichsschaltungen 454457 empfangen alle die linearen Adressen ADDR A, ADDR B von der Lade/Speicher-Sektion 134.
  • Der IAD Bus 102 ist über einen Speicheradressmultiplexer 460 mit jedem Speicherarray 430433 verbunden, um beiden eine Speicheradresse zur Verfügung zu stellen. Der IAD Bus 102 ist ferner mit einem Speicherregister Stufe Ausführung 460 verbunden, das mit jedem Speicherarray 430433 verbunden ist. Die Speicheradresse, welche von dem IAD Bus 102 zur Verfügung gestellt wird, wird zur Verfügung gestellt, um eine bestimmte Spalte zu indizieren und um eine bestimmte Bank auszuwählen; die bestimmte Spalte wird durch Spaltenauswahlbits ausgewählt, die entweder von dem Speicherpuffer 180 bei der Durchführung eines Speichervorgangs oder von der physikalischen Übersetzungsschaltung 162 bei der Durchführung eines erneuten Ladevorgangs zur Verfügung gestellt werden. Für einen Speichervorgang wird nur auf eine Bank zugegriffen. Die Bankauswahlbits, Bits 2 und 3 der Adresse, die von dem IAD Bus 102 zur Verfügung gestellt wird, werden für den Zugriff auf die Bank verwendet. Für einen erneuten Ladevorgang wird parallel auf alle vier Bänke zugegriffen.
  • Der IAD Bus 102 wird sowohl während Speicheroperationen als auch erneuten Ladevorgängen verwendet, um Daten in die Speicherarrays 430433 des Daten-Cachespeichers 150 zu schreiben. Wenn eine Speicheroperation durchgeführt wird, werden die Daten über das Speicherregister in 32 Bit Doppelworten in die Speicherarrays 430433 geschrieben. Für einen Speicherpuffer Speichervorgang die IAD Bus Adresse, die dem ADDR B Eingang des Daten- Cachespeichers 150 zur Verfügung gestellt wird. Die ADDR B und IAD Adresse werden von dem Adress-Multiplexer 461 multiplext.
  • Wenn eine erneute Ladeoperation durchgeführt wird, werden Daten in 128 Bit Zeilen in die Speicherarrays 430433 geschrieben. Das Speicherregister 460 sammelt 128 Bit an Daten von dem IAD Bus 102 in zwei 64 Bit Zugriffen; nachdem die 128 Bit gesammelt sind, schreibt das Speicherregister 460 diese Daten in die Speicherarrays 430433. Für einen erneuten Ladevorgang multiplext das Speicherregister 460 die Adressleitungen des IAD Busses 102, um die Daten zu empfangen, weil 64 Bit in jeder Phase geschrieben werden. Der Adressmultiplexer 461 multiplext die IAD Adresse auf dem Pfad der ADDR B Adresse, um in die Zeilen zu indizieren. Der Daten-Cachespeicher Speicher Multiplexer 460 wird von der Daten-Cachespeichersteuerung 190 gesteuert, darauf basierend, ob eine Speicher- oder eine Ladeoperation durchgeführt wird. Für eine erneute Ladeoperation schreibt die Lade/Speicher-Steuerung 134 die erneute Ladeadresse über den Anschluss A des Daten-Cachespeichers 150; entsprechend verwendet der Daten-Cachespeicher 150 ADDR A für eine erneute Ladeadresse.
  • Bezug nehmend auf die 11 und 12 ist jedes Speicherarray des Daten-Cachespeichers 150 in Bänke unterteilt, um mehrere Zugriffe in einem einzelnen Taktzyklus zu erlauben ohne die Verwaltung zu erfordern, die mit doppelten Anschlüssen verbunden ist. Genauer gesagt enthält jedes Speicherarray vier Bänke 470473, von denen jede ein 32 Bit Doppelwort an Daten speichert; jede Bank enthält einen entsprechenden Bank Adressmultiplexer 474477. Die Kombination der vier Bänke erlaubt Zugriff auf eine einzelne Zeile des Daten-Cachespeichers 150.
  • Jede Bank 470473 wird einzeln adressiert, entweder von der ADDR A oder der ADDR B, welche Adresse von einem entsprechenden Bank Adressmultiplexer 474477 zur Verfügung gestellt wird. Die Bank Adressmultiplexer 474477 werden von den Bankauswahlbits der ADDR A und ADDR B gesteuert.
  • Weil jede Bank einzeln adressiert wird, kann auf mehr als eine Bank gleichzeitig zugegriffen werden.
  • Wenn zum Beispiel, wie in 11 zu sehen ist, ADDR A ein Zeile von Bank 0 adressiert und ADDR B die gleiche Zeile von Bank 3 adressiert, dann veranlasst der Multiplexer 474, dass ADDR A der Bank 0 zur Verfügung gestellt wird und der Multiplexer 474 veranlasst, dass ADDR B der Bank 2 zur Verfügung gestellt wird. Das Datenwort, das von ADDR A adressiert wird, wird der Lade/Speicher-Funktionseinheit 134 als DATA A über den DATA A Datenpfad zur Verfügung gestellt und das Datenwort, das von ADDR B adressiert wird, wird der Lade/Speicher-Funktionseinheit 134 als DATA B über den DATA B Datenpfad zur Verfügung gestellt.
  • Wenn wie in 12 zu sehen ist ADDR A und ADDR B beide auf die gleiche Zeile von Bank 0 zugreifen, dann wird nur auf diese Zeile und Bank zugegriffen und die Daten an dieser Stelle werden der Lade/Speicher-Funktionseinheit 134 sowohl als DATA A als auch als DATA B über den DATA A beziehungsweise den DATA B Datenpfad zur Verfügung gestellt.
  • Wenn die beiden Zugriffe auf die gleiche Bank, aber verschiedene Zeilen gerichtet sind, dann wird der Anschluss B Zugriff von der Daten-Cachespeichersteuerung 190 für einen Takt angehalten. Weil Zugriffe auf den Daten-Cachespeicher im allgemeinen zufällig sind, im Vergleich zu Zugriffen auf den Befehls-Cachespeicher, welche eine starke Lokalität haben, ist die Frequenz von Zugriffen des Anschlusses A und des Anschlusses auf die gleiche Bank und verschiedene Zeilen relativ niedrig.
  • Zugriffe von Speichervorgängen auf den Daten-Cachespeicher 150 sind über den IAD Bus 102. Während eines Speichervorgangs verwenden die Multiplexer 474478 den Zugriff des Speichervorgangs, um zu steuern, in welche der Bänke 470473 mit dem 32 Bit Speicher Doppelwort geschrieben wird. Während eines erneuten Ladevorgangs werden die Bänke 470473 in einer 128 Bit Zeile geschrieben, nachdem die erneuten Ladedaten in dem Speicherregister 460 gesammelt worden sind.
  • Bezug nehmend auf die 2, 911 wird der allgemeine Betrieb des Daten-Cachespeichers 150 diskutiert. Wenn ein Datenwert, der nicht in dem Cachespeicher 150 gespeichert ist, von der Lade/Speicher-Funktionseinheit 134 angefordert wird, dann führt dies zu einem Fehltreffer im Cachespeicher. Auf die Detektierung eines Fehltreffers im Cachespeicher wird der angeforderte Wert in einen Eintrag des Daten-Cachespeichers 150 geschrieben. Genauer gesagt, übersetzt die Lade/Speicher-Sektion 134 die logische Adresse für den Wert in eine lineare Adresse. Diese lineare Adresse wird der Speicherverwaltungseinheit 164 zur Verfügung gestellt. Die lineare Adresse des Werts wird von einer TLB Vergleichsschaltung gegen den Bereich der linearen Markierung des TLB Arrays der Speicherverwaltungseinheit überprüft, um festzustellen, ob es einen TLB Treffer gibt.
  • Falls die Lade/Speicher-Funktionseinheit 134 feststellt, dass es einen TLB Treffer gibt, dann untersucht die Lade/Speicher-Funktionseinheit 134 die Daten, um festzustellen, ob die Daten zwischen gespeichert werden können. Falls die Daten zwischen gespeichert werden können und es einen TLB Treffer gibt, dann wird die physikalische Markierung der entsprechenden physikalischen Adresse in einen entsprechenden Eintrag der physikalische Markierungsschaltung 162 geschrieben. Das Daten lineare Markierungsarray 450453, welches der Spalte des Arrays entspricht, in der die Daten gespeichert waren, wird mit der linearen Markierung von dem TLB Array geschrieben.
  • Falls es keinen TLB Treffer gibt, dann wird das TLB Array von der Speicherverwaltungseinheit 164 aktualisiert, um die Adresse des angeforderten Werts zu enthalten, so dass dies zu einem TLB Treffer führt. Dann wird die physikalische Markierung in die physikalische Markierungsschaltung 162 geschrieben und die lineare Markierung wird in das entsprechende lineare Markierungsarray 450453 geschrieben.
  • Eine Vorabruf Anforderung wird dann von der Lade/Speicher-Funktionseinheit 134 an den externen Speicher gemacht und der Wert, der in dem externen Speicher an der physikalischen Adresse gespeichert ist, die der linearen Adresse entspricht, wird von dem externen Speicher geholt. Dieser Wert wird in der Bank, Zeile und Spalte des Speicherarrays 200 gespeichert, welcher den Stellen der Zeile und der Spalte der Werte der linearen Markierungen entspricht, die in den linearen Markierungsarrays gespeichert sind. Das entsprechende lineare Markierung gültig Bit und das gültige physikalische Übersetzung Bit in dem linearen Markierungsarray 310 werden gesetzt, um anzuzeigen, dass der der linearen Markierung entsprechende Eintrag gültig ist, dass die lineare Markierung gültig ist und dass der Eintrag eine erfolgreiche physikalische Übersetzung zur Verfügung stellt.
  • Wenn die lineare Adresse für diesen Wert wieder von der Lade/Speicher-Funktionseinheit 134 angefordert wird, konvertiert die Lade/Speicher-Sektion 134 die logische Adresse in die lineare Adresse, welche eine Übereinstimmung der linearen Markierungen in dem linearen Adresse Markierungsarray 310 mit der angeforderten Adresse zur Verfügung stellt. Weil das gültig Bit gesetzt ist und das gültige physikalische Übersetzung Bit gesetzt ist, tritt ein Treffer der linearen Adresse auf und der Eintrag, der in der entsprechenden Zeile des Daten Speicherarrays 304 gespeichert ist, wird der Lade/Speicher-Funktionseinheit 134 zur Verfügung gestellt. Während des Zugriffs durch die Lade/Speicher-Sektion 134 ist kein Bedarf, auf entweder die physikalische Adressmarkierungsschaltung 162 oder die TLB Schaltung 164 zuzugreifen, da das gültige physikalische Übersetzung Bit gesetzt ist, was anzeigt, dass der Eintrag eine gültige physikalische Übersetzung hat.
  • Bezug nehmend auf die 110 und 13 tritt dann ein Treffer im Daten-Cachespeicher auf, wenn eine Ladeoperation von der Lade/Speicher-Funktionseinheit 134 über den Anschluss A durchgeführt wird und der zu ladende Datenwert in dem Daten-Cachespeicher 150 zur Verfügung steht. Ge nauer gesagt wird während Φ1 des Taktes 1 der Index des Cachespeichers erzeugt, berechnet von dem Addierer 240 oder dem RS0 Addierer 216; der Index des Cachespeichers sind die niederwertigsten 11 Bits der linearen Adresse und er wird als Teil der Berechnung der linearen Adresse berechnet. Diese lineare Adresse des Index des Cachespeichers wird verwendet, um auf die geeignete Zeile und Bank des Speicherarrays 200 des Daten-Cachespeichers zuzugreifen. Wenn auf die geeignete Zeile und Bank zugegriffen wird, wird die lineare Adresse, die von dem Addierer 242 berechnet wird, verwendet, um auf die geeigneten Spalten des Speicherarrays 200 zuzugreifen, indem die linearen Markierungen verglichen werden. Der Datenwert wird dann an die Treiberschaltung 220 der Schaltung der Reservierungsstation 214 über den DATA A Pfad zurück gegeben. Dieser Datenwert wird von der Treiberschaltung 220 formatiert, um ihn dem Ergebnisbus 0 zur Verfügung zu stellen. Während Φ2 des Taktes 1 führt die Grenzüberprüfungsschaltung 252 eine Überprüfung der Segmentgrenze und eine Schutzüberprüfung auf der linearen Adresse durch, wie im Stand der Technik allgemein bekannt ist. Während Φ1 des Taktes 2 werden der Datenwert und die entsprechenden Zielmarkierungen für den Anschluss A auf den Ergebnisbus 0 getrieben.
  • Während eine Ladeoperation über den Anschluss A durchgeführt wird, könnte eine entsprechende Ladeoperation über den Anschluss B durchgeführt werden. Diese entsprechende Ladeoperation verwendet die Reservierungsstation RS1 zusammen mit ihrem entsprechenden Addierer, um die Adresserzeugung des Zugriffs auf den Daten-Cachespeicher durchzuführen. Der Datenwert und die entsprechenden Zielmarkierungen für den Eintrag in der Reservierungsstation RS1 werden auf den Ergebnisbus 1 getrieben.
  • Bezug nehmen auf die 110 und 14 tritt dann ein Treffer im Daten-Cachespeicher auf, wenn eine Speicheroperation von der Lade/Speicher-Funktionseinheit 134 über den Anschluss A durchgeführt wird und der zu speichernde Datenwert bereits in dem Daten-Cachespeicher 150 gespeichert ist. Weil Speichervorgänge als lesemodifizierende Schreiboperationen durchge führt werden, ist der erste Bereich einer Speicheroperation ähnlich zu einer Ladeoperation. Nachdem der Datenwert geladen ist, wird dann der geladene Wert in die Speicherpufferschaltung 180 geschrieben, um den geladenen Datenwert zu modifizieren.
  • Genauer gesagt wird während Φ1 des Taktes 1 der Index des Cachespeichers erzeugt, berechnet von dem Addierer 240 oder dem RS0 Addierer 216; der Index des Cachespeichers sind die niederwertigsten 11 Bits der linearen Adresse und er wird als Teil der Berechnung der linearen Adresse berechnet. Diese lineare Adresse des Index des Cachespeichers wird verwendet, um auf die geeignete Zeile und Bank des Speicherarrays 200 des Daten-Cachespeichers zuzugreifen. Wenn auf die geeignete Zeile und Bank zugegriffen wird, wird die lineare Adresse, die von dem Addierer 242 berechnet wird, verwendet, um auf die geeigneten Spalten des Speicherarrays 200 zuzugreifen, indem die linearen Markierungen verglichen werden. Der Datenwert wird dann an die Treiberschaltung 220 der Schaltung der Reservierungsstation 214 über den DATA A Pfad zurück gegeben. Dieser Datenwert wird von der Treiberschaltung 220 formatiert, um ihn dem Ergebnisbus 0 zur Verfügung zu stellen. Während Φ2 des Taktes 1 führt die Grenzüberprüfungsschaltung 252 eine Überprüfung der Segmentgrenze und eine Schutzüberprüfung auf der linearen Adresse durch, wie im Stand der Technik allgemein bekannt ist. Während Φ1 des Taktes 2 werden der Datenwert und die entsprechenden Zielmarkierungen für den Anschluss A auf den Ergebnisbus 0 getrieben und werden auch in dem nächsten verfügbaren Eintrag der Speicherpufferschaltung 180 gespeichert. Dieser Wert wird in der Speicherpufferschaltung 180 gehalten, bis die Speicheroperation aus dem Umordnungspuffer 114 zurück gezogen ist, was geschieht, wenn keine anderen Befehle anhängig sind. Der Umordnungspuffer 114 zeigt dann der Lade/Speicher-Steuerung 180 unter Verwendung des Lade/Speicher Rückzugsignals an, dass der Speicherbefehl zurück gezogen werden kann, das heißt dass der Speichervorgang durchgeführt werden kann. Weil Speichervorgänge den Zustand des Datenwerts tatsächlich modifizieren, werden Speichervorgänge nicht spekulativ ausgeführt und müssen warten, bis es klar ist, dass der Speichervorgang tatsächlich der nächste Befehl ist, bevor der Umordnungspuffer 114 es dem Speichervorgang erlaubt, ausgeführt zu werden.
  • Nachdem der Umordnungspuffer 114 angezeigt hat, dass der Befehl ausgeführt werden kann, werden der Datenwert und die entsprechende lineare Adresse während Φ1 des Taktes, der der Freigabe des Befehls folgt, auf den IAD Bus 102 getrieben. Während Φ2 dieses Taktes wird der Datenwert in die geeignete Zeile und Bank des Speicherarrays des Daten-Cachespeichers 200 geschrieben. Des weiteren, falls die physikalische Markierungsschaltung 162 anzeigt, dass der Wert auch extern geschrieben werden sollte, wird dann der Datenwert an der Stelle der physikalischen Adresse, die der linearen Adresse entspricht, in den externen Speicher geschrieben. Die Übersetzung der physikalischen Adresse wird von der Speicherverwaltungseinheit 164 durchgeführt, welche auch die lineare Adresse von dem IAD Bus 102 empfängt.
  • Bezug nehmend auf die 110 und 15 tritt dann ein Fehltreffer im Daten-Cachespeicher auf, wenn eine spekulative Ladeoperation von der Lade/ Speicher-Funktionseinheit 134 durchgeführt wird und der zu ladende Datenwert in dem Daten-Cachespeicher 150 nicht zur Verfügung steht. Der erste Takt der Ladeoperation ist der gleiche, als wenn ein Treffer im Cachespeicher vorgekommen wäre.
  • Wenn auf den Daten-Cachespeicher 150 zugegriffen wird und der Fehltreffer im Cachespeicher dann während des Taktes 2 auftritt, wird auf den TLB in der Speicherverwaltungseinheit 164 zugegriffen und es wird auf die physikalischen Markierungen in der physikalischen Markierungsschaltung 162 zugegriffen, um die physikalische Adresse des Datenwerts zu bestimmen. Diese physikalische Adresse wird dann in der Speicherverwaltungseinheit 164 überprüft, um zu bestätigen, dass die physikalische Adresse nicht irgendeine Schutzüberprüfung verletzt. Während des nächsten Taktes leitet der Anschluss B dann einen weiteren Zugriff auf den Cachespeicher ein, wenn der Zugriff auf den Anschluss B nicht auf die gleiche Bank des Cachespeicher Arrays 200 geht. Des weiteren wird während Φ2 dieses Taktes das Cachespeicher Array 200 mit den nächsten gültigen Bits der Zeile von den Markierungsbussen aktualisiert. Während des nächsten Taktes werdender Datenwert, die Zielmarkierung und der Status auf den nächsten verfügbaren Ergebnisbus getrieben und der normale Betreib, der Treffer im Cachespeicher annimmt, wird wieder aufgenommen.
  • Bezug nehmend auf die 110 und 16 ist während eines erneuten Ladevorgangs des Cachespeichers der erste Takt der erneuten Ladeoperation der gleiche als wenn ein Treffer im Cachespeicher aufgetreten wäre. Nachdem jedoch die Cachespeichersteuerung 190 feststellt, dass ein Fehltreffer im Cachespeicher aufgetreten ist, wartet dann die Lade/Speicher-Funktionseinheit 134 bis die Speicherpufferschaltung 180 geleert ist, bevor auf den externen Speicher zugegriffen wird, um den Cachespeicher 150 erneut zu laden. Nach dem Abwarten einiger Taktzyklen stellt die physikalische Markierungsschaltung 162 ein Daten verfügbar Signal (L22LS) zur Verfügung, das dem Cachespeicher 150 anzeigt, dass alle 128 Bit der Daten in das Speicherregister 460 geschrieben worden sind. Nachdem die Daten zur Verfügung stehen und in das Daten-Cachespeicher Array 200 geschrieben wurden, werden dann die Daten, die Zielmarkierung und die Statusinformation werden von der Treiberschaltung 220 der Reservierungsstationsschaltung 124 auf den Ergebnisbus 0 getrieben.
  • Bezug nehmend auf 17 sind für einen fehlausgerichteten Zugriff zwei Zugriffe während aufeinander folgenden Takte vorhanden. Jeder der zwei Zugriffe ist der gleiche wie ein Zugriff mit einem Treffer im Cachespeicher. Die Daten, welche von jedem Zugriff zurück gegeben werden, werden von der Treiberschaltung 220 gesammelt. Nachdem die beiden Zugriffe abgeschlossen sind und die Daten gesammelt worden sind, werden die Daten wie oben beschrieben von der Treiberschaltung 220 formatiert. Die Daten, die Zielmarkierung und die Statusinformation werden von der Treiberschaltung 220 der Re servierungsstationsschaltung 124 auf den Ergebnisbus 0 getrieben. Fehlausgerichtete Zugriffe werden nur unter Verwendung der Reservierungsstation 0 durchgeführt. Entsprechend erfordern nur der RS0 Addierer und der A Anschlussbereich der Treiberschaltung 220 die zum Durchführen fehlausgerichteter Zugriffe erforderliche Schaltung.
  • Weitere Ausführungsbeispiele
  • Weitere Ausführungsbeispiele sind in den folgenden Ansprüchen enthalten.
  • Zum Beispiel kann die Lade/Speicher-Einheit 134 in zwei getrennte Funktionseinheiten, eine Lade-Funktionseinheit und eine Speicher-Funktionseinheit, unterteilt sein. In diesem Ausführungsbeispiel würde der Betrieb der Funktionseinheiten im wesentlichen der gleiche sein wie beschrieben, jedoch würde jede Funktionseinheit eine entsprechende Reservierungsstation enthalten. Die Lade-Sektion enthält eine Lade-Reservierungsstation, welche funktioniert wie im Hinblick auf die Ladevorgänge diskutiert, und die Speicher-Sektion enthält eine Speicher-Reservierungsstation, die funktioniert wie im Hinblick auf die Speichervorgänge diskutiert.

Claims (15)

  1. Lade-Funktionseinheit (134) zum parallelen Durchführen mehrerer Ladeoperationen von einem Speicher (150), welcher ein Speicherarray (192) mit mehreren mit der Lade-Funktionseinheit parallel gekoppelten Speicherbereichen aufweist und in Reaktion auf Ladesignale Daten parallel zu der Lade-Funktionseinheit liefert, wobei die Lade-Funktionseinheit aufweist: eine Reservierungsstationsschaltung (124) zum temporären Halten von Ladeoperationen, mit: einem ersten Reservierungsstationseintrag (210) und einem zweiten Reservierungsstationseintrag (211}, der mit dem ersten Reservierungsstationseintrag gekoppelt ist und ein Ausgangssignal des Reservierungsstationseintrags an den ersten Reservierungsstationseintrag liefert, einer Eingangssignal-Multiplexerschaltung (206,208), die Ladesignale parallel empfängt und ein erstes Ladesignal zu den ersten und zweiten Reservierungsstationseinträgen und ein zweites Ladesignal zu den ersten und zweiten Reservierungsstationseinträgen liefert, und einer Reservierungsstations-Treiberschaltung (220), die die Daten von dem Speicher (150) parallel empfängt und die Daten von dem Speicher parallel zu ersten und zweiten Ergebnisbussen liefert, und einer Lade-Steuerschaltung (182) zum Steuern, welches der ersten und zweiten Ladesignale von den ersten und zweiten Reservierungsstationseinträgen empfangen wird.
  2. Vorrichtung zum parallelen Durchführen mehrerer Ladeoperationen, mit: einer Lade-Funktionseinheit (134) nach Anspruch 1, bei der der Speicher ein Daten-Cachespeicher (150) ist und jede der mehreren Speicherbereiche des Speicherarrays über jeweilige erste und zweite Daten-Cachespeicher-Ports mit den ersten und zweiten Reservierungsstationseinträgen (210, 211) der Lade-Funktionseinheit gekoppelt ist, wobei das Speicherarray die Daten aus dem Daten-Cachespeicher in Reaktion auf die ersten und zweiten Ladesignale parallel zu der Lade-Funktionseinheit liefert, und der Daten-Cachespeicher einen mit der Lade-Steuerschaltung (182) gekoppelten Controller (190) aufweist.
  3. Vorrichtung nach Anspruch 2, bei der die Lade-Steuerschaltung (182) steuert, welches Ladesignal in Reaktion auf ein Typcode-Übereinstimmungssignal von welchem der ersten und zweiten Reservierungseinträge empfangen wird, wobei das Typcode-Übereinstimmungssignal von der Lade-Steuerschaltung erzeugt wird, wenn ein Typcode von einem Typcode-Bus einem vorbestimmten Lade-Funktionseinheits-Typcode entspricht.
  4. Vorrichtung nach Anspruch 2 oder 3, bei der die Reservierungsstationsschaltung ferner einen dritten Reservierungsstationseintrag (212) aufweist, der mit dem zweiten Reservierungsstati onseintrag (211) gekoppelt ist und ein Ausgangssignal des dritten Reservierungsstationseintrags an den zweiten Reservierungsstationseintrag liefert, wobei der dritte Reservierungsstationseintrag mit dem ersten Reservierungsstationseintrag (210) gekoppelt ist und das Ausgangssignal des dritten Reservierungsstationseintrags an den ersten Reservierungsstationseintrag liefert, wobei einer der ersten und zweiten Reservierungsstationseinträge das Ausgangssignal des dritten Reservierungsstationseintrags unter Steuerung der Lade-Steuerschaltung empfängt.
  5. Vorrichtung nach Anspruch 4, bei der die Reservierungsstationsschaltung ferner einen vierten Reservierungsstationseintrag (213) aufweist, der mit dem dritten Reservierungsstationseintrag (212) gekoppelt ist und ein Ausgangssignal des vierten Reservierungsstationseintrags an den dritten Reservierungsstationseintrag liefert, wobei der vierte Reservierungsstationseintrag mit dem zweiten Reservierungsstationseintrag (211) gekoppelt ist und das Ausgangssignal des vierten Reservierungsstationseintrags an den zweiten Reservierungsstationseintrag liefert, wobei einer der dritten und zweiten Reservierungsstationseinträge das Ausgangssignal des vierten Reservierungsstationseintrags unter Steuerung der Lade-Steuerschaltung empfängt.
  6. Vorrichtung nach einem der Ansprüche 2–5, bei der die Reservierungsstationsschaltung ferner mit den ersten bzw. zweiten Reservierungsstationseinträgen gekoppelte erste und zweite Addierschaltungen (216, 218) aufweist, wobei die ersten und zweiten Addierschaltungen die Ladesignale empfangen und anhand der Ladesignale Cachespeicher-Adressensignale erzeugen, die auf die ersten bzw. zweiten Speicherplätze in dem Daten-Cachespeicher-Speicherarray zugreifen.
  7. Vorrichtung nach Anspruch 6, bei der die ersten und zweiten Addierschaltungen jeweils aufweisen: einen Logikadressen-Addierer (240) zum Empfangen mehrerer Adressenkomponentensignale und Erzeugen eines Logikadressensignals, und einen Linearadressenaddierer (242) zum Empfangen des Logikadressensignals und eines Segmentbasissignals und Erzeugen einer Linearadresse.
  8. Vorrichtung nach Anspruch 7, bei der jedes Adressenkomponentensignal ein A-Operand-Addiersignal, ein B-Operand-Addiersignal und ein Verschiebe-Addiersignal aufweist.
  9. Vorrichtung nach Anspruch 8, bei der die erste Addierschaltung ferner aufweist: eine A-Operand-Multiplexerschaltung (244) zum Empfangen eines A-Operand-Signals und eines Null-Signals und Erzeugen eines dieser Signale als das A-Operand-Addiersignal in Reaktion auf Adressenmodus-Steuerinformationen von dem Lade-Kontroller, eine B-Operand-Multiplexerschaltung (246) zum Empfangen eines B-Operand-Signals und eines Fehlausricht-Adress-Eins-Signals und Erzeugen eines dieser Signale als das B-Operand-Addiersignal in Reaktion auf Adressenmodus-Steuerinformationen von dem Lade-Kontroller, und eine Verschiebe-Multiplexerschaltung (248) zum Empfangen eines Verschiebesignals, eines Vier-Signals, und eines Fünf-Signals und Erzeugen eines dieser Signale als das Verschiebe-Addiersignal in Reaktion auf Adressenmodus-Steuerinformationen von dem Lade-Kontroller.
  10. Vorrichtung nach Anspruch 8, bei der die zweite Addierschaltung ferner aufweist: eine A-Operand-Multiplexerschaltung (244) zum Empfangen eines A-Operand-Signals und eines Null-Signals und Erzeugen eines dieser Signale als das A-Operand-Addiersignal in Reaktion auf Adressenmodus-Steuerinformationen von dem Lade-Kontroller, und eine B-Operand-Multiplexerschaltung (246) zum Empfangen eines B-Operand-Signals und eines Fehlausricht-Adress-Eins-Signals und Erzeugen eines dieser Signale als das B-Operand-Addiersignal in Reaktion auf Adressenmodus-Steuerinformationen von dem Lade-Kontroller, wobei ein Verschiebesignal direkt an den Logikadressenaddierer geliefert wird.
  11. Vorrichtung nach einem der Ansprüche 2–10, bei der die mehreren Speicherbereiche individuell adressierbar sind.
  12. Vorrichtung nach einem der Ansprüche 2–11, bei der jede der mehreren Speicherbereiche mit einem jeweiligen Speicherbereichsadressen-Multiplexer zum Empfangen eines ersten Cachespeicheradressensignals und eines zweiten Cachespeicheradressensignals von der Reservierungsstationsschaltung gekoppelt ist, wobei das erste Cachespeicheradressensignal erste Adressenspeicherbereichs-Auswahlbits und das zweite Cachespeicheradressensignal zweite Adressenspeicherbereichs-Auswahlbits aufweist, wobei jeder der jeweiligen Speicherbereichsadressen-Multiplexer die ersten und zweiten Cachespeicheradressensignale in Reaktion auf die ersten und zweiten Adressenspeicherbereichs-Auswahlbits zu dem jeweiligen Speicherbereich liefert.
  13. Vorrichtung nach Anspruch 6, bei der jede der mehreren Speicherbereiche mit einem jeweiligen Speicherbereichsadressen-Multiplexer gekoppelt ist, wobei jeder jeweilige Speicherbereichsadressen-Multiplexer die Cachespeicheradressensignale empfängt und jedes der Cachespeicheradressensignale jeweilige Speicherbereichs-Auswahlbits zum Steuern des jeweiligen Speicherbereichs-Adressenmultiplexers aufweist.
  14. Lade-/Speicher-Funktionseinheit (134) eines Mikroprozessors, die Ladeoperationen und Speicheroperationen in einen Cachespeicher (150) parallel durchführt, wobei der Cachespeicher mehrere Speicherbereiche aufweist und die Lade-/Speicher-Funktionseinheit eine Lade-Funktionseinheit nach Anspruch 1 aufweist und ferner versehen ist mit: einer Speicher-Pufferschaltung (180) zum temporären Halten von Speicheroperationen, die erste und zweite Speicher-Puffereinträge (SB0, SB1) zum temporären Halten von Speicheroperationen aufweist, wobei mindestens einer der Speicher-Puffereinträge mit mindestens einem der Reservierungsstationseinträge gekoppelt ist; wobei die Lade-Steuerschaltung (182) ferner die Speicher-Puffereinträge steuert und die Steuerschaltung mit der Reservierungsstationsschaltung, der Speicher-Pufferschaltung und dem Cachespeicher gekoppelt ist.
  15. Vorrichtung zum Verarbeiten von Informationen, mit: einem Externspeicher (101) zum Halten der Informationen; und einem über einen Prozessorbus mit dem Externspeicher gekoppelten Prozessor, mit: einem Cachespeicher (150) zum temporären Speichern der Informationen, wobei der Cachespeicher mit dem Externspeicher gekoppelt ist und der Cachespeicher mehrere Speicherbereiche aufweist; und einer Lade-/Speicher-Funktionseinheit (134) nach Anspruch 14 zum Durchführen von Ladeoperationen und Speicheroperationen.
DE69433339T 1993-10-29 1994-09-20 Lade-/Speicherfunktionseinheiten und Datencachespeicher für Mikroprozessoren Expired - Lifetime DE69433339T2 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US146376 1993-10-29
US08/146,376 US5878245A (en) 1993-10-29 1993-10-29 High performance load/store functional unit and data cache

Publications (2)

Publication Number Publication Date
DE69433339D1 DE69433339D1 (de) 2003-12-24
DE69433339T2 true DE69433339T2 (de) 2004-09-09

Family

ID=22517097

Family Applications (2)

Application Number Title Priority Date Filing Date
DE69435327T Expired - Lifetime DE69435327D1 (de) 1993-10-29 1994-09-20 Lade-/Speicherfunktionseinheiten und Datencachespeicher für Mikroprozessoren
DE69433339T Expired - Lifetime DE69433339T2 (de) 1993-10-29 1994-09-20 Lade-/Speicherfunktionseinheiten und Datencachespeicher für Mikroprozessoren

Family Applications Before (1)

Application Number Title Priority Date Filing Date
DE69435327T Expired - Lifetime DE69435327D1 (de) 1993-10-29 1994-09-20 Lade-/Speicherfunktionseinheiten und Datencachespeicher für Mikroprozessoren

Country Status (4)

Country Link
US (2) US5878245A (de)
EP (2) EP0651323B1 (de)
JP (1) JPH07182167A (de)
DE (2) DE69435327D1 (de)

Families Citing this family (60)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6813699B1 (en) 1995-06-02 2004-11-02 Transmeta Corporation Speculative address translation for processor using segmentation and optional paging
US5781789A (en) * 1995-08-31 1998-07-14 Advanced Micro Devices, Inc. Superscaler microprocessor employing a parallel mask decoder
US5694565A (en) * 1995-09-11 1997-12-02 International Business Machines Corporation Method and device for early deallocation of resources during load/store multiple operations to allow simultaneous dispatch/execution of subsequent instructions
USRE38599E1 (en) * 1996-06-11 2004-09-21 Sun Microsystems, Inc. Pipelined instruction dispatch unit in a superscalar processor
US5958042A (en) 1996-06-11 1999-09-28 Sun Microsystems, Inc. Grouping logic circuit in a pipelined superscalar processor
KR19990076967A (ko) * 1996-11-04 1999-10-25 요트.게.아. 롤페즈 처리 장치 및 메모리내의 명령 판독
US6542998B1 (en) 1997-02-08 2003-04-01 Pact Gmbh Method of self-synchronization of configurable elements of a programmable module
US6014737A (en) * 1997-11-19 2000-01-11 Sony Corporation Of Japan Method and system for allowing a processor to perform read bypassing while automatically maintaining input/output data integrity
US6065103A (en) * 1997-12-16 2000-05-16 Advanced Micro Devices, Inc. Speculative store buffer
FR2777370B1 (fr) * 1998-04-09 2000-06-23 Sgs Thomson Microelectronics Architecture de dsp optimisee pour les acces memoire
JP3469469B2 (ja) * 1998-07-07 2003-11-25 富士通株式会社 情報処理装置
US6141747A (en) * 1998-09-22 2000-10-31 Advanced Micro Devices, Inc. System for store to load forwarding of individual bytes from separate store buffer entries to form a single load word
US6223259B1 (en) 1998-10-30 2001-04-24 Telefonaktiebolaget Lm Ericsson (Publ) Reducing read cycle of memory read request for data to be partially modified by a pending write request
US6427191B1 (en) * 1998-12-31 2002-07-30 Intel Corporation High performance fully dual-ported, pipelined cache design
US6446169B1 (en) 1999-08-31 2002-09-03 Micron Technology, Inc. SRAM with tag and data arrays for private external microprocessor bus
US6393534B1 (en) * 1999-09-27 2002-05-21 Ati International Srl Scheduler for avoiding bank conflicts in issuing concurrent requests to main memory
US6477637B1 (en) * 1999-09-30 2002-11-05 International Business Machines Corporation Method and apparatus for transporting store requests between functional units within a processor
US6481251B1 (en) 1999-10-25 2002-11-19 Advanced Micro Devices, Inc. Store queue number assignment and tracking
US6523109B1 (en) 1999-10-25 2003-02-18 Advanced Micro Devices, Inc. Store queue multimatch detection
US6662280B1 (en) * 1999-11-10 2003-12-09 Advanced Micro Devices, Inc. Store buffer which forwards data based on index and optional way match
US6591342B1 (en) * 1999-12-14 2003-07-08 Intel Corporation Memory disambiguation for large instruction windows
US6408383B1 (en) 2000-05-04 2002-06-18 Sun Microsystems, Inc. Array access boundary check by executing BNDCHK instruction with comparison specifiers
US8058899B2 (en) 2000-10-06 2011-11-15 Martin Vorbach Logic cell array and bus system
US6678807B2 (en) * 2000-12-21 2004-01-13 Intel Corporation System and method for multiple store buffer forwarding in a system with a restrictive memory model
US9037807B2 (en) 2001-03-05 2015-05-19 Pact Xpp Technologies Ag Processor arrangement on a chip including data processing, memory, and interface elements
US7444531B2 (en) 2001-03-05 2008-10-28 Pact Xpp Technologies Ag Methods and devices for treating and processing data
US6738792B1 (en) 2001-03-09 2004-05-18 Advanced Micro Devices, Inc. Parallel mask generator
US7996827B2 (en) 2001-08-16 2011-08-09 Martin Vorbach Method for the translation of programs for reconfigurable architectures
US6928534B2 (en) * 2002-02-22 2005-08-09 Sun Microsystems, Inc. Forwarding load data to younger instructions in annex
US8914590B2 (en) 2002-08-07 2014-12-16 Pact Xpp Technologies Ag Data processing method and device
WO2004046931A1 (ja) * 2002-11-20 2004-06-03 Fujitsu Limited メモリ制御装置およびストアバイパス制御方法
US7073026B2 (en) * 2002-11-26 2006-07-04 Advanced Micro Devices, Inc. Microprocessor including cache memory supporting multiple accesses per cycle
US7415243B2 (en) 2003-03-27 2008-08-19 Honda Giken Kogyo Kabushiki Kaisha System, method and computer program product for receiving data from a satellite radio network
US8041779B2 (en) 2003-12-15 2011-10-18 Honda Motor Co., Ltd. Method and system for facilitating the exchange of information between a vehicle and a remote location
US7643788B2 (en) 2004-09-22 2010-01-05 Honda Motor Co., Ltd. Method and system for broadcasting data messages to a vehicle
US7237065B2 (en) * 2005-05-24 2007-06-26 Texas Instruments Incorporated Configurable cache system depending on instruction type
US7376817B2 (en) 2005-08-10 2008-05-20 P.A. Semi, Inc. Partial load/store forward prediction
US20080140934A1 (en) * 2006-12-11 2008-06-12 Luick David A Store-Through L2 Cache Mode
US7668653B2 (en) * 2007-05-31 2010-02-23 Honda Motor Co., Ltd. System and method for selectively filtering and providing event program information
US8099308B2 (en) 2007-10-02 2012-01-17 Honda Motor Co., Ltd. Method and system for vehicle service appointments based on diagnostic trouble codes
US7984273B2 (en) 2007-12-31 2011-07-19 Intel Corporation System and method for using a mask register to track progress of gathering elements from memory
US10387151B2 (en) * 2007-12-31 2019-08-20 Intel Corporation Processor and method for tracking progress of gathering/scattering data element pairs in different cache memory banks
US8185721B2 (en) * 2008-03-04 2012-05-22 Qualcomm Incorporated Dual function adder for computing a hardware prefetch address and an arithmetic operation value
US20100250850A1 (en) * 2009-03-25 2010-09-30 Faraday Technology Corp. Processor and method for executing load operation and store operation thereof
US10175990B2 (en) 2009-12-22 2019-01-08 Intel Corporation Gathering and scattering multiple data elements
WO2013058775A1 (en) * 2011-10-21 2013-04-25 Soft Machines, Inc. Fast unaligned memory access
US9128725B2 (en) 2012-05-04 2015-09-08 Apple Inc. Load-store dependency predictor content management
US9600289B2 (en) 2012-05-30 2017-03-21 Apple Inc. Load-store dependency predictor PC hashing
US20140189328A1 (en) * 2012-12-27 2014-07-03 Tomer WEINER Power reduction by using on-demand reservation station size
JP6287544B2 (ja) * 2014-04-25 2018-03-07 富士通株式会社 演算処理装置及び演算処理装置の制御方法
US9710268B2 (en) 2014-04-29 2017-07-18 Apple Inc. Reducing latency for pointer chasing loads
US9672159B2 (en) * 2015-07-02 2017-06-06 Arm Limited Translation buffer unit management
US10509377B2 (en) 2015-10-22 2019-12-17 Triatomic Environmental, Inc. System for monitoring and controlling indoor air quality
US10209991B2 (en) * 2016-01-21 2019-02-19 Advanced Micro Devices, Inc. Instruction set and micro-architecture supporting asynchronous memory access
US10514925B1 (en) 2016-01-28 2019-12-24 Apple Inc. Load speculation recovery
GB2547893B (en) * 2016-02-25 2018-06-06 Advanced Risc Mach Ltd Combining part of an offset with a corresponding part of a base address and comparing with a reference address
US10437595B1 (en) 2016-03-15 2019-10-08 Apple Inc. Load/store dependency predictor optimization for replayed loads
US10157277B2 (en) 2016-10-01 2018-12-18 Intel Corporation Technologies for object-oriented memory management with extended segmentation
KR20180038875A (ko) * 2016-10-07 2018-04-17 삼성전자주식회사 데이터 입출력 유닛, 전자 장치 및 그 제어 방법들
US10877897B2 (en) * 2018-11-02 2020-12-29 Intel Corporation System, apparatus and method for multi-cacheline small object memory tagging

Family Cites Families (38)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3781808A (en) 1972-10-17 1973-12-25 Ibm Virtual memory system
AT354159B (de) 1975-02-10 1979-12-27 Siemens Ag Assoziativspeicher mit getrennt assoziierbaren bereichen
US4155119A (en) * 1977-09-21 1979-05-15 Sperry Rand Corporation Method for providing virtual addressing for externally specified addressed input/output operations
US4161784A (en) 1978-01-05 1979-07-17 Honeywell Information Systems, Inc. Microprogrammable floating point arithmetic unit capable of performing arithmetic operations on long and short operands
US4453212A (en) * 1981-07-13 1984-06-05 Burroughs Corporation Extended address generating apparatus and method
JPS58133696A (ja) * 1982-02-03 1983-08-09 Hitachi Ltd 記憶制御方式
US4928223A (en) 1982-10-06 1990-05-22 Fairchild Semiconductor Corporation Floating point microprocessor with directable two level microinstructions
AU3229484A (en) * 1983-09-07 1985-03-14 Amdahl Corporation Time shared translation buffer
US4807115A (en) * 1983-10-07 1989-02-21 Cornell Research Foundation, Inc. Instruction issuing mechanism for processors with multiple functional units
JPH0658631B2 (ja) * 1983-12-19 1994-08-03 株式会社日立製作所 デ−タ処理装置
EP0170525B1 (de) * 1984-07-31 1997-10-01 Texas Instruments Incorporated Entwurf einer Cache-Hierarchie zur Anwendung in einer Speicherverwaltungseinheit
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
EP0259095A3 (de) * 1986-08-27 1990-02-28 Amdahl Corporation Warteschlange für einen Cachespeicher
US4992934A (en) 1986-12-15 1991-02-12 United Technologies Corporation Reduced instruction set computing apparatus and methods
US4926322A (en) * 1987-08-03 1990-05-15 Compag Computer Corporation Software emulation of bank-switched memory using a virtual DOS monitor and paged memory management
US4950432A (en) * 1987-10-16 1990-08-21 Board Of Regents, The University Of Texas System Polyene microlide pre-liposomal powders
US5222230A (en) 1988-01-29 1993-06-22 Texas Instruments Incorporated Circuitry for transferring data from a data bus and temporary register into a plurality of input registers on clock edges
US4864161A (en) * 1988-05-05 1989-09-05 Altera Corporation Multifunction flip-flop-type circuit
US5291615A (en) * 1988-08-11 1994-03-01 Kabushiki Kaisha Toshiba Instruction pipeline microprocessor
US5056006A (en) * 1988-09-12 1991-10-08 General Electric Company Parallel processor with single program storage and sequencer and simultaneous instruction processing
JP2810068B2 (ja) * 1988-11-11 1998-10-15 株式会社日立製作所 プロセッサシステム、コンピュータシステム及び命令処理方法
US5155816A (en) * 1989-02-10 1992-10-13 Intel Corporation Pipelined apparatus and method for controlled loading of floating point data in a microprocessor
US5155820A (en) * 1989-02-21 1992-10-13 Gibson Glenn A Instruction format with designations for operand lengths of byte, half word, word, or double word encoded in address bits
US5226126A (en) * 1989-02-24 1993-07-06 Nexgen Microsystems Processor having plurality of functional units for orderly retiring outstanding operations based upon its associated tags
CA2016068C (en) * 1989-05-24 2000-04-04 Robert W. Horst Multiple instruction issue computer architecture
US5136697A (en) * 1989-06-06 1992-08-04 Advanced Micro Devices, Inc. System for reducing delay for execution subsequent to correctly predicted branch instruction using fetch information stored with each block of instructions in cache
EP0415366B1 (de) * 1989-08-28 1997-06-11 Nec Corporation Mikroprozessor mit Pipeline-Predecodereinheit und -Hauptdecodereinheit
US5185868A (en) 1990-01-16 1993-02-09 Advanced Micro Devices, Inc. Apparatus having hierarchically arranged decoders concurrently decoding instructions and shifting instructions not ready for execution to vacant decoders higher in the hierarchy
US5226130A (en) * 1990-02-26 1993-07-06 Nexgen Microsystems Method and apparatus for store-into-instruction-stream detection and maintaining branch prediction cache consistency
JP2822588B2 (ja) * 1990-04-30 1998-11-11 日本電気株式会社 キャッシュメモリ装置
DE69130588T2 (de) * 1990-05-29 1999-05-27 Nat Semiconductor Corp Cache-Speicher von partiell decodierten Befehlen und Verfahren hierfür
US5325499A (en) * 1990-09-28 1994-06-28 Tandon Corporation Computer system including a write protection circuit for preventing illegal write operations and a write poster with improved memory
US5345569A (en) * 1991-09-20 1994-09-06 Advanced Micro Devices, Inc. Apparatus and method for resolving dependencies among a plurality of instructions within a storage device
GB2273835B (en) * 1992-12-22 1996-08-14 Advanced Risc Mach Ltd Bistable circuit
US5467473A (en) * 1993-01-08 1995-11-14 International Business Machines Corporation Out of order instruction load and store comparison
US5454117A (en) * 1993-08-25 1995-09-26 Nexgen, Inc. Configurable branch prediction for a processor performing speculative execution
IE80854B1 (en) 1993-08-26 1999-04-07 Intel Corp Processor ordering consistency for a processor performing out-of-order instruction execution
US5434987A (en) * 1993-09-21 1995-07-18 Intel Corporation Method and apparatus for preventing incorrect fetching of an instruction of a self-modifying code sequence with dependency on a bufered store

Also Published As

Publication number Publication date
EP0952517A3 (de) 1999-11-17
EP0952517A2 (de) 1999-10-27
EP0952517B1 (de) 2010-12-01
DE69433339D1 (de) 2003-12-24
US6298423B1 (en) 2001-10-02
EP0651323B1 (de) 2003-11-19
EP0651323A1 (de) 1995-05-03
JPH07182167A (ja) 1995-07-21
US5878245A (en) 1999-03-02
DE69435327D1 (de) 2011-01-13

Similar Documents

Publication Publication Date Title
DE69433339T2 (de) Lade-/Speicherfunktionseinheiten und Datencachespeicher für Mikroprozessoren
DE69727773T2 (de) Verbesserte Verzweigungsvorhersage in einem Pipelinemikroprozessor
DE69434669T2 (de) Spekulative Befehlswarteschlange für Befehle mit variabler Byteslänge
DE69916962T2 (de) Datenverarbeitungssystem mit bedingter Ausführung von erweiterten Verbundbefehlen
DE69833008T2 (de) Prozessor mit instruktionskodierung mittels eines schablonenfeldes
DE69929936T2 (de) Verfahren und Vorrichtung zum Abrufen von nicht-angrenzenden Befehlen in einem Datenverarbeitungssystem
DE69431998T2 (de) Superskalare Rechnerarchitektur mit Softwarescheduling
DE69835100T2 (de) Prozessor konfiguriert um vorausschauende resultate von zusammengefassten übertragungs-, vergleichs- und einfachen arithmetischen befehlen zu produzieren
DE69631778T2 (de) Flexible implementierung eines systemverwaltungsmodus in einem prozessor
DE3716229C2 (de) Mikroprozessorchip mit einem Stapelrahmen-Cache
DE2855106C2 (de) Einrichtung zur Durchführung von bedingten Verzweigungen
DE60036016T2 (de) Schnell multithreading für eng gekoppelte multiprozessoren
DE2542740C2 (de) Datenverarbeitungsanlage mit einer Mikroprogrammsteuerung
DE112004002848B4 (de) Mikroprozessor und Verfahren zum Verifizieren einer Speicherdatei in einem derartigen Mikroprozessor
DE69233313T2 (de) Hochleistungsarchitektur für RISC-Mikroprozessor
DE60205363T2 (de) Mikroprozessor mit einem performance-drosselmechanismus für das energiemanagement
DE60308201T2 (de) Datenverarbeitungssystem mit externen und internen anweisungssätzen
DE19983517B4 (de) Verfahren und Einrichtung zur Abzweigvorhersage unter Verwendung einer Abzweig-Vorhersagetabelle einer zweiten Stufe
DE69820027T2 (de) Vorrichtung zur ausführung virtueller maschinenbefehle
DE69908175T2 (de) Verbesserte befehlsdekodierung durch paralleldekodierungsalgorithmus
DE69636861T2 (de) Mikroprozessor mit Lade-/Speicheroperation zu/von mehreren Registern
DE69736105T2 (de) Hierarchische durchsuchlogik für ungeordnete lade/speicherausführungssteuerung
DE4301417C2 (de) Computersystem mit Einrichtung zur parallelen Befehlsausführung
DE69633474T2 (de) Adressierungsverfahren zur nicht-sequentiellen Ausführung von Ladebefehlen hinsichtlich Speicherungsbefehlen
DE4447238A1 (de) Einrichung und Verfahren zum Vorhersagen von Verzweigungsinstruktionen

Legal Events

Date Code Title Description
8364 No opposition during term of opposition