DE68926466T2 - Integrierte Cachespeichereinheit - Google Patents
Integrierte CachespeichereinheitInfo
- Publication number
- DE68926466T2 DE68926466T2 DE68926466T DE68926466T DE68926466T2 DE 68926466 T2 DE68926466 T2 DE 68926466T2 DE 68926466 T DE68926466 T DE 68926466T DE 68926466 T DE68926466 T DE 68926466T DE 68926466 T2 DE68926466 T2 DE 68926466T2
- Authority
- DE
- Germany
- Prior art keywords
- cache
- icu
- memory
- bus
- write
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Lifetime
Links
- 230000015654 memory Effects 0.000 title claims abstract description 618
- 230000006870 function Effects 0.000 claims abstract description 77
- 238000000034 method Methods 0.000 claims abstract description 27
- 230000008520 organization Effects 0.000 claims abstract description 26
- 238000012545 processing Methods 0.000 claims abstract description 12
- 239000000872 buffer Substances 0.000 claims description 67
- 238000013507 mapping Methods 0.000 claims description 24
- 230000003139 buffering effect Effects 0.000 claims 2
- 230000005540 biological transmission Effects 0.000 claims 1
- 230000001360 synchronised effect Effects 0.000 description 45
- 238000012546 transfer Methods 0.000 description 45
- 230000036316 preload Effects 0.000 description 15
- 230000002457 bidirectional effect Effects 0.000 description 14
- 238000012360 testing method Methods 0.000 description 14
- 238000012544 monitoring process Methods 0.000 description 13
- 230000000694 effects Effects 0.000 description 10
- 230000004044 response Effects 0.000 description 10
- 230000014509 gene expression Effects 0.000 description 8
- 230000004048 modification Effects 0.000 description 7
- 238000012986 modification Methods 0.000 description 7
- 230000008901 benefit Effects 0.000 description 6
- 238000004891 communication Methods 0.000 description 6
- 230000001343 mnemonic effect Effects 0.000 description 6
- 238000003491 array Methods 0.000 description 5
- 238000010586 diagram Methods 0.000 description 5
- 230000008569 process Effects 0.000 description 5
- 241000254158 Lampyridae Species 0.000 description 3
- 230000009471 action Effects 0.000 description 3
- 238000013461 design Methods 0.000 description 3
- 238000004513 sizing Methods 0.000 description 3
- 238000013459 approach Methods 0.000 description 2
- 238000001514 detection method Methods 0.000 description 2
- 230000006872 improvement Effects 0.000 description 2
- 230000007704 transition Effects 0.000 description 2
- 208000019300 CLIPPERS Diseases 0.000 description 1
- 101710110798 Mannose-binding protein C Proteins 0.000 description 1
- 102000047918 Myelin Basic Human genes 0.000 description 1
- 230000003213 activating effect Effects 0.000 description 1
- 238000004026 adhesive bonding Methods 0.000 description 1
- 230000002411 adverse Effects 0.000 description 1
- 208000021930 chronic lymphocytic inflammation with pontine perivascular enhancement responsive to steroids Diseases 0.000 description 1
- 230000001934 delay Effects 0.000 description 1
- 230000003111 delayed effect Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000008571 general function Effects 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 230000006386 memory function Effects 0.000 description 1
- 230000005012 migration Effects 0.000 description 1
- 238000013508 migration Methods 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
- 230000000630 rising effect Effects 0.000 description 1
- 238000012163 sequencing technique Methods 0.000 description 1
- 230000009131 signaling function Effects 0.000 description 1
- 210000000225 synapse Anatomy 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0844—Multiple simultaneous or quasi-simultaneous cache accessing
- G06F12/0846—Cache with multiple tag or data arrays being simultaneously accessible
- G06F12/0848—Partitioned cache, e.g. separate instruction and operand caches
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0804—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with main memory updating
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/60—Details of cache memory
- G06F2212/601—Reconfiguration of cache memory
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Advance Control (AREA)
Description
- Die Erfindung betrifft generell eine Vorrichtung zum Implementieren und Steuern von Cache-Speichern, und insbesondere eine zum Implementieren und Steuern von programmierbaren Cache-Speicher-Einheiten konzipierte Vorrichtung; die zusätzlich zum Unterstützen von Ein-Prozessor-Operationen in der Lage ist, Mehrprozessor-Operationen z.B. durch die Implementierung von Copy-back- und Eigentümerschaftsschemata zu unterstützen; die in der Lage sind, eine Hochgeschwindigkeits-Instruktions- und Daten-Verarbeitung in einer Umgebung eines Rechners mit vermindertem Befehlsvorrat (RISC) zu unterstützen; und die in der Lage ist, sämtliche genannten Funktionen mit einer Architektur zu unterstützen, die zur Integration auf einem Einzelchip geeignet ist.
- Cache-Speicher und Steuereinrichtungen für Cache-Speicher sind weithin bekannt. Ferner sind Einrichtungen bekannt, bei denen sowohl die Speicher- als auch die Steuerfunktionen auf einem Einzelchip integriert sind. Zu diesen zählt die handelsübliche Einrichtung 43608, die von NEC hergestellt wird. Derartige Einrichtungen werden im folgenden als "integrierte" Cache- Speicher-Einheiten (Integrated Cache Units ICUs) bezeichnet.
- Bei herkömmlichen ICU-Einrichtungen werden bestimmte Algorithmen zum Cache-Speichern von Daten und Instruktionen verwendet, d.h. die Einrichtungen sind nicht programmierbar. Bisher ist es nicht gelungen, einen Cache-Speicher, eine Cache-Speicher- Steuereinrichtung und Programmierbarkeitsmerkmale auf einem Einzelchip zu integrieren, und zwar teilweise aufgrund der Schaltungsdichte und der Anforderungen an die Datenwege. Abgesehen von der fehlenden Programmierbarkeit hat keine bekannte ICU-Architektur die durch die Schaltungsdichte und die Anforderungen an den Datenweg verursachten Probleme überwinden können, die beim Unterstützen von Hochgeschwindigkeits-RISC- Verarbeitungssystemen, insbesondere von Hochgeschwindigkeits- RISC-Systemen mit Mehrprozessoreigenschaften auftreten.
- Es wäre eine programmierbare integrierte Cache-Einheit wünschenswert, da sie die inhärente Flexibilität aufwiese, um die Wahl und/oder Modifikation von Cache-Algorithmen zu ermöglichen.
- Eine Einzelchip-ICU-Architektur mit dem genannten Programmierbarkeits-Merkmal wäre ferner wünschenswert, um den Platzbedarf und die Anforderungen an die Einheitsleistung zu minimieren. Zudem wäre es wünschenswert, in der Lage zu sein, eine derartige integrierte Cache-Speicher-Einheit zum Unterstützen von Hochgeschwindigkeits-Verarbeitungs-Operationen sowohl in der Ein- als auch der Mehrprozessor-Betriebsart zu verwenden, und zwar sowohl für RISC und Nicht-RISC-Umgebungen.
- In einem Artikel von H. Sachs mit dem Titel "The Fairchild Clipper Microprocessor family - a high-performance 32-bit prozessor", Wescon Proceedings, San Francisco, CA, 19-22, Nov. 1985, Vol 29 (1985) wird eine Microprozessoreinrichtung beschrieben, bei der separate Cache-Speicher für Daten und Instruktionen verwendet werden und die vier Cache-Strategien aufweist, die durch das Betriebssystem einer jeden Seite in einem Speicher zugewiesen sind. Eine Speicherhandhabungseinheit ist mit der Cache-Einrichtung auf einem einzelnen Chip kombiniert, wodurch eine Überlappung von Speicherhandhabungsfunktionen mit dem Cache-Zugriff ermöglicht wird.
- Ein Artikel von D. Bursby in Electronic Design, Vol 35, Nr. 5 mit dem Titel "Intelligent cache-memory chip speeds access to most CPU's" beschreibt eine Architektur für integrierte Cache- Einheiten (ICU), bei der die Cache-Funktionen in einem Rechensystem implementiert sind. Das System weist eine zentrale Verarbeitungseinheit (CPU), einen Prozessorbus zur Komunikation zwischen der CPU und der ICU, und einen Speicherbus zur Kommunikation zwischen einem Speicher und der ICU auf. Eine mit dem Prozessorbus verbundene Prozessorbuseinheit steuert ein ICU/Prozessorbus-Interface, und eine mit dem Speicherbus verbundene Speicherbuseinheit steuert ein ICU/Speicherbus- Interface. Eine Cache-Einheit, die sowohl mit der Prozessorbuseinheit als auch mit der Speicherbuseinheit verbunden ist, weist eine Tag-Array-Einrichtung und eine Gültig-Array-Einrichtung mit einer zugehörigen Speicher-Array-Einrichtung auf. Die Tag-Array-Einrichtung, die Gültig-Array-Einrichtung und die Speicher-Array-Einrichtung sind als eine 4-Weg- satz-assoziative Cache-Einrichtung organisiert.
- Gemäß der Erfindung wird eine Architektur für eine integrierte Einchip-Cache-Speicher-Einheit ("CU") zur Implementierung von Cache-Funktionen in einem Rechensystem geschaffen, die die folgenden Elemente aufweist:
- eine mit der Prozessorbuseinrichtung gekoppelte Prozessorbuseinheit zum Steuern eines ICU/Prozessorbus-Interface;
- eine mit der Speicherbuseinrichtung gekoppelte Speicherbuseinheit zum Steuern eines ICU/Speicherbus-Interface; und
- eine mit der Prozessorbuseinheit und mit der Speicherbuseinheit gekoppelte Cache-Speicher-Einheit zum Durchführen von Cache-Funktionen, dadurch gekennzeichnet, daß die Cache-Speicher-Einheit programmiert ist durch Einstellen von Bits in mindestens einem speziellen Register, welches mit einem Cache- Adressenbus und einem Cache-Datenbus gekoppelt ist, wobei bestimmte Cache-Eigenschaften aus mehreren Optionen gewählt werden.
- In einem bestimmten Beispiel ist die Prozessorbuseinrichtung ein nichtgemultiplexter 32 Bit-Adress- und Daten-Bus. Der Prozessorbus unterstützt Burst- und Pipeline-Zugriffe. Ferner ist der Speicherbus ein gemultiplexter 32 Bit-Adress- und Daten-Bus. Der Speicherbus bildet das Interface zu dem Hauptspeicher und nimmt die Mehrprozessor-Organisationen auf.
- Gemäß aer bevorzugten Ausführungsform der Erfindung ist die ICU in der Lage, mit Frequenzen oberhalb 25 Megahertz zu arbeiten, prozessor-Zugriffszeiten von zwei Zyklen für den ersten Zugriff in einer Sequenz, und eines Zyklus für die Burst- Betriebsart oder Pipeline-Zugriffe zu erzielen. Die Erfindung kann entweder als Instruktions-Cache-Speicher oder als Daten- Cache-Speicher mit flexibler interner Cache-Speicher-Organisation verwendet werden. Ein RISC-Prozessor und zwei ICUs (für Instruktions-Cache-Speicherung und Daten-Cache-Speicherung) ergeben einen hoch leistungsfähigen Prozessor mit 16k Cache- Speicher-Bytes. Größere Cache-Speicher können durch Verwendung zusätzlicher ICUs konzipiert werden.
- Es werden Verfahren und Vorrichtungen zur Realisierung einer programmierbaren integrierten Cache-Speicher-Einheit beschrieben, die in der Lage ist, Hochgeschwindigkeits-Daten- und Instruktions-Verarbeitungsvorgänge in Umgebungen sowohl mit RISC- als auch mit Nicht-RISC-Architektur zu unterstützen.
- Es werden eine programmierbare integrierte Cache-Speicher- Einheit und die damit zusammenhängende Methodologie beschrieben, mit denen Hochgeschwindigkeits-Verarbeitungsvorgänge sowohl in Ein- als auch in Mehrprozessor-Umgebungen unterstützt werden.
- Es wird eine Cache-Speicher-Arcitektur beschrieben, die auf einem einzigen Chip integriert sein kann.
- Die offenbarte ICU-Einrichtung kann sowohl als Daten-Cache- Speicher als auch als Instruktions-Cache-Speicher verwendet werden.
- Zu weiteren Merkmalen zählen flexible und extensive Mehrprozessor-Unterstützungs-Hardware, Modularität, niedriger Energiebedarf. Zur Erzielung von Cache-Speicher-Konsistenz kann auch eine Kombination aus Bus-Überwachung, Eigentümerschaftsschemata, Softwarekontrolle und Hardwarekontrolle verwendet werden.
- Diese und weitere Merkmale der Erfindung werden für den Fachmann auf dem Gebiet aus der folgenden detaillierten Beschreibung in Verbindung mit der Zeichnung ersichtlich, bei der in sämtlichen Figuren gleiche Merkmale mit gleichen Bezugszeichen gekennzeichnet sind.
- Fig. 1 zeigt ein Blockschaltbild eines Rechensystems, das zwei der neuartigen ICUs enthält.
- Fig. 2 zeigt das Stift-Paket und die verschiedenen Eingänge und Ausgänge in/aus der neuartigen ICU.
- Fig. 3 zeigt ein Daten-Flußdiagramm zur Veranschaulichung des über die neuartige ICU erfolgenden Datenflusses zwischen der Prozessorbuseinheit und der Speicherbuseinheit von Fig. 1.
- Fig. 4 zeigt in vereinfachter Weise ein mit geteiltem Bus versehenes Mehrprozessorsystem mit zwei ICUs pro Prozessor, wobei die eine ICU als Instruktions-Cache- Speicher und die andere als Daten-Cache-Speicher verwendet wird.
- Fig. 1 zeigt eine typische Konfiguration eines Rechensystems, die die neuartige ICU enthalten kann.
- Aus rein illustrativen Zwecken wird die Erfindung im Zusammenhang mit einem RISC-Verarbeitungssystem beschrieben, das sowohl Ein- als auch Mehrprozessor-Betriebsarten aufweist. Dem Fachmann ist ersichtlich, daß die ICU, die im folgenden detailliert beschrieben wird, auch in Nicht-RISC-Umgebungen verwendet werden kann.
- Fig. 1 zeigt zwei der neuartigen ICUs. Die ICU 101 ist bei Verwendung als Instruktions-Cache-Speicher gezeigt, und die ICU 102 ist bei Verwendung als Daten-Cache-Speicher gezeigt.
- Ein Beispiel des gezeigten geeigneten Hochgeschwindigkeits- Interface, das den RISC-Stromlinien-Instruktionsprozessor (SIP) mit den Cache-Speichern verbindet, ist in EP-A-0 283 115 detailliert beschrieben.
- Diese hier einbezogene Anmeldung lehrt ferner die verschiedenen Betriebsarten des SIP, der Prozessor-Eingänge und -Ausgänge etc." auf die hier bezug genommen wird und die hinsichtlich der Weise, in der sie durch die neuartige ICU unterstützt werden, erläutert werden.
- Fig. 1 zeigt ferner den Prozessorbus, der aus dem Adressenbus 120 und dem Datenbus 121 besteht. Der Prozessor 110 greift auf die Instruktionen in dem Instruktions-ROM 150 und dem Instruktions-Cache-Speicher, der ICU 101, über den Adressenbus 120 zu. Wie gezeigt, werden die erfaßten Instruktionen über den Bus 125 an den Prozessor 110 übermittelt.
- Über den Adressenbus 120 erfolgt ferner ein Zugriff auf den Daten-Cache-Speicher, die ICU 102. Der bidirektionale Datenfluß zwischen dem Prozessor 110 und der ICU 102 kann in der gezeigten Weise über den Datenbus 121 erfolgen.
- Ein Speicherbus 175 ist als ein Bus gezeigt, der den Hauptspeicher 190 mit der ICU 101 und der ICU 102 verbindet. Um der Vollständigkeit willen ist ein arithmetischer Beschleuniger 195, der Teil einer typischen RISC-System-Konfiguration wäre, in Ankopplung an die Busse 120 und 121 gezeigt. Auch die Datentransfersteuereinrichtungen "Data Transfer Controllers DTCs), die als DTC 198 gezeigt sind, können als Teil einer typischen Systemkonfiguration verwendet werden, z.B. um handelsübliche Peripherieeinrichtungen, deren Geschwindigkeiten wesentlich geringer sind als diejenige des Hochgeschwindigkeitsprozessors, an das System ankoppeln zu können, ohne die Leistungsfähigkeit des Prozessors, der Cache-Speicher-Einheiten etc. zu beschränken.
- Ein typischer arithmetischer Beschleuniger ist beschrieben in EP-A-0 214 775, die dem Anmelder der vorliegenden Erfindung zugeteilt ist.
- Bevor die detaillierte Beschreibung fortgesetzt wird, wird zunächst die neuartige integrierte Cache-Speicher-Architektur beschrieben, wobei der Klarheit halber die verwendeten generellen Cache-Speicher-Ausdrücke und Mehrprozessor-Cache-Speicher-Ausdrücke ihrerseits zunächst definiert werden müssen Die hier verwendeten generellen Cache-Speicher-Ausdrücke sind wie folgt definiert:
- - Ein Cache-Speicher-Block ist eine Gruppe sequentieller Wörter, die einem Tag zugeordnet sind. Ein Cache-Speicher- Block wird als Gruppe zugeordnet und ersetzt, wann immer es erforderlich ist. Bei der bevorzugten Ausführungsform der ICU besteht die Block-Größe aus vier Wörtern (ein Tag pro vier Wörter).
- - Status-Bits, die einem Cache-Speicher-Block zugeordnet sind. Gemäß der bevorzugten Ausführungsform der ICU existieren zwei Status-Bits pro Block. Diese spezifizieren den modifizierten und geteilten Status eines Blocks.
- - Ein chipintegriertes Direktzugriffsspeicher-Array, das die Blockstatus-Bits enthält.
- - Eine Schreibweise, bei der für den Fall eines Treffers ein Schreib-Zugriff nur in dem Cache-Speicher durchgeführt wird. Der Block, der die geschriebenen Daten enthält, wird als modifiziert markiert. Die Daten werden nur dann, wenn der modifizierte Block ersetzt wird, in den Hauptspeicher geschrieben (zurückkopiert).
- - Ein Cache-Speicher, der zum Cache-Speichern häufig verwendeter Prozessordatenvariablen verwendet wird.
- - Dies ist ein alternativer Ausdruck für eine Assoziativ-Organisation mit Einwege-Setzung. Eine bestimmte Adresse kann in dem Cache-Speicher nur an einer bestimmten Stelle cache-gespeichert (mittels der Adresse direkt abgebildet) werden.
- - Das durch die Zugriffsadresse bestimmte Wort ist in dem Cache-Speicher-Array vorhanden. Es wird eine Adressen- Übereinstimmung in dem Tag-Array festgestellt, und das entsprechende gültige Bit wird gesetzt.
- - Eine Operation, die gültige Daten aus dem Cache-Speicher entfernt. Ein oder mehrere gültige Bits werden rückgesetzt, so daß die entsprechenden Wörter ungültig werden.
- - Ein Cache-Speicher, dem zum Cache-Speichern häufig benutzter Prozessor-Instruktionen verwendet wird.
- - Ein Ersetzungsalgorithmus, bei dem der zu ersetzende Block entsprechend der Geschichte seiner Verwendung gewählt wird. Der Block, dessen Verwendung am weitesten zurückliegt, wird ersetzt.
- - Datenvariablen oder Instruktionen können in dem Cache-Speicher verriegelt werden. Sie werden nicht ersetzt, selbst wenn sie durch den Ersetzungsalgorithmus gewählt werden. Es ist zu beachten, daß das noch zu beschreibende *LOCK-Eingangssignal zu der ICU Interlock- Verriegelungs-Operationen bestimmt und nicht für Operationen zur Verriegelung im Cache-Speicher verwendet wird. Jedem Block ist ein Verriegelungs-Bit zugeordnet, um die Verriegelung des Blocks zu erleichtern.
- - Chipintegriertes Direktzugriffsspeicher-Array, das die cache-gespeicherten Daten oder Instruktionen enthält.
- - Der Bus, der den Cache-Speicher mit dem Hauptspeicher verbindet.
- - Das durch die Zugriffsadresse bestimmte Wort ist in dem Cache-Speicher-Array nicht vorhanden.
- - Ein Block wird als modifiziert markiert, wenn er in einer Copy-back-Schreibweise geschrieben wird. Dies zeigt an, daß der Block relativ zu dem Hauptspeicher modifiziert ist und die aktuellere Version der Daten enthält.
- - Eine Instruktion oder Datenvariable, die nicht cache-gespeichert werden kann. Eine nicht cachespeicherbare Operation wird durch die ICU zu dem Speicherbus übertragen. Der Cache-Speicher wird nicht nach ihr abgesucht, und es wird kein Cache-Speicher-Block zugeordnet.
- - Die Operation zum Abrufen von Datenvariablen oder Instruktionen in den Cache-Speicher, bevor sie angefordert werden.
- - Ein Puffer, der aus dem Speicherpuffer ausgelesene vorabgerufene Datenvariablen oder Instruktionen hält, bevor sie in den Cache-Speicher geschrieben werden. In der ICU wird der Lesepuffer in der Funktion eines Vorabruf-Puffers verwendet.
- - Eine spezielle Vorabruf-Operation, die den Cache- Speicher mit spezifischen Datenvariablen oder Instruktionen lädt. Die Adressen für die Vorlade-Operation werden von dem Benutzer bestimmt, im Gegensatz zu anderen Vorabruf-Operationen, bei denen die vorabgerufenen Adressen von dem Cache- Speicher bestimmt werden.
- - Der Bus, der den Cache-Speicher mit dem Prozessor verbindet.
- - Ein Ersetzalgorithmus, bei dem der zu ersetzende Block beliebig gewählt wird.
- - Ein Puffer, der die aus dem Speicherbus ausgelesenen Datenvariablen oder Instruktionen hält, bevor sie in den Cache-Speicher geschrieben werden. Bei der bevorzugten Ausführungsform der ICU weist der Lesepuffer eine Tiefe von vier Wörtern auf, und er wird auch in der Funktion eines Vorabrufpuffers verwendet.
- - Im Fall eines Cache-Speicher-Fehlgängers werden die erforderlichen Daten oder Instruktionen an den Prozessor übermittelt, sobald sie von dem Speicher akzeptiert sind. Die Neulade-Operation wird parallel dazu abgeschlossen. In einem Cache-Speicher ohne Durch-Lesen wird die Neulade-Operation abgeschlossen, bevor die angeforderten Daten oder Instruktionen an den Prozessor übermittelt werden.
- - Die Operation, die im Fall eines Daten-Speicher- Fehlgängers durchgeführt wird, um die angeforderten Daten oder Instruktionen aus dem Hauptspeicher abzurufen.
- - Der Algorithmus, der den zu ersetzenden Block bestimmt, wenn ein neuer Block in dem Cache-Speicher plaziert wird. Es wird ein Block aus dem die erforderliche neue Adresse enthaltenden Satz gewählt.
- - Dieser Ausdruck wird im Zusammenhang mit Cache-Instruktionen gewählt, um den Umfang des Effektes der Instruktion zu definieren. Die Instruktion kann eine bestimmte ICU, mehrere Instruktions-Cache-Speicher, mehrere Daten-Cache-Speicher oder mehrere Instruktions-und Daten-Cache-Speicher beinflussen.
- - Eine Gruppe von Tags und der zugeordneten Cache-Blocks, die gelesen und gleichzeitig mit den erforderlichen Adresssen verglichen werden. Es kann eine Übereinstimmung mit jedem der Tags des Satzes festgestellt werden. Der Satz wird entsprechend einiger der Adressenbits bestimmt. Die Anzahl der Tags in dem Satz gleicht der Anzahl von "Wegen" (die im folgenden definiert werden) in der Cache-Organisation.
- - Eine Cache-Organisation, die die Cache-Speicherung einer bestimmten Adresse in einer Anzahl möglicher Stellen in dem Cache-Speicher erlaubt. Diese Anzahl wird als der Grad der Assoziativität bezeichnet. Sie bestimmt die Anzahl von "Wegen" in der Cache-Organisation und die Anzahl von Tags, die gelesen und gleichzeitig verglichen werden. Die offenbarte ICU unterstützt Zwei-Wege- und Ein-Weg- satz-assoziative Organisationen.
- - Eine Gruppe von einem oder mehreren Wörtern, die zusammen mit dem verlangten Wort für die Neulade-Operation aus dem Hauptspeicher abgerufen werden. Die Bemessung des Unterblocks definiert die maximale Anzahl von Wörtern, die abgerufen werden. Die Bemessung des Unterblocks ist kleiner als die Bemessung des Blocks oder dieser gleich.
- - Das Tag identifiziert die Adresse der Daten oder Instruktionen, die momentan in dem Cache-Speicher vorhanden sind. Jedem Cache-Speicher-Block ist ein Cache-Speicher-Tag zugeordnet, und dieses ist in dem Tag-Speicher-Array gespeichert. Bei der bevorzugten Ausführungsform der ICU entspricht jedes Tag einem Vier-Wort-Block.
- - Chipintegriertes Direktzugriffsspeicher-Array, das die Adressen-Tags für die cache-gespeicherten Daten oder Instruktionen enthält.
- - Eine Operation, die die Aktualisierung des Hauptspeichers von dem Cache-Speicher her veranlaßt. Ein modifizierter Block wird von dem Cache-Speicher in den Hauptspeicher geschrieben, so daß der Speicher mit der aktuellsten Version der Daten aktualisiert wird.
- - Chipintegriertes Direktzugriffsspeicher-Array, das die gültigen Bits enthält.
- - Ein Bit, das die Gültigkeit der cache-gespeicherten Daten angibt. Bei der bevorzugten Ausführungsform der ICU ist jedem cache-gespeicherten Wort ein gültiges Bit zugeordnet.
- - Eine Gruppe von Tags, die einem Tag-Array-Modul zugeordnet sind. Von jedem Weg wird nur ein Tag, das von dem Adressendekodierer des Moduls bestimmt wird, gelesen und verglichen. Bei der bevorzugten Ausführungsform der ICU existieren zwei Wege, von denen jeder 256 Tags aufweist.
- - Im Fall eines Cache-Speicher-Fehlgängers für die Schreib-Operation wird für den Block, der die geschriebene Adresse enthält, ein Cache-Speicher-Block zugeordnet. Für den verlangten Block wird eine Neulade-Operation durchgeführt. Für das Nicht-Schreib-Zuordnen wird kein Cache- Speicher-Block zugeordnet, und das Schreiben wird nur in dem Speicher durchgeführt.
- - Ein Puffer, der die Schreibzugriffsinformation (Adressen, Daten und Steuerung) hält, bis der Schreib-Zugriff für den Speicherbus durchgeführt wird. Die bevorzugte Ausführungsform der ICU enthält einen vierfach tiefen Schreibpuffer, der bis zu vier Schreib-Zugriffe halten kann.
- - Ein Schreibweise, bei der jeder Schreib- Zugriff in den Hauptspeicher hinein durchgeführt wird. Im Fall eines Cache-Speicher-Treffers werden die Daten auch in den Cache-Speicher geschrieben.
- Die hier verwendeten Mehrprozessor-Cache-Speicher-Termini sind wie folgt definiert:
- - Der Speicherbus wird von den Slave-Cache- Speichern überwacht (beobachtet). Diese vergleichen die übertragenen Adressen mit den Pufferadressen. Falls eine Übereinstimmung festgestellt wird, kann eine spezielle Operation durchgeführt werden. Die Ausdrücke "Bus-Schnüffeln" oder "Cache-Speicher-Schnüffeln" sind Äquivalente.
- - Dies ist ein anderer Ausdruck zur Beschreibung der Datenkonsistenz in einem Mehrprozessor-Cache- Speicher-System.
- - Diese ist das Hauptproblem in Mehrprozessor- Cache-Speicher-Systemen. Falls eine Variable von mehreren Prozessoren gemeinsam benutzt wird, kann sie in mehreren Cache-Speichern gespeichert werden. Die aktuellste Version der Variablen muß zugeführt werden, wann immer ein Zugriff auf die Variabale erfolgt. Dies gewährleistet die Konsistenz der Datenvariablen über das gesamte System hinweg.
- - Eine Operation, die von einem Slave-Cache- Speicher durchgeführt werden kann, wenn bei einem Speicherbus- Lese-Zugriff eine Übereinstimmung festgestellt wird. Falls der Slave-Cache-Speicher modifizierte Daten (die aktuellste Version der Daten) enthält, greift er in den Zugriff ein und führt die Daten zu. In diesem Fall darf der Hauptspeicher die Daten nicht zuführen.
- - Gibt an, daß eine Variable oder ein Cache-Speicher- Block exklusiv in einem Cache-Speicher vorhanden ist. Die Variable oder der Cache-Speicher-Block kann exklusiv von einem einzigen Prozessor benutzt werden, oder sie können von mehreren Prozessoren benutzt werden, existieren jedoch nur in einem einzigen Cache-Speicher. Bei der bevorzugten Ausführungsform der ICU zeigt ein LOW in dem gemeinsam benutzten Blockstatus-Bit einen exklusiven Block an. Der Block kann entweder exklusiv unmodifiziert oder exklusiv modifiziert sein.
- - Verriegelungs-Operationen werden benutzt, um eine Variable (Verriegelungsvariable) zeitweilig zur exklusiven Verwendung durch einen Prozessor zu verriegeln. Keine anderen Prozessoren oder Cache-Speicher dürfen die Variable verwenden, während sie verriegelt ist. Das * LOCK-Eingangssignal in die ICU zeigt, wie noch erläutert wird, eine Verriegelungs-Operation an.
- - Ein Cache-Speicher, der ein Master des Speicherbusses ist. Er gibt die Anforderung aus und erwartet eine Reaktion.
- - Die Adresse des Speicherbus-Zugriffs stimmt mit einer der Adressen überein, die in dem Tag-Puffer vorhanden sind, und das entsprechende Wort ist gültig. Der Ausdruck wird für den Speicherbusadressenvergleich verwendet und ist dem Ausdruck "Treffer" äquivalent, der für den Prozesorbus verwendet wird.
- - Dabei handelt es sich um ein Schema zum Garantieren von Datenkonsistenz. Der aktuellste Wert der Variablen ist Eigentum eines Cache-Speichers oder des Hauptspeichers. Es unterliegt der Verantwortung des Eigentümers, die Konsistenz der Variablen aufrechtzuerhalten. Es gibt verschiedene Eigentümerschaftsschemata, die sich hinsichtlich der Anzahl von Zuständen, die einer Variablen zugeteilt sind, und der Algorithmen für Eigentümerschafts- und Zustandsübergänge unterscheiden.
- - Dieser Ausdruck gibt an, daß eine Variable oder ein Cache-Speicher-Block von mehr als einem Prozessor gemeinsam benutzt wird. Eine gemeinsam benutzte Variable kann in mehr als einem Cache-Speicher vorhanden sein. Bei der bevorzugten Ausführungsform der ICU zeigt ein HIGH in dem gemeinsam benutzten Blockstatus-Bit einen gemeinsam benutzen Block an. Der Block kann entweder bei gemeinsamer Benutzung unmodifiziert oder bei gemeinsamer Benutzung modifiziert sein.
- Bei gemeinsamer Benutzung modifiziert - Ein Blockstatus in der ICU, der angibt, daß ein Cache-Speicher-Block gemeinsam benutzt und modifiziert ist. Der Ausdruck gibt ferner an, daß der Block Eigentum des Cache-Speichers ist, und daß es sich um den aktuellsten Wert des Blocks in dem System handelt.
- - Ein Cache-Speicher, der nicht der Master des Speicherbusses ist. Zur Erzielung von Datenkonsistenz kann ein Slave-Cache-Speicher den Speicherbus überwachen.
- - Ein anderer Ausdruck für "Bus-Überwachung". Die Ausdrücke "Bus-Schnüffeln" oder "Cache-Speicher-Schnüffeln" sind weitere Äquivalente.
- Nach der vorstehenden Definition der hier verwendeten Ausdrücke wird die bevorzugte Ausführungsform der neuartigen ICU im folgenden detailliert beschrieben, und zwar hinsichtlich ihrer Stiftelemente und ihrer funktionellen Organisation.
- Was die Beschreibung der Stifte anbelangt, ist anzumerken, daß der Ausdruck "Dreizustand" verwendet wird, um Signale zu beschreiben, die während des normalen Betriebs in den Hochimpedanzzustand gebracht werden können. Sämtliche Ausgangssignale (außer MSERR, das noch zu beschreiben ist) können durch das *TEST-Eingangssignal (das ebenfalls noch zu beschreiben ist) in den Hochimpedanzzustand gebracht werden.
- Bei der bevorzugten Ausführungsform der neuartigen ICU handelt es sich um einen CMOS mit einem 169 Pin Grid Array-Paket, wie Fig. 2 zeigt.
- Das Prozessorbus-Interface, das zuerst beschrieben wird, weist die folgenden Merkmale auf:
- Der Adressenbus, die Stifte A0-A31 von Fig. 2, ist ein ICU-Eingang, ist synchron ausgelegt und übermittelt die Byte-Adresse für den Cache-Speicher-Zugriff auf den Prozessorbus.
- Die Zugriffsstatussteuersignale (Access Status Control- Signale), gezeigt als ASTC0 und ASTC1 in Fig. 2), sind synchrone Eingangssignale, die die einem Zugriff zugeordnete Statussteuerung bestimmen. Gemäß der bevorzugten Ausführungsform der Erfindung sind sie wie folgt kodiert: Bedeutung Exklusives Durch-Schreiben Exklusives Copy-back Gemeinsam benutzt Nicht cache-speicherbar
- Diese Eingangssignale sind normalerweise mit den Ausgängen MPGM0-MPGM1 des Prozessors 110 gekoppelt, wie in der hier einbezogenen Anmeldung, in der Prozessorausgänge beschrieben sind, erläutert ist.
- *BINV (Bus Invalid), Bus ungültig, ist ein synchrones ICU- Eingangssignal im aktiven LOW-Zustand, das anzeigt, daß der Adressenbus und die damit zusammenhängenden Steuerungen ungültig sind. Das Signal definiert einen Leerlaufzyklus in dem Prozessorbus 120.
- *CBACK (Cache Burst Acknowledge), Cache-Speicher-Burst- Bestatigung, ist ein ICU-Ausgangssignal, das synchron und im aktiven LOW-Zustand ist. Dieses Ausgangssignal wird jedes Mal geltend gemacht, wenn auf dem Prozessorbus 120 ein in der Burst-Betriebsart erfolgender Cache-Speicher- Zugriff durchgeführt worden ist.
- *CBREQ (Cache Burst Request), Cache-Speicher-Burst-Anforderung, ist ein ICU-Eingangssignal, das synchron und im aktiven LOW-Zustand ist. Dieses Eingangssignal wird verwendet, um einen Burst-Betriebsart-Cache-Speicher-Zugriff auf den Prozessorbus durchzuführen und während eines Burst-Betriebsart-Cache-Speicher-Zugriffs den nächsten Transfer anzufordern. Dieses Signal kann im Vergleich zu *DREQ oder *IREQ, die noch beschrieben werden, spät in dem Zyklus gültig werden.
- *CERR (Cache Error), Cache-Speicher-Fehler, ist ein ICU- Ausgangssignal, das synchron und im aktiven LOW-Zustand ist. Dieses Ausgangssignal zeigt an, daß während des aktuellen Cache-Speicher-Zugriffs ein Fehler aufgetreten ist.
- *CRDY (Cache Ready), Cache Speicher bereit, ist ein ICU- Ausgangssignal, das synchron und im aktiven LOW-Zustand ist. Bei Prozessorbus-Cache-Speicher-Lesevorgängen zeigt dieses Signal an, daß sich auf dem Cache-Speicher-Bus gültige Daten befinden. Bei Cache-Speicher-Schreibvorgängen zeigt das Signal an, daß Daten auf dem Cache-Speicher-Bus nicht angesteuert werden müssen.
- CREQT0-CREQT1 (Cache Request Type), Cache-Speicher-Anforderungstyp, ist ein synchrones Eingangssignal. Diese Signale spezifizieren den Adressenraum auf dem Prozessorbus wie folgt: Daten-Cache-Speicher-Verwendung Bedeutung Speicher-Zugriff Eingangs/Ausgangs-Zugriff Koprozessor-Transfer (von der ICU ignoriert) Instruktions-Cache-Speicher-Verwendung Bedeutung Speicher-Zugriff Instruktions-Nurlesespeicher-Zugriff
- Für die Instruktions-Cache-Speicher-Verwendung weist CREQT1 eine spezielle Funktion auf. Es wird während RESET abgetastet, und falls der Abtastwert HIGH ist, reagiert die ICU auf Instruktions-ROM-Zugriffe. Falls der Abtastwert LOW ist, reagiert die ICU nicht auf Instruktions-ROM- Zugriffe. Nach RESET wird das CREQT1-Eingangssignal bei der Instruktions-Cache-Speicher-Verwendung ignoriert.
- *CSEL "Chip Select), Chip-Wahl, ist ein synchrones Eingangssignal, das im aktiven LOW-Zustand ist. Ein aktiver Pegel am *CSEL-Eingang wählt die ICU für Prozessorbus- Cache-Speicher-Instruktions-Zugriffe. Es wird nicht für normale Speicher-Zugriffe verwendet. Der *CSEL-Eingang kann über das Chipwahlabbildungsregister, einen noch zu beschreibenden Teil der ICU, deaktiviert werden. Wenn *CSEL aktiviert und nicht geltend gemacht wird, reagiert die ICU nicht auf Prozessorbus-Cache-Speicher-Instruktions-Zugriffe.
- *CSM (Chip Select for Memory access), Chip-Wahl für Speicher-Zugriff, ist ein synchrones ICU-Eingangssignal, das im aktiven LOW-Zustand ist. Ein aktiver Pegel am *CSM- Eingang wählt die ICU für Speicher-Zugriffe. Das Signal kann für Cache-Speicher-Erweiterungen und Cache-Speicher- Adressenraum-Wahl verwendet werden. Der *CSM-Eingang kann über das Chipwahlabbildungsregister aktiviert werden. Wenn *CSM aktiviert ist, reagiert die ICU auf Speicher-Zugriffe nur, falls *CSM geltend gemacht wird und die Adresse mit entsprechenden aktivierten Bits in dem vorgewählten Feld des (noch detailliert zu beschreibenden) Chipwahlabbildungsregisters übereinstimmt.
- CB0-CB31, der Cache-Speicher-Bus, ist bidirektional, synchron und für drei Zustände ausgelegt. Der Cache-Speicher- Bus überträgt Instruktionen oder Daten auf dem Prozessorbus zu und von der ICU.
- *DREQ (Data Request), Datenanforderung, ist ein synchrones ICU-Eingangssignal, das im aktiven LOW-Zustand ist. Dieses Eingangssignal fordert einen Daten-Zugriff auf den Prozessorbus an. Wenn es aktiv ist, erscheint die Adresse für den -Zugriff auf den Adressenbus. bei der Instruktions- Cache-Speicher-Verwendung der ICU wird *DREQ für Prozessorbus-Cache-Speicher-Instruktions-Transfers benutzt.
- *IREQ (Instruktion Request), Instruktionsanforderung, ist ein synchrones ICU-Eingangssignal, das im aktiven LOW- Zustand ist. Dieses Eingangssignal fordert einen Instruktions-Cache-Speicher-Zugriff auf den Prozessorbus an. Wenn es aktiv ist, erscheint die Adresse für den Zugriff auf den Adressenbus. Dieses Eingangssignal hat während der Rücksetz-Operation der ICU eine spezielle Funktion. Es wird durch die Anstiegsflanke von SYSCLK abgetastet, wenn RESET (das noch zu beschreiben ist) aktiv ist. Der zuletzt abgetastete Wert bestimmt die ICU-Operation als Daten- Cache (*IREQ LOW) oder als Instruktions-Cache (*IREQ HIGH). Für eine Daten-Cache-Operation muß *IREQ auf LOW gebunden sein (es wird während der normalen Operation ignoriert). Für eine Instruktions-Cache-Operation muß es mit dem Prozessor-*IREQ-Ausgang gekoppelt sein, der während RESET ungültig gemacht wird. Es ist anzumerken, daß, wenn der Prozessor während RESET in die Test-Betriebsart versetzt wird, die externe Logik den Prozessor das IREQ- Signal in den HIGH-Zustand treiben muß. (Der in der mitanhängigen Anmeldung hinsichtlich des Hochleistungs-Interface beschriebene Prozessor treibt IREQ in seiner Test- Betriebsart nicht in den HIGH-Zustand.)
- *LOCK, Verriegelung, ist ein ICU-Eingangssignal, das synchron und im aktiven LOW-Zustand ist. Dieses Eingangssignal zeigt an, daß der Prozessor-Cache-Speicher-Zugriff auf eine verriegelte Variable erfolgt. Die ICU handhabt diesen Zugriff auf eine spezielle Weise, die im Zusammenhang mit der noch detailliert zu beschreibenden Verriegelungsfunktion erläutert wird.
- MSERR (Master/Slave Error), Master/Slave-Fehler, ist ein synchrones ICU-Ausgangssignal, das im aktiven HIGH-Zustand ist. Dieses Ausgangssignal zeigt das Ergebnis des Vergleiches der ICU-Ausgangssignale mit den extern an die chipexternen Treiber angelegten Signale. Falls für irgendeinen der aktivierten Treiber ein Unterschied besteht, wird dieses Signal geltend gemacht.
- OPT0-OPT2 (Option Control), Optionssteuerung, ist ein synchrones ICU-Eingangssignal. Diese Signale repräsentieren die Optionssteuerungsbits, die einem Cache-Speicher- Zugriff zugeordnet sind. Sie werden verwendet zur Spezifizierung der Datenlänge sowie von spezieller Zugriffsinformation. Die Interpretation dieser Signale hängt von der Verwendung der ICU als Daten- oder Instruktions-Cache- Speicher ab. Die Kodierung und Interpretation dieser Eingangssignale erfolgt gemäß der bevorzugten Ausführungsform der Erfindung wie folgt: OPT2-0-WERT Bedeutung Daten-Cache-Speicher Bedeutung Instruktions-Cache-Speicher Bit-Zugriff kein Zugriff Instruktionsspeicher-Zugriff (als Daten) Cache-Operanden-Transfer Entstörungsmodul-Zugriff reserviert
- Die OPT-Eingangssignale werden ignoriert, falls sich DREQT1 im HIGH-Zustand befindet (behandelt als Nicht-Zugriff). Die Codes 100,101 werden als Nicht-Zugriff behandelt, falls sich DREQT0 im HIGH-Zustand befindet. Der Code 100 wird verwendet, um das Instruktions-ROM als Daten auszulesen. Ein Daten-Cache-Speicher reagiert auf diesen Code nur dann, wenn das ROM-Aktivierungs-Bit in dem noch zu beschreibenden Moda-Register HIGH ist. In diesem Fall wird die Anforderung als nicht cache-speicherbarer -Zugriff behandelt. Der Code 101 zeigt einen Operandentransfer für die ICU-Prozessorbus-Cache-Speicher-Instruktionen an. Gemäß dem bevorzugten Ausführungsbeispiel der Erfindung wird der Code 101 fr einen speziellen Entstörungsmodul-Zugriff verwendet. Ein Daten-Cache-Speicher regiert mit *CRDY HIGH für vier Zyklen, und dann wird *CRDY für einen Zyklus geltend gemacht.
- *PCA (Pipelined Cache Access), Pipeline-Cache-Speicher- Zugriff, ist ein synchrones ICU-Eingangssignal, das im aktiven LOW-Zustand ist. Falls *DREQ für den Daten-Cache- Speicher oder *IREQ für den Instruktions-Cache-Speicher nicht aktiv ist, zeigt dieses Eingangssignal an, daß der Cache-Speicher-Zugriff mit einem anderen gerade ablaufenden Cache-Speicher-Zugriff gepipelinet ist. Der Pipeline- Zugriff kann nicht abgeschlossen werden, bis der erste Zugriff abgeschlossen ist. Der Abschluß des ersten Zugriffs wird durch die Geltendmachung von *DREQ für den Daten-Cache-Speicher und *IREQ für den Instruktions-Cache- Speicher signalisiert.
- *RESET, Rücksetzen, ist ein asynchrones Eingangssignal, das im aktiven LOW-Zustand ist. Dieses Eingangssignal setzt die ICU zurück.
- R/*W (Read/Write), Lesen/Schreiben, ist ein synchrones Eingangssignal. Dieses Eingangssignal zeigt an, ob der Cache-Speicher-Zugriff ein Transfer von der ICU zu dem Prozessor (R/*W High) oder von dem Prozessor zu der ICU (R/*W Low) ist.
- SUP/*US (Supervisor/User Mode), Überwachungs-/Benutzer- Betriebsart, ist ein synchrones Eingangssignal. Dieses Eingangssignal gibt während des Zugriffs die Programm- Betriebsart des gezeigten Prozessors (Überwachungs-Betriebsart oder Benutzer-Betriebsart) an. Die internen Register der ICU und die Ausführung der Cache-Speicher- Instruktionen sind vor Benutzer-Betriebsart-Zugriffen geschützt.
- SYSCLK (System Clock), Systemtakt, ist ein externes Takt- Eingangssignal mit der Betriebsfrequenz der ICU.
- *TEST, Test-Betriebsart, ist ein asynchrones Eingangssignal, das im aktiven LOW-Zustand ist. Wenn dieses Eingangssignal aktiv ist, befindet sich die ICU in der Test- Betriebsart. Sämtliche Ausgänge und bidirektionalen Leitungen mit Ausnahme von MSERR, werden in den Hochimpedanzzustand gezwungen.
- WREP (Way for Replacement), Weg zum Ersatz, ist ein synchrones Eingangssignal. Dieses Eingangssignal erzwingt die Weg-Nummer für den Ersatz im Fall eines Cache-Speicher- Fehlgängers. Es wird während des ersten Zyklus eines gültigen Cache-Speicher-Zugriffs abgetastet. Ein Fehlgänger in einer gesetzten Zwei-Wege-Zuordnungsorganisation (falls die Ersatz-Betriebsart extern ist) veranlaßt einen Ersatz, der durch WREP bestimmt ist: WREP LOW erzwingt einen Ersatz des weges 0, WREP HIGH erzwingt einen Ersatz des Weges 1.
- Im folgenden wird, weiterhin im Zusammenhang mit Fig. 2, das Speicherbus-Interface beschrieben. Der Speicherbus kann die folgenden Merkmale aufweisen:
- BSTC0-BSTC1 (Block Status Control), Blockstatussteuerung, sind bidirektional, synchron und für drei Zustände ausgelegt. Diese Signale werden verwendet, um die Cache-Blockstatus-Information zu inspizieren und zu aktualisieren. Wenn es durch eine Speicherbus-Instruktion verlangt wird, benutzt die ICU diese Signale, um die den zugeführten Adressen zugeordneten Blockstatus-Bits anzuzeigen. Diese Signale werden ferner verwendet, um den Blockstatus aus dem Speicherbus für eine Schreib-Blockstatus-Instruktion zuzuführen. Die Kodierung dieses Signals für beide der genannten Funktionen erfolgt in dieser Weise: Bedeutung exklusiv unmodifiziert exklusiv modifiziert gemeinsam benutzt unmodifiziert gemeinsam benutzt modifiziert
- *DI (Data Intervention), Datenintervention, ist ein synchrones Ausgangssignal, das für drei Zustände ausgelegt ist und sich im aktiven LOW-Zustand befindet. Dieses Ausgangssignal wird zum Anzeigen einer Dateninterventions-Operation auf dem Speicherbus verwendet. Die Dateninterventions-Operation wird bei einigen Mehrprozessor-Konfigurationen verwendet, um die aktuellste Version der Variablen aus dem entsprechenden Cache-Speicher (im Gegensatz zum Hauptspeicher) zuzuführen. Der ICU-Master lädt das *DI- Signal während des Adressenzyklus eines Speicherbus-Lese- Zugriffs vor. Dann versetzt er das Signal in die Drei-Zustands-Betriebsart. Die ICUs, die nicht die Bus-Master sind, geben das *DI-Signal ab, falls sie mit einer Datenintervention reagieren.
- *GRT (Memory Bus Grant), Speicherbus-Gewährung, ist ein synchrones Eingangssignal, das im aktiven LOW-Zustand ist. Dieses Eingangssignal zeigt an, daß der Speicherbus für die ICU-Verwendung zulässig ist.
- *HIT, Treffer, ist bidirektional, synchron, für drei Zustände ausgelegt und im aktiven LOW-Zustand. Dieses Signal kann derart programmiert werden, daß es entweder ein Ausgangssignal oder ein Eingangs-/Ausgangs-Signal ist. Als Ausgangssignal wird es zur Treffer-Anzeige verwendet. Das Signal wird geltend gemacht, wenn ein Treffer in dem Tag- Puffer für die auf dem Speicherbus anliegende Adresse detektiert wird. Es wird ferner bei einigen der Speicherbus-Instruktionen verwendet, um die Gültigkeit eines Wortes oder Blocks anzuzeigen.
- Wenn das Signal als Eingangs-/Ausgangs-Signal programmiert ist, kann es zusätzlich zu den genannten Ausgangssignal- Funktionen als Signal zur Detektion eines Treffers in irgendeinem anderen Cache-Speicher verwendet werden. Der ICU-Master lädt das *HIT-Signal während des Adressenzyklus vor und versetzt es dann in die Eingangssignal-Dreizustands-Betriebsart. Die ICUs, die nicht die Bus-Master sind, geben das *HIT-Signal nur ab, wenn ein Treffer in ihrem Tag-Puffer detektiert wird.
- *MASTB (Memory Address Strobe), Speicheradressen-Strobe- Signal, ist bidirektional, synchron, für drei Zustände ausgelegt und im aktiv LOW. Wenn die ICU der Speicherbus- Master ist, wird dieses Signal von der ICU geltend gemacht, um anzuzeigen, daß eine Byte-Adresse auf dem Speicherbus vorhanden ist. Wenn die ICU kein Master ist, zeit dieses Signal an, daß eine Byte-Adresse von einem anderen Bus-Master auf dem Speicherbus vorhanden ist. Es ist anzumerken, daß, falls sowohl der Instruktions-Cache-Speicher als auch der Daten-Cache-Speicher in dem System vorhanden ist, zwei *MASTB-Signale verfügbar sind. Die beiden Signale können verwendet werden, um zwischen Instruktions- und Daten-Zugriffen zu unterscheiden.
- *MBACK (Memory Burst Acknowledge), Speicher-Burst-Bestätigung, ist ein synchrones Eingangssignal, das im aktiven LOW-Zustand ist. Dieses Eingangssignal ist immer dann aktiv, wenn auf dem Speicherbus ein Burst-Betriebsart- Cache-Speicher-Zugriff hergestellt worden ist.
- MBP0-MBP3 (Memory Byte Parity), Speicher-Byte-Parität, ist bidirektional, synchron und für drei Zustände ausgelegt.
- Es handelt sich hierbei um den Byte-Paritäts-Bus für Transfers auf dem Speicherbus. Es kann eine geradzahlige oder eine ungeradzahlige Parität spezifiziert werden. MBP0 bedeutet Byte-Parität für MEMAD0-MEMAD7, MBP1 bedeutet Byte-Parität für MEMAD8-MEMAD15 usw. Bei Transfers von der ICU zu dem Speicher erzeugt die ICU Parität. Bei Transfers zu der ICU überprüft sie die Byte-Parität.
- Falls ein Paritätsfehler detektiert wird und Daten auf dem Prozessorbus übertragen werden sollen, wird das *CERR- Signal geltend gemacht. Falls die Daten nicht auf den Prozessorbus übertragen zu werden brauchen (z.B. bei Block-Neuladen), wird ein Fehler-Bit in dem (noch zu beschreibenden) Statusregister gesetzt, und die Daten werden ignoriert. Die Paritätserzeugung und -überprüfung können deaktiviert werden. Falls die Paritätserzeugung und -überprüfung deaktiviert sind, wird die Speicherbusdaten-Zeitgebung relaxiert.
- *MBREQ (Memory Burst Request), Memory-Burst-Anforderung, ist bidirektional, synchron, für drei Zustände ausgelegt und aktiv LOW. Dieses Signal wird verwendet, um einen Burst-Betriebsart-Zugriff auf den Speicherbus herzustellen und während des Burst-Betriebsart-Zugriffs den nächsten Transfer anzufordern. Wenn die ICU der Bus-Master ist, ist dieses Signal ein Ausgangssignal. Wenn die ICU kein Master ist, ist das Signal ein Eingangssignal, das von der ICU für Datenkonsistenz-Operationen verwendet wird.
- MDLN0-MDLN1 (Memory Data Length), Speicherdatenlänge, sind bidirektional, synchron und für drei Zustände ausgelegt. Diese Signale reflektieren die Datenlänge für die Speicherbusdaten-Zugriffe. Sie werden bei Instruktions-Zugriffen ignoriert. Für eine Daten-Cache-Speicher-Verwendung unterstützt die ICU 8, 16 und 32 Bit-Transfers. Das Kodieren dieser Signale erfolgt gemäß der bevorzugten Ausführungsform der Erfindung wie folgt: Bedeutung Bit-Zugriff ungültig
- Es ist anzumerken, daß die MDLN0- und MDLN1-Kodierung derjenigen für OPT0 und OPT1 bei dem Prozessor entspricht, welcher bei der als Beispiel erläuterten Ausführungsform der Erfindung verwendet wird.
- MEMAD0-MEMAD31 (Memory Address/Data Bus), Speicher-Adressen-/Daten-Bus, ist bidirektional, synchron und für drei Zustände ausgelegt. Der Speicherbus ist ein gemultiplexter Adressen-/Daten-Bus, der für das Speicher-Interface verwendet wird. Wenn *MASTB geltend gemacht wird, hält dieser Bus die Byte-Adresse des Speicherbus-Zugriffs. Wenn die ICU der Bus-Master ist, gibt sie die Adresse aus. Wenn die ICU nicht der Bus-Master ist, ist der Bus ein Eingang, und die Adresse wird von der ICU zu deren interner Verwendung gehalten. Wenn MASTB nicht geltend gemacht wird, wird der Speicherbus zum Transfer von Daten zu und von der ICU verwendet.
- *MERR (Memory Error), Speicherfehler, ist ein synchrones ICU-Eingangssignal und aktiv LOW. Dieses Eingangssignal zeigt an, daß bei dem aktuellen Speicher-Zugriff ein Fehler aufgetreten ist. Die ICU verwendet dieses Signal auch für Datenkonsistenz-Operationen.
- *MLOCK (Memory Lock), Speicherverriegelung, ist bidirektional, synchron, für drei Zustände ausgelegt und aktiv LOW. Dieses Signal zeigt an, daß der Speicher-Zugriff ein verriegelter Zugriff ist. Der ICU-Master macht dieses Ausgangssignal geltend, wenn ein verriegelter Zugriff auf den Speicherbus erfolgt. Wenn die ICU nicht der Bus-Master ist, wird dieses Signal als Eingangssignal verwendet. Falls bei einem Schreib-Zugriff unter Geltendmachung von *MLOCK eine Übereinstimmung festgestellt wird, wird das zugehörige Wort ungültig gemacht. Dieses Merkmal wird für Schemata verwendet, die die Cache-Speicherung von Verriegelungsvariablen aktivieren.
- *MRDY (Memory Ready), Speicher bereit, ist bidirektional, synchron und aktiv LOW. Wenn die ICU der Bus-Master ist, wird dieses Signal als Eingangssignal verwendet. Bei Speicherbus-Lesevorgängen zeigt dieses Eingangssignal an, daß auf dem Speicherbus gültige Daten vorhanden sind. Bei Speicherbus-Schreibvorgängen zeigt das Signal an, daß die Daten nicht weiter auf dem Speicherbus angesteuert zu werden brauchen. Wenn die ICU nicht der Bus-Master ist, wird dieses Signal als Eingangssignal für Datenkonsistenz- Operationen verwendet. Es wird als Ausgangssignal zur Datenintervention und Speicherbus-Spezialoperationen benutzt. Die ICU macht *MRDY geltend, um anzuzeigen, daß auf dem Speicherbus gültige Daten vorhanden sind.
- MREQT0-MREQT1 (Memory Request Type), Speicheranforderungstyp, sind bidirektional, synchron und für drei Zustände ausgelegt. Diese Signale spezifizieren den Adressenraum für den Zugriff auf den Speicherbus. Wenn die ICU der Bus- Master ist, verwendet sie diese Signale als Ausgangssignale. Wenn sie nicht der Bus-Master ist, werden die MREQT- Signale als Eingangssignale für Datenkonsistenz-Operationen verwendet. Das Kodieren erfolgt gemäß der bevorzugten Ausführungsform der Erfindung wie folgt: Bedeutung Datenspeicher-Zugriff Daten-Eingangs-/Ausgangs-Zugriff Instruktionsspeicher-Zugriff Instruktions-ROM-Zugriff
- Wenn die CPU kein Bus-Master ist, werden die MREQT-Signale auch (zusammen mit den MRW-Signalen) zum Spezifizieren einer Speicherbus-Cache-Instruktion für die ICU verwendet.
- MRW0-MRW1 (Memory Read Write), Speicher-Lesen/Schreiben, sind bidirektional, synchron und für drei Zustände ausgelegt. Diese Signale werden verwendet, um den Typ von Lese- und Schreib-Operationen auf dem Speicherbus zu bestimmen. Wenn die ICU der Bus-Master ist, verwendet sie diese Signale, um die verlangte Operation anzuzeigen. Wenn die ICU nicht der Bus-Master ist, sind diese Signale Eingangssignale, die für Datenkonsistenz-Operationen verwendet werden. Das Kodieren dieser Signale erfolgt gemäß der bevorzugten Ausführungsform der Erfindung wie folgt: Bedeutung Schreiben Lesen Schreiben broadcast Lesen zum Modifizieren
- Die vorstehend erwähnten Lese- und Schreib-Operationen erfolgen in bezug auf die ICU, z.B. erfolgt das Lesen aus dem Speicher in die ICU.
- Wenn die ICU nicht der Bus-Master ist, werden die MRW-Signale auch (zusammen mit den MREQT-Signalen) verwendet, um die Speicherbus-Cache-Instruktion für die ICU zu spezifizieren. Eine detaillierte Beschreibung eines Speicherbus-Instruktionssatzes, der für die Verwendung bei der hier beschriebenen ICU geeignet ist, wird noch gegeben.
- MS/*MU (Memory Supervisor/User Mode), Speicher-Überwachungs-/Benutzer-Betriebsart, ist ein synchrones ICU-Ausgangssignal und für drei Zustände ausgelegt. Dieses Ausgangssignal zeigt während des Speicher-Zugriffs die Programm-Betriebsart für den Prozessor an (Überwachungs-Betriebsart oder Benutzer-Betriebsart). Die ICU überträgt für die entsprechenden Transaktionen den auf dem Prozessorbus vorliegenden SUP/*US-Wert auf den auf dem Speicherbus vorliegenden MS/*MU-Wert.
- *REQ (Memory Bus Request), Speicherbusanforderung, ist ein synchrones ICU-Ausgangssignal und im aktiven LOW-Zustand. Dieses Ausgangssignal wird von der ICU zur Anforderung des Speicherbusses verwendet.
- *VSI (Valid Status or Instruction), gültiger Status oder Instruktion, ist ein synchrones ICU-Ausgangssignal und im aktiven LOW-Zustand. Wenn die ICU der Bus-Slave ist, zeigt ein gültig gemachtes *VSI einen Speicherbus-Cache-Instruktions-Zugriff an. Wenn die ICU der Bus-Master ist und eine Lese-Anforderung für eine Neulade-Operation ausgibt, zeigt die Geltendmachung von *VSI an, daß eine spezielle Schreib-Blockstatus-Instruktion ausgeführt werden soll. Eine detaillierte Beschreibung eines geeigneten Speicherbus-Cache-Instruktionssatzes und der Verwendung von *VSI erfolgt anschließend.
- Nach der Beschreibung der verschiedenen Eingänge und Ausgänge in die und aus der neuartigen ICU anhand des Stiftanschluß- Schaubildes von Fig. 2 wird zum tieferen Verständnis der neuartigen Verfahren und Vorrichtungen die funktionelle Organisation der ICU detailliert beschrieben. Diese Beschreibung ist in mehrere Teile untergliedert. Zunächst erfolgt ein Überblick der Art und Weise, wie sich die ICU in ein Computersystem einfügt, insbesondere in das als Beispiel angeführte RISC- System, das zur Veranschaulichung der Anwendbarkeit und des Betriebes der Erfindung benutzt wird. Zweitens wird der Datenfluß durch die ICU detailliert beschrieben. Drittens erfolgt eine Erläuterung der Registerebenen eines Registersatzes, der für die Implementierung der Erfindung geeignet ist. Ferner werden ein geeigneter Cache-Instruktionssatz, Daten-Formate und -Handhabung, Cache-Speicher-Zugriffe und Vorabruf-Operationen beschrieben.
- Es werden ferner weitere Details der Verwendung eines ICU- Schreib-Puffers, der Initialisierung und der Rücksetz-Operation erläutert.
- Zudem werden zum Abschluß der detaillierten Beschreibung der Erfindung die durch die ICU geleistete Mehrprozessor-Unterstützung und die spezielle ICU-Verriegelungsfunktion beschrieben.
- Wie bereits erwähnt, wird die neuartige ICU im Zusammenhang mit einer RISC-Architektur, die einen SIP enthält, erläutert. Die bevorzugte Ausführungsforrn der Erfindung wird bei Anwendung zur Unterstützung dieser Architektur beschrieben. Dem Fachmann wird problemlos ersichtlich sein, daß an der bevorzugten Ausführungsform der neuartigen ICU Modifikationen vorgenommen werden können, ohne vom Umfang des Erfindungsgedankens abzuweichen, z.B. zum Unterstützen von Nicht-RISC-Prozessoren. Die folgende Beschreibung verfolgt somit lediglich illustrative Zwecke.
- Der Kern der bevorzugten Ausführungsform der ICU besteht in einem 9k Byte Speicher-Array mit den zugehörigen Tags und gültigen Arrays. Die Arrays sind als setzungsassoziativer Zweiwege-Cache-Speicher mit 4 Wörtern pro Tag (Blockbemessung = 4 Wörter) und einem gültigen Bit pro Wort organisiert. Diese grundlegende Organisation unterstützt ferner einen direkt abgebildeten Cache-Speicher, variable Block- und Unterblock- Bemessung sowie ein flexibles Neuladeschema. Ferner sind ein Blockstatus-Array und ein LRU-Array vorgesehen. Diese werden zum Cache-Speicher-Ersatz, zum Verriegeln von Daten in dem Cache-Speicher und für Zwecke der Datenkonsistenz verwendet. Die ICU enthält die gesamte Steuerlogik für die unterschiedlichen Cache-Speicher-Funktionen, Algorithmen und Instruktionen. Spezielle Register werden für die programmierbare Optionsselektion, die Cache-Instruktions-Implementierung und den Status-Report verwendet.
- Die Cache-Speicher-Funktionen können unter Verwendung programmierbarer Optionen gewählt werden. Die Cache-Speicher-Schreib- Funktion kann als Durch-Schreiben, Rückkopieren oder flexibel auf einer Pro-Zugriff-Basis gewählt werden. Es kann eine Schreib-Zuordnungs- oder eine Nicht-Schreib-Zuordnungs-Option gewählt werden. Ein Vier-Wort-Schreibpuffer ist zur effizienten Durchführung der Schreib-Zugriffe vorgesehen. Der Schreibpuffer kann aktiviert oder deaktiviert werden. Der Ersetzungs- Algorithmus kann als LRU-, direkte oder externe Einrichtung programmiert werden. Es kann eine flexible Vorabruf-Funktion gewählt werden. Die Durch-Lese-Option kann aktiviert werden. Ein Vier-Wort-Lesepuffer ist vorgesehen, um effiziente Vorabruf- und Lese-Operationen zu unterstützen.
- Die Mehrprozessor-Unterstützungsfunktion kann auf das System zugeschnitten werden. Die Ebene der Mehrprozessor-Unterstützung kann von einer simplen softwaregesteuerten Organisation bis zu einem extensiven Eigentümerschafts-Schema variieren. Eine Busüberwachungsfunktion kann aktiviert oder deaktiviert werden. Der Eigentümerschafts-Algorithmus kann derart gesteuert werden, daß er das angeforderte Schema unterstützt. Die Cache-Speicherung der Verriegelungsvariablen kann aktiviert oder deaktiviert werden.
- Zwei-Chip-Wahleingänge und ein Chipwahl-Abbildungsregister erlauben problemlose Cache-Speicher-Erweiterungen sowie Mehrfach-Cache-Speicher-Organisationen. Die Neuladefunktion kann auf das System zugeschnitten werden, indem die geeigneten - Zugriffssteueroptionen gewählt werden, etwa Neulade-Bemessung, Start- und Stopp-Adressen, Burst und zyklische Folge (wraparound).
- Die bevorzugte Ausführungsform der ICU arbeitet mit der gleichen Frequenz wie der RISC-Prozessor in dem angeführten illustrativen Beispiel, d.h. mit einer Nennfrequenz von 25 MHZ und möglichen höheren Frequenzen. Die Ausführungsform erzielt - Zugriffszeiten von zwei Zyklen für den ersten Treffer-Zugriff und von einem Zyklus für die nächsten Burst-Betriebsart- oder Pipeline-Treffer-Zugriffe.
- Eine Drei-IC-Konfiguration, von denen eine den RISC-Prozesssor enthält und zwei für die ICUs vorgesehen sind (eine für einen Instruktions-Cache-Speicher und eine für einen Daten-Cache- Speicher) bildet ein hoch leistungsfähiges Cache-Speicher- System mit 16k Cache-Bytes.
- Wie bereits im Zusammenhang mit Fig. 1 erläutert, weist die ICU zwei Interface-Busse auf, den Prozessorbus und den Speicherbus. Sie kann ohne irgendeine Interface-Logik direkt mit dem RISC-Prozessor verbunden werden. Der ICU-Cache-Speicher- Bus ist mit dem Daten- oder Instruktionsbus des Prozessors verbunden, und zwar für Daten- bzw. Instruktions-Cache-Speicherung. Pipeline- und Burst-Betriebsart-Zugriffe werden derart unterstützt, daß der Prozessorkanal maximal ausgenutzt wird. Der Speicherbus ist ein separates Interface zu dem Speicher, weiteren Prozessoren und dem Systembus. Er ist ein gemultiplexter Adressen- und Datenbus mit Unterstützung für Burst-Betriebsart-Zugriffe. Ferner weist er Mehrprozessor- Unterstützungsfunktionen auf. In Mehrprozessor-Umgebungen mit gemeinsam benutztem Speicher kann der Speicherbus effektiv als gemeinsam benutzter Mehrprozessorbus verwendet werden. Bei Ein-Prozessor-Systemen kann er als Systembus oder lokaler Bus verwendet werden.
- Die bevorzugte Ausführungsform der ICU enthält spezielle Hardware zur Fehlertoleranzunterstützung. Die Hardware unterstützt die Master/Slave-Überprüfung und die Byte-Paritäts-Erzeugung und -Überprüfung auf dem Speicherbus. Zur Master/Slave-Überprüfung werden eine oder mehr ICUs parallel mit einem oder mehreren Cache-Speichern (den Slaves) verbunden, um die Ausgänge des Masters zu überprüfen. Die Byte-Paritäts-Erzeugung und -Überprüfung kann auf dem Speicherbus für zuverlässige Busübertragungen verwendet werden.
- Wie bereits erwähnt, ist die bevorzugte Ausführungsform der Erfindung in CMOS-Technik ausgelegt und weist einen maximalen Leistungsverbrauch von 1,5 W auf.
- Die interne Datenflußorganisation der ICU ist in Fig. 3 gezeigt. Die folgende Beschreibung bezieht sich auf die funktionellen Komponenten dieses Datenflußdiagramms. Die ICU ist in drei funktionelle Haupteinheiten unterteilt: Prozessorbuseinheit, Speicherbuseinheit und Cache-Speicher-Einheit, die sämtlich in Fig. 3 gezeigt sind. Die folgende Beschreibung nimmt teilweise Bezug auf bestimmte Bit-Stellen und Felder verschiedener Wörter, die für irgendeine Anzahl von Zwecken verwendet werden. Dem Fachmann wird leicht ersichtlich sein, daß diese bestimmte Bezugnahme keinen einschränkenden Charakter haben und derart modifiziert werden können, daß sie einem gewünschten Anwendungsfall entsprechen. Die jeweilige Bezugnahme erfolgt um der Klarheit willen und soll lediglich eine praktikable, illustrative, bevorzugte Ausführungsform der Erfindung erläutern.
- Die Prozessorbuseinheit steuert die gesamte Aktivität des Prozessorbusses. Sie unterstützt sämtliche RISC/SIP-Kanal- Protokolle; einfach, geburstet und gepipelinet. Sie enthält den Adresseninkrementierer, den Datenschieber und die Prozessorbussteuerungseinrichtung, die sämtlich anschließend beschrieben werden.
- Der Adresseninkrementierer (AI) verriegelt den Adressenbuseingang. Er kann bei jedem Zyklus inkrementiert werden. Der AI-Ausgang ist die Adresse fur einen Cache-Speicher-Zugriff. Der AI ist in Fig. 3 als Einheit 301 gezeigt.
- Der Datenschieber (DSH) wird zur Datenausrichtung verwendet. Er verschiebt Bytes und Halbwörter und hält die Daten für Schreib-Zugriffe. Ferner wird er beim Byte- und Halbwort-Lesen für die entsprechende Byte- und Halbwort-Schiebe-Operation verwendet. Der DSH ist in Fig. 3 als Einheit 302 gezeigt.
- Die Prozessorbussteuerungseinrichtung (PBC) steuert die verschiedenen Prozessorbus-Operationen. Die PBC ist in Fig. 3 als Einheit 303 gezeigt.
- Die Speicherbuseinheit steuert die Aktivität des Speicherbusses. Sie enthält den Schreibpuffer, die Speicheradressenlogik, den Speicherlesepuffer und die Speicherbussteuereinrichtung, die sämtlich im folgenden beschrieben werden.
- Der bei der bevorzugten Ausführungsform der Erfindung verwendete Schreibpuffer (WB) enthält zwei Vier-Wort-First-in-firstout (FIFO) -Puffer (einen für Adressen und einen für Daten). Der WB kann sämtlich ICU-Schreib-Operationen puffern. Für Durch- Schreib-Operationen puffert er bis zu 4 Byte, Halbwort- oder Wort-Schreibvorgänge. Für Rückkopiervorgänge puffert er einen Vier-Wort-Block. Der WB ist in Fig. 3 als Einheit 304 gezeigt.
- Die Speicheradressenlogik (MAL) weist zwei Adresseninkrementierer auf. Der erste verriegelt und inkrementiert die Speicherbusadressen für -Operationen von dem Bus zu der ICU. Der zweite verriegelt und inkrementiert die Adressen für von der ICU initiierte Lese-Operationen. Die MAL ist in Fig. 3 als Einheit 305 gezeigt.
- Der Speicherlesepuffer (MRB) ist ein Vier-Wort-Daten-Puffer. Er puffert die Daten aus dem Speicherbus, bis der Cache-Speicher für die Aktualisierungs-Operation zur Verfügung steht. Der MRB wird als Vorabrufspeicher verwendet, wenn ein Vorabrufen aktiviert ist. Der MRB ist in Fig. 3 als Einheit 306 gezeigt.
- Die Speicherbussteuereinrichtung (MBC), die die Speicherbus- Operationen steuert, ist in Fig. 3 als Einheit 307 gezeigt.
- Die Cache-Speicher-Einheit führt sämtliche Cache-Speicher- Funktionen aus. Sie enthält das Speicher-Array, das Tag-Array, das Gültigkeits-Array, das Blockstatus-Array, das LRU-Array, Spezialregister, und die Cache-Speicher-Steuerung, die sämtlich anschließend beschrieben werden.
- Das Speicher-Array ist ein 64k Bit-Speicher-Array für cachegespeicherte Instruktionen oder Daten. Es ist in Form zweier Wege von 1024 Wörtern organisiert. Für Lese-Operationen wird gemäß der bevorzugten Ausführungsform der Erfindung mittels der Bits 11-2 der Adresse gleichzeitig auf die zwei Wege zugegriffen. Das betreffende Wort wird entsprechend den Treffer- Signalen von dem Tag-Array gewählt. Bei Schreib-Operationen wird das korrekte Wort in dem Array geschrieben, nachdem der Tag-Zugriff abgeschlossen und die Treffer-Signale erzeugt worden ist. Das Speicher-Array ist in Fig. 3 als Einheit 310 gezeigt.
- Das Tag-Array speichert die Cache-Speicher-Tags in einer zwei Wege aufweisenden, gesetzten, assoziativen Organisation. Jeder Weg ist in Form von 256 x 20 Bits organisiert. Jedes Tag entspricht einem Block von 4 aufeinanderfolgenden cache-gespeicherten Wörtern. Für jeden Cache-Speicher-Zugriff wird mittels der Bits 11-4 der Adresse gleichzeitig auf zwei Tags zugegriffen. Die Tags werden (bei einer Ausführungsform der Erfindung) mit den Bits 31-12 der Adresse verglichen. Die Treffer-Signale werden aus den Vergleichsergebnisssen und den Konfigurations- Bits erzeugt. Das Tag-Array wird jedes Mal geschrieben, wenn ein Fehlgänger auftritt und ein Cache-Speicher-Block zugeordnet wird. Das Tag wird gemäß den Bits 11-4 der Adresse und dem Ersatz-Algorithmus gewählt. Die Adressenbits 31-12 werden in das Tag-Array geschrieben. Das Tag-Array ist in Fig. 3 als Einheit 311 gezeigt.
- Das Gültigkeits-Array, die Einheit 312 von Fig. 3, ist ein 2k Bit-Array, das ein gültiges Bit für jedes cache-gespeichertes Wort speichert. Es ist in Form zweier 1024 x 1 - Arrays organisiert. Es wird ein gültiges Bit für jedes Wort gesetzt, während es in den Cache-Speicher geschrieben wird. Das gültige Bit wird durch die Adressenbits 11-2 (wie bei dem Speicher- Array) und den Entsprechungs-Weg gewählt. Bei jedem Cache- Speicher-Zugriff werden zwei gültige Bits, die den beiden wegen entsprechen, überprüft. Ein Treffer-Signal nur dann erzeugt, wenn das entsprechende gültige Bit gesetzt ist.
- Das Blockstatus-Array, die Einheit 313. in Fig. 3, ist ein 1536 Bit-Array, das 3 Blockstatus-Bits für jeden Cache-Speicher- Block enthält. Es ist in Form von zwei 256 x 3 - Arrays organsiert (dies entspricht der Tag-Array-Organisation). Die drei Bits sind die folgenden: Modifiziert, Gemeinsam Benutzt und Verriegelt. Das Modifiziert-Bit zeigt an, daß der Block modifiziert ist und vor dem Ersetzen in den Speicher rückgeschrieben werden soll. Es wird für Rückkopier-Operationen und Datenkonsistenz-Operationen verwendet. Das Gemeinsam-Benutzungs-Bit zeigt an, daß der Block gemeinsam benutzt wird. Es wird für Datenkonsistenz-Operationen verwendet. Das Verriegelungs-Bit zeigt an, daß der Block verriegelt ist und nicht ersetzt werden kann. Es wird verwendet, um wichtige Daten oder Instruktionen in dem Cache-Speicher zu verriegeln.
- Das LRU-Array, die Einheit 314 in Fig. 3, ist ein 356 Bit- Array, das die LRU-Bits speichert. Es ist in Form eines 256 x 1 - Arrays organisiert. Jedes LRU-Bit entspricht einem Satz von zwei Tags. Das LRU-Array wird verwendet, wenn der Ersetzungsalgorithmus für die am längsten zurückliegende Verwendung gewählt ist. Das entsprechende LRU-Bit wird derart aktualisiert, daß es den am längsten zuvor verwendeten Block der beiden Blocks in einem Satz reflektiert. Falls erforderlich, bestimmt das LRU-Bit, welcher Block aus dem Satz ersetzt wird.
- Der Spezialregister-Block, der in Fig. 3 als Einheit 315 gezeigt ist, enthält sämtliche Spezialregister der ICU. Diese werden verwendet zum Programmieren der ICU-Optionen, zum Steuern von Spezial-Operationen und zum Halten von Statusinformation.
- Der Cache-Speicher-Steuer-Block, die Einheit 316 in Fig. 3, enthält die Steuer-Logik für die Cache-Speicher-Operationen.
- Nach der anhand Fig. 3 vorgenommenen Auflistung und Beschreibung des Datenflusses durch die neuartige ICU wird im folgenden die Registerstruktur zum Unterstützen des Datenflusses und der Steuerung der ICU erläutert.
- Die bevorzugte Ausführungsform der ICU enthält 8 Spezialregister. Diese Register wählen programmierbare Optionen, unterstützen Cache-Speicher-Steuer-Operationen und zeigen Cache- Speicher-Status-Information an. Jedes Register kann von dem Prozessor über den Prozessorbus oder den Speicherbus gelesen oder beschrieben werden. Eine Register-Lese- oder Register- Schreib-Instruktion des Cache-Speichers wird der ICU mittels des geeigneten Cache-Speicher-Instruktions-Protokolls auf einem der Busse übermittelt. Für die Prozessorbus-Instruktion wird die Registernummer durch die drei am wenigsten signifikanten Bits des Op-Code bestimmt. Das Instruktionstransferprotokoll und die ICU-Reaktion werden durch die Register-Lese- Steuerung und die Instruktions-Transfer-Protokoll-Steuerung jeweils in dem Modb-Register gesteuert. Für die Speicherbus- Instruktion ist die Registernummer durch die drei am wenigsten signifikanten Bits der Adresse bestimmt. Im folgenden wird eine detaillierte Beschreibung dieser drei als Beispiel angeführten Protokolle und Reaktionen gegeben.
- Bei Prozessorbus-Zugriffen werden sämtliche ICU-Spezialregister geschützt. Auf sie kann nur dann zugegriffen werden, wenn das SUP/*US-Eingangssignal HIGH ist. Benutzerbetriebsart-Zugriffe werden nicht durchgeführt. Eine *CERR-Reaktion gibt einen ungültigen Benutzerbetriebsart-Zugriff an. Die Register sind für die Speicherbus-Cache-Instruktion nicht geschützt.
- Gemäß der bevorzugten Ausführungsform der Erfindung wird jedem Register wie folgt eine Nummer zugeteilt: Reg.-Name Chip-Wahl-Abbildung Instruktion Adressen-Operand Zählstand Fehler-Adresse Status Mod a Mod b
- Im folgenden wird nur die generelle Funktion jedes Registers beschrieben, da dem Fachmann ersichtlich ist, daß für anwendungsspezifische Zwecke besondere Bit-Zuordnungen vorgenommen werden können.
- Das Chipwahlabbildungsregister ist ein spezielles Register 0. Es bestimmt die Adresse und die Bedingungen für die ICU-Chip- Wahl-Funktionen. Die ICU weist zwei unabhängige Chip-Wahl- Funktionen auf: für normale Cache-Speicher-Zugriffe und für Cache-Speicher-Instruktions-Zugriffe.
- Für normale Cache-Speicher-Zugriffe kann die Chip-Wahl-Funktion für Cache-Speicher-Erweiterungen, Cache-Speicher-Adressen-Raum- Zuordnungen und Mehrfach-Cache-Speicher-Konfigurationen verwendet werden. Bei der bevorzugten Ausführungsform der Erfindung können bis zu 32 ICUs (16 Instruktions-Cache-Speicher und 16 Daten-Cache-Speicher) ohne externe Chip-Wahl-Hardware verwendet werden. Die Speicher-Zugriff(MA)-Wahl wird ferner durch das *CSM-Eingangssignal und ein Speicherbitaktivierungs-Feld des Moda-Registers beeinflußt. Falls das * CSM-Eingangssignal aktiviert ist, muß es geltend gemacht werden, um einen Speicher-Zugriff zu ermöglichen. Falls das * CSM-Eingangssignal deaktiviert ist, wird es ignoriert. Das Speicherbitaktivierungs-Feld kann den Vergleich eines geeigneten Adressenbits mit einem entsprechenden (MA) Feld-Bit in dem Chip-Wahl-Speicher-Register selektiv aktivieren. Falls ein Bit zum Vergleich deaktiviert ist, wird es ignoriert. Falls sämtliche Bits deaktiviert sind, wird eine Übereinstimmung erzwungen. Es ist anzumerken, daß, wenn *CSM aktiviert ist, dieses geltend gemacht werden muß und eine MA-Feld-Vergleichs-Übereinstimmung vorliegen muß, damit der Speicher-Zugriff geleistet werden kann.
- Bei Cache-Speicher-Instruktions-Zugriffen wird die Chip-Wahl- Funktion verwendet, um die korrekte ICU für den Zugriff zu wählen. Ein Cache-Speicher-Instruktions-Zugriff wird geltend gemacht, wenn *CSEL geltend gemacht und aktiviert ist, oder wenn die Adressen-Eingangssignale A31-A14 und CREQT0 mit den Cache-Speicher-Instruktions-Adressen und den Cache-Speicher- Instruktions-Adressen-Raum-Feldern in dem Chipwahlabbildungsregister übereinstimmen. In dem zweiten Fall werden sämtliche Cache-Speicher, bei denen eine Übereinstimmung vorliegt, gewählt. Falls der Instruktions-Umfang mehrere Cache-Speicher umfaßt, reagieren sämtliche gewählten Cache-Speicher. Falls der Instruktions-Umfang nur einen Cache-Speicher umfaßt, reagiert nur derjenige Cache-Speicher, bei dem die Adressen-Eingangssignale A13-A8 einem bestimmten Cache-Speicher-Nummer- Feld des Chipwahlabbildungsregisters entsprechen.
- Während der Initialisierung wird das *CSEL-Eingangssignal verwendet, um die Chipwahlabbildungsregister einer gegebenen ICU zu programmieren. Bei einer typischen Konfiguration kann ein anderes Adressenbit mit dem *CSEL-Signal unterschiedlicher ICUs gekoppelt werden. Wenn *CSEL geltend gemacht und aktiviert wird, behandelt die ICU Daten-Zugriffe als Cache-Speicher-Instruktions-Zugriffe. Nachdem das Chipwahlabbildungsregister programmiert worden ist, kann das * CSEL-Eingangssignal deaktiviert werden, und die durch das Chipwahlabbildungsregister bestimmte Abbildung wird angewandt.
- Das Instruktionsregister ist ein spezielles Register 1. Es wird verwendet zur Spezifizierung einer Instruktion für die ICU. Das Instruktionsregister ist wie jedes andere speziellle Register für Lese- und Schreibvorgänge verwendbar, jedoch wird es für eine Gültig-Cache-Instruktion automatisch geladen. Eine Gültig-Cache-Instruktion wird detektiert, wenn der * CSEL-Eingang angesteuert und aktiviert wird, oder wenn die Adressen- Eingangssignale A31-A14 und CREQT0 mit den Cache-Speicher- Instruktions-Adressen und den Cache-Speicher-Instruktions- Adressen-Raum-Feldern in dem Chipwahlabbildungsregister übereinstimmen. In diesen Fällen wird die Instruktion aus den Adress-Eingängen A7-A0 kopiert.
- Auf das Instruktionsregister kann als spezielles Register zugegriffen werden, um den ICU-Zustand zu retten und wiederherzustellen, falls während des Instruktionstransferprotokolls ein Prozessor-Interrupt erfolgt oder falls eine Mehrfach-Cache-Speicher-Instruktion unterbrochen wird. Wenn auf das Instruktionsregister als Spezialregister zugegriffen wird, wird der ICU eine Lese- oder Register-Schreib-Cache-Speicher-Instruktion übermittelt. Es sind Schattenregister vorgesehen, um in der Lage zu sein, die Register-Lese-Instruktion und den optionalen Operanden zu verriegeln, ohne die erforderlichen alten Inhalte des Instruktions- und Operanden-Registers zu zerstören. Das Schatten-Instruktionsregister wird zunächst mit einer Instruktion geladen. Für sämtliche Instruktionen außer den Register-Lese- und den Register-Schreib-Instruktionen wird das Instruktionsregister aktualisiert, wenn die Instruktionsausführungs beginnt. Für die Register-Lese- und die Register- Schreib-Instruktionen wird das Instruktionsregister nur aktualisiert, falls keine andere gültige Instruktion in dem Instruktionsregister vorhanden ist. Falls eine gültige Instruktion in dem Instruktionsregister vorhanden ist, wird die Register-Lese-Instruktion ausgeführt, ohne die Instruktions- und Operanden-Register zu beeinflussen. Dieses Merkmal wird ferner verwendet, um den Status der ICU zu überprüfen, ohne die Ausführung einer Cache-Speicher-Instruktion zu beeinträchtigen.
- Es wird jedes Mal eine Instruktion von der ICU ausgeführt, wenn sämtliche erforderlichen Operanden gültig sind. Es folgt eine detaillierte Beschreibung von Beispielen von Instruktionen, erforderlichen Operanden und Cache-Speicher-Instruktions- Zugriffen.
- Das Operanden-Register ist ein Spezialregister 2. Es bestimmt einen Operanden für bestimmte ICU-Instruktionen. Das Register enthält ein Bit (0V-Bit), um die Gültigkeit des Operanden- Registerwertes anzuzeigen. In der ICU ist ein Schatten-Operanden-Register enthalten, das zur korrekten Ausführung der Register-Lese- und der Register-Schreib-Instruktionen dient. Das Schatten-Operanden-Register wird zunächst mit einem Operanden geladen. Für sämtliche Instruktionen mit Ausnahme der Register-Lese- und der Register-Schreib-Instruktionen wird das Operanden-Register aktualisiert, falls das Gültigkeits-Bit rückgesetzt wird. Falls das OV-Bit gesetzt ist, verzögert die ICU die *CRDY-Reaktion, bis das OV-Bit rückgesetzt ist (Komplettierung der vorherigen Instruktion), und lädt dann das Register. Für Register-Lese- und der Register-Schreib-Instruktionen wird das Operanden-Register nur aktualisiert, falls in dem Instruktionsregister keine weitere gültige Instruktion existiert. Falls in dem Instruktionsregister eine weitere gültige Instruktion existiert, werden die Register-Lese- und die Register-Schreib-Instruktionen ausgeführt, ohne die Instruktions- und Operanden-Register zu beinflussen. Dies ermöglicht es, das Operanden-Register zu retten und wiederherzustellen, falls es erforderlich ist. Bei Bedarf kann das Operanden-Register mittels der Register-Lese- oder der Register- Schreib-Instruktionen gelesen werden.
- Das Zählstandsregister ist ein Spezialregister 3. Es bestimmt die Anzahl von Wörtern, die mittels bestimmter ICU-Instruktionen bearbeitet werden sollen. Das Zählstandsregister wird nicht durch die Instruktionsausführung beeinflußt.
- Das Ausnahme-Adressen-Register ist ein Spezialregister 4. Es wird verwendet, um die einigen Ausnahmefällen zugehorige Adresse zu melden. Das Ausnahme-Adressen-Register wird mit der Ausnahme-Adresse geladen. Der Ausnahme-Typ kann in dem Statusregister aufgefunden werden.
- Das Statusregister ist ein Spezialregister 5. Es wird verwendet zur Meldung des Status der ICU und für den Informationstransfer zwischen der ICU und dem Prozessor in den Lese-Tag- und Schreib-Tag-Instruktionen (die noch erläutert werden). Es sind Bits reserviert, um den Tag-Wert für die Lese-Tag-Instruktion zu melden und das Tag für die Schreib-Tag-Instruktion zu übermitteln; um das WAY-Signal für cache-gespeicherte Daten zu melden; um die gültigen Bits für einen Block zu melden und die gültigen Bits für die Schreib-Tag-Instruktion zu übermitteln; um das Verriegelungs-Bit für den Block zu melden und das Verriegelungs-Bit für die Schreib-Tag-Instruktion zu übermitteln; um das gemeinsam benutzte Bit für den Block zu melden und das gemeinsam benutzte Bit für die Schreib-Tag- Instruktion zu übermitteln; um das modifizierte Bit für den Block zu melden und das modifizierte Bit für die Schreib-Tag- Instruktion zu übermitteln; um anzuzeigen, ob ein Treffer in dem Cache-Speicher ermittelt wurde; und um Schutz-Verletzungen, unzulässige Instruktionen, Speicher-Fehler und Paritäts- Fehler anzuzeigen.
- Das Moda-Register ist ein Spezialregister 6. Es wird zum Wählen verschiedener ICU-Optionen verwendet. Das Moda-Register wird während der Initialisierung rückgesetzt.
- Es sind Felder vorgemerkt, um: die globale Cache-Speicher- Operation zu steuern; um sämtliche Cache-Speicher-Stellen zu verriegeln; um den Schreib-Puffer zu deaktivieren; und um die Durch-Lese-Option zu deaktivieren.
- In diesem Register ist ein ROM-Aktivierungs-Bit enthalten, das für Instruktions-Cache-Speicher- und Daten-Cache-Speicher- Verwendung verschiedene Funktionen hat ("ROME"-Bit).
- Wenn bei der Instruktions-Cache-Speicher-Verwendung dieses Bit gesetzt ist, reagiert die ICU auf ROM-Zugriffe und cache-speichert diese. Wenn es auf 0 ist, werden ROM-Zugriffe ignoriert.
- Wenn dieses Bit bei der Daten-Cache-Speicher-Verwendung gesetzt ist, wird der Daten-Cache-Speicher für Instruktions- Speicher-Zugriffe (als Daten) aktiviert. Wenn die OPT-Eingangssignale einen Instruktions-Speicher-Zugriff anzeigen, wird dies von der ICU als nicht-cache-speicherbare Transaktion behandelt. Die spezifizierte Adresse wird auf dem Speicherbus gelesen und zu dem Prozessor übertragen, ohne daß sie in den Cache-Speicher geladen wird. Wenn das ROME-Bit 0 ist, ignoriert die ICU diesen Typ von Instruktion.
- In dem Register sind weitere Felder vorgesehen, um die Vorabruf-Option für Einfach-Zugriffe zu aktivieren; um eine Adressen-Umlauf-Option zu deaktivieren; um die ICU-Behandlung eines Einfach-Zugriffsfehlgängers zu steuern; um die ICU-Operation zu steuern, wenn der Prozessor eine Burst-Betriebsart- Lese-Anforderung beendet; um die Vorabruf-Option für Burst- Zugriffe zu aktivieren; und um die Unterblock-Bemessung (SBS) zu wählen.
- Es sei darauf hingewiesen, daß die Unterblock-Bemessung bei der Steuerung von Cache-Speicher-Neulade-Operationen verwendet wird. Die Anzahl der Wörter, die bei einem einzigen Cache- Speicher-Fehlgänger in den Cache-Speicher neugeladen werden sollen, wird bestimmt durch die definierte Unterblock-Bemessung und die Information, die in der Feldsteuerungs-ICU-Operation für einen Zugriffs-Fehlgänger gespeichert wird (z.B. Steuerinformation wie etwa Start und Stopp bei einer Unterblockgrenze). Ferner wird das SBS-Feld zusammen mit der Burst- Betriebsart-Steuer-Information bei der Burst-Endsteuerung verwendet. Die inhärente Block-Bemessung der ICU beträgt 4 Wörter, wobei ein Tag vier Datenwörtern zugeordnet ist. Die Unterblock-Bemessung beträgt entweder 1, 2 oder 4 Wörter.
- Ferner enthält das Moda-Register Felder, um die Erweiterung der Speicherbus-Adressen-Transfers zu steuern; um anzuzeigen, ob eine Schreib-Zuordnungs-Option eingeschaltet ist; und um die Schreib-Funktions-Optionen auf globaler Basis zu wählen.
- Gemäß der bevorzugten Ausführungsform der Erfindung sind die Schreib-Funktionen die folgenden: die flexible, die Durch- Schreib- oder die Rückkopier-Funktion.
- Wenn eine Durch-Schreib-Funktion gewählt ist, wird jeder Prozessor-Schreibinhalt in die ICU auch in den Speicher eingeschrieben. Wenn ein Rückkopieren gewählt ist, wird jeder Prozessor-Schreib-Treffer in den Cache-Speicher geschrieben, und das modifizierte Bit wird gesetzt. Der Block wird nur dann in den Speicher rückkopiert, wenn der Block ersetzt wird. Wenn die flexible Funktion gewählt ist, kann eine Durch-Schreib- oder Rückkopier-Operation für einen Zugriff auf Zugriffs-Basis gewählt werden. Die Schreib-Funktion für einen Zugriff wird ferner beeinflußt durch die ASTC-Eingangssignale, die gemeinsam benutzte Blockstatus-Information und die Schreib-Gemeinsambenutzungs-Treffer-Steuerung und die Prozessorstatusbitsteuerungs-Felder des Modb-Registers (die noch erläutert werden).
- Das Moda-Register enthält ferner ein Feld, das verwendet wird, um die Block-Ersatz-Funktion zu wählen. Diese Wahl wird nicht zur Direktabbildungsorganisation verwendet. Falls bei einer setzungsassoziativen Zweiwege-Organisation einer der Blöcke nicht gültig ist, wird er als neuer Block gewählt. Gemäß der bevorzugten Ausführungsform der Erfindung sind die Optionen für die Ersetzungsfunktion die folgenden: am weitesten zurückliegend verwendet (LRU), direkt, oder extern.
- Wenn die LRU-Funktion gewählt ist, wird das LRU-Array für die Wahl des zu ersetzenden Blocks verwendet. Das LRU-Array wird für jeden Cache-Speicher-Zugriff aktualisiert. Jedem Satz wird ein Bit zugeordnet. Es verweist auf dem am längsten zuvor verwendeten Block aus den zwei Blöcken in einem Satz.
- Wenn die Direkt-Zugriffsfunktion gewählt ist, wählt eine Pseudo-Direkt-Zugriffslogik den zu ersetzenden Block. Diese Logik ist ein einfaches Flip-flop, das den Status bei jedem Blockzyklus ändert und für sämtliche Sätze verwendet wird.
- Wenn die externe Funktion gewählt ist, wird das WREP-Eingangssignal mit der Prozessoradresse verriegelt. Der verriegelte Wert erzwingt die Wahl des versetzten Blocks. Diese Option kann zum Cache-Speicher-Testen und zur Mehrebenen-Cache-Speicher-Organisation verwendet werden.
- Das Moda-Register enthält Felder für das Wählen der Cache- Speicher-Organisation (zweiwege-setzungsassoziativ oder direkt abgebildet); zum Wählen der Cache-Speicher-Operation als Instruktions-Cache oder Daten-Cache; zum Steuern der Paritätserzeugung und Prüfen von Optionen und Speicherbitaktivierungsinformation für die Aktivierung der entsprechenden MA-Bits in dem Chipwahlabbildungsregister zum Adressenvergleich bei Speicher-Zugriffen.
- Das Modb-Register ist ein Spezialregister 7. Es wird verwendet zur Wahl verschiedener ICU-Optionen. Ein Feld in dem Modb- Register ist Mehrprozessor-Organisationen zugeordnet. Eine detaillierte Beschreibung von Mehrprozessor-Organisationen und der Verwendung dieses Feldes wird noch erfolgen.
- Das Modb-Register enthält ferner ein Bit zum Steuern der ICU für Eingangs-/Ausgangs-Daten-Zugriffe auf den Prozessorbus (es wird bei Instruktions-Cache-Speicher-Verwendung ignoriert); ein Bit, das die Betriebsart des Lesens der ICU-Register spezifiziert; ein Bit, das das Protokoll für den Cache-Speicher- Instruktions-Transfer auf dem Prozessorbus spezifiziert; und ein Bit, das für die relevanten ICU-Operationen das Byte und die Halbwort-Anforderung innerhalb eines Worts steuert.
- Die mehrprozessororientierte Information in dem Modb-Register enthält: ein cache-speicher-verriegeltes Aktivierungsbit; ein Bus-Lese-Überwachungs-Aktivierungsbit; ein Schreib-Bus-Überwachungs-Aktivierungsbit; ein Feld, das die Operation der ICU im Falle einer Übereinstimmung beim Speicherbus-Lesen durch einen anderen Master steuert; ein Feld, das bei Übereinstimmung die Operation für die Speicherbus-Schreib-Operation durch einen anderen Master steuert; eine Schreib-Fehlgänger-Zugriffs-Steuerung, die die Speicherbus-Operation für einen Rückkopier-Schreib-Fehlgänger bei Schreib-Zuordnung steuert; ein Schreib-Gemeinsambenutzungs-Treffer-Steuer-Feld, das die Operation für ein Schreib-Bit bei einem gemeinsam benutzten Block steuert; eine Prozessor-Gemeisambenutzungs-Bit-Steuerung, die für jeden Prozesssor-Zugriff, falls gesetzt, eine Modifizierung des Blockstatus-Gemeisambenutzungs-Bit veranlaßt; und eine externe Gemeisambenutzungs-Bit-Steuerung, die die Zuordnung des Gemeisambenutzungs-Blockstatus mittels externer Steuerung steuert. Bei der externen gemeinsam benutzten Steuerung wird das *HIT-Signal als Eingangssignal für Speicherbus-Lese- und/oder Schreib-Zugriffe verwendet. Falls es geltend gemacht wird, sind die Daten auch in anderen Cache- Speichern vorhanden, und dem Block wird ein Gemeinsambenutzungsstatus zugeteilt. Falls das *HIT-Eingangssignal nicht geltend gemacht wird, ist die Variable in keinem Cache-Speicher vorhanden, und dem Block wird ein exklusiver Status zugeteilt. Es folgt eine detaillierte Beschreibung dieses Merkmals im Zusammenhang mit einer ICU-Mehrprozessor-Unterstützung.
- Zunächst wird der ICU-Instruktionssatz erläutert.
- Bei der bevorzugten Ausführungsform der ICU werden 20 Prozessorbus-Cache-Speicher-Instruktionen und 9 Speicherbus-Cache- Speicher-Instruktionen verwendet. Die Prozessorbus-Instruktionen werden von dem Prozessor für spezielle Register-Zugriffe und für spezielle Cache-Speicher-Operations-Anforderungen verwendet. Die Speicherbus-Instruktionen werden von einer speziellen Logik auf dem Speicherbus für spezielle Cache-Speicher-Operations-Anforderungen ausgegeben. In diesem Abschnitt werden Beispiele für unterschiedliche Instruktions-Transfer- Protokolle und ein Beispiel für eine typische Prozessorbus- Instruktion und einen Speicherbus-Instruktionssatz detailliert erläutert.
- Die Prozessorbus-Cache-Speicher-Instruktionen und -Operanden werden aus dem Prozessor durch eine spezielle Sequenz von Prozessorbus-Transaktionen an die ICU übermittelt. Die Instruktion wird jedes Mal ausgeführt, wenn die erforderlichen Operanden zu der ICU übertragen werden.
- Einige Prozessorbus-Cache-Speicher-Instruktionen weisen vier wahlweise Operationsbereiche auf. Der Instruktionsbereich spezifiziert die Anzahl der ICUs, die durch eine Cache-Speicher-Instruktion beeinflußt werden. Der Bereich ist in der Instruktionstabelle mit (s) bezeichnet. Die Instruktionen ohne die (s)-Bezeichnung können nur für eine bestimmte ICU ausgeführt werden. Der Instruktionsbereich kann wie folgt ausgelegt sein: spezifiziert (s) Op-Code signifikante Bits Bedeutung eine bestimmte ICU beeinflußt sämtliche Instruktions-Cache-Speicher beeinflußt sämtliche Daten-Cache-Speicher beeinflußt sämtliche Cache-Speicher beeinflußt
- Diese Flexibilität erlaubt es einem System-Designer, Cache- Speicher-Instruktionen vorzusehen, die die gewünschten Adressen in den entsprechenden Cache-Speichern bearbeiten. In einer Mehrfach-ICU-Umgebung ist es effizienter, eine einzige Instruktion auszugeben, die für sämtliche Cache-Speicher gleichzeitig ausgeführt wird. Beispielsweise macht die Block-Invalidierungs-Instruktion mit (s) = A (INVBA) den spezifizierten Block in sämtlichen ICUs (in denen der Block gültig ist) parallel ungültig.
- Die meisten Instruktionen werden in zwei Zyklen ausgeführt. Es können jedoch Ausnahmen existieren, wie im folgenden ausgeführt wird. Während der Ausführung der Prozessorbus-Cache- Speicher-Instruktion kann die ICU weitere Prozessor-Transaktionen akzeptieren (einschließlich neuer Instruktions-Transfers), aber in den meisten Fällen werden sie (falls in der Instruktionsbeschreibung nicht anders bestimmt) nur ausgeführt, nachdem die Prozessorbus-Cache-Speicher-Instruktion abgeschlossen ist. Speicherbus-Transaktionen werden während der Ausführung der Prozessorbus-Cache-Speicher-Instruktion ausgeführt. Da sie jedoch nicht zur Instruktionsausführung synchronisiert sind, reflektiert die ICU-Operation den aktuellen Stand des Cache-Speichers.
- Sämtliche Prozessorbus-Cache-Speicher-Instruktion sind privilegiert. Falls das SUP/*US-Eingangssignal LOW ist, wird es während der Ausführung des Prozessorbus-Cache-Speicher-Instruktions-Zugriffs ignoriert, und *CERR als Reaktion geltend macht. Das Statusregister wird mit Statusinformation für die relevanten Instruktionen aktualisiert. Im Fall einer Ausnahme werden das Ausnahmeadressenregister und das Statusregister mit Ausnahmeinformation aktualisiert.
- Für die Kommunikation zwischen den ICU und dem Prozessor während der Ausführung der Cache-Speicher-Instruktion existieren mehrere Optionen. Die Definierung des Protokolls erfolgt entsprechend den Instruktionstransferprotokollsteuerungs (ITPC) - und den Register-Lese-Steuerungs (RRC) -Bits des Modb-Registers sowie dem Typ und Umfang der Cache-Speicher-Instruktion. Sämtliche Instruktionen mit Ausnahme von Register-Lesen werden durch eine Schreib-Operation übermittelt. Die Register-Lese- Instruktion wird mittels einer Lese- und Schreib-Operation übermittelt, wie in dem Register-Lese-Steuer-Bit des Modb- Registers definiert ist. Eine Beschreibung dieser Optionen findet sich in der später aufgeführten Erläuterung der Register-Lese-Instruktion.
- Der erste Teil jeder Instruktion ist die Detektion einer Prozessorbus-Cache-Speicher-Instruktions-Anforderung. Eine Prozessorbus-Cache-Speicher-Instruktions-Anforderung kann entweder eine Lese- oder ein Schreib-Prozessorbus-Zugriff sein. Sie wird von der ICU in zwei Fällen detektiert: 1) *CSEL ist geltend gemacht und aktiviert oder 2) die Adressen-Eingangssignale und CREQT0 stimmen mit der Cache-Speicher-Instruktions- Adresse und den Cache-Speicher-Instruktions-Adressen-Raum- Feldern in dem Chipwahlabbildungsregister überein.
- Wenn kein Operand für die Instruktionsausführung erforderlich ist, wird der Transfer in einem einzigen Zyklus abgeschlossen. In diesem Fall ist der Wert auf dem Cache-Speicherbus irrelevant, und die Ausführung der Instruktion startet unmittelbar.
- Falls Operanden erforderlich sind, existieren zwei optionale Transfer-Protokolle, die von der ICU unterstützt werden. Das Protokoll wird entsprechend dem Instruktions-Transfer-Protokoll-Steuer-Bit des Modb-Registers gewählt.
- Wenn ITPC 1 ist, wird der Cache-Speicher-Bus für den Operanden-Transfer verwendet. Der Prozessorbus benutzt eine normale Schreib-Operation, und die Prozessoradresse und die Datenbusse werden beide verwendet. Die ICU verriegelt den Operandenwert von dem Cache-Speicher-Bus. Bei einer als Instruktions-Cache- Speicher verwendeten ICU sind externe Transceiver erforderlich, um die Daten aus dem ICU-Daten-Bus an den Cache-Speicher-Bus zu übermitteln. Bei dieser Option handelt es sich um die natürliche Wahl für die als Daten-Cache-Speicher verwendete ICU. Fur eine als Instruktions-Cache-Speicher verwendete ICU in Verbindung mit externen Transceivern wird ebenfalls ein effizienteres Protokoll erzielt.
- Wenn ITPC 0 ist, wird der Cache-Speicher-Bus nicht verwendet. Die Operanden werden auf dem Prozessor-Adressenbus übermittelt. Für den Instruktions- und Operanden-Transfer ist ein spezielles Zwei-Zyklus-Protokoll erforderlich. Nachdem eine gültige Information verriegelt ist, erwartet die ICU eine spezielle Daten-Transaktion auf dem Prozessorbus. Die CREQT- Eingangssignale müssen eine Speicher-Daten-Transaktion spezifizieren, die Options-Eingangssignale müssen einen Cache-Speicher-Operanden-Transfer spezifizieren, und der Adressenbus enthält den Operanden. Diese spezielle Schreib-Transaktion wird von der ICU detektiert, und der Operand auf dem Adressenbus wird verriegelt. Es ist anzumerken, daß die obige Transaktion von sämtlichen anderen mit dem Prozessorbus gekoppelten Elementen ignoriert werden muß. Diese Option ist weniger effizient als die andere, aber sie erfordert keine Transceiver für die als Instruktions-Cache-Speicher verwendete ICU.
- Beide Optionen können unabhängig für eine als Daten-Cache- Speicher oder für eine als Instruktions-Cache-Speicher benutzte ICU gewählt werden. Vom Standpunkt der Systemprogrammierung jedoch kann es wünschenswert sein, auf beide Cache-Speicher in ähnlicher Weise zuzugreifen. Falls dies der Fall ist, können beide Cache-Speicher derart programmiert werden, daß sie auf das gleiche Protokoll reagieren.
- Falls für die Ausführung der Instruktion ein Zähl-Operand erforderlich ist, muß eine Register-Schreib-Instruktion ausgeführt werden, um ihn in das Zählstandsregister einzuschreiben, bevor die Ausführung der Instruktion beginnt. Die Instruktion wird jedes Mal von der ICU ausgeführt, wenn die Instruktion und sämtliche erforderlichen Operanden gültig sind.
- Während des Cache-Speicher-Instruktions-Transfer-Protokolls können Prozessorinterrupts auftreten. Die bevorzugte Ausführungsform der ICU enthält eine Logik zur Behebung derartiger Fälle. Das Instruktionsregister, das Operandenregister und das Zählstandsregister können derart gelesen werden, daß ihr Inhalt unbeeinflußt gerettet wird, wobei die Register-Schreib- Instruktion verwendet wird. Die Instruktions-Gültig-, Operand- Gültig- und Zählstand-Gültig-Bits zeigen die Gültigkeit für das entsprechende Register an. Die Rettungs- und Wiederherstellungs-Operationen erlauben eine Fortführung des Instruktions-Transfer-Protokolls vom Punkt der Unterbrechung an.
- Im folgenden wird ein für eine Ausführungsform der Erfindung zweckmäßiger Satz von Prozessorbus-Cache-Speicher-Instruktionen mnemonisch und mit kurzer Zweckbeschreibung als Tabelle aufgeführt: Mnemonischer Ausdruck Beschreibung keine Operation Wort invalidieren Block invalidieren Mehrfaches invalidieren alles invalidieren Wort übermitteln, falls modifiziert Block übermitteln, falls modifiziert Aktualisieren des Speichers und Invalidieren Aktualisieren des Speichers und Invalidieren des Mehrfachwertes Mnemonischer Ausdruck Beschreibung Verriegeln des Blocks Entriegeln des Blocks Lesen Blockstatus Schreiben Blockstatus Wort übermitteln, falls Treffer Lesen Tag Schreiben Tag Vorladen Cache-Speicher Rücksetzen Lesen Register Schreiben Register
- Es ist anzumerken, daß das Symbol (s) in dem mnemonischen Instruktions-Ausdruck den Instruktionsumfang als zuvor definiert angibt und das Symbol (i) in den RDR- und WRR-Instruktionen die Registernummer angibt, die durch die 3 am wenigsten signifikanten Bits des Op-Code spezifiziert ist.
- Ferner ist anzumerken, daß bestimmte Operanden (obwohl sie hier nicht erläutert werden) entsprechend Instruktions-Anforderungen spezifiziert werden. Falls mehr als ein Operand spezifiziert werden soll, ist für das Laden des zweiten spezifizierten Operanden eine WRR-Instruktion erforderlich.
- Auf der funktionalen Ebene ergeben sich bei der Ausführung der Instruktionen die folgenden Aktionen:
- Keine Operation (NOP) - Für diese Instruktion wird von der ICU keine Operation ausgeführt.
- Wort invalidieren (INVWO, INVWI, INVWD, INVWA) (die unterschiedlichen Bereiche sind zu beachten) - Das durch einen Adressenoperanden spezifizierte Wort wird invalidiert (das entsprechende gültige Bit wird rückgesetzt).
- Block invalidieren (INVBO, INVBI, INVBD, INVBA) - Der durch den Adressenoperanden spezifizierte Vier-Wort-Block wird invalidiert (sämtliche entsprechenden gültigen Bits werden rückgesetzt).
- Mehrfaches invalidieren (INVMO, INVMI, INVMD, INVMA) - Sequentielle Mehrfach-Vier-Block-Wörter werden von der ICU invalidiert. Jede einzelne Operation ist der INVB-Instruktion ähnlich.
- Die Instruktion wird in mehreren Zyklen ausgeführt (zwei Zyklen für die Initialisierung + ein Zyklus pro Vier-Wort- Block). Für diese Instruktion muß das Zählstandsregister einen gültigen Zählstand enthalten. Das Zählstandsregister wird mittels der Register-Schreib-Instruktion geladen. Das Zählstand-Gültig-Bit bleibt nach der Ausführung der Instruktion gesetzt. Zur Gewährleistung einer korrekten Ausführung muß das Zählstandsregister entweder vor der Anforderung der INVM-Instruktion geladen werden, oder es muß den korrekten Wert aus einer vorherigen Operation enthalten. Diese Instruktion kann verwendet werden, um einen Seitenrahmen zu invalidieren. Das Zählstandsregister muß eine Anzahl von Vier-Wort-Blöcken in einer Seite enthalten (Seiten-Bemessung in Byte dividiert durch 16).
- Alles invalidieren (INVAO, INVAI, INVAD, INVAA) - Diese Instruktion invalidiert sämtliche Wörter in dem Cache-Speicher. Sämtliche gültigen Bits werden rückgesetzt.
- Wort übermitteln, falls modifiziert (SWMO, SWMI, SWMD, SWMA) - Falls das durch den Adressenoperanden spezifizierte Wort in dem Cache-Speicher vorhanden ist und das modifizierte Bit für den Block gesetzt ist, wird es in die entsprechende Adresse in dem Speicher geschrieben.
- Block übermitteln, falls modifiziert (SBMO, SBMI, SBMD, SBMA) - Falls der durch den Adressenoperanden spezifizierte Vier- Wort-Block modifiziert ist, werden sämtliche gültigen Wörter in die entsprechenden Adressen in dem Speicher geschrieben.
- Aktualisieren des Speichers und Invalidieren (UPMIO, UPMII, UPMID, UPMIA) - Falls der durch den Adressenoperanden spezifizierte Vier-Wort-Block modifiziert ist, werden sämtliche gültigen Wörter in die entsprechenden Adressen in dem Speicher geschrieben. Dann werden sämtliche gültigen Bits rückgesetzt. Die Schreib-Operation wird mittels einer Burst-Betriebsart oder eines Einfach-Speicherbus-Schreib-Zugriffs (in Abhangigkeit von der Anzahl der gültigen Wörter) durchgeführt, nachdem der Speicherbus für die ICU zugelassen worden ist.
- Aktualisieren des Speichers und Invalidieren des Mehrfachwertes (UPIMO, UPIMI, UPIMD, UPIMA) - Mehrere sequentielle Speicheraktualisierungs- und Invalidierungs-Operationen werden von der ICU durchgeführt. Jede einzelne Operation ist in ähnlicher Weise ausgelegt wie die Instruktion zum Aktualisieren des Speichers und Invalidieren. Die Instruktion wird in mehreren Zyklen ausgeführt (zwei Zyklen für die Initialisierung plus ein Zyklus pro Vier-Wort-Block). Für diese Instruktion muß das Zählstandsregister einen gültigen Zählstand enthalten. Das Zählstandsregister wird mittels der Register-Schreib-Instruktion geladen. Das Zählstand-Gültig-Bit bleibt nach der Ausführung der Instruktion gesetzt. Zur Gewährleistung einer korrekten Ausführung muß das Zählstandsregister entweder vor der Anforderung der INVM-Instruktion geladen werden, oder es muß den korrekten Wert aus einer vorherigen Operation enthalten. Diese Instruktion kann verwendet werden, um den Speicher zu aktualisieren und einen Seitenrahmen zu invalidieren. Das Zählstandsregister muß eine Anzahl von Vier-Wort-Blöcken in einer Seite enthalten (Seiten-Bemessung in Byte dividiert durch 16).
- Verriegeln des Blocks (LCKO, LCKI, LCKD, LCKA) - Falls der durch den Adressenoperanden bestimmte Vier-Wort-Block (oder ein Teil dieses Blocks) in dem Cache-Speicher vorhanden ist, wird das entsprechende Blockstatus-Verriegelungs-Bit gesetzt.
- Entriegeln des Blocks (ULCKO, ULCKI, ULCKD, ULCKA) - Falls der durch den Adressenoperanden bestimmte Vier-Wort-Block (oder ein Teil dieses Blocks) in dem Cache-Speicher vorhanden ist, wird das entsprechende Blockstatus-Verriegelungs-Bit rückgesetzt.
- Lesen Blockstatus (RBST0, RBSTI, RBSTD, RBSTA) - Die spezifizierte Wortadresse wird auf ihr Vorhandensein in dem Cache- Speicher hin überprüft, und das Statusregister wird entsprechend aktualisiert.
- Schreiben Blockstatus (WBST0, WBSTI, WBSTD, WBSTA) - Der Block, der die spezifizierte Wortadresse enthält, wird auf sein Vorhandensein in dem Cache-Speicher hin überprüft, und die Blockstatus-Bits werden basierend auf dem Wert der Bits in dem Statusregister aktualisiert.
- Wort übermitteln, falls Treffer (SWH) - Falls das durch den Adressenoperanden bestimmte Wort in dem Cache-Speicher vorhanden ist, wird es in die entsprechende Adresse in dem Speicher geschrieben.
- Lesen Tag (RTAG) - Diese Instruktion wird zum Lesen eines bestimmten Tag in dem Cache-Speicher verwendet.
- Schreiben Tag (WTAG) - Diese Instruktion wird zum Schreiben eines bestimmten Tag in dem Cache-Speicher verwendet.
- Vorladen (PRLD) - Das Vorladen ist eine spezielle Operation, die durchgeführt werden kann, um einen Cache-Speicher mit bestimmten Datenvariablen oder Instruktionen zu laden, bevor sie benötigt werden. Die Operation erfolgt unter Software- Steuerung. Die Adressen der erforderlichen Variablen oder Instruktionen werden vom Benutzer zugeführt. Es ist anzumerken, daß die sich Vorlade-Operation von simplen Vorabruf-Operationen unterscheidet. Ein Vorabruf erfolgt normalerweise unter Hardware-Steuerung, und die vorabgerufenen Adressen befinden sich in enger Nachbarschaft zu der Adresse der ursprünglichen Speicher-Anforderung.
- Das Benutzer- und Kompiler-Wissen des Programms sollte verwendet werden, um die am meisten nützlichen Instruktionen oder Datenvariablen vorauszusagen. Die entsprechenden Adressen werden in die Instruktions- und Daten-Cache-Speicher vorgeladen, bevor die Ausführung des Programms gestartet wird. Die Operation kann unter Cache-Speicher-Steuerung ohne Eingreifen des Prozessors durchgeführt werden. Dies gestattet eine bessere Ausnutzung des Cache-Speichers und eine größere Gesamtleistung.
- Die Vorlade-Operation, die an sich neu ist, wird im Zusammenhang mit der hierin aufgenommenen RISC/SIP-Architektur beschrieben. Sie kann auch in anderen Cache-Speicher-Systemen verwendet werden.
- Die Instruktion wird durch den Prozessor initiiert, indem der Opcode und die Operanden an die geeignete Cache-Speicher-Einheit übermittelt werden. Es sind zwei Operanden erforderlich: ein Adressenoperand und ein Zählstandsoperand. Mehrere sequentielle Wörter werden mittels der Speicherbus-Lese-Burst- Transaktion unter ICU-Steuerung in den Cache-Speicher geladen. Der Adressenoperand spezifiziert die Startwortadresse. Das Zählstandsregister spezifiziert die Anzahl von Vier-Wort- Blöcken. Wenn die höchstmögliche Adresse erreicht ist, wird ein Umlauf durchgeführt.
- Die Instruktion wird in mehreren Zyklen ausgeführt (zwei Zyklen für die Initialisierung plus ein Speicherbus-Burst-Lese- Zugriff pro Wort). Für diese Instruktion muß das Zählstandsregister ferner einen gültigen Zählstand enthalten. Die Vorlade-Instruktion kann auf verschiedene Weise durchgeführt werden. Die grundlegenden Optionen sind die folgenden:
- Ein einfaches Verfahren zum Verwenden der Vorlade-Instruktion verlangt keine spezielle Cache-Speicher-Konfiguration und kann bei jedem beliebigen Cache-Speicher-System verwendet werden. Bei diesem Verfahren wird die Vorlade-Instruktion unter Software-Steuerung ausgeführt, bevor das Programm durchgeführt wird. Die Instruktion kann als Teil des kontextuellen Schaltvorgangs ausgegeben werden. Da die Cache-Speicher vorgeladen sind, ist der Kaltstarteffekt minimiert. Der Hauptnachteil dieses Verfahrens liegt darin, daß die Vorlade-Operation andere Cache-Speicher-Operationen, die von dem Prozessor verlangt sind, beeinträchtigen kann.
- Diese Einschränkung kann mittels einer komplexeren Cache-Speicher-Konfiguration überwunden werden. Diese Konfiguration (als schaltbare Cache-Speicher bezeichnet) verlangt mehr als einen Cache-Speicher für jeden Prozessor und ein Verfahren zum Schalten zwischen den Cache-Speichern. Die schaltbare Cache- Speicher aufweisende Konfiguration erlaubt den Betrieb mehrerer Cache-Speicher in dem gleichen Adressenraum. Zwei oder mehr Cache-Speicher sind parallel angeordnet, jedoch ist nur einer der Cache-Speicher für Prozessor-Speicher-Zugriff-Reaktionen ausgelegt. Der andere Cache-Speicher oder die anderen Cache-Speicher können derart programmiert werden, daß sie die Variablen oder Instruktionen, die für das nächste Programm (oder den nächsten Ablauf) erforderlich sind, vorladen. Bevor die Ausführung des nächsten Programms startet, wird der korrekte Cache-Speicher (der die vorgeladenen Daten enthält) aktiviert, und die anderen Cache-Speicher werden deaktiviert.
- Die Implementierung dieses Schemas wird von der ICU voll unterstützt. Die gesamte erforderliche Unterstützung ist auf dem Einzelchip implementiert. Die Deaktivierung oder Aktivierung einer einzelnen ICU kann durch Programmieren eines Betriebszustandsregisters erfolgen. Die Vorlade-Instruktion wird derart implementiert, daß dieses Schema unterstützt ist. Insbesondere kann die ICU die Vorlade-Instruktion selbst dann ausführen, wenn sie für normale Cache-Speicher-Operationen deaktiviert ist. Es können zwei oder mehr ICUs parallel plaziert werden, und nur eine kann für normale Cache-Speicher-Operationen aktiviert werden, während die andere Vorlade-Operationen durchführt. (Es ist keine Verleimungs-Logik erforderlich).
- Diese Konfiguration kann einen beträchtlichen Leistungsvorteil erbringen, da die Vorlade-Operationen mit minimaler Auswirkung auf die Ausführung des aktuellen Programms erfolgen.
- Rücksetzen (RST) - Die Rücksetz-Instruktion führt die gleiche Funktion durch, wie sie durch die Geltendmachung des *RESET- Eingangssignals durchgeführt wird. Die ICU wird initialisiert. Die RST-Instruktion wird unmittelbar, nachdem sie akzeptiert ist, ausgeführt. Eine Mehrfach-Instruktion (INVM, UPIM, PRLD) wird beendet.
- Lesen Register (RDR) - Die Register-Lese-Instruktion wird zum Lesen der speziellen Register der ICU verwendet. Die Nummer des speziellen Registers wird durch den Op-Code bestimmt. Die ICU reagiert auf verschiedene Weise auf diese Instruktion, und zwar in Abhängigkeit von dem Zustand eines Register-Lese-Steuerungs(RRC)-Bits in dem Modb-Register. Wenn RRC 1 ist, bewirkt eine Lese-Instruktion mit der Instruktion auf dem Adressenbus die Initiierung der Instruktion. Wenn RRC 0 ist, wird der Hauptspeicher zum Lesen der Register verwendet.
- Schreiben Register (WRR) - Die Register-Schreib-Instruktion wird zum Schreiben in die speziellen Register der ICU verwendet. Die Nummer des speziellen Registers wird durch den Op- Code bestimmt. Die Daten werden als Instruktionsoperand spezifiziert. Die WRR-Instruktion wird unmittelbar, nachdem sie akzeptiert ist, ausgeführt. Falls eine gültige Instruktion und ein Operand in den Instruktions- und Operanden-Registern vorhanden sind, wird diese ausgeführt, ohne deren Inhalt zu beeinträchtigen. Dieses Merkmal kann verwendet werden, um die ICU-Register wiederherzustellen.
- Wie bereits erwähnt, werden die Speicherbus-Cache-Instruktionen durch eine spezielle Logik auf dem Speicherbus ausgeführt. Diese Logik muß in der Lage sein, die Instruktion an die geeignete ICU zu leiten. Sämtliche ICUs in dem System, die eine gültige Instruktion an ihren Eingängen erkennen, führen diese aus. Es existieren keine äquivalenten Konzepte hinsichtlich des Prozessorbus-Instruktions-Umfangs und der privilegierten Instruktionen auf dem Speicherbus.
- Sämtliche Speicherbus-Cache-Instruktionen können an die ICU übermittelt werden, falls diese der Bus-Slave ist, indem eine bestimmte Cache-Speicher-Instruktions-Transfer-Speicherbus- Transaktion verwendet wird. Die Blockstatus-Schreib-Instruktion kann ebenfalls übermittelt werden, falls die ICU der Bus- Master ist, indem das *VSI-Eingangssignal geltend gemacht wird. Die Instruktion wird jedes Mal ausgeführt, wenn die erforderlichen Cache-Speicher-Betriebsmittel verfügbar sind, nachdem die Instruktion und die Operanden akzeptiert sind. Sämtliche Instruktionen werden intern in zwei Zyklen ausgeführt. Falls eine Speicherbus-Operation für die Ausführung der Instruktion erforderlich ist, muß die Zyklus-Zahl für die Bus- Operation hinzuaddiert werden.
- Die Speicherbus-Cache-Instruktionen werden unabhängig von anderen auf dem Prozessorbus erfolgenden ICU-Operationen (einschließlich der Prozessorbus-Cache-Speicher-Instruktionen) durchgeführt. Die Speicherbus-Instruktionen und die Prozessorbus-Operationen werden entsprechend der Reihenfolge, in der sie empfangen werden, durchgeführt. Das Ergebnis der Speicherbus-Instruktion reflektiert den aktuellen Zustand des Cache- Speichers. Falls eine Speicherbus-Cache-Instruktion während der Ausführung einer Mehrfach-Prozessorbus-Cache-Speicher- Instruktion akzeptiert wird, wird sie ohne eine Beeinträchtigung der Ausführung der Mehrfach-Instruktion ausgeführt.
- Sämtliche Speicherbus-Cache-Instruktionen mit Ausnahme des Schreibens eines Wortes in den Cache-Speicher weisen eine äquivalente Prozessorbus-Cache-Speicher-Instruktion mit einem gleichartigen Namen auf. Diese Instruktionen haben einen ähnlichen Effekt auf dem internen Cache-Speicher, jedoch sind die Operationen des Prozessorbusses und des Speicherbusses unterschiedlich.
- Sämtliche Speicherbus-Cache-Instruktionen werden mittels einer einzigen Cache-Speicher-Instruktions-Transfer-Speicherbus- Transaktion übermittelt. Wenn die ICU nicht der Bus-Master ist, verursacht die Geltendmachung von *VSI eine Cache-Speicher-Instruktions-Transaktion auf dem Speicherbus. Während des ersten Zyklus der Transaktion werden die MRW-, MREQT-, BSTC- Signale und die Adresse verriegelt. Die MRW- und MREQT-Signale spezifizieren die Instruktion. Die BSTC-Signale spezifizieren den Blockstatus für die relevanten Instruktionen. Die Adresse wird als Adressenoperand für die relevante Instruktion verwendet. Falls die Instruktion einen Datenoperanden erfordert, werden die Daten während des zweiten Zyklus verriegelt.
- Wenn die ICU der Bus-Master ist und eine Lese-Anforderung für eine Neulade-Operation ausgibt, hat das *VSI-Eingangssignal eine spezielle Funktion. Falls es geltend gemacht wird, bevor die Transaktion abgeschlossen ist (das letzte *MRDY-Signal ist nicht akzeptiert worden), dann werden die BSTC-Signale verriegelt, und eine Schreib-Blockstatus-Instruktion wird ausgeführt. Der Adressenoperand ist die Blockadresse, die derjenigen Adresse entspricht, die von der ICU für die Neulade-Operation übermittelt wurde.
- Im folgenden wird ein für eine Ausführungsform der Erfindung zweckmäßiger Satz von Speicherbus-Cache-Speicher-Instruktionen mnemonisch und mit kurzer Zweckbeschreibung als Tabelle aufgeführt: Mnemonischer Ausdruck Beschreibung keine Operation Wort übermitteln, falls Treffer Wort übermitteln, falls modifiziert Block übermitteln, falls modifziert Wort invalidieren Block invalidieren Schreiben Blockstatus Schreiben Register Aktualisieren des Speichers und Invalidieren Lesen Blockstatus Lesen Register Wort in Cache-Speicher schreiben
- Es ist anzumerken, daß die Instruktions-Codes derart ausgelegt sind, daß MRWO mit anderen Speicherbus-Operationen konsistent ist. Falls MRWO im LOW-Zustand ist, verläuft die Richtung von der ICU zu dem Speicherbus, und Falls MRWO im HIGH-Zustand ist, verläuft die Richtung von dem Speicherbus zu der ICU.
- Auf der funktionalen Ebene ergeben sich bei der Ausführung der Instruktionen die folgenden Aktionen:
- Keine Operation (NOP) - Diese Aktion hat keine Auswirkung auf die ICU. Das Speicherbus-Cache-Instruktions-Transaktions-Protokoll wird wie für jede Instruktion ausgeführt.
- Wort übermitteln, falls Treffer (SWH) - Falls das von dem Adressenoperanden bestimmte Wort in dem Cache-Speicher vorhanden ist, wird das *HIT-Signal geltend gemacht. Das Wort wird auf dem Speicheradressenbus angesteuert, die mit gemeinsamem Blockstatus benutzten und modifizierten Bits werden auf die BSTC-Signale angesteuert, und *MRDY wird geltend gemacht.
- Wort übermitteln, falls modifiziert (SWM) - Falls das von dem Adressenoperanden bestimmte Wort in dem Cache-Speicher vorhanden ist und das modifizierte Bit für den Block gesetzt ist, werden die *HIT- und die *MRDY-Signale geltend gemacht, und die mit gemeinsamem Blockstatus benutzten und modifizierten Bits werden auf die BSTC-Signale angesteuert. Dann wird das Wort in die entsprechende Adresse in dem Speicher geschrieben.
- Block übermitteln, falls modifiziert (SBM) - Falls der von dem Adressenoperanden bestimmte Vier-Wort-Block modifiziert ist, werden die *HIT- und die *MRDY-Signale geltend gemacht, und die mit gemeinsamem Blockstatus benutzten und modifizierten Bits werden auf die BSTC-Signale angesteuert. Dann werden sämtliche gültigen Wörter in die entsprechenden Adressen in dem Speicher geschrieben.
- Wort invalidieren (INVW) - Das von dem Adressenoperanden bestimmte Wort wird invalidiert (das entsprechende gültige Bit wird rückgesetzt). Das *HIT-Signal wird entsprechend den Hit- oder Miss-Bedingungen gesteuert und *MRDY geltend gemacht, nachdem die Ausführung der Instruktion abgeschlossen ist.
- Block invalidieren (INVB) - Der von dem Adressenoperanden bestimmte Vier-Wort-Block wird invalidiert (sämtliche entsprechenden gültigen Bits werden rückgesetzt). Das *HIT-Signal wird entsprechend den Hit- oder Miss-Bedingungen gesteuert und *MRDY geltend gemacht, nachdem die Ausführung der Instruktion abgeschlossen ist.
- Schreiben Blockstatus (WBST) - Diese Instruktion kann ausgeführt werden, wenn die ICU der Bus-Slave oder der Bus-Master ist. Wenn die ICU der Slave ist, wird der Adressenoperand durch die Speicherbus-Transaktion spezifiziert. In diesem Fall wird der Block, der die spezifizierte Wortadresse enthält, auf das Vorhandensein in dem Cache-Speicher geprüft. Falls der Block vorhanden ist, werden die *HIT- und *MRDY-Signale geltend gemacht, und die Blockstatus-Bits werden aus den BSTC- Signalen kopiert. Falls der Block nicht vorhanden ist, wird die Hit-Signal deaktiviert, und *MRDY wird geltend gemacht. Die Hit- und Gültigkeits-Bits des Statusregisters werden rückgesetzt.
- Wenn die ICU der Bus-Master ist und eine Lese-Anforderung für eine Neulade-Operation ausgibt, hat das *VSI-Eingangssignal eine spezielle Funktion. Falls es geltend gemacht wird, bevor die Transaktion abgeschlossen ist (das letzte *MRDY ist nicht akzeptiert worden), werden die BSTC-Signale verriegelt, und die Blockstatus-Schreib-Instruktion wird ausgeführt. Der Adressenoperand ist die Adresse, die von der ICU für die Neulade-Operation übermittelt wurde. In diesem Fall ist der Block, der die spezifizierte Wortadresse enthält, stets in dem Cache-Speicher vorhanden (da er neugeladen wird). Die Blockstatus-Bits dieses Blocks werden aus den BSTC-Signalen kopiert. Das Statusregister wird nicht beeinflußt.
- Schreiben Register (WRR) - Die Register-Schreib-Instruktion wird zum Schreiben der speziellen Register der ICU verwendet.
- Aktualisieren des Speichers und Invalidieren (UPMI) - Falls das von dem Adressenoperanden bestimmte Vier-Wort-Block modifiziert wird, werden die *HIT- und *MRDY-Signale geltend gemacht, und die mit gemeinsamem Blockstatus benutzten und modifizierten Bits werden auf die BSTC-Signale angesteuert. Dann werden sämtliche gültigen Wörter in die entsprechenden Adressen in dem Speicher geschrieben, und anschließend werden die gültigen Bits rückgesetzt.
- Lesen Blockstatus (RBST) - Die spezifizierte Wortadresse wird auf ihr Vorhandensein in dem Cache-Speicher geprüft. Die Blockstatus-Bits werden auf die BSTC-Signale angesteuert. Die *HIT- und *MRDY-Signale werden ebenfalls entsprechend gesteuert.
- Lesen Register (RDR) - Die Register-Lese-Instruktion wird zum Lesen der speziellen Register der ICU verwendet.
- Wort in Cache-Speicher schreiben (WRW) - Falls das von dem Adressenoperanden spezifizierte Wort in dem Cache-Speicher vorhanden ist, wird das *HIT-Signal geltend gemacht, und die zugeführten Daten werden in den Cache-Speicher geschrieben. Die beiden am wenigsten signifikanten Bits der Adresse werden ignoriert. Es ist anzumerken, daß der Adressenzyklus durch das *VSI-Eingangssignal und nicht durch das *MASTB-Signal spezifiziert wird. Die Daten werden durch den Wert auf dem Speicherbus während des auf den Adressenzyklus folgenden Zyklus spezifiziert. Falls das Wort nicht in dem Cache-Speicher vorhanden ist, wird das *HIT-Signal ungültig gemacht, und die Treffer- und Gültigkeits-Bits des Statusregisters werden rückgesetzt. Das *MRDY-Signal wird geltend gemacht, wenn die ICU die Daten aus dem Speicherbus verriegelt.
- Nach dem Abschluß dieser Beschreibung eines zweckmäßigen und praktikablen Instruktionssatzes zur Verwendung mit der bevorzugten Ausführungsform der Erfindung folgt eine kurze Beschreibung der Datenformate und der Datenmanipulationsmechanismen, die von der neuen ICU unterstützt werden.
- Wie bereits erläutert, wird ein Wort durch 32 Datenbits definiert. Ein halbes Wort besteht aus 16 Bits. Ein Byte besteht aus 8 Bits. Die ICU bietet direkte Unterstützung für Wort-, Halbwort- und Byte-Zugriffe. Auf dem Prozessorbus wird die Zugriffslänge entsprechend den OPT-Eingangssignalen definiert. Die Zugriffslänge ist nur für Einfachdaten-Speicher-Zugriffe effektiv. Bei sämtlichen anderen Prozessorbus-Zugriffen (einschließlich der Burst-Betriebsart-Speicher-Zugriffe) wird sie ignoriert und eine Speicherlänge angenommen. Auf dem Speicherbus wird die Zugriffslänge entsprechend den MDLN-Signalen definiert.
- Die Numerierungs-Konventionen für Dateneinheiten innerhalb eines Wortes bei der bevorzugten Ausführungsform der Erfindung stimmen mit den RISC/SIP-Definitionen überein, die in der einen RISC-Prozessor beschreibenden, hierin eingeschlossenen Anmeldung aufgeführt sind. Bits werden mit ansteigender Reihenfolge von rechts nach links numeriert. Bytes und halbe Wörter können entweder von rechts nach links oder von links nach rechts arrangiert werden, und zwar gemäß der Steuerung durch das Byte-Reihenfolge-Bit des Modb-Registers.
- Die bevorzugte Ausführungsform der ICU enthält die notwendige Hardware zur vollen Unterstützung von Byte-, Halbwort- und Wort-Zugriffen. Die unterschiedlichen Datentypen müssen an ihren natürlichen Adressengrenzen ausgerichtet werden. Zugriffe, die nicht an ihren natürlichen Adressengrenzen erfolgen, werden an den Fehler- und Status-Registern gemeldet; der Zugriff wird jedoch durchgeführt, als ob er korrekt ausgerichtet wäre (d.h. die entsprechenden Adressenbits werden ignoriert).
- Bei Speicher-Byte-Lese-Operationen auf dem Prozessorbus verschiebt die Ausrichtungs-Hardware das Byte auf die niedrigstrangige (ganz rechte) Stelle innerhalb eines Wortes.
- Bei Speicher-Halbwort-Lese-Operationen auf dem Prozessorbus verschiebt die Ausrichtungs-Hardware das Halbwort auf die niedrigrangige (ganz rechte) Stelle innerhalb eines Wortes.
- Im Fall eines Fehlgängers bei der Speicher-Lese-Operation benutzt die ICU Wort-Zugriffe auf den Speicherbus für die Neulade-Operation. Byte- und Halbwort-Zugriffe werden für nicht cache-speicherbare Lese-Zugriffe verwendet. Das Byte oder das halbe Wort werden ausgerichtet, bevor sie dem Prozessor zugeführt werden. Die Zugriffslänge wird aus dem Prozessorbus (OPT-Eingangssignale) an den Speicherbus (MDLN-Signale) übermittelt.
- Für Speicher-Schreib-Operationen schreibt die ICU Bytes und halbe Wörter in die entsprechenden Cache-Speicher-Stellen. Für einen Byte-Schreibvorgang wird das Byte aus der niedrigrangigen Byte-Stelle zu allen anderen Byte-Stellen innerhalb eines Wortes dupliziert. Das entsprechende Byte-Schreib-Aktivierungssignal wird aktiviert, um das korrekte Byte in den Cache- Speicher zu schreiben. Für einen Halbwort-Schreibvorgang wird das halbe Wort aus dem niedrigrangigen zu dem hochrangigen Halbwort dupliziert. Dann wird es in den Cache-Speicher geschrieben, indem die entsprechenden Halbwörter aktiviert werden.
- Für Durch-Schreib- und nicht cache-speicherbare Schreib-Zugriffe wird die Zugriffslänge aus dem Prozessorbus (OPT-Eingangssignale) an den Speicherbus (MDLN-Signale) übermittelt. Die duplizierten Bytes oder Halbwörter werden auf dem Speicherbus plaziert. Die Speichersteuereinrichtung dekodiert die Adresse und die Länge und aktiviert die korrekten Schreib- Freigabe-Signale.
- Es ist anzumerken, daß, obwohl die ICU Byte- und Halbwort-Zugriffe unterstützt, der Benutzer entscheiden kann, ob das System diese unterstützt. Falls die Entscheidung darin besteht, daß nur Wort-Zugriffe unterstützt werden, müssen die OPT- und MDLN-Eingangssignale stets Wort-Zugriffe spezifizieren.
- In dem direkt anschließend folgenden Abschnitt der detaillierten Beschreibung wird die ICU-Operation für die unterschiedlichen Fälle von Cache-Speicher-Zugriffen auf den Prozessor- und Speicher-Bussen erläutert.
- Bei den Prozessorbus-Zugriffen handelt es sich entweder und Einfach-, Pipeline- oder Burst-Betriebsart-Zugriffe.
- Sämtliche Zugriffe auf den Prozessorbus werden von dem Prozessor initiiert. Die ICU unterstützt die drei Zugriffsprotokolle, wie in den mitanhängigen, zuvor durch Verweis eingeschlossenen Anmeldungen definiert.
- Einfach-Zugriffe werden für Einfach-Daten-Lese- und Schreib- Zugriffe sowie für spezielle Instruktions-Zugriffe verwendet.
- Pipeline-Zugriffe werden von der ICU unterstützt. Die ICU verriegelt die Adresse. (*PEN sollte von externer Logik gesteuert werden). Der Prozessor kann den Adressenbus zum Starten eines weiteren ICU-Zugriffs verwenden. Die Adresse eines Pipeline-Zugriffs wird von der ICU für die Tag-Vergleichs- Funktion verwendet, und zwar in Pipeline-Verbindung mit dem vorherigen Zugriff. Im Fall eines Cache-Speicher-Treffers ist ein Zyklus zur Beendigung des Pipeline-Zugriffs erforderlich, nachdem der erste Zugriff beendet worden ist. Im Fall eines Cache-Speicher-Fehlgängers startet der Speicherbus-Zugriff einen Zyklus früher.
- Burst-Betriebsart-Zugriffe werden für Instruktions-Zugriffe und Mehrfach-Daten-Zugriffe verwendet. Bei diesen Zugriffen wird die Adresse für das erste Wort übertragen, und dann werden für die folgenden Wörter sequentielle Adressen angenommen. Burst-Betriebsart-Lese- und Schreib-Zugriffe werden von der ICU voll unterstützt. Die maximale Rate von einem Wort pro Zyklus wird bei Cache-Speicher-Treffern erzielt.
- Ein Einfach-Speicher-Lese-Zugriff wird zum Lesen von Datenvariablen aus einem Daten-Cache-Speicher verwendet. (Der hierin eingeschlossene RISC-Prozessor führt sämtliche Instruktions-Lese-Protokolle mittels des Burst-Betriebsart-Lese-Protokolls aus.) Die Adresse wird zum Suchen des Cache-Speichers für das verlangte Wort verwendet. Falls das Wort gefunden wird (Treffer), werden die Daten dem Prozessor zugeführt und das *CRDY-Ausgangssignal geltend gemacht. Die Ausrichtung wird für Byte- und Halbwort-Zugriffe durchgeführt. Für Einfach-Speicher-Lese-Zugriffe reagiert die ICU in zwei Zyklen.
- Falls das verlangte Wort in dem Cache-Speicher nicht gefunden wird (Fehlgänger), initiiert die ICU einen bestimmten Fehlgängerhandhabungsvorgang. Das Gemeinsambenutzungs-Blockstatus-Bit wird bei jedem Fehlgänger aktualisiert. Ferner wird das dem Satz zugeordnete LRU-Bit bei jedem Zugriff aktualisiert, damit es den am weitesten zurückliegend verwendeten Block reflektiert.
- Ein Burst-Betriebsart-Speicher-Lese-Zugriff wird von der ICU als Serie sequentieller Speicher-Lese-Zugriffe behandelt. In dem ersten Zyklus eines Burst-Betriebsart-Lese-Zugriffs wird die Adresse für das erste Wort von dem Prozessor übermittelt. Wenn die ICU einen Burst-Betriebsart-Lese-Zugriff detektiert, verriegelt sie die Adresse und macht das *CBACK-Signal gültig. Die Adresse wird verglichen und für jedes Wort in dem Burst automatisch inkrementiert. Im Fall eines Cache-Speicher-Treffers reagiert die ICU mit dem ersten Wort in zwei Zyklen. Eine Adresse kann mit einer maximalen Rate von einem Mal pro Zyklus inkrementiert und verglichen werden. Dadurch wird es möglich, im Fall von Cache-Speicher-Treffern eine Rate von einem Zyklus pro Wort zu erzielen. Es ist anzumerken, daß ein Ein-Zyklus- Zugriff auch im Fall einer Blockgrenzenüberschreitung beibehalten wird.
- Falls ein Fehlgänger an irgendeinem Punkt während des Burst- Betriebsart-Zugriffs erkannt wird, wird ein bestimmter Burstfehlgängerhandhabungsvorgang initiiert.
- Während des Speicherbus-Burst-Betriebsart-Zugriffs wird die nächste Wortadresse (aktuelles Wort plus 1) in dem Cache-Speicher geprüft. Falls während der Speicherbus-Burst-Betriebsarts-Operation ein Treffer erkannt wird, wird der Speicherbus- Zugriff beendet, und der Datentransfer wird aus dem Cache- Speicher fortgesetzt. Die Miss- und Hit-Fälle und die Transfers von einem zu dem anderen sind dem Prozessor transparent (nur die Zugriffszeit wird beeinträchtigt).
- Ein Burst-Betriebsart-Lese-Zugriff kann von dem Prozessor an jedem beliebigen Punkt beendet werden, indem *BREQ deaktiviert wird. Es wird ein weiteres Wort bearbeitet, wie in dem Protokoll für die Burst-Betriebsart des hierin eingeschlossenen RISC-Prozessors definiert ist.
- Ein Einfach-Speicher-Schreib-Zugriff wird zum Schreiben von Datenvariablen in den Cache-Speicher verwendet. Die Adressen und die Daten werden von der ICU in dem ersten Zyklus des - Zugriffs verriegelt, und das *CRDY-Signal wird während dieses Zyklus geltend gemacht (Einfach-Zyklus-Schreibvorgänge). Es ist anzumerken, daß das *CRDY-Signal unabhängig von den Hit- oder Miss-Bedingungen geltend gemacht wird.
- Im Fall eines Cache-Speicher-Treffers werden die Daten in dem zweiten Zyklus in den Cache-Speicher geschrieben. Die Schreib- Funktion wird bestimmt entsprechend den ASTC-Eingangssignalen, dem Schreib-Funktions-Feld des Moda-Registers, den Schreib- Gemeinsambenutzungs-Treffer-Steuerungs- und Prozessor-Gemeinsambenutzungs-Bit-Steuerungs-Feldern in dem Modb-Registern, und dem Blockstatus-Gemeinsambenutzungs-Bit. Es existieren drei mögliche Schreib-Funktionen: exklusives Durch-Schreiben, exklusives Rückkopieren und Gemeinsambenutzung.
- Für einen Exklusiv-Durch-Schreib-Schreib-Zugriff werden die Daten auch in den Speicher geschrieben. Falls der Schreib-Puffer aktiviert ist, werden die Daten in den Schreib-Puffer geschrieben. Wenn er deaktiviert ist, wird die Schreib-Operation nicht gepuffert, wie im folgenden im Zusammenhang mit der Beschreibung der Schreib-Puffers erläutert wird. In beiden Fällen wird der Speicherbus-Zugriff gestartet, wenn keine anderen Speicherbus-Operationen existieren, die früher ausgeführt werden müssen, und wenn der Speicherbus verfügbar ist.
- Für einen Exklusiv-Rückkopier-Schreib-Zugriff werden die Daten nur in den Cache-Speicher geschrieben, und das modifizierte Bit wird gesetzt. Die Daten werden in den Speicher geschrieben, wenn der Block ersetzt wird.
- Im Fall eines Gemeinsambenutzungs-Schreib-Zugriffs wird stets ein Durch-Schreib- oder Schreib-Broadcast-Zugriff auf dem Speicherbus ausgeführt. In diesem Fall steuert das Schreib- Gemeinsambenutzungs-Treffer-Steuer-Feld des Modb-Registers und nicht das Schreib-Funktions-Feld die ICU-Operation.
- Im Fall eines Cache-Speicher-Fehlgängers wird die ICU-Operation entsprechend dem Schreib-Zuordnungs-Bit des Moda-Registers bestimmt. Falls die Schreib-Zuordnung aktiviert ist, wird ein Cache-Speicher-Block für den verfehlten Block zugeteilt, und ein Fehlgänger-Ablauf wird initiiert. Der Fehlgänger-Ablauf gleicht dem Speicher-Lese-Fehlgänger-Ablauf. Nachdem der Fehlgänger-Ablauf abgeschlossen ist, wird die Cache- Speicher-Operation fortgesetzt, wie zuvor für den Fall des Schreib-Treffers beschrieben wurde.
- Falls die Schreib-Zuordnung deaktiviert ist, wird kein Block in dem Cache-Speicher zugeteilt. Die Daten werden nur in den Speicher geschrieben, wie für die Durch-Schreib-Operation erläutert. Es ist anzumerken, daß für diesen Fall ein Rückkopier-Schreibvorgang als Durch-Schreib-Zugriff behandelt wird.
- Das Gemeinsambenutzungs-Blockstatus-Bit wird bei jedem Fehlgänger aktualisiert. Es kann auch bei einem Cache-Speicher- Treffer aktualisiert werden, falls das entsprechende Bit des Modb-Registers gesetzt ist.
- Das dem Satz zugeordnete LRU-Bit wird bei jedem Zugriff derart aktualisiert, daß es den am weitesten zurückliegend verwendeten Block reflektiert.
- Ein Burst-Betriebsart-Speicher-Schreib-Zugriff wird von der ICU als Serie sequentieller Speicher-Schreib-Zugriffe behandelt. In dem ersten Zyklus eines Burst-Betriebsart-Schreib- Zugriffs werden die Adresse und die Daten für das erste Wort von dem Prozessor übermittelt. Wenn ein Burst-Betriebsart- Schreib-Zugriff von der ICU detektiert wird, verriegelt sie die Adresse und die Daten und macht die *CRDY- und die *CBACK- Signale geltend. Die Adresse wird verglichen und für jedes Wort in dem Burst automatisch inkrementiert.
- Im Fall eines Cache-Speicher-Treffers schreibt die ICU während des zweiten Zyklus das erste Wort in den Cache-Speicher. Eine Adresse kann mit einer maximalen Rate von einem Mal pro Zyklus inkrementiert und verglichen werden. Dadurch wird es möglich, im Fall von Cache-Speicher-Treffern eine Rate von einem Zyklus pro Wort zu erzielen. Es ist anzumerken, daß ein Ein-Zyklus- Zugriff auch im Fall einer Blockgrenzenüberschreitung beibehalten wird. Es kann auch eine Speicherbus-Schreib-Operation unter den gleichen Bedingungen wie für Einfach-Speicher- Schreibvorgänge gestartet werden. Falls der Schreib-Puffer aktiviert ist, wird er zum Puffern von bis zu vier Schreibvorgängen verwendet. Der Speicherbus-Zugriff ist ein Burst-Betriebsart-Schreibvorgang. Die Bedingungen für die Speicherbus- Operation werden für jedes Wort in dem Burst überprüft, und die Speicherbus-Operation wird entsprechend beeinflußt.
- Falls ein Fehlgänger an irgendeinem Punkt während des Burst- Betriebsart-Zugriffs erkannt wird, wird die ICU-Operation entsprechend dem Schreib-Zuordnungs-Bit des Moda-Registers bestimmt. Falls die Schreib-Zuordnung aktiviert ist, wird ein Cache-Speicher-Block für den verfehlten Block zugeteilt, und es wird ein Fehlgängerhandhabungsvorgang initiiert. Der Speicherbus-Zugriff besteht entweder aus Lesen oder Lesen zum Modifizieren, und zwar in Abhängigkeit davon, ob das Schreib- Fehlgänger-Speicher-Zugriffs-Steuer-Bit des Modb-Registers HIGH bzw. LOW ist. Nachdem der Fehlgängerhandhabungsvorgang abgeschlossen ist, wird die Cache-Speicher-Operation in der für den Treffer-Fall beschriebenen Weise fortgesetzt. Es ist anzumerken, daß in diesem Fall jeder verfehlte Unter-Block zuerst in den Cache-Speicher gelesen und dann geschrieben wird. Die Speicherbus-Operation ist kein kontinuierliches Burst.
- Falls die Schreib-Zuordnung deaktiviert ist, wird kein Block in dem Cache-Speicher zugewiesen. Die Daten werden mittels einer Burst-Betriebsart-Schreib-Operation nur in den Speicher geschrieben. Die Bedingungen für die Speicherbus-Operation werden für jedes Wort in dem Burst überprüft, und die Speicherbus-Operation wird entsprechend beeinflußt.
- Die nächste Wortadresse (aktuelle Wortadresse plus 1) wird in dem Cache-Speicher für jeden Wort-Schreibvorgang überprüft. Falls nach einem oder mehreren Fehlgängern ein Treffer gefunden wird, setzt die ICU ihren Betrieb in der für den Fall des Treffers beschriebenen Weise fort. Die Miss- und Hit-Fälle und die Transfers von einem zum anderen sind dem Prozessor transparent (nur die Zugriffszeit wird beeinflußt).
- Ein Burst-Betriebsart-Schreib-Zugriff kann von dem Prozessor an jedem beliebigen Punkt beendet werden, indem *BREQ deaktiviert wird. Die ICU bearbeitet den letzten Wort-Schreibvorgang und beendet den Speicherbus-Burst-Betriebsart-Zugriff, falls erforderlich.
- Im folgenden wird eine Vielfalt anderer Zugriffsvorgänge beschrieben, die von der bevorzugten Ausführungsform der Erfindung unterstützt werden.
- Ein nicht cache-speicherbarer Speicher-Zugriff wird unterstützt. Er dient zum Umgehen des Cache-Speichers für spezielle variable Zugriffe. Bei diesem Zugriff wird der Cache-Speicher nicht nach den verlangten Daten abgesucht. Ein Speicher-Zugriff wird gestartet, um die Daten in dem Speicher zu lesen oder in diesen zu schreiben. In dem Cache-Speicher wird kein Block für diese Daten zugewiesen.
- Instruktions-ROM-Zugriffe können wahlweise unterstützt werden. Diese Zugriffe werden von einem Instruktions-Cache-Speicher als regulärer Speicher-Lese-Zugriff betrieben. Im Fall eines Fehlgängers wird der Speicherbus-Zugriff als ROM-Zugriff bezeichnet. Die ICU kann derart programmiert werden, daß sie ROM-Zugriffe ignoriert.
- Eingangs-/Ausgangs-Zugriffe können von einem Daten-Cache-Speicher optional als nicht cache-speicherbare Zugriffe unterstützt und behandelt werden. Die ICU überträgt den Zugriff auf den Speicherbus mit I/O-Angabe. Die ICU kann derart programmiert werden, daß sie Eingangs-/Ausgangs-Zugriffe ignoriert.
- Koprozessor-Transfers werden von dem Daten-Cache-Speicher ignoriert.
- Ferner wird ein Speicher-Zugriff unterstützt, der als Verriegelungs-Zugriff spezifiziert sein kann. Dies erfolgt durch Setzen des *LOCK-Eingangssignals. Ein Verriegelungs-Zugriff kann verwendet werden, um auf Semaphoren und andere synchronisierte gemeinsam benutzten Variablen zuzugreifen. Verriegelungs-Zugriffe werden von dem Modb-Register gesteuert.
- Es wird ein Instruktions-Speicher-Zugriff als Daten unterstützt. Dies ist ein spezieller Daten-Zugriff, der zum Lesen und Schreiben des Inhaltes eines Instruktions-Speichers verwendet wird. Er wird durch einen speziellen Code an den OPT- Eingangssignalen angezeigt.
- Ferner wird ein Fehlerbeseitigungs-Modul-Zugriff unterstützt. Dies ist ein spezieller Daten-Zugriff, der zum Zugreifen auf das RISC/SIP-Fehlerbeseitigungs-Modul verwendet wird. Er wird durch einen speziellen Code an den OPT-Eingängen angezeigt. Die ICU steuert das *CRDY-Signal für diesen Zugriff. *CRDY wird für vier Zyklen in den HIGH-Zustand gesteuert und dann fur einen Zyklus geltend gemacht. Dies erfolgt, um die Einführung des Fehlerbeseitigungs-Moduls in das Cache-Speicher- System zu ermöglichen, ohne die *RDY-Logik des Prozessors zu beeinflussen.
- Zusätzlich zu den oben genannten Eigenschaften wird ein Cache- Speicher-Instruktions-Zugriff unterstützt. Dieser Zugriff wird benutzt, um Prozesssorbus-Cache-Speicher-Instruktionen zu der ICU zu übermitteln.
- In Hinblick auf Speicherbus-Zugriffe ist zu betonen, daß der Speicherbus sowohl für den Master-Cache-Speicher und für die Slave-Cache-Speicher der ICU verwendet wird. Auf den Speicher wird durch einen ICU-Bus-Master zugegriffen, indem ein Speicherbus-Zugriff ausgegeben wird. Die ICU erhält die Bus-Master-Eigenschaft durch Geltendmachen des *MBUSR (Bus-Anforderungs)-Ausgangssignals und Warten auf *MBGRT (Bus-Gewährung). Ein ICU-Bus-Slave kann die Speicherbus-Zugriffe für Cache- Speicher-Konsistenz-Zwecke überwachen. Cache-Speicher-Instruktionen können durch spezielle Zugriffe auf den Speicherbus aktiviert werden.
- Im folgenden werden Lese-Zugriffe, Schreib-Zugriffe und Lesen für Modifikations-Zugriffe, die mit Unterstützung durch die ICU erfolgen, erläutert.
- Ein Speicherbus-Lese-Zugriff wird durch einen Cache-Speicher- Master fur eine Neulade-Operation und für nicht cache-speicherbare Zugriffe initiiert. Sämtliche Neulade-Operationen benutzen die Zugriffslänge von Wörtern. Für nicht cache-speicherbare Zugriffe werden der Zugriffs-Typ und die angemessene Länge aus dem Prozessorbus an die MDLN-, MREQT- und *MLOCK- Speicherbus-Signale übermittelt. Für die Neulade-Operation wird ein Burst-Betriebsart-Zugriff verwendet, falls mehr als ein Wort verlangt ist. In sämtlichen anderen Fällen wird eine Einfach-Zugriff verwendet.
- Die Neulade-Operation hängt von der Original-Prozessorbus- Operation ab. Sie unterscheidet sich bei Einfach-Zugriffen und Burst-Betriebsart-Zugriffen.
- Für den Fall eines Cache-Speicher-Fehlgängers bei einer Prozessorbus-Einfach-Speicher-Lese-Operation werden die Start- und End-Adressen sowie Adressen-Umlauf oder -Nicht-Umlauf von den Einfach-Fehlgänger-Steuerungs (SMC) - und Unter-Block-Bemessungs(SBS)-Feldern des Moda-Registers gesteuert.
- Für den Fall eines Cache-Speicher-Fehlgängers bei einem Prozessorbus-Burst-Betriebsart-Lese-Zugriff wird für die Neulade- Operation ein Burst-Betriebsart-Zugriff auf den Speicherbus gestartet. Die Neulade-Start-Adresse ist stets diejenige des vermißten Wortes. Die Burst-End-Adresse wird von dem Moda- Register gesteuert.
- Wenn die ICU der Bus-Master-Speicher ist und eine Lese-Anforderung für eine Neulade-Operation ausgibt, hat das * VSI-Eingangssignal eine spezielle Funktion. Falls es geltend gemacht wird, bevor die Transaktion abgeschlossen ist (das letzte *MRDY ist nicht akzeptiert worden), dann werden die BSTC-Signale verriegelt, und eine spezielle Blockstatus-Schreib-Instruktion wird ausgeführt.
- Im folgenden wird die Arbeitsweise eines Slave-Cache-Speichers für Speicherbus-Lese-Zugriffe im Zusammenhang mit der ICU- Mehrprozessor-Unterstützung beschrieben.
- Zunächst werden die Schreib-Zugriffe erläutert. Eine Initiierung einer Schreib-Operation erfolgt durch den Cache-Master- Speicher für Durch-Schreib- und nicht cache-speicherbare Zugriffe, Modifizierungs-Block-Rückkopier-an-Speicher und Gemeinsambenutzungs-Block-Schreib-Treffer-Operationen. Ein Burst-Betriebsart-Zugriff wird für die Modifizierungs-Block- Rückkopier-Operation und für Burst-Betriebsart-Schreib-Zugriffe auf den Prozessorbus initiiert. In sämtlichen anderen Fällen wird ein Einfach-Zugriff initiiert. Für Einfach-Zugriffe werden Zugriffs-Typ und -Länge aus dem Prozessorbus an die MDLN-, MREQT- und *MLOCK-Speicherbus-Signale übermittelt.
- Ein Burst-Betriebsart-Schreib-Zugriff auf den Speicherbus beginnt an der verlangten Anfangs-Wort-Adresse und stoppt an dem letzten Wort, das in den Speicher geschrieben werden soll. Er wird nicht von den Moda-Optionen wie im Fall der Burst-Betriebsart-Lese-Zugriffe beeinflußt.
- Im Fall eines Treffers auf einen gemeinsam benutzten Block wird eine Durch-Schreib-Operation unter Steuerung des Modb- Registers initiiert, und zwar in Abhängigkeit von dem Wert des Schreib-Gemeinsambenutzungs-Treffer-Steuer-Feld des Registers.
- Im folgenden wird die Arbeitsweise eines Slaves für Speicherbus-Schreib-Zugriffe im Zusammenhang mit der ICU-Mehrprozessor-Unterstützung beschrieben.
- Ein Lesevorgang zum Modifizieren ist eine spezielle Lese-Operation. Er wird von der ICU im Fall eines Fehlgängers bei einer Rückkopier-Schreib-Operation unter Steuerung des Modb- Registers verwendet. Der Master-Cache-Speicher zeigt an, daß der Block modifiziert werden wird, nachdem das Lesen beendet ist. In jeder anderen Hinsicht ist die Master-Operation dem Lese-Zugriff gleichartig.
- Wenn die ICU der Bus-Master ist und eine Lesen-zum-Modifizieren-Anforderung für die Neulade-Operation ausgibt, hat das *VSI-Eingangssignal eine spezielle Funktion. Falls es geltend gemacht wird, bevor die Transaktion abgeschlossen ist (das letzte *MRDY ist nicht akzeptiert worden), dann werden die BSTC-Signale verriegelt, und eine spezielle Blockstatus- Schreib-Instruktion wird ausgeführt.
- Im folgenden wird die Arbeitsweise eines Slave-Cache-Speichers für Modifizierungs-Zugriffe im Zusammenhang mit der ICU-Mehrprozessor-Unterstützung beschrieben.
- Es werden zwei weitere Operationen von der bevorzugten Ausführungsform der ICU unterstützt, und zwar eine Schreib-Broadcast-Operation und ein Speicherbus-Cache-Instruktions-Zugriff.
- Eine Schreib-Broadcast-Operation wird von der ICU nur im Fall eines Schreib-Treffers auf einem gemeinsam benutzten Block initiiert, und zwar unter Steuerung durch das Modb-Register. Der Unterschied zwischen einem Schreib-Broadcast und einem regulären Schreibvorgang besteht darin, daß bei einem Schreib- Broadcast der Speicher nicht aktualisiert wird. In jeder anderen Hinsicht ist die Operation dem Schreib-Zugriff gleichartig.
- Ein Speicherbus-Cache-Speicher-Instruktions-Zugriff kann von dem Speicherbus durch externe Logik geltend gemacht werden. Wenn die ICU nicht der Bus-Master ist, verursacht die Geltendmachung von *VSI eine Cache-Speicher-Instruktions-Transaktion auf dem Speicherbus. Während des ersten Zyklus der Transaktion werden die MWR-, MREQT- und BSTC-Signale und die Adresse verriegelt. Die MWR- und MREQT-Signale spezifizieren die Instruktion. Die BSTC-Signale spezifizieren den Blockstatus für die relevanten Instruktionen. Die Adresse wird als Adressenoperand für die relevante Instruktion verwendet. Falls die Instruktion einen Datenoperanden erfordert, werden die Daten während des zweiten Zyklus verriegelt.
- Die bevorzugte Ausführungsform der ICU folgt den nachstehend aufgeführten Prioritätsregeln hinsichtlich der verschiedenen Cache-Speicher-Zugriffe:
- 1. Sämtliche Zugriffe werden auf der Basis des Prinzips "Zuerst gekommen, zuerst bedient" gehandhabt.
- 2. Ein zweiter Zugriff kann in Pipeline-Weise gestartet werden, während der erste Zugriff abgeschlossen wird. Die Tag- und die Speicher-Arrays können in jedem Zyklus einen unterschiedlichen Zugriff handhaben.
- 3. Falls zwei Zugriffe, von denen einer auf den Prozessorbus und einer auf den Speicherbus erfolgt, zur gleichen Zeit einen Tag-Array-Zugriff verlangen, hat der Prozessorbus nur dann die Priorität, falls er ein primärer (nicht gepipelineter oder mit fortlaufendem Burst erfolgender) Speicher-Zugriff ist. Der Speicherbus-Zugriff hat die Priorität in allen anderen Fällen.
- 4. Die Reaktionen auf die Prozessorbus-Zugriffe erfolgen stets in der Reihenfolge des Empfangs. Falls in dem Cache-Speicher hinsichtlich eines gepipelineten oder mit fortlaufendem Burst erfolgenden Zugriffs ein Treffer erfolgt, wird die Reaktion verzögert, bis der Primär-Zugriff abgeschlossen ist. Es ist anzumerken, daß der gepipelinete oder mit fortlaufendem Burst erfolgende Zugriff abgeschlossen werden kann, nachdem die Antwort auf den Primär-Zugriff ausgegeben worden ist, jedoch bevor sie voll abgeschlossen ist. Dies geschieht bei Primär- Schreib-Zugriffen, bevor der Schreib-Vorgang auf dem Speicherbus ausgeführt worden ist, bei Neulade-Operationen, nachdem die erforderlichen Daten an den Prozessor ausgegeben worden sind, und bei der Ausführung einiger der speziellen Instruktionen.
- Dem Fachmann auf dem Gebiet wird ersichtlich sein, daß die Spezialregister der ICU programmierbare Optionswahl und Status-Meldung aufnehmen können. Die Cache-Speicher-Funktionen können durch Verwendung programmierbarer Optionen gewählt werden. Die Cache-Speicher-Funktionen können unter Verwendung programmierbarer Optionen gewählt werden. Die Cache-Speicher- Schreib-Funktion kann als Durch-Schreiben, Rückkopieren oder flexibel auf einer Pro-Zugriff-Basis gewählt werden. Es kann eine Schreib-Zuordnungs- oder eine Nicht-Schreib-Zuordnungs- Option gewählt werden. Der Ersetzungs-Algorithmus kann als LRU-, direkte oder externe Einrichtung programmiert werden. Es kann eine flexible Vorabruf-Funktion gewählt werden. Die Durch-Lese-Option kann aktiviert werden. Ein Vier-Wort-Lesepuffer ist vorgesehen, um effiziente Vorabruf- und Lese-Operationen zu unterstützen.
- Wie bereits erläutert, sind die Options-Bits zur Options-Wahl definiert und in dem Moda-Register gespeichert.
- Wie zuvor angeführt, wird durch Vergleich mit der Vorlade- Operation eine Vorabruf-Operation definiert als das Abrufen von Variablen oder einer Instruktion, bevor diese angefordert wird. Die ICU enthält die Hardware zum Unterstützen mehrerer programmierbarer Vorabruf-Optionen. Sie enthält ferner einen Speicher-Lese-Puffer, der als Vorabruf-Puffer verwendet wird. Vorabgerufene Wörter können in dem Vorabruf-Puffer gerettet werden, falls das Cache-Speicher-Array nicht für die Aktualisierung zur Verfügung steht. Jede der folgenden Vorabruf-Optionen kann unabhängig oder in jeder Kombination verwendet werden.
- Die einfachste Form des Vorabrufens kann durch Verwendung einer Unter-Block-Bemessung, die größer ist als ein Wort, erzielt werden. Die ICU lädt den Unter-Block im Fall eines Fehlgängers neu. Die Wörter in dem gleichen Unter-Block des verlangten Worts werden vorabgerufen.
- Das Moda-Register steuert den Betrieb der ICU für Einfach- Zugriffs-Fehlgänger.
- Das Moda-Register steuert ferner den Betrieb der ICU für einen Fehlgänger bei einem Burst-Betriebsart-Zugriff. Falls das Burst von dem Prozessor ausgesetzt wird, kann der Cache- Speicher mehr Wörter vorabrufen, bevor das Speicherbus-Burst gestoppt wird. In diesem Fall kann das Vorabrufen bis zum Ende des gleichen Unter-Blocks oder des nächsten Unter-Blocks vorrücken.
- Das Moda-Register aktiviert ferner die Vorabruf-Option für Einfach-Zugriff-Cache-Speicher-Treffer und Burst-Zugriff-Cache-Speicher-Treffer.
- Zusätzlich zu dem Vorabrufen wird eine Neulade-Operation unter Steuerung des programmierbaren Moda-Registers definiert.
- Die Neulade-Operation hängt von der Original-Prozessorbus- Operation ab. Sie ist bei Einfach-Zugriffen und Burst-Betriebsart-Zugriffen unterschiedlich.
- Für den Fall eines Cache-Speicher-Fehlgängers bei einer Prozessorbus-Einfach-Speicher-Lese-Operation werden die Start- und End-Adressen sowie Adressen-Umlauf oder -Nicht-Umlauf von dem Moda-Register gesteuert.
- Für den Fall eines Cache-Speicher-Fehlgängers bei einem Prozessorbus-Burst-Betriebsart-Lese-Zugriff wird für die Neulade- Operation ein Burst-Betriebsart-Zugriff auf den Speicherbus gestartet. Die Neulade-Start-Adresse ist stets diejenige des vermißten Wortes. Die Burst-End-Adresse wird ebenfalls von dem Moda-Register gesteuert.
- Vor einer detaillierten Beschreibung der Weise, in der die ICU die Mehrprozessor-Operationen unterstützt, werden die Kriterien für den ICU-Schreib-Puffer und das ICU-Initialisieren und -Rücksetzen aufgeführt.
- Die ICU enthält einen 4 Stellen-Schreib-Puffer. Sie kann bis zu vier Schreib-Adressen (Adressen, Steuerung und Daten) puffern. Der Schreib-Puffer kann deaktiviert werden, indem ein Bit in dem Moda-Register gesetzt wird.
- Im aktivierten Zustand wird der Schreib-Puffer zum Puffern von Schreib-Zugriffen auf den Speicherbus verwendet. Für Durch- Schreib- und Schreib-Broadcast-Zugriffe können vier individuelle Schreib-Zugriffe gepuffert werden. Die Schreibinhalte warten in dem Schreib-Puffer, bis der Bus zur Verfügung steht. Dadurch kann bei einem Durch-Schreib-Cache-Speicher oder beim Vorhandensein zahlreicher Schreib-Broadcast-Operationen eine beträchtliche Leistungsverbesserung erzielt werden.
- Der Schreib-Puffer wird ferner verwendet, um einen modifizierten Block zu puffern, bevor er in den Speicher geschrieben wird. Im Fall eines Fehlgängers wird, falls ein modifizierter Block als Ersatz gewählt wird, dieser in dem Schreib-Puffer plaziert. Der Lesevorgang für den verfehlten Unter-Block wird vor dem Schreiben gestartet. Dieses Merkmal erlaubt der ICU eine schnellere Reaktion auf die Prozessor-Anforderung.
- Wenn der Schreib-Puffer voll ist, kann die ICU noch einen weiteren Cache-Speicher-Zugriff bearbeiten, solange der Speicherbus nicht verlangt wird (Lese-Treffer oder Rückkopier- Schreib-Treffer). Falls der Speicherbus für eine weitere Schreib-Operation verlangt wird, wartet der Cache-Speicher, bis für das Schreiben ein verfügbarer Raum in dem Schreib- Puffer vorhanden ist. Sämtliche weiteren Anforderungen werden erst bearbeitet, nachdem der Schreib-Puffer leer ist. Dies ist erforderlich, um eine korrekte Folgesteuerung von Anforderungen zu gewährleisten, d.h. ein Fehlgänger bei einem Speicher- Auslesevorgang wartet, bis sämtliche Schreibvorgänge ausgeführt sind, damit ein aktualisierter Speicher gelesen wird.
- Wenn der Schreib-Puffer deaktiviert ist, werden keine Schreib- Zugriffe gepuffert. Die Schreib-Operation auf dem Speicherbus wird gestartet, sobald der Bus verfügbar ist. Die ICU kann noch einen weiteren Cache-Speicher-Zugriff bearbeiten, solange der Speicherbus nicht verlangt wird (Lese-Treffer oder Rückkopier-Schreib-Treffer). Falls der Speicherbus verlangt wird, wartet der Cache-Speicher, bis die vorherige Schreib-Operation abgeschlossen ist.
- Was die Initialisierung anbelangt, so muß die ICU initialisiert werden, wenn zum ersten Mal Strom zugeführt wird. Falls erforderlich, kann sie auch zu einem späteren Zeitpunkt initialisiert werden.
- Es existieren zwei Verfahren zum Initialisieren der ICU, das Geltendmachen eines *RESET-Eingangssignals oder das Ausgeben einer Rücksetz-Instruktion. Die beiden Verfahren haben exakt die gleichen Auswirkungen auf die ICU. Gemäß der bevorzugten Ausführungsform der Erfindung wird eine spezielle Initialisierungsabfolge in der folgenden Weise durchgeführt:
- 1. Jede gerade ablaufende Cache-Speicher-Operation oder Cache- Speicher-Instruktion wird ausgesetzt.
- 2. Jede Speicherbus-Operation wird ausgesetzt.
- 3. Die Chip-Wahl-Deaktivierungs- und Chip-Wahl-für-Speicherzugriff-Aktivierungs-Bits, die in dem Chipwahlabbildungsregister gespeichert sind, werden rückgesetzt.
- 4. Die eine Instruktions- und Operanden-Gültigkeit anzeigenden Bits, die in dem Instruktionsregister gespeichert sind, werden rückgesetzt.
- 5. Ein Instruktions-Zählstands-Gültigkeit anzeigendes Bit, das in dem Zählstands-Register gespeichert ist, wird rückgesetzt.
- 6. Die Paritäts-Fehler-, Speicher-Fehler, Illegal-Instruktions- und Schutz-Verletzungs-Bits des Statusregisters werden rückgesetzt.
- 7. Sämtliche Moda-Register-Bits mit Ausnahme des Nurlesespeicher-Aktivierungs-Bits (ROME) und des Bits, das angibt, ob der Cache-Speicher ein Instruktions-Cache-Speicher oder ein Daten- Cache-Speicher ist (ID-Bit), werden rückgesetzt.
- 8. Sämtliche Modb-Register werden rückgesetzt.
- 9. Sämtliche gültigen Bits werden rückgesetzt.
- Für eine korrekte Rücksetz-Operation sollten die folgenden Bedingungen eingehalten werden:
- 1. Das *IREQ-Eingangssignal sämtlicher ICU-Daten-Cache-Speicher in dem System muß mit LOW-Pegel gekoppelt sein. Das *IREQ-Signal sämtlicher Instruktions-Cache-Speicher muß mit dem *IREQ-Ausgangssignal des Prozessors verbunden sein.
- 2. Das CREQT1-Signal nur eines Instruktions-Cache-Speichers muß mit HIGH-Pegel gekoppelt sein, falls das Rücksetz-ROM auf dem Speicherbus plaziert ist. Sämtliche CREQT1-Signale müssen mit LOW-Pegel gekoppelt sein, falls das Rücksetz-ROM auf dem Prozessorbus plaziert ist.
- 3. Das Chipwahlabbildungsregister verschiedener ICUs muß derart programmiert sein, daß es auf verschiedene Adressen für Speicher-Zugriffe und Cache-Speicher-Instruktions-Zugriffe reagiert. Dies kann durch Verwendung des *CSEL-Eingangssignals erfolgen. Es ist eine einfache Konfiguration möglich, die keine externe Hardware verlangt. Das *CSEL-Eingangssignal verschiedener Cache-Speicher kann mit unterschiedlichen Adressen-Bits gekoppelt werden und die entsprechenden Adressen benutzen. Nachdem die Anfangs-Registerprogrammierung abgeschlossen ist, kann das *CSEL-Eingangssignal deaktiviert werden.
- 4. Das Programmieren der ICU-Register muß die erste Sequenz von Operationen nach dem Rücksetzen sein. Es dürfen keine Speicher-Zugriffe (mit Ausnahme von Instruktions-ROM-Zugriffen), I/O- oder Koprozessor-Zugriffe durchgeführt werden, bevor die ICUs entsprechende dem bestimmten System konfiguriert sind.
- 5. Falls eine Datentransfer-Steuereinrichtung (DTC), die in der hier einbezogenen mitanhängigen Anmeldung im Zusammenhang mit der DTC erläutert ist, in dem System vorhanden ist, muß das Modb-Register programmiert werden, bevor ein DTC-Zugriff durchgeführt wird. Falls die DTC auf dem Prozessorbus plaziert ist, muß sie derart programmiert werden, daß sie auf I/O- Adressen reagiert. (Die ICUs müssen derart programmiert werden, daß die I/O-Zugriffe ignorieren.)
- Im folgenden werden die Mehrprozessor-Unterstützungs-Merkmale der ICU erläutert.
- Vom Aspekt der Cache-Speicherung besteht das Hauptproblem von Mehrprozessor-Organisationen in der Daten-Konsistenz. Dieses Problem tritt auf, falls mehr als ein Cache-Speicher eine Kopie der gleichen Speicherstelle enthält und in einem der Cache-Speicher durch seinen Prozessor modifiziert wird. Dann enthalten die anderen Cache-Speicher eine veraltete (nicht aktualisierte) Kopie der Daten. Die neuartige ICU-Architektur trägt diesem Problem Rechnung. Dem Fachmann auf dem Gebiet wird ersichtlich sein, daß die in der neuartigen ICU enthaltenen Mehrprozessor-Unterstützungs-Konstruktionen auch in anderen Mehrprozessor-Cache-Speicher-Umgebungen verwendet werden können.
- Der der ICU-Mehrprozessor-Unterstützung zugrundeliegende Kerngedanke besteht darin, daß aufwendige Merkmale vermieden werden, um ein Mehrprozessor-Cache-Speicher-System mit hoher Betriebsleistung und hoher Effizienz zu versehen. Die Merkmale weisen hinreichende Flexibilität auf, so daß die ICU der Mehrprozessor-System-Organisation nur minimale Restriktionen auferlegt. Die Wahl der geeigneten Art und Weise zur Verwendung der Merkmale des Mehrprozessor-Systems ist einfach. Sie erfolgt unter Software-Steuerung durch Programmierung von Options-Bits in den chipinternen Spezialregistern.
- Im folgenden wird Fig. 4 erläutert.
- Fig. 4 zeigt ein typisches Schaubild eines mit gemeinsam benutzem Bus verwendeten Mehrprozessor-Systems. Zwei oder mehr Prozessor-Gruppen können sich den gleichen Bus teilen (in der Figur sind zwei gezeigt). Jede Prozessor-Gruppe besteht aus einem Prozessor und zwei ICUs. Eine ICU wird als Instruktions- Cache-Speicher und die andere als Daten-Cache-Speicher verwendet. Der Prozessor-Adressenbus (A) ist mit dem Adressenbus (A) der beiden ICUs gekoppelt gezeigt. Der Prozessor-Instruktionsbus (I) ist mit dem Cache-Speicher-Bus (CB) des Instruktions-Cache-Speichers gekoppelt. Der Prozessor-Datenbus (D) ist mit dem Cache-Speicher-Bus (CB) des Daten-Cache-Speichers gekoppelt. Die Speicherbusse (MEMAD) der ICUs sind beide mit dem Gemeinsambenutzungs-Speicher-Bus gekoppelt. Es sind viele Variationen dieser Grund-Anordnung möglich.
- Es sei daran erinnert, daß gemäß der bevorzugten Ausführungsform der Erfindung jedem Cache-Speicher-Block zwei Blockstatus-Bits und vier Gültigkeits-Bits zugeordnet sind. Die Gültigkeits-Bits zeigen die Gültigkeit der Wörter in dem Block an. Jedes Gültigkeits-Bit entspricht einem Wort. Falls mindestens ein Gültigkeits-Bit gesetzt ist, ist der Block gültig, und die Blockstatus-Bits zeigen einen Gültigkeits-Status an. Falls sämtliche Gültigkeits-Bits rückgesetzt sind, befindet sich der Block in einem Nicht-Gültigkeits-Status, und die Blockstatus-Bits sind irrelevant. Die Blockstatus-Bits sind als Gemeinsambenutzungs- und Modifizierungs-Bits bezeichnet. Das Gemeinsambenutzungs-Bit zeigt an, ob der Block von mehr als einem Prozessor gemeinsam benutzt wird oder in mehr als einem Cache-Speicher vorhanden ist. Das Modifizierungs-Bit zeigt an, ob der Block relativ zu dem Hauptspeicher modifiziert ist. Die beiden Bits sind unabhängig, und einem gültigen Block kann in der folgenden Weise ein Status zugewiesen werden: Blockstatus-Bits Wert (gemeinsam benutzt, modifiziert) Bedeutung exklusiv nicht modifiziert exklusiv modifiziert gemeinsam benutzt nicht modifiziert gemeinsam benutzt modifiziert
- Ferner sei daran erinnert, daß nicht cache-speicherbare Daten Datenvariablen sind, die nicht cache-gespeichert sind. Ein cache-speicherbarer Prozessorbus-Zugriff wird an den ICU-, ASTC-Eingängen angezeigt. Bei diesem Zugriff wird der Cache- Speicher nicht nach den verlangten Daten abgesucht. Ein Speicher-Zugriff wird zum Lesen oder Schreiben der Daten aus oder in den Speicher angezeigt. Für diese Daten wird in dem Cache- Speicher kein Block zugewiesen. Nicht cache-speicherbare Daten können auf Zugriffs-um-Zugriffs-Basis zugewiesen werden. Gewöhnlich sind die ASTC-Eingangssignale mit den MMU-programmierbaren (MPGM) Ausgängen des Prozessors gekoppelt. In diesem Fall werden die nicht cache-speicherbaren Daten auf MMU-Seiten-Basis zugewiesen. Die nicht cache-speicherbaren Daten müssen an einer Stelle plaziert werden, die das System als nicht cache-speicherbar zugewiesen hat. Ein Weg zur Lösung des Datenkonsistenz-Problems besteht darin, gemeinsam benutzte Variablen als nicht cache-speicherbar zuzuweisen.
- Ein Prozessorbus-Speicher-Zugriff kann auch als Verriegelungs- Zugriff spezifiziert werden. Dies erfolgt durch Setzen des ICU-*LOCK-Eingangssignals Verriegelungs-Zugriffe werden von dem Modb-Register gesteuert und können als cache-speicherbare und nicht cache-speicherbare Zugriffe bezeichnet werden.
- In einer Mehrprozessor-Umgebung können Verriegelungsvariablen für die Synchronisation und für synchronisierte Kommunikation verwendet werden. Auf diese Variablen wird in synchronsierter Weise zugegriffen. Sie können von nur einem Prozessor zu jeder gegebenen Zeit geschrieben werden. Ein detaillierte Beschreibung der ICU-Unterstützung für Verriegelungs-Zugriffe wird im folgenden gegeben.
- Die ICU unterstützt flexible Durch-Schreib- und Rückkopier- Schreib-Funktionen. Die Schreib-Funktionen können entweder global oder auf Zugriff-um-Zugriff-Basis zugeteilt werden. Das Moda-Register steuert die globale Schreib-Funktion. Es kann die flexible Durch-Schreib- oder Rückkopier-Funktion spezifizieren. Die ASTC-Eingangssignale definieren die Schreib-Funktion auf Zugriff-um-Zugriff-Basis. Der Zugriff kann als exklusiver Durch-Schreib-, exklusiver Rückkopier- oder Gemeinsambenutzungs-Zugriff zugewiesen werden. Falls bei einem Cache-Speicher-Treffer ein Konflikt zwischen der für die ASTC- Eingangssignale erfolgenden Gemeinsambenutzungs-Bit-Zuordnung und dem Blockstatus-Gemeinsambenutzungs-Bit in dem Cache-Speicher besteht, wird die Schreiboperation durch den Wert eines Prozessor-Gemeinsambenutzungs-Bit-Steuersignals (PSBC) in dem Modb-Register gesteuert. Falls PSBC gleich 0 ist, wird das mit gemeinsamem Blockstatus benutzte Bit nicht beeinträchtigt, und die Schreibfunktion wird entsprechend dem Blockstatus bestimmt. Falls PSBC gleich 1 ist, wird das mit gemeinsamem Blockstatus benutzte Bit entsprechend den ASTC-Eingangssignalen zugeordnet, und die Schreibfunktion wird entsprechend bestimmt.
- Im Fall eines Gemeinsambenutzungs-Schreib-Zugriffs wird stets ein Durch-Schreib oder ein Schreib-Broadcast-Zugriff auf den Speicherbus durchgeführt. In diesem Fall steuert ein Schreib- Gemeinsambenutzungs-Treffer-Steuer (WSHC)-Feld in dem Modb- Register und nicht das Schreibfunktionsfeld die ICU-Operation.
- In einer Mehrprozessor-Cache-Speicher-Umgebung ist die Durch- Schreib-Funktion weniger problematisch als die Rückkopierfunktion. Falls die Durch-Schreib-Funktion verwendet wird, enthält der Speicher stets eine aktualisierte Version der Daten. Der Durch-Schreib-Zugriff kann auch von anderen Cache-Speichern verwendet werden, um deren eigene Kopie zu invalidieren.
- Die Prozessorbus-Cache-Speicher-Instruktionen können von dem System zum Steuern des Cache-Speichers in einer Mehrprozessor- Umgebung verwendet werden. Invalidierungs-Instruktionen können zum Invalidieren veralteter Daten verwendet werden. Andere Instruktionen können in komplexeren softwaregesteuerten Mehrprozessor-Cache-Speicher-Umgebungen verwendet werden, um den Blockstatus und die Speicheraktualisierungen aus dem bzw. auf dem Speicherbus zu lesen und zu schreiben und cache-gespeicherte Daten auf dem Speicherbus auszugeben.
- Ein weiteres Mehrprozessor-Unterstützungs-Merkmal der ICU ist die "Bus-Überwachung". Die neuartige ICU ist in der Lage, die Speicherbusadressen zu überwachen und zu prüfen, ob sie zu einer Adresse in dem Tag-Array passen. Dies erfolgt unter Transparenz zu dem Prozessorbus-Cache-Speicher-Zugriffen. Die Bus-Lese-Überwachungs-Aktivierungs-Information in dem Modb- Register steuert (aktiviert oder deaktiviert) die Busüberwachungsfähigkeit für Speicherbus-Lese-Zugriffe. Die Bus-Lese- Überwachungs-Aktivierungs-Information in dem Modb-Register leistet die gleiche Funktion für Speicherbus-Schreibzugriffe. Bei Aktivierung wird der Bus nur dann überwacht, wenn die ICU der Bus-Slave ist. Im Fall einer Adressenübereinstimmung führt die ICU Operationen durch, wie sie von der Lese-Übereinstimmungs-Steuer- und der Schreib-Übereinstimmungs-Steuer-Information in dem Modb-Register gesteuert werden.
- Im Fall einer Übereinstimmung beim Speicherbuslesen wird das *HIT-Signal von der ICU geltend gemacht. Es wird das mit gemeinsamem Blockstatus benutzte Bit gesetzt, da der Block potentiell von einem anderen Cache-Speicher beansprucht ist. Das Modb-Register steuert die Dateninterventionsoperation und die Blockstatus-Modifizierungsbit-Zuordnung. Die Optionen sind: keine Datenintervention, Datenintervention (modifiziertes Bit unverändert) und Datenintervention (modifiziertes Bit rückgesetzt).
- Wenn die Datenintervention deaktiviert ist und falls dabei eine Übereinstimmung mit dem von einem anderen Master gelesenen Speicherbusleseinhalt existiert, macht die ICU das *HIT- Signal geltend, steuert die Daten jedoch nicht an. Die blockstatusmodifizierte Information wird nicht geändert. Wenn die Datenintervention aktiviert ist und falls dabei eine Übereinstimmung mit dem von einem anderen Master gelesenen Speicherbusleseinhalt festgestellt wird und der Block modifiziert ist, macht die ICU das *DI-Ausgangssignal geltend und führt die erforderlichen Daten auf dem Speicherbus zu. Das blockstatusmodifizierte Bit wird entweder nicht geändert oder rückgesetzt.
- Im Fall einer Ubereinstimmung bei einem Lese-zum-Modifizieren- Zugriff wird das entsprechende Wort von den Slave-Cache-Speichern invalidiert. In jeder anderen Hinsicht ist die Cache- Speicher-Operation dem Fall einer Übereinstimmung bei einem regelmäßigen Lese-Zugriff ähnlich.
- Für Speicherbus-Burst-Betriebsart-Zugriffe werden die Anfangs- Adressen verriegelt. Die Adresse wird inkrementiert und in dem Slave-Cache-Speicher für jeden einzelnen Transfer überprüft. Die Slave-Cache-Speicher-Operation im Fall einer Übereinstimmung ist der Einfach-Adressen-Übereinstimmung ähnlich.
- Die Bus-Überwachung zum Lesen ist wesentlich für die Unterstützung der Datenkonsistenz-Eigentümerschafts-Schemata, die im folgenden detailliert beschrieben werden.
- Die Dateninterventions-Option wird von einigen der Eigentümerschafts-Schemata verlangt. Bei diesem Schemata muß der Speicher derart ausgelegt sein, daß er diese unterstützt. Das *DI- Signal wird von dem Master-Cache-Speicher während des ersten Zyklus des Zugriffs vorgeladen. Ein externer Pull-up-Widerstand muß an das *DI-Signal gelegt sein, um den vorgeladenen HIGH-Wert zu halten. Das *DI-Signal wird von den Slave-Cache- Speichern entladen, falls die Dateninterventions-Operation durchgeführt wird. In diesem Fall dürfen die Daten nicht von dem Speicher zugeführt sein, und der Lese-Zugriff muß in dem Speicher gelöscht werden. Es ist anzumerken, daß das * DI-Ausgangssignal für zwei Zyklen gültig ist, nachdem die Adresse auf dem Speicherbus erscheint. Der Speicher kann während dieser Zyklen nicht reagieren.
- Im Fall einer Übereinstimmung bei einem Speicherbus-Schreib- oder Schreib-Broadcast-Signal wird das *HIT-Signal geltend gemacht.
- Bei Burst-Betriebsart-Schreib-Zugriffen wird die Anfangs- Adresse verriegelt. Die Adresse wird für jeden einzelnen Datentransfer inkrementiert und in dem Slave-Cache-Speicher überprüft. Im Fall einer Übereinstimmung ist die Slave-Cache- Speicher-Operation der Einzel-Zugriffs-Übereinstimmung ähnlich.
- Die Bus-Überwachung zum Schreiben ist für das Unterstützen der meisten Datenkonsistenz-Schemata wesentlich.
- Im folgenden wird beschrieben, wie die mit gemeinsamem Blockstatus benutzten Bits zugeordnet werden.
- Das mit gemeinsamem Blockstatus benutzte Bit kann entweder durch Software- oder durch Hardware-Steuerung zugewiesen werden. Bei der Software-Steuerung kann der Prozessor das gemeinsam benutzte Bit durch Verwendung der ASTC-Eingangssignale zuweisen. Diese Eingangssignale definieren die Zuteilung des gemeinsam benutzten Bits auf einer Zugriff-um-Zugriff-Basis. Der Zugriff kann als exklusiver Durch-Schreib-Zugriff, exklusiver Rückkopier-Zugriff oder gemeinsamer Zugriff zugewiesen werden. Normalerweise werden die ASTC-Eingangssignale mit den MPGM-Signalen gekoppelt, die entsprechend den benutzerprogrammierbaren MMU-Bits gesteuert werden. Die gemeinsamen und exklusiven Variablen werden auf gemeinsam benutzte oder exklusive Seiten plaziert, und die benutzerprogrammierbaren Bits für die Seiten werden entsprechend zugewiesen. In Abhängigkeit von dem Zustand des PSBC-Bits des Modb-Registers (das bereits erwähnt wurde), kann das gemeinsame Bit für jeden Prozessorzugriff (PSBC=1) oder nur für den Fall eines Cache-Speicher- Fehlgängers (PSBC=0) modifiziert werden.
- Bei der Hardware-Steuerung kann das gemeinsam benutzte Bit durch Verwendung des *HIT-Signals oder durch Verwendung einer für einen speziellen Zweck vorgesehenen Logik für den Speicherbus und die Schreib-Blockstatus-Speicherbus-Cache-Instruktion zugewiesen werden. Die *HIT-Signal-Verwendung bei den Lese- und Schreib-Zugriffen wird von einem externen Gemeinsambenutzungs-Bit-Steuerungs (ESBC)-Feld des Modb-Registers gesteuert.
- In dem Fall, in dem ein Master-Cache-Speicher das *HIT-Signal benutzt, lädt er dieses während des ersten Zyklus des Speicherbus-Zugriffs vor. Dann wird das *HIT-Signal in den Dreifach-Zustand versetzt. An das *HIT-Signal muß ein externer Pull-up-Widerstand angelegt werden, um den vorgeladenen HIGH- Wert zu halten. Der Slave-Cache-Speicher entlädt das Signal, falls eine Übereinstimmung in dem Tag-Puffer gefunden wird. Das *HIT-Signal wird von dem Master-Cache-Speicher verriegelt, wenn *MRDY geltend gemacht wird, oder zwei Zyklen nach dem Speicherbus-Adressen-Zyklus, je nachdem, was später erfolgt. Falls das *HIT-Signal geltend gemacht wird, dann ist die Variable auch in anderen Cache-Speichern vorhanden, und dem Block wird ein gemeinsamer Status zugewiesen. Falls das *HIT- Signal nicht geltend gemacht wird, ist die Variable in keinem Cache-Speicher vorhanden, und dem Block wird ein exklusiver Status zugewiesen.
- Dieses Verfahren wird bei einigen der Eigentümerschafts-Schemata verwendet. Es garantiert, daß der gemeinsame Status den exakten Zustand der Variablen reflektiert. Er ist nur dann gemeinsam, falls er in einem weiteren Cache-Speicher vorhanden ist. Es ist anzumerken, daß mit der Verwendung des * HIT-Signals ein Leistungs-Preis verbunden ist. Die ICU muß zwei Zyklen warten, bis sämtliche weiteren Cache-Speicher reagieren. Ferner ist ein spezieller interner Cache-Speicher-Array- Zugriff erforderlich, falls das gemeinsame Bit modifiziert werden muß. Bevor man diese Option wählt, sollte man sich dieses Sachverhaltes gegenüber den Vorteilen bewußt sein.
- Die bereits beschriebene Schreib-Blockstatus-Speicherbus-Cache-Instruktion kann verwendet werden, um dem mit gemeinsamem Blockstatus benutzten Bit einen bestimmten Status zuzuschreiben. Diese Instruktion kann von einer externen Logik zur flexiblen Steuerung des gemeinsamen Bit verwendet werden.
- Im Fall eines bei der Zuweisung des gemeinsamen Blocks auftretenden Konfliktes zwischen den genannten drei Verfahren wird bei der bevorzugten Ausführungsform der Erfindung die Operation entsprechend der folgenden Priorität durchgeführt:
- 1. Blockstatus-Schreib-Instruktion.
- 2. *HIT-Eingangssignal-Steuerung.
- 3. ASTC-Eingangssignal-Steuerung.
- Falls beispielsweise der Block von den ASTC-Eingangssignalen als exklusiv zugewiesen wird, jedoch ein Speicherbus-Zugriff verlangt ist, wird die Benutzung des *HIT-Eingangssignals aktiviert, und es wird angegeben, daß der Block exklusiv ist.
- Die Blockstatus-Schreib-Instruktion wird ferner während des Speicher-Zugriffs verwendet, und es wird ihr ein gemeinsamer Status zugewiesen. Der Block endet in dem gemeinsamen Status.
- Die verschiedenen Verfahren der Zuweisungen gemeinsam benutzter Blöcke und ihre Kombinationen werden zur Implementierung sämtlicher von der neuartigen ICU unterstützten Mehrprozessor- Cache-Speicher-Systeme verwendet.
- Im folgenden wird die ICU-Operation für den Fall beschrieben, daß ein Schreib-Treffer bei einem gemeinsam benutzten Block auftritt.
- Wenn ein Schreib-Zugriff auf einen gemeinsamen Block gerichtet ist und diesen in dem Cache-Speicher trifft, muß eine spezielle Operation auf dem Speicherbus durchgeführt werden. Die anderen Cache-Speicher in dem System müssen auf die Tatsache angestimmt sein, daß eine geteilte Datenvariable modifiziert worden ist. Ihre Kopie muß entweder invalidiert oder derart aktualisiert sein, daß sie die aktuelle Version der gemeinsamen Variablen reflektiert. Der Hauptspeicher kann entweder beschrieben werden oder nicht. Der Blockstatus des Master- Cache-Speichers wird entsprechend beeinflußt. Die ICU-Operation für einen Schreib-Treffer bei einem gemeinsamen Block wird durch ein Schreib-Gemeinsambenutzungs-Treffer-Steuer(WSHC)-Feld in dem Modb-Register gesteuert. Ein Kodierschema lautet wie folgt: WSHC-Wert Master-Cache-Speicher-Operation Slave-Cache-Speicher-Operation Neuer Blockstatus Durch-Schreiben Schreiben Broadcast Invalidieren Aktualisieren exklusiv unmodifiziert exklusiv modifiziert gemeinsam benutzt unmodifiziert gemeinsam benutzt modifiziert
- Wenn WSHC = 00, schreibt die ICU jeden Schreib-Treffer auf einen gemeinsam benutzten Block durch. Der Speicher wird aktualisiert, und andere Cache-Speicher werden invalidiert. Dem Block wird der exklusive unmodifizierte Status zugewiesen. Da der Block exklusiv wird, können weitere Schreibinhalte für den gleichen Block nur in den Cache-Speicher geschrieben werden. Dieses Schema ist effektiv, falls eine gemeinsame Variable viele Male von einem bestimmten Prozessor geschrieben wird, bevor sie von anderen Prozessoren benötigt wird.
- Wenn WSHC = 1, verwendet die ICU eine Schreib-Broadcast-Transaktion auf dem Speicherbus. Der Speicher wird nicht aktualisiert, und die anderen Cache-Speicher werden invalidiert. Dem Block wird der exklusive modifizierte Status zugewiesen. Da der Block exklusiv wird, können weitere Schreibinhalte für den gleichen Block nur in den Cache-Speicher geschrieben werden. Da der Speicher nicht aktualisiert wird, wird das modifizierte Bit gesetzt. Diese Daten-Interventions-Option sollte aktiviert werden, um den aktuellsten Wert zu unterstützen, wenn ein anderer Master diesen Block zu lesen versucht.
- Wenn WSHC = 10, schreibt die ICU jeden Schreib-Treffer auf einen gemeinsamen Block durch. Der Speicher wird aktualisiert, und andere Cache-Speicher werden ebenfalls aktualisiert. Falls ESBC nicht für Schreib-Zugriffe aktiviert wird, wird dem Block der gemeinsame unmodifizierte Status zugewiesen. Falls ESBC für Schreib-Zugriffe aktiviert wird, wird dem Block entsprechend dem *HIT-Eingangssignal der exklusive unmodifizierte oder der gemeinsame unmodifizierte Status zugewiesen. In diesem Schema werden sämtliche Cache-Speicher synchronisiert gehalten, und zwar auf Kosten der Speicherbus-Schreib-Transaktion für jeden Schreibvorgang für einen gemeinsamen Block. Es ist effektiv, falls eine gemeinsame Variabale nicht viele Male von einem bestimmten Prozessor geschrieben wird, bevor sie von anderen Prozessoren verlangt wird.
- Wenn WSHC = 11, schreibt die ICU jeden Schreib-Treffer auf Broadcast-Weise in einen gemeinsamen Block. Der Speicher wird nicht aktualisiert, und andere Cache-Speicher werden aktualisiert. Falls ESBC nicht für Schreib-Zugriffe aktiviert wird, wird dem Block der gemeinsame modifizierte Status zugewiesen. Falls ESBC für Schreib-Zugriffe aktiviert wird, wird dem Block entsprechend dem *HIT-Eingangssignal der exklusive modifizierte oder der gemeinsame modifizierte Status zugewiesen. In diesem Schema werden sämtliche Cache-Speicher synchronisiert gehalten, und zwar auf Kosten der Speicherbus-Schreib-Transaktion für jeden Schreibvorgang für einen gemeinsamen Block. Es ist effektiv, falls eine gemeinsame Variabale nicht viele Male von einem bestimmten Prozessor geschrieben wird, bevor sie von anderen Prozessoren verlangt wird. Da der Speicher nicht aktualisiert wird, wird das modifizierte Bit gesetzt. Die Daten-Interventions-Option sollte aktiviert werden, um den aktuellsten Wert zu unterstützen, wenn ein anderer Master diesen Block zu lesen versucht.
- Die WSHC-Optionen werden für die verschiedenen Eigentümerschafts-Schemata verwendet. Sie können auch für andere Mehrprozessor-Cache-Speicher-Systeme verwendet werden.
- Die ICU-Speicherbus-Operation für einen Rückkopier-Schreib- Fehlgänger bei Schreib-Zuordnung wird von einem Schreib-Fehlgänger-Speicherzugriffs-Steuer(WMMC) -Bit in dem Modb-Register gesteuert. Es hat keine Auswirkung auf Durch-Schreib-Zugriffe oder Rückkopier-Zugriffe ohne Schreib-Zuordnung. Wenn WMMC = 1, verwendet die ICU einen Lese-Zugriff auf den Speicherbus, um den verlangten Unterblock herauszugreifen, gefolgt von einem Cache-Speicher-Schreib-Zugriff. Dieser Zugriff wird als separate Cache-Speicher-Schreib-Operation behandelt. Stets trifft sie und wird in den Cache-Speicher geschrieben. Falls der Block gemeinsam benutzt wird, wird eine Speicherbus-Operation entsprechend dem WSHC-Feld des Modb-Registers durchgeführt. Wenn WMMC = 0, wird die Lesen-zum-Modifizieren-Transaktion für den Speicherbus verwendet, um den verlangten Unterblock abzurufen. Slave-Cache-Speicher invalidieren ihre Kopie des Blocks im Fall einer Übereinstimmung. Der Schreibvorgang erfolgt in den Cache-Speicher ohne irgendeine Speicherbus- Operation.
- Die WMMC-Optionen werden für die verschiedenen Eigentümerschafts-Schemata verwendet. Sie können auch für andere Mehrprozessor-Cache-Speicher-Systeme verwendet werden.
- Die Speicherbus-Cache-Instruktionen werden von einer speziellen Logik auf dem Speicherbus ausgegeben. Sie erlauben eine flexible Steuerung des Cache-Speichers. Cache-gespeicherte Daten können invalidiert, gelesen und geschrieben werden. Der Blockstatus kann gelesen und geschrieben werden. Eine detaillierte Beschreibung der Speicherbus-Cache-Instruktionen ist bereits weiter oben aufgeführt.
- In der Mehrprozessor-Umgebung muß die spezielle Steuer-Logik in der Lage sein, die Instruktion an die korrekte ICU weiterzuleiten. Die Logik kann für jedes erforderliche Mehrprozessorsystem konzipiert sein. Insbesondere muß dieses Verfahren bei Systemen ohne einen gemeinsamen Bus verwendet werden (Kreuzbalken-Schaltungs- oder Mehrfachbus-Konfigurationen). Bei diesen Systemen ist die Bus-Überwachungs-Funktion nicht effektiv, und somit sollte eine spezielle Logik die Speicher- Zugriffe überwachen und dementsprechend Befehle an die unterschiedlichen ICUs ausgeben. Die Steuerlogik kann auch derart konzipiert sein, daß ein bestimmtes Mehrprozessor-Schema implementiert wird, das nicht direkt von der ICU unterstützt wird.
- Es existieren viele Möglichkeiten für Mehrprozessor-Cache- Speicher-Organisationen. Die ICU ist zur Unterstützung verschiedenartiger Gemeinsambenutzungs-Speicher-Mehrprozessor- Cache-Organisationen ausgelegt. Die ICU kann auch in einer Nicht-Gemeinsambenutzungs-Speicher-Organisation verwendet werden, enthält jedoch keine spezielle Hardware-Unterstützung für diese Systeme. In der folgenden detaillierten Beschreibung werden die hauptsächlichen Gemeinsambenutzungs-Speicher-Organisation erläutert, die von der ICU unterstützt werden. Es sind auch Abwandlungen, Kombinationen oder andere Systeme als die beschriebenen Systeme möglich.
- Die hauptsächlichen Gemeinsambenutzungs-Speicher-Organisationen, die unterstützt werden, sind die folgenden: Organisationen mit software-gesteuertem Cache-Speicher, mit Durch- Schreib-Cache-Speicher, mit Rückkopier-Cache-Speicher bei gemeinsam benutzten Durch-Schreib-Variablen, mit Eigentümerschafts-Schemata und gemeinsam benutztem Speicher bei nicht gemeinsam benutztem Bus.
- Für software-gesteuerte Cache-Speicher wird sämtliche Mehrprozessor-Kommunikation und -Synchronisation unter Software- Steuerung. Die Cache-Speicher-Konsistenz wird durch Software aufrechterhalten. Dies kann mittels einer Kombination nichtcache-speicherbarer Variablen, durch (im folgenden detailliert beschriebene) Verriegelungs-Operationen und die Verwendung von Cache-Speicher-Instruktionen (z.B. Invalidieren) erfolgen. Gemeinsame Variablen können entweder als nicht-cache-speicherbar zugeteilt oder aus den entsprechenden Cache-Speichern heraus invalidiert werden, wenn sie von einem anderen Prozessor modifiziert werden können. Verriegelungs-Operationen werden zur Synchronisation verwendet. Gemeinsame Puffer oder Mailboxes werden zur Kommunikation verwendet.
- Dies ist ein sehr flexibles Schema ohne spezielle Hardware- Erfordernisse oder Restriktionen. Es kann erfolgreich in Systemen mit geringem Aufkommen an Gemeinsambenutzung verwendet werden. Falls jedoch der Anteil an Gemeinsambenutzung hoch ist, kann bei diesem Schema möglicherweise die Systemleistung massiv beeinträchtigt werden. Viele Variablen können nicht cache-gespeichert werden, oder die Aufrechterhaltung der Cache-Speicher-Konsistenz macht einen großen Aufwand erforderlich. Ein weiterer Nachteil bei diesem Schema besteht darin, daß der Cache-Speicher für die Software nicht transparent ist, und daß die Information, zu der die Variablen gemeinsam benutzt werden müssen, bekannt sein muß. Die Software-Steuerung kann in Kombination mit irgendeinem der anderen Mehrprozessor- Schemata verwendet werden.
- Für diese Konfiguration existieren keine besonderen Anforderungen an programmierbare Optionen. Das Modb-Register kann auf programmiert werden.
- Für Durch-Schreib-Cache-Speicher benutzen die Prozessoren den gleichen Bus und Speicher gemeinsam, und sämtliche Cache-Speicher benutzen die Durch-Schreib-Funktion. Ein Master-Cache- Speicher übermittelt sämtliche Prozessor-Schrieb-Information an den Speicherbus. Die Cache-Speicher-Konsistenz wird aufrechterhalten, indem für Schreibvorgänge die Bus-Überwachung durchgeführt wird. Jede Schreib-Operation auf dem gemeinsamen Speicherbus wird in sämtlichen Slave-Cache-Speichern überprüft. Falls eine Übereinstimmung festgestellt wird, wird die entsprechende Adresse invalidiert. Dabei handelt es sich um ein einfaches Datenkonsistenz-Schema. Sein Hauptnachteil liegt darin, daß jeder Schreibvorgang eine Speicherbusoperation verursacht. Die Leistung kann dadurch beträchtlich verringert werden. Die Speicherbusbenutzung kann sehr viel höher ausfallen, so daß nur eine geringe Anzahl von Prozessoren in dem System untergebracht werden kann. Der Schreibpuffer kann dazu beitragen, diese nachteiligen Effekte zu reduzieren.
- Für diese Option sollten sämtliche Blöcke aus exklusive Durch- Schreib-Blöcke ausgewiesen werden, die Schreib-Funktion sollte als Durch-Schreib-Funktion programmiert werden, die Bus-Überwachung sollte für Schreib-Zugriffe aktiviert werden, und das Modb-Register sollte das Invalidieren von Wörtern spezifizieren.
- Für Rückkopier-Cache-Speicher mit gemeinsam benutzten Durch- Schreib-Variablen teilen sich die Prozessoren den gleichen Bus und Speicher, und die Cache-Speicher verwenden eine flexible Schreib-Funktion. Die exklusiven Variablen benutzen eine Rückkopier-Option (die auf einer für exklusives Rückkopieren ausgewiesenen Seite plaziert ist). Es obliegt der Verantwortlichkeit des Systems, zu gewährleisten, daß nur die Variablen, die ausschließlich von einem einzigen Prozessor verwendet werden, für exklusives Rückkopieren ausgewiesen sind. Es ist anzumerken, daß, falls eine Prozeßmigration erlaubt ist, in dem Cache-Speicher des alten Prozessors ein exklusive Variable invalidiert werden muß.
- Die gemeinsamen Variablen verwenden eine Durch-Schreib-Option (die auf einer für exklusives Durch-Schreiben ausgewiesenen Seite plaziert ist). Es obliegt der Verantwortlichkeit des Systems, diesen Status jeder Variablen zuzuweisen, die gemeinsam benutzt werden könnte (einschließlich Gemeinsambenutzung mit I/O, oder Prozessoren ohne Cache-Speicher). Einige Variablen, wie I/O, müssen noch als nicht cache-speicherbar zugewiesen werden. Eine Bus-Überwachung für Schreib-Schemata (ähnlich der für die Durch-Schrieb-Cache-Speicher beschriebenen) wird zum Aufrechterhalten der Daten-Konsistenz verwendet. Im Fall einer Übereinstimmung invalidieren Slave-Cache-Speicher ihre Kopie. Eine mögliche Variation mit besserer Leistung besteht darin, daß die Slave-Cache-Speicher ihre Kopie aktualisieren, statt sie zu invalidieren.
- Dieses Schema basiert auf der Annahme, daß sämtliche gemeinsam benutzten Variablen bekannt sind und auf Durch-Schreib- oder gemeinsam benutzten Seiten plaziert sind. Falls dies der Fall ist, kann verglichen dem Durch-Schreib-Schema eine bessere Leistung erreicht werden. Falls jedoch der Anteil an Gemeinsambenutzung hoch ist, werden die Nachteile der Durch-Schreib- Operationen der gemeinsamen Daten massiver, und die Leistung verschlechtert sich.
- Außer den Zuweisungen für die gemeinsamen und exklusiven Variablen sollte die Bus-Überwachung für Schreib-Zugriffe aktiviert werden, und das Modb-Register sollte die Invalidierung von Wörtern spezifizieren. Falls die Slave-Speicher-Aktualisierungs-Variation gewünscht ist, sollte das Modb-Register entsprechend programmiert werden.
- Im folgenden werden die Eigentümerschafts-Schemata erläutert. Diese Schemata basieren auf Organisationen mit gemeinsam benutztem Speicher und gemeinsam benutztem Bus bei Bus-Überwachung zum Aufrechterhalten von Daten-Konsistenz. Das Grundprinzip der Eigentümerschafts-Schemata besteht darin, daß eine Variable sich im Eigentum nur eines einzigen Cache-Speichers befindet. Der Eigentümer-Cache-Speicher enthält die aktuellste Version der Variablen und ist verantwortlich für die Aufrechterhaltung ihrer Konsistenz. Falls eine Variable nicht Eigentum irgendeines Cache-Speichers ist, enthält der Speicher einen aktualisierten Wert. Bei sämtlichen Eigentümerschafts- Schemata kann sich eine Variable in einem von mehreren (maximal 5) Zuständen in einem Cache-Speicher befinden. Die fünf möglichen Zustände (Blockstatus), die von der bevorzugten Ausführungsform der ICU unterstützt werden, sind die folgenden:
- 1. Exklusiv Durch-Schreiben
- 2. Exklusiv Rückkopieren
- 3. Gemeinsam benutzt unmodifiziert
- 4. Gemeinsam benutzt modifiziert
- 5. Nicht gültig
- Jedes Eigentümerschafts-Schema wird von einer hardware-implementierten Zustandsmachine gesteuert, die die Zustandsübergänge steuert. Die verschiedenen Eigentümerschafts-Schemata erfordern unterschiedliche Operation für die Fälle: Übereinstimmungs-Lesen, Übereinstimmungs-Schreiben, Treffer-Schreiben und Fehlgänger-Schreiben. Somit sind verschiedene Ausmaße von Hardware-Unterstützung in den Cache-Speichern und generell in dem System erforderlich.
- Keines der Eigentümerschafts-Schemata verlangt Software- Steuerung des Cache-Speichers. Sie erlauben höhere Leistung unter Inkaufnahme komplizierterer Hardware-Anforderungen. Es existieren sechs Eigentümerschafts-Schemata, die dem Fachmann gut bekannt sind:
- 1. Write Once
- 2. Berkeley
- 3. Illinois
- 4. Firefly
- 5. Dragon
- 6. Futurebus
- Ein weiteres Schema, das als Synapse-Schema bekannt ist, ist dem Write Once-Schema sehr ähnlich, basiert jedoch auf einem einzelnen Bit-Tag, das für jeden Cache-Speicher-Block in dem Haupt-Speicher vorhanden ist. Dieses Schema wird nicht direkt von der ICU unterstützt, jedoch kann es durch Verwendung der Write Once-Optionen und einiger externer Logik implementiert werden.
- Obwohl die Einzelheiten der verschiedenen Eigentümerschafts- Schemata weithin bekannt und in Veröffentlichungen beschrieben sind, werden anschließend aus Gründen der Vollständigkeit und zur Erleichterung der Erklärung der Weise, in der diese Schemata von der ICU unterstützt werden, die Hauptmerkmale jedes Schemas erläutert.
- Sämtliche Eigentümerschafts-Schemata und möglicherweise andere Schemata, die auftreten können, werden von der ICU direkt unterstützt. Dies erfolgt durch Wählen der erforderlichen programmierbaren Optionen. Bei sämtlichen Eigentümerschafts- Schemata ist die Schreib-Funktion als flexibel programmiert. Die meisten der Schreib-Zugriffe können eine Rückkopier-Funktion verwenden. Die Bus-Überwachung wird sowohl für das Lesen als auch für das Schreiben aktiviert. Das Modb-Register mit den bereits definierten verschiedenartigen Steuer-Feldern kann zur Implementierung der verschiedenen Eigentümerschafts-Schemata verwendet werden.
- Bei dem Write Once-Schema werden lediglich die folgenden Zustände definiert: exklusiv unmodifiziert, exklusiv modifiziert, gemeinsam benutzt und unmodifiziert, und ungültig. Der Zustand gemeinsam benutzt und modifiziert" wird nicht verwendet. Das Grundprinzip dieses Schemas liegt darin, daß jeder Schreibvorgang, der bei ersten Mal in dem Cache-Speicher einen Treffer erzielt (Schreiben auf gemeinsame Seite) eine Durch- Schreib-Operation veranlaßt. Dann wird der Block als exklusiv modifiziert zugewiesen, und weitere Schreibvorgänge können nur in den Cache-Speicher erfolgen. Die Slave-Cache-Speicher invalidieren ihre eigene Kopie des Blocks. Ein Rückkopier-Schreibvorgang in einen exklusiven Block setzt das modifizierte Bit. Ein exklusiv modifizierter Block befindet sich im Eigentum des Cache-Speichers, und eine Daten-Intervention wird in dem Fall verwendet, daß ein weiterer Cache-Speicher versucht, ihn zu lesen. (Ferner wird der Speicher aktualisiert, und der Block wird dann als gemeinsam unmodifiziert ausgewiesen). Bei diesem Schema sollten sämtliche Prozessor-Zugriffe als gemeinsam benutzt ausgewiesen werden. Es ist anzumerken, daß ein exklusiver Blockstatus Vorrang vor der Gemeinsambenutzungs-Anzeige durch die ASTC-Eingangssignale hat.
- Bei dem Berkeley-Schema werden nur die folgenden Zustände definiert: exklusiv modifiziert, gemeinsam benutzt und unmodifiziert, gemeinsam benutzt und modifiziert, und ungültig. Der Zustand "exklusiv unmodifiziert" wird nicht benutzt. Ein Cache-Speicher, der den exklusiv modifizierten oder den gemeinsam benutzten und modifizierten Block enthält, ist dessen Eigentümer. Im Fall eines Fehlgängers beim Lesen wird der Block als gemeinsam benutzt und unmodifiziert ausgewiesen. Im Fall eines Schreib-Treffers bei einem Gemeinsambenutzungs- Block wird eine Broadcast-Schreib-Operation durchgeführt, und der Block wird als exklusiv modifiziert ausgewiesen. Andere Cache-Speicher invalidieren ihre Kopie des Blocks. Im Fall einer Lese-Übereinstimmung wird von dem Eigentümer eine Datenintervention durchgeführt. Für dieses Schema sollten sämtliche Prozessor-Zugriffe als gemeinsam ausgewiesen werden.
- Bei dem Illinois-Schema werden lediglich die folgenden Zustände definiert: exklusiv unmodifiziert, exklusiv modifiziert, gemeinsam benutzt und unmodifiziert, und ungültig. Der Zustand "gemeinsam benutzt und modifiziert" wird nicht verwendet. Ein Cache-Speicher, der den exklusiven modifizierten Block enthält, ist dessen Eigentümer. Im Fall eines Fehlgängers beim Lesen wird der Block in Abhängigkeit von dem * HIT-Eingangssignal als gemeinsam benutzt und unmodifiziert oder als exklusiv und unmodifiziert ausgewiesen. Im Fall eines Schreib- Treffers bei einem Gemeinsambenutzungs-Block wird eine Broadcast-Schreib-Operation durchgeführt, und der Block wird als exklusiv modifiziert ausgewiesen. Andere Cache-Speicher invalidieren ihre Kopie des Blocks. Im Fall einer Lese-Übereinstimmung wird von dem Eigentümer eine Datenintervention durchgeführt. Es ist anzumerken, daß die Dateninterventions-Operation sich von der ursprünglichen Definition bei dem Illinois- Schema unterscheidet, wobei jedoch die Endergebnisse gleich sind. Bei der ursprünglichen Definition versuchen sämtliche Cache-Speicher, die eine Kopie der verlangten Daten enthalten, zu intervenieren. Im vorliegenden Fall wird eine Daten-Intervention nur durchgeführt, falls der Block modifiziert ist. Falls der Block gemeinsam benutzt und unmodifiziert ist, werden die Daten aus dem Speicher zugeführt. Für dieses Schema ist die Prozessorzugriffs-Gemeinsambenutzungs-Bit-Zuordnung irrelevant, da das *HIT-Signal für diesen Zweck verwendet wird.
- Bei dem Firefly-Schema werden lediglich die folgenden Zustände definiert: exklusiv unmodifiziert, exklusiv modifiziert, gemeinsam benutzt und unmodifiziert, und ungültig. Der Zustand "gemeinsam benutzt und modifiziert" wird nicht verwendet. Ein Cache-Speicher, der den exklusiven modifizierten Block enthält, ist dessen Eigentümer. Im Fall eines Fehlgängers beim Lesen wird der Block in Abhängigkeit von dem * HIT-Eingangssignal als gemeinsam benutzt und unmödifiziert oder als exklusiv und unmodifiziert ausgewiesen. Im Fall eines Schreib- Treffers bei einem Gemeinsambenutzungs-Block wird eine Durch- Schreib-Operation durchgeführt, und der Block wird entsprechend dem *HIT-Eingangssignal als gemeinsam benutzt und unmodifiziert oder exklusiv modifiziert ausgewiesen. Im Fall einer Lese-Übereinstimmung führt der Eigentümer eine Daten-Intervention durch. Es ist anzumerken, daß die Dateninterventions- Operation sich von der ursprünglichen Definition bei dem Firefly-Schema unterscheidet, wobei jedoch die Endergebnisse gleich sind. Bei der ursprünglichen Definition versuchen sämtliche Cache-Speicher, die eine Kopie der verlangten Daten enthalten, zu intervenieren. Im vorliegenden Fall wird eine Daten-Intervention nur durchgeführt, falls der Block modifiziert ist. Falls der Block gemeinsam benutzt und unmodifiziert ist, werden die Daten aus dem Speicher zugeführt. Für dieses Schema ist die Prozessorzugriffs-Gemeinsambenutzungs-Bit-Zuordnung irrelevant, da das *HIT-Signal für diesen Zweck verwendet wird.
- Bei dem Dragon-Schema werden sämtliche der fünf Block-Status- Möglichkeiten verwendet. Im Fall eines Fehlgängers beim Lesen wird der Block in Abhängigkeit von dem *HIT-Eingangssignal als gemeinsam benutzt und unmodifiziert oder als exklusiv und unmodifiziert ausgewiesen. Im Fall eines Schreib-Treffers bei einem Gemeinsambenutzungs-Block wird eine Broadcast-Schreib- Operation durchgeführt (der Speicher wird nicht aktualisiert), und der Block wird entsprechend dem *HIT-Eingangssignal als gemeinsam benutzt und unmodifiziert oder exklusiv unmodifiziert ausgewiesen. Andere Cache-Speicher aktualisieren ihre Kopie des Blocks. Im Fall einer Lese-Ubereinstimmung führt der Eigentümer eine Daten-Intervention durch. Für dieses Schema ist die Prozessorzugriffs-Gemeinsambenutzungs-Bit-Zuordnung irrelevant, da das *HIT-Signal für diesen Zweck verwendet wird.
- Bei dem Futurebus-Schema werden sämtliche der fünf Block-Status-Möglichkeiten verwendet. Dieses Schema ist ein flexibles Schema, das (bei einigen leichten Modifikationen) die Implementierung sämtlicher anderer Eigentümerschafts-Schemata erlaubt. Die Cache-Speicher-Operation im Fall von Lese- und Schreib-Übereinstimmungen sowie von Schreib-Treffern und Lese- und Schreib-Fehlgängern sind mit genügender Flexibilität für die Implementierung der verschiedenen Eigentümerschafts-Schemata definiert. Ferner ist die Verwendung des *HIT-Signals optional. Das Futurebus-Schema ist durch die Flexibilität der ICU voll unterstützt. Die ICU weist mehr Flexibilität auf, als das Futurebus-Schema verlangt, so daß einige der Einschränkungen, etwa die Speicheraktualisierung bei der Daten-Intervention und der Broadcast-Schreib-Unterstützung, entfallen. Für dieses Schema kann die Prozessorzugriffs-Gemeinsambenutzungs- Bit-Zuordnung entweder durch Software-Zuordnung oder mittels des *HIT-Signals durchgeführt werden.
- Abschließend soll der gemeinsam benutzte Speicher ohne Gemeinsambenutzungs-Bus-Organisationen erläutert werden. Zunächst ist anzumerken, daß die Bus-Überwachungs-Funktion nur bei einer Mehrprozessor-Organisation mit gemeinsam benutztem Bus zweckmäßig ist. Andere Gemeinsambenutzungs-Speicher-Organisationen, die mehrere Busse oder einen Kreuzbalken-Schalter enthalten, werden auch durch die ICU unterstützt. Diese Organisationen sind erforderlich, wenn der gemeinsam benutzte Bus einen Engpaß in dem System bildet. In diesem Fall ermöglichen sie eine größere Anzahl von Prozessoren und bessere Leistung.
- Die Grund-Unterstützung für diese Organisationen wird durch die Speicher-Bus-Cache-Instruktionen gebildet. Eine detaillierte Beschreibung der Speicher-Bus-Cache-Instruktionen ist bereits erfolgt. Es ist eine externe Steuer-Logik erforderlich, um die Speicher-Zugriffe zu überwachen und die Cache- Speicher-Instruktionen an die korrekte ICU zu leiten. Diese Logik kann entsprechend der speziellen System-Organisation konzipiert sein. Sie sollte in der Lage sein, sämtliche Hauptspeicherzugriffe zu überwachen. (Diese Funktion kann in der Speichersteuereinrichtung untergebracht werden.) Dann kann entsprechend der globalen Information eine Speicherbus-Cache- Instruktion zu dem korrekten Cache-Speicher geleitet werden. Die Details einer solchen Implementierung sind systemabhängig und nicht Teil der Erfindung, und es sind viele Variationen möglich. Zur Veranschaulichung der ICU-Unterstützung für diese Organisationen werden nun einige grundlegende Funktionen beschrieben.
- Wenn ein Cache-Speicher einen Block aus dem Speicher zu lesen versucht, kann die Steuer-Logik die Blockstatus-Schreib-Instruktion verwenden, um den Block als gemeinsam oder exklusiv zu bezeichnen. Falls die aktualisierte Version der erforderlichen Variablen nicht in dem Speicher, sondern in einem der Cache-Speicher vorhanden ist, können zum Empfang der aktualisierten Version "Wort übermitteln", "Wort übermitteln, falls modifiziert" oder "Block übermitteln, falls modifiziert" verwendet werden.
- Wenn eine gemeinsame Variable, die in einigen der Cache-Speicher vorhanden ist, von einem der Prozessoren geschrieben wird, kann die ICU derart programmiert werden, daß sie die Schreib- Information entweder durch-schreibt oder broadcastschreibt. Eine Wort-invalidieren-, Block-invalidieren- oder In-Cache-Speicher-Schreiben-Instruktion kann verwendet werden, um die Kopie der anderen Cache-Speicher zu invalidieren oder zu aktualisieren.
- Der Blockstatus jedes Cache-Speicher-Blocks kann jedes Mal gelesen oder geschrieben werden, wenn es erforderlich ist, und zwar mittels der Blockstatus-Lese- und Blockstatus-Schreib- Instruktion. Dies kann von der Steuer-Logik durchgeführt werden, um Information über Cache-Speicher-Inhalte zu erhalten oder den Block-Status zu bestimmen.
- Einige der programmierbaren Optionen können auch für diese Organisationen verwendet werden, um die ICU-Operation im Fall eines gemeinsamen Treffers, eines Lese- oder Schreib-Fehlgängers zu spezifizieren. Die Bus-Überwachung kann verwendet werden, falls die spezielle Logik zur Durchführung von Lese- und Schreib-Operationen auf dem ICU-Speicherbus, statt von Speicherbus-Cache-Instruktionen, vorgesehen ist.
- Bei einer Mehr-Bus-Organisation kann eine Kombination aus der Bus-Überwachungs- und der Speicherbus-Cache-Speicher-Instruktion verwendet werden. Die Bus-Überwachung kann die Daten- Konsistenz der Cache-Speicher, die den gleichen Bus gemeinsam benutzen, abdecken. Eine spezielle Logik ist erforderlich, um die relevanten Zugriffe zu transferieren oder eine Speicherbus-Instruktion an die entsprechenden Cache-Speicher auszugeben, um eine Inter-Bus-Datenkonsistenz zu erzielen, d.h. eine Operation auf einem Bus, die die Daten in einem Cache- Speicher, der auf einem anderen Bus plaziert ist, beeinflußt. Das Design dieser speziellen Logik ist Teil der Fertigkeiten des Fachmanns und liegt außerhalb des Umfangs der Erfindung.
- Zur Vervollständigung der Beschreibung der neuartigen ICU wird die Verriegelungsfunktion detailliert beschrieben. In einem mehr generellen Sinn als im Kontext der ICU ist dem Fachmann bekannt, daß Verriegelungsvariablen für Semaphoren und andere Synchronisationsvariablen in einer Mehrprozessor- oder Mehrzweck-Umgebung verwendet werden. Synchronisationsvariablen können auch als Schutz-Schlüssel für einen gemeinsamen Speicherbereich verwendet werden. Die Zugriffe auf die Verriegelungsvariablen sollten synchronisiert sein. Zu jedem gegebenen Zeitpunkt darf nur ein einziger Prozessor auf Verriegelungsvariablen zugreifen. Jedes Lesen von Verriegelungsvariablen sollte zum Rückübermitteln des aktuellsten Wertes der Variablen führen.
- Zur Unterstützung der Verriegelungsvariablen-Zugriffe sollte der Prozessor irgendeinen Typ einer atomischen Lese-Modifizier-Schreib-Operation enthalten. Dies erlaubt das in atomischer Weise erfolgende Überprüfen und Beeinflussen einer Variablen mittels eines Prozessors, während kein anderer Prozessor sich einmischen kann. In einem System, das Cache-Speicher enthält, verursachen die Verriegelungsvariablen ein spezielles Problem, da ihr Zugriff unabhängig von dem Cache-Speicher synchronisiert sein sollte.
- Eine einfache Lösung dieses Problems besteht darin, sämtliche Verriegelungsvariablen als nicht cache-speicherbar auszuweisen. In diesem Fall ist ein Cache-Speichern der Verriegelungsvariablen nicht erlaubt, und sämtliche Verriegelungsvariablen- Zugriffe werden an den Speicher übermittelt. Dieses Verfahren wird bei den meisten der bekannten Cache-Speicher-Systeme verwendet. Der Hauptnachteil liegt in der niedrigeren Leistung und der verstärkten Bus-Beanspruchung, die durch den Verriegelungsvariablen-Zugriff auf den Speicher verursacht wird. Wenn die Anzahl der Verriegelungsvariablen-Zugriffe ansteigt, kann die Beeinträchtigung der Leistung beträchtlich sein.
- Die neuartige ICU und die im folgenden beschriebene Verriegelungsfunktion, die für sich genommen neuartig ist, erlauben die Cache-Speicherung von Verriegelungsvariablen. Dadurch können eine bessere Leistung und eine geringere Bus-Beanspruchung erzielt werden. Die meisten der Verriegelungsvariablen- Zugriffe sind schneller und erscheinen nicht auf dem Speicherbus, da der Zugriff nur in dem Cache-Speicher erfolgt. Das Schema ist einfach und kann auf der Einzelchip-ICU implementiert werden.
- Es existieren verschiedene Ansätze zur Gewährleistung der im Zusammenhang mit Verriegelungsvariablen erfolgenden Synchronisation. Der Prozessor, der bei der als Beispiel angeführten Ausführungsform der Erfindung verwendet wird, enthält die für eine effiziente Verriegelung erforderlichen Grundoperationen. Diese sind in der hierin einbezogenen mitanhängigen Anmeldung, die sich mit dem Prozessor befaßt, erläutert, und es handelt sich dabei insbesondere um die LOADSET-, LOADL- und STOREL- Instruktionen, das LK-Bit in dem Register für den aktuellen Prozessorstatus und das *LOCK-Ausgangssignal Die ICU implementiert zwei Schemata zur Handhabung von Verriegelungsvariablen. Das gewünschte Schema kann gewählt werden, indem das Cache-Speicher-Verriegelungs-Aktivierungs (CILE)-Bit des Modb- Registers programmiert wird.
- Wenn sich das CILE-Bit im LOW-Zustand befindet, werden die Cache-Speicher-Verriegelungs-Variablen deaktiviert. Verriegelungsvariablen (*LOCK-Bit geltend gemacht) werden als nicht cache-speicherbare Zugriffe behandelt. Der Cache-Speicher wird nicht nach einem Treffer abgesucht, und der Zugriff wird mit der Verriegelungs-Angabe (*MLOCK geltend gemacht) an den Speicherbus übermittelt. Bei dieser Option untersteht die Handhabung der Verriegelungsvariablen der Kontrolle durch den Speicher. Der Speicher muß jeden Zugriff auf die Verriegelungsvariable deaktivieren, während das *MLOCK-Signal geltend gemacht wird. Eine LOADSET-Instruktion kann verwendet werden, um die Verriegelungsvariable in dem Speicher zu testen und zu setzen.
- Wenn sich das CILE-BIT im HIGH-Zustand befindet, wird die Funktion zum Cache-Speichern von Verriegelungsvariablen aktiviert. Dies ist eine spezielle Funktion, die in die ICU eingebaut ist, um eine effizientere Handhabung von Verriegelungsvariablen zu ermöglichen. Sie ist mit dem Prozessor kompatibel und macht sich die verschiedenen Verriegelungs-Grundfunktionen des Prozessors zunutze.
- Die verriegelten Lese- und Schreib-Operationen (*LOCK wird geltend gemacht) werden in einer speziellen Weise behandelt. Ein verriegelter Lesevorgang (der von dem Prozessor für die LOADL- und LOADSET-Instruktionen erzeugt wird) wird als Fehlgänger behandelt, falls er nicht in einem gemeinsamen Block einen Treffer erzielt. Auf dem Speicheradressenbus wird eine Neulade-Operation gestartet, wobei *MLOCK geltend gemacht wird. Diese Lese-Daten werden in dem Cache-Speicher gespeichert, und der Block wird als gemeinsam ausgewiesen. Bei einem gemeinsamen Block-Treffer werden die Daten dem Cache-Speicher ohne Speicheradressenbus-Zugriff zugeführt.
- Eine verriegelte Schreib-Operation wird für die Prozessor- STOREL-Instruktion anders behandelt als das Schreiben der LOADSET-Instruktionen. Entsprechend dem Zustand des *LOCK- Eingangssignals in dem dem Schreib-Zyklus vorausgehenden Zyklus kann die ICU zwischen zwei Typen von Verriegelungs- Schreibvorgängen unterscheiden. Falls das *LOCK-Bit gesetzt wurde, bedeutet dies, daß der Verriegelungs-Schreibvorgang das Schreiben einer LOADSET-Instruktion ist. Falls es nicht gesetzt wurde, handelt es sich um das Schreiben einer STOREL- Instruktion.
- Im Fall eines verriegelten STOREL-Schreibvorgangs initiiert die ICU eine Durch-Schreib-Operation in den Speicher. Im Fall eines Verriegelungs-Treffers wird der Block invalidiert.
- Im Fall eines verriegelten LOADSET-Schreibvorgangs werden die Daten in den Cache-Speicher geschrieben. Nur falls der Lese- Zugriff der LOADSET-Instruktion einen Fehlgänger erzeugte, werden die Daten auch in den Speicher geschrieben. Dies gewährleistet, daß der Speicher nur beim ersten Mal beschrieben wird, bei dem die verriegelte Variable gelesen wird.
- In beiden Fällen wird das *MLOCK-Ausgangssignal während der Speicher-Schreib-Operation geltend gemacht. Sämtliche anderen Cache-Speicher invalidieren ihre eigene Kopie, wenn ein anderer Master einen Schreibvorgang einen Schreibvorgang bei Geltendmachung von *MLOCK durchführt.
- Es ist eine spezielle Art vorgesehen, in der der Prozessor auf Verriegelungsvariablen zugreifen sollte, falls die Verriegelungs-Funktion aktiviert ist. (Variationen könnten möglich sein.) Die LOADSET-Instruktion wird verwendet, um eine Verriegelungsvariable zu testen und zu setzen. Falls der Wert der Variablen 0 ist, ist sie nicht aktiv und kann von dem Prozessor (oder dem Prozeß) verwendet werden. Es ist anzumerken, daß als Ergebnis der LOADSET-Instruktion ein Unterblock in den Cache-Speicher geladen wird. Dieser Unterblock enthält die Verriegelungsvariable (Wort) und möglicherweise einige andere Wörter, falls die Unterblock-Bemessung größer als eins ist. Der Benutzer kann diese Tatsache ausnutzen und relevante Information in den gleichen Unterblock der verriegelten Variablen plazieren.
- Falls der Wert der Variablen 1 ist, ist sie aktiv, und sie (oder der Bereich, den sie schützt) kann nicht verwendet werden. Das Programm kann entweder ein Besetzt-Warte-Schema verwenden und das Testen fortsetzen, bis die Variable frei ist, oder andere Operationen (oder Aufgaben) durchführen und die Variable später prüfen. Das Testen der Variablen wird unter Verwendung der LOADSET-Instruktion ausgeführt.
- Die Master-ICU benutzt den Speicheradressenbus nur für die erste LOADSET-Instruktion. Die Variable wird aus dem Speicher gelesen und in dem Cache-Speicher mit dem Gemeinsambenutzungs- Blockstatus plaziert. Der erste Schreibinhalt von LOADSET wird auch in den Speicher geschrieben. Die nächsten LOADSET-Instruktionen erzielen (in den meisten Fällen) Treffer in dem Cache-Speicher und benutzen den Speicheradressenbus nicht. Im Fall einer Übereinstimmung bei einem Schreibvorgang bei Geltung von *MLOCK invalidieren andere Cache-Speicher ihre eigene Kopie.
- Die STOREL-Instruktion wird für die Freigabe einer verriegelten Variablen verwendet. Auf die STOREL-Instruktion hin wird von dem Master-Cache-Speicher ein Schreib-Zugriff mit geltend gemachtem *MLOCK auf dem Speicheradressenbus initiiert, und die Variable wird in sämtlichen anderen Cache-Speichern invalidiert. Falls sich die Variable noch in dem Master-Cache- Speicher befindet, wird sie auch invalidiert. Dies erfolgt, um zu gewährleisten, daß der nächste Zugriff des Prozessors auf diese Variable ein Fehlgänger wird. Die Variable wird aus dem Speicher ausgelesen, um den aktuellsten Wert zu erhalten. Es ist anzumerken, daß während der Master-Cache-Speicher eine Verriegelungsvariable benutzt, in dem Fall, daß ein anderer Prozessor die gleiche Variable beim ersten Mal (unter Verwendung von LOADSET) zu testen versucht, das Schreiben von LOADSET auf dem Speicherbus durchgeführt wird und die Variablen in sämtlichen anderen Cache-Speichern (einschließlich des Master- Cache-Speichers) invalidiert werden.
- Sämtliche anderen Prozessoren, die auf die Variable gewartet haben, müssen auf den Speicher zugreifen, wenn sie diese als nächstes testen. Nur der eine Cache-Speicher, der in der Bus- Einstufung gewinnt, erhält die freie verriegelte Variable.
- Der Hauptvorteil der Verwendung der Verriegelungs-Funktion liegt in der besseren Leistung und der geringeren Bus-Beanspruchung. Bei einem Mehrprozessor-System mit vielen Verriegelungsvariablen-Zugriffen kann durch Verwendung der Verriegelungs-Funktion eine beträchliche Leistungsverbesserung erreicht werden. Ein weiterer Vorteil besteht darin, daß die Speichersteuereinrichtung Verriegelungs-Zugriffe als reguläre Zugriffe behandeln kann.
- Ferner ist zu beachten, daß die Verriegelungs-Funktion auch in anderen Geräten als dem RISC/SIP-Prozessor, der in der hier herangezogenen relevanten mitanhängigen Anmeldung beschrieben ist, implementiert werden kann.
- Die vorliegende Beschreibung umfaßt die neuartige ICU an sich, zusammen mit der neuartigen Organisation der ICU für ein flexibles Design für ein Cache-Speicher-System, eine neuartige Cache-Speicher-Verriegelungs-Funktion, ein neuartiges und flexibles Mehrprozessor-Unterstützungsschema und ein Vorladeschema für integrierte Cache-Speicher. Die Einzelheiten dazu sind anhand der Funktion, der internen Register, der Eingänge und Ausgänge, der Abtast-Instruktions-Sätze, der Datenformate, der Programmierbarkeit, der Typen von unterstützten Systemen und anderen Aspekten der neuartigen ICU erläutert worden.
Claims (31)
1. Architektur für eine integrierte Einchip-Cache-Speicher-
Einheit ("ICU") zur Implementierung von Cache-Funktionen
in einem Rechensystem, wobei die Einheit aufweist:
eine mit der Prozessorbuseinrichtung gekoppelte
Prozessorbuseinheit (301-303) zum Steuern eines
ICU/Prozessorbus-Interface;
eine mit der Speicherbuseinrichtung (175) gekoppelte
Speicherbuseinheit (305-307) zum Steuern eines
ICU/Speicherbus-Interface; und
eine mit der Prozessorbuseinheit (301-303) und mit der
Speicherbuseinheit (305-307) gekoppelte Cache-Speicher-
Einheit (310-316) zum Durchführen von Cache-Funktionen,
dadurch gekennzeichnet, daß die Cache-Speicher-Einheit
programmiert ist durch Einstellen von Bits in mindestens
einem speziellen Register (315), welches mit einem Cache-
Adressenbus und einem Cache-Datenbus gekoppelt ist, wobei
bestimmte Cache-Eigenschaften aus mehreren Optionen
gewählt werden.
2. ICU-Architektur nach Anspruch 1, bei der die
Prozessorbuseinheit (301-303) ferner aufweist:
a) eine mit der Prozessorbuseinrichtung (120,121) und der
Cache-Speicher-Einheit (310-316) gekoppelte erste
Adress-Inkrementiereinrichtung (301) zum Empfangen,
Halten und Inkrementieren von aus der
Prozessorbuseinrichtung eingegebenen Adress-Signalen und zum
Ausgeben von Adress-Signalen an die
Cache-Speicher-Einheit
zwecks Erleichterung von
Cache-Speicher-Zugriffen;
b) eine mit der Prozessorbuseinrichtung (120,121) und der
Cache-Speicher-Einheit (310-316) gekoppelte
Datenverschiebeeinrichtung (302) zum Ausrichten von aus der
Prozessoreinrichtung eingegebenen Datensignalen und
zum Ausrichten von aus der Cache-Speicher-Einheit
ausgegebenen Datensignalen zwecks Übertragung an eine
zentrale Verarbeitungseinheit (110); und
c) eine für die Prozessorbuseinheit vorgesehene
Steuereinrichtung (303) zum Synchronisieren und zum Steuern
der Operation der ersten
Adress-Inkrementiereinrichtung, der Datenverschiebeeinrichtung und der Cache-
Speicher-Einheit.
3. ICU-Architektur nach Anspruch 1 oder Anspruch 2, bei der
die Speicherbuseinheit (304-307) ferner aufweist:
a). einen wahlweise aktivierbaren Schreib-Puffer (304) zum
Puffern von Adress- und Daten-Signalen, die zwischen
der Speicherbuseinrichtung (175) und der
Cache-Speicher-Einheit (310-316) übertragen werden;
b) eine mit der Speicherbuseinrichtung (175), dem
Schreib-Puffer (304) und der Cache-Speicher-Einheit
(310-316) gekoppelte Speicheradress-Logikeinrichtung
(305) zum Halten und Inkrementieren über die
Speicherbuseinrichtung eingegebener Speicherbusadressen und
zum Halten und Inkrementieren von Adressen für von der
Cache-Speicher-Einheit inituerte
Cache-Leseoperationen;
c) eine mit der Speicherbuseinrichtung (175), dem
Schreib-Puffer (304) und der Cache-Speicher-Einheit
(310-316) gekoppelte Speicherlese-Puffereinrichtung
(306) zum Puffern von Daten aus der
Speicherbuseinrichtung, bis die Cache-Speicher-Einheit zur
Aktualisierung verfügbar ist, und zum Unterstützen von
Vorabruf- und Lese-Operationen; und
d) eine für die Speicherbuseinheit vorgesehene
Steuereinrichtung (307) zum Synchronisieren und Steuern des
Betriebs des Schreib-Puffers, der
Speicheradress-Logikeinrichtung, der Speicherlese-Puffereinrichtung und
der Cache-Speicher-Einheit.
4. ICU-Architektur nach Anspruch 3, bei der der
Schreib-Puffer ferner einen Adress-Puffer und einen Daten-Puffer
aufweist.
5. ICU-Architektur nach einem der vorhergehenden Ansprüche,
bei der die Cache-Speicher-Einheit (310-316) ferner
aufweist:
eine mit dem Adress-Bus und mit dem Daten-Bus gekoppelte
Speicher-Array-Einrichtung (310) zum Speichern von im
Cache gespeicherten Daten und Instruktionssignalen;
eine mit dem Cacheeinheiten-Adressenbus gekoppelte Tag-
Array-Einrichtung (311) zum Speichern von Cache-Tags,
wobei jedes Tag einem Block mit einer bestimmten Anzahl im
Cache gespeicherter Wörter entspricht; und
eine mit dem Cacheeinheiten-Adressenbus gekoppelte Gültig-
Array-Einrichtung (312) zum Speichern von Daten zur
Gültigkeit jedes im Cache gespeicherten Wortes.
6. ICU-Architektur nach Anspruch 5, bei der die
Speicher-Array-Einrichtung (310) als Satz von Blöcken organisiert
ist, wobei jeder Block einer bestimmten Anzahl im Cache
gespeicherter Wörter entspricht, und wobei eine mit dem
Cache-Datenbus gekoppelte Blockstatus-Array-Einrichtung
(313) eine Angabe des Status jedes Blocks als modifiziert,
gemeinsam oder gesperrt speichert.
7. ICU-Architektur nach Anspruch 6, bei der für jeden Block
mindestens ein zugehöriges Tag in der
Tag-Array-Einrichtung (311) gespeichert ist.
8. ICU-Architektur nach Anspruch 6 oder 7, bei der für jeden
Block mindestens ein zugehöriges Gültigkeits-Bit in der
Gültig-Array-Einrichtung (312) gespeichert ist.
9. ICU-Architektur nach einem der Ansprüche 5-8, bei der die
Tag-Array-Einrichtung (311), die Gültig-Array-Einrichtung
(312) und die Speicher-Array-Einrichtung (310) eine 2n-
wege-assoziative Cache-Speicher-Organisation aufweist,
wobei n eine ganze Zahl ist, die größer als oder gleich
null ist.
10. ICU-Architektur nach einem der Ansprüche 5-9, ferner mit
einer mit dem Cacheeinheiten-Adressenbus und dem Tag-Array
(311) gekoppelten Steuereinrichtung (316) für den Cache-
Speicher mit einer Logikeinrichtung, zum Vergleichen von
Adressen auf dem Cacheeinheiten-Adressenbus mit Tags in
dem Tag-Array.
11. ICU-Architektur nach Anspruch 10, bei der die
Steuereinrichtung (316) für den Cache-Speicher ferner eine mit dem
Gültig-Array (312) gekoppelte Logikeinrichtung aufweist,
um zu entscheiden, ob ein bestimmtes im Cache
gespeichertes Wort zum Zeitpunkt eines Cache-Speicher-Zugriffs
gültig ist.
12. ICU-Architektur nach Anspruch 10 oder Anspruch 11, bei der
die Steuereinrichtung (316) für den Cache-Speicher ferner
zum Erzeugen von Treffer-Signalen für gültige
Cache-Speicher-Zugriffe und zum Aufrechterhalten und Aktualisieren
von in dem Satz von speziellen Registern (315)
gespeicherten Daten betreibbar ist.
13. ICU-Architektur nach Anspruch 5, ferner mit einer Array-
Einrichtung (314) für am weitesten zurückliegende
Verwendung (LRU) zum Speichern von LRU-Bits jedes Mal, wenn die
Cache-Speicher-Einheit einen LRU-Ersetzungs-Algorithmus
benutzt.
14. ICU-Architektur nach einem der vorhergehenden Ansprüche,
bei der das programmierbare Register mindestens ein Bit
zum Deaktivieren einer Durchlese-Option enthält.
15. ICU-Architektur nach einem der vorhergehenden Ansprüche,
bei der das programmierbare Register mindestens ein Bit
zum Aktivieren einer Einfachzugriffs-Vorabrufs enthält.
16. ICU-Architektur nach einem der vorhergehenden Ansprüche,
bei der das programmierbare Register mindestens ein Bit
zum Deaktivieren einer Wrap-around-Adressierung enthält.
17. ICU-Architektur nach einem der vorhergehenden Ansprüche,
bei der das programmierbare Register mindestens ein Bit
zum Steuern des Betriebs der ICU bei einem einzelnen
Zugriffs-Fehlschlag enthält.
18. ICU-Architektur nach einem der vorhergehenden Ansprüche,
bei der das programmierbare Register mindestens ein Bit
aufweist, um den Betrieb der ICU zu steuern, wenn der
Prozessor eine Burst-Betriebsart-Lese -Anforderung beendet.
19. ICU-Architektur nach einem der vorhergehenden Ansprüche,
bei der das programmierbare Register mindestens ein Bit
zum Aktivieren einer Vorabrufs-Option in der
Burst-Betriebsart enthält.
20. ICU-Architektur nach einem der vorhergehenden Ansprüche,
bei der das programmierbare Register mindestens ein Bit
zum Spezifizieren und Variieren der Unterblock-Bemessung
enthält.
21. ICU-Architektur nach einem der vorhergehenden Ansprüche,
bei der das programmierbare Register mindestens ein Bit
zum Wählen einer Schreib-Allokations-Option enthält.
22. ICU-Architektur nach einem der vorhergehenden Ansprüche,
bei der das programmierbare Register mindestens ein Bit
zum Wählen von Schreib-Technik-Optionen auf globaler Basis
enthält.
23. ICU-Architektur nach einem der vorhergehenden Ansprüche,
bei der das programmierbare Register mindestens ein Bit
zum Spezifizieren einer Block-Ersetzungs-Technik enthält.
24. ICU-Architektur nach einem der vorhergehenden Ansprüche,
bei der das programmierbare Register mindestens ein Bit
zum Wählen einer 2n-wege-assoziativen
Cache-Speicher-Organisation enthält.
25. ICU-Architektur nach einem der vorhergehenden Ansprüche,
bei der das programmierbare Register mindestens ein Bit
enthält, um in einer ersten Betriebsart den
Cache-Speicher-Betrieb als Instruktions-Cache-Speicher-Betrieb zu
bestimmen, und um in einer zweiten Betriebsart den Cache-
Speicher-Betrieb als Daten-Cache-Speicher-Betrieb zu
bestimmen.
26. ICU-Architektur nach einem der vorhergehenden Ansprüche,
ferner mit einer Einrichtung zum Unterstützen von
benutzerbestimmten Durchschreib- und
Copy-back-Schreib-Techniken auf flexibler Pro-Zugriffs-Basis.
27. ICU-Architektur nach Anspruch 2, bei der die zentrale
Verarbeitungseinheit (110) ein vereinfachter
Instruktionsprozessor mit Burst- und Pipeline-Protokollen ist, und bei
dem ferner die ICU (101,102) eine Einrichtung zum
Unterstützen der Protokolle aufweist.
28. ICU-Architektur nach einem der vorhergehenden Ansprüche,
ferner mit einer
Fehlertolereanz-Unterstützungseinrichtung,
die eine Einrichtung zum Generieren und Prüfen von
Byte-Parität enthält.
29. ICU-Architektur nach Anspruch 28, bei der die
Fehlertoleranz-Unterstützungseinrichtung eine Einrichtung zum
Betreiben der ICU (101,102) als Cache-Speicher-Master und
als Cache-Speicher-Slave aufweist.
30. ICU-Architektur nach Anspruch 2, bei der Instruktionen und
Daten in einen Cache-Speicher (310) vorgeladen werden,
bevor die zentrale Verarbeitungseinheit (110) die
Ausführung des Programms startet.
31. ICU-Architektur nach einem der vorhergehenden Ansprüche,
bei der der Satz spezieller Register ferner aufweist:
(a) ein Chipwahl-Abbildungsregister;
(b) ein Instruktionsregister;
(c) ein Adressoperandenregister;
(d) ein Zählregister;
(e) ein Fehlerregister; und/oder
(f) ein Statusregister.
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US14600188A | 1988-01-20 | 1988-01-20 |
Publications (2)
Publication Number | Publication Date |
---|---|
DE68926466D1 DE68926466D1 (de) | 1996-06-20 |
DE68926466T2 true DE68926466T2 (de) | 1996-10-17 |
Family
ID=22515487
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
DE68926466T Expired - Lifetime DE68926466T2 (de) | 1988-01-20 | 1989-01-18 | Integrierte Cachespeichereinheit |
Country Status (4)
Country | Link |
---|---|
EP (1) | EP0325422B1 (de) |
JP (1) | JP3218316B2 (de) |
AT (1) | ATE138212T1 (de) |
DE (1) | DE68926466T2 (de) |
Families Citing this family (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5025366A (en) * | 1988-01-20 | 1991-06-18 | Advanced Micro Devices, Inc. | Organization of an integrated cache unit for flexible usage in cache system design |
EP0325421B1 (de) * | 1988-01-20 | 1994-08-10 | Advanced Micro Devices, Inc. | Organisation eines integrierten Cachespeichers zur flexiblen Anwendung zur Unterstützung von Multiprozessor-Operationen |
US5136691A (en) * | 1988-01-20 | 1992-08-04 | Advanced Micro Devices, Inc. | Methods and apparatus for caching interlock variables in an integrated cache memory |
JPH01233537A (ja) * | 1988-03-15 | 1989-09-19 | Toshiba Corp | キャッシュメモリを備えた情報処理装置 |
JPH0740248B2 (ja) * | 1988-08-16 | 1995-05-01 | インターナシヨナル・ビジネス・マシーンズ・コーポレーシヨン | キャッシュ制御装置 |
US5043886A (en) * | 1988-09-16 | 1991-08-27 | Digital Equipment Corporation | Load/store with write-intent for write-back caches |
JPH077355B2 (ja) * | 1988-12-27 | 1995-01-30 | 株式会社東芝 | 情報処理装置 |
JPH0680499B2 (ja) * | 1989-01-13 | 1994-10-12 | インターナショナル・ビジネス・マシーンズ・コーポレーション | マルチプロセッサ・システムのキャッシュ制御システムおよび方法 |
JPH077357B2 (ja) * | 1989-10-19 | 1995-01-30 | 工業技術院長 | バッファ制御方式 |
JPH1153260A (ja) * | 1997-08-06 | 1999-02-26 | Nec Corp | キャッシュメモリー内蔵半導体装置 |
US6378044B1 (en) * | 1999-09-22 | 2002-04-23 | Vlsi Technology, Inc. | Method and system for cache replacement among configurable cache sets |
US8527713B2 (en) * | 2006-01-31 | 2013-09-03 | Qualcomm Incorporated | Cache locking without interference from normal allocations |
US20130262780A1 (en) * | 2012-03-30 | 2013-10-03 | Srilatha Manne | Apparatus and Method for Fast Cache Shutdown |
DE102020003326A1 (de) | 2020-06-03 | 2020-07-30 | Daimler Ag | Verfahren zum Maskieren von Kraftfahrzeugdaten eines Kraftfahrzeugs, sowie elektronische Recheneinrichtung |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US3898624A (en) * | 1973-06-14 | 1975-08-05 | Amdahl Corp | Data processing system with variable prefetch and replacement algorithms |
FR2344093A1 (fr) * | 1976-03-10 | 1977-10-07 | Cii | Systeme de gestion coherente d'une hierarchie de memoires |
US4357656A (en) * | 1977-12-09 | 1982-11-02 | Digital Equipment Corporation | Method and apparatus for disabling and diagnosing cache memory storage locations |
US4315312A (en) * | 1979-12-19 | 1982-02-09 | Ncr Corporation | Cache memory having a variable data block size |
DE3138972A1 (de) * | 1981-09-30 | 1983-04-14 | Siemens AG, 1000 Berlin und 8000 München | Onchip mikroprozessorchachespeichersystem und verfahren zu seinem betrieb |
US4484267A (en) * | 1981-12-30 | 1984-11-20 | International Business Machines Corporation | Cache sharing control in a multiprocessor |
EP0325421B1 (de) * | 1988-01-20 | 1994-08-10 | Advanced Micro Devices, Inc. | Organisation eines integrierten Cachespeichers zur flexiblen Anwendung zur Unterstützung von Multiprozessor-Operationen |
US5025366A (en) * | 1988-01-20 | 1991-06-18 | Advanced Micro Devices, Inc. | Organization of an integrated cache unit for flexible usage in cache system design |
US5136691A (en) * | 1988-01-20 | 1992-08-04 | Advanced Micro Devices, Inc. | Methods and apparatus for caching interlock variables in an integrated cache memory |
-
1989
- 1989-01-18 DE DE68926466T patent/DE68926466T2/de not_active Expired - Lifetime
- 1989-01-18 EP EP89300435A patent/EP0325422B1/de not_active Expired - Lifetime
- 1989-01-18 AT AT89300435T patent/ATE138212T1/de not_active IP Right Cessation
- 1989-01-19 JP JP01093589A patent/JP3218316B2/ja not_active Expired - Lifetime
Also Published As
Publication number | Publication date |
---|---|
EP0325422B1 (de) | 1996-05-15 |
ATE138212T1 (de) | 1996-06-15 |
EP0325422A3 (de) | 1991-01-09 |
JP3218316B2 (ja) | 2001-10-15 |
DE68926466D1 (de) | 1996-06-20 |
JPH01237835A (ja) | 1989-09-22 |
EP0325422A2 (de) | 1989-07-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
DE68926059T2 (de) | Organisation einer integrierten Cache-Einheit zur flexiblen Verwendung beim Entwurf von Cache-Systemen | |
DE68917325T2 (de) | Verfahren und Vorrichtung zum Schreiben gegenseitiger verriegelter Variablen in einen integrierten Cachespeicher. | |
DE68917326T2 (de) | Organisation eines integrierten Cachespeichers zur flexiblen Anwendung zur Unterstützung von Multiprozessor-Operationen. | |
DE69031433T2 (de) | Speicherzugriffsausnahmebehandlung bei vorausgelesenen Befehlswörtern in dem Befehlsfliessband eines Rechners mit virtuellem Speicher | |
DE69331448T2 (de) | Dataprozessor mit einem Cachespeicher | |
DE68922326T2 (de) | Speicherwarteschlange für eine festgekoppelte Mehrprozessorenkonfiguration mit einem zweistufigen Cache-Pufferspeicher. | |
DE10296989B4 (de) | Multi-Thread-Prozessor mit der Fähigkeit einer impliziten Multi-Thread-Ausführung eines Ein-Thread-Programms | |
DE3856552T2 (de) | Multiprozessor-Digitaldatenverarbeitungssystem und Verfahren zum Betreiben dieses Systems | |
DE69633166T2 (de) | Integrierter schaltkreis mit mehreren funktionen und gemeinsamer verwendung mehrerer interner signalbusse zur verteilung der steuerung des buszugriffes und der arbitration | |
DE4218003C2 (de) | Cache-Steuereinrichtung für ein sekundäres Cache-Speichersystem | |
DE69029173T2 (de) | Mikroprozessor | |
US5185878A (en) | Programmable cache memory as well as system incorporating same and method of operating programmable cache memory | |
DE69130495T2 (de) | Umwandlung der Befehle von internen Prozessorregistern in I/O-Adressraum | |
DE69822534T2 (de) | Gemeinsame Speicherbenutzung mit variablen Blockgrössen für symmetrische Multiporzessor-Gruppen | |
DE68929224T2 (de) | Pipeline, die einen Cachespeicher für Rechnerprozessoren enthält | |
DE68926385T2 (de) | Methode und Hardware-Ausführung von komplexen Datentransferbefehlen | |
DE68926466T2 (de) | Integrierte Cachespeichereinheit | |
DE69031183T2 (de) | Verfahren und Anordnung zur Kontrolle der Umwandlung virtueller Adressen in physikalische Adressen in einem Computersystem | |
DE69902392T2 (de) | Verwenden von ecc/paritätsbits zum speichern von vor- dekodierungs-informationen | |
DE102018213430A1 (de) | Beschleuniger mit geringer Latenzzeit | |
DE3854369T2 (de) | Zentralprozessoreinheit für digitale datenverarbeitungsanordnung mit cache-speicherverwaltungsvorrichtung. | |
DE10045188B4 (de) | Cacheadresskonfliktvorrichtung | |
DE68926761T2 (de) | Mehrprozessorsystem mit einem mehranschlüssigen Cachespeicher | |
DE69027919T2 (de) | Anordnung und Verfahren zur Unterstützung des Zugriffs auf E/A-Geräte durch grosse, direkt abgebildete Datencache-Speicher | |
DE3740834A1 (de) | Aufrechterhaltung der kohaerenz zwischen einem mikroprozessorenintegrierten cache-speicher und einem externen speicher |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
8364 | No opposition during term of opposition |