-
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 210–213 empfangen
parallel jeweils die zwei Eingangssignale INPUT 0, INPUT 1, als
auch die entsprechenden Lade und Schiebe Bits. Die Einträge in der
Reservierungsstation 210–213 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 362–365, 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 362–365 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 362–365 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 362–365,
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 6–8 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 362–365 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 430–433 und stellt diese
Daten der Lade/Speicher-Funktionseinheit 134 zur Verfügung.
-
Die lineare Markierungsschaltung 202 enthält lineare
Markierungsarrays 450– 453,
welche den Spalten 0–3
entsprechen. Jedes lineare Markierungsarray ist mit einer dazu gehörigen Vergleichsschaltung 454–457 verbunden.
Entsprechend enthält jede
Spalte des Daten-Cachespeichers 150 ein Speicherarray,
ein lineares Markierungsarray und eine Vergleichsschaltung. Die
Speicherarrays 430–433, die
Adressmarkierungsarrays 450–453 und die Vergleichsschaltungen 454–457 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 430–433 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 430–433 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 430–433 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 430–433 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 430–433 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 430–433.
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 470–473,
von denen jede ein 32 Bit Doppelwort an Daten speichert; jede Bank
enthält
einen entsprechenden Bank Adressmultiplexer 474– 477. Die
Kombination der vier Bänke
erlaubt Zugriff auf eine einzelne Zeile des Daten-Cachespeichers 150.
-
Jede Bank 470–473 wird
einzeln adressiert, entweder von der ADDR A oder der ADDR B, welche Adresse
von einem entsprechenden Bank Adressmultiplexer 474–477 zur
Verfügung
gestellt wird. Die Bank Adressmultiplexer 474– 477 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 474–478 den
Zugriff des Speichervorgangs, um zu steuern, in welche der Bänke 470–473 mit
dem 32 Bit Speicher Doppelwort geschrieben wird. Während eines
erneuten Ladevorgangs werden die Bänke 470–473 in
einer 128 Bit Zeile geschrieben, nachdem die erneuten Ladedaten
in dem Speicherregister 460 gesammelt worden sind.
-
Bezug nehmend auf die 2, 9–11 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 450– 453,
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 450–453 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 1–10 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 1–10 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 1–10 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 1–10 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.