DE19821581A1 - Speichermatrix, die mehrfache, gleichzeitige Schreibzugriffe zuläßt - Google Patents
Speichermatrix, die mehrfache, gleichzeitige Schreibzugriffe zuläßtInfo
- Publication number
- DE19821581A1 DE19821581A1 DE19821581A DE19821581A DE19821581A1 DE 19821581 A1 DE19821581 A1 DE 19821581A1 DE 19821581 A DE19821581 A DE 19821581A DE 19821581 A DE19821581 A DE 19821581A DE 19821581 A1 DE19821581 A1 DE 19821581A1
- Authority
- DE
- Germany
- Prior art keywords
- memories
- write
- subset
- stores
- function
- 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.)
- Withdrawn
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C8/00—Arrangements for selecting an address in a digital store
- G11C8/16—Multiple access memory array, e.g. addressing one storage element via at least two independent addressing line groups
Landscapes
- Engineering & Computer Science (AREA)
- Microelectronics & Electronic Packaging (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Static Random-Access Memory (AREA)
Description
Die Erfindung bezieht sich auf Speicher und Speichermatrizen,
und insbesondere auf einen Speicher, der eine Vielheit
gleichzeitiger Schreib- und Lesezugriffe erlaubt.
Auf einen Speicher, z. B. eine Speichermatrix, die eine Anzahl
von Speicherzellen umfaßt, wird über Leseanschlüsse und
Schreibanschlüsse zugegriffen. Jedesmal wenn ein Lese- oder
Schreibzugriff auf die genannte Speichermatrix auszuführen
ist, wird eine Adresse an die Speichermatrix angelegt und
Daten werden in die Speichermatrix über die genannten
Leseanschlüsse und/oder Schreibanschlüsse eingeschrieben oder
aus ihr ausgelesen.
Es ist bekannt, eine Anzahl von Lese-Anschlüssen und/oder
Schreibanschlüssen vorzusehen, um gleichzeitige, getrennte
Lese- und Schreibzugriffe zu erlauben, die während ein und
desselben Taktzyklus auftreten können.
Solange die gleichzeitigen Lese- und Schreibzugriffe auf
unterschiedliche Adressen gerichtet sind, treten keine
Gefahren auf, da jeder Zugriff aus einer anderen
Speicherstelle liest oder in sie schreibt. Selbst wenn zwei
gleichzeitige Lesezugriffe über zwei getrennte Leseanschlüsse
auf ein und dieselbe Speicheradresse gerichtet sind, besteht
keine Gefahr. Der Inhalt der genannten Adresse wird einfach an
beide Lese-Anschlüsse geliefert, die die genannte
Speicherstelle adressiert haben. Daher können gleichzeitige
Lesezugriffe auf eine Speicherstelle leicht durchgeführt
werden.
Eine schwierigere Situation entsteht, sobald ein Schreib- und
ein Lesezugriff auf ein und dieselbe Adresse in dem Speicher
gerichtet sind. Die Daten, die in die genannte Speicheradresse
über einen Schreibanschluß eingeschrieben wurden, sollten in
dem gleichen Zyklus durch den Lesezugriff erhalten werden.
Dieses Merkmal des unmittelbaren Leitens der an einen
Schreibanschluß angelegten Daten zu einem Lese-Anschluß, der
die gleiche Speicheradresse adressiert, wird "Durchschreiben"
genannt.
Es gibt zwei Wege, wie ein Durchschreiben implementiert werden
kann. Eine erste Lösung besteht darin, den Taktzyklus in eine
Anzahl von Teilzyklen zu unterteilen, wobei der erste
Teilzyklus für den Schreibzugriff verantwortlich ist und der
Lesezugriff während eines zweiten Teilzyklus stattfindet.
Daher ist es möglich, in dem Lese-Teilzyklus Daten, die
während des Schreib-Teilzyklus in die genannte Speicheradresse
geschrieben wurden, zu erhalten, da der genannte Lese-Teil
zyklus im Hinblick auf den genannten Schreib-Teilzyklus
verzögert wurde. Das Implementierten eines Durchschreibens
über solch eine Kaskadenberechnung impliziert, daß es nötig
ist, den Taktzyklus in Teilzyklen zu unterteilen. Dies
bedeutet, daß verschiedene Teilaufgaben in dem gleichen
Taktzyklus ausgeführt werden müssen, eine nach der anderen,
und daher muß jeder Taktzyklus größer sein als eine bestimmte
minimale Länge. Daher impliziert ein unterteilter Taktzyklus,
daß die Taktfrequenz nicht unbegrenzt vergrößert werden kann.
Ein anderer möglicher Weg des Implementierens eines
Durchschreibens besteht darin, zusätzliche Logik an jedem der
Schreibanschlüsse und der Leseanschlüsse vorzusehen, um
Adressengleichheit zwischen irgendeinem der Schreibanschlüsse
und irgendeinem der Leseanschlüsse festzustellen. Immer, wenn
solch eine Übereinstimmung festgestellt wird, können Daten,
die in eine bestimmte Speicherstelle geschrieben werden
müssen, unmittelbar zu einem entsprechenden Lese-Anschluß
weitergeleitet werden, der die genannte Speicherstelle
adressiert. Ein Nachteil der zusätzlichen Logik in den Schreib-
und Lesepfaden muß in der resultierenden
Leistungsverschlechterung gesehen werden und in dem Verbrauch
von Chip-Fläche.
Als nächstes ist der Fall zu betrachten, daß mehr als ein
Schreibzugriff auf eine bestimmte Speicherstelle während ein
und desselben Zyklus vorkommt. In dem Fall, daß identische
Daten über zwei verschiedene Schreibanschlüsse in eine
Speicherstelle geschrieben werden, ist die Lösung für diese
Gefahr ziemlich einfach: Eine Informationsquelle, im Folgenden
als Pipe bezeichnet, muß den Schreibzugriff der anderen Pipe
unterdrücken, da ein einziger Schreibzugriff völlig
ausreichend ist.
Aber es existiert auch der Fall, daß zumindest zwei
Schreibzugriffe auf eine Adresse in ein und demselben Zyklus
durchgeführt werden, wobei die genannten Schreibzugriffe
versuchen, verschiedene Daten einzuschreiben. Man könnte an
eine Matrix von Statusbits denken, auf die über verschiedene
Pipen zugegriffen wird. Jeder Zugriff kann verschiedene Bits
modifizieren, und daher können die Daten, die durch jeden der
verschiedenen Schreibzugriffe eingeschrieben werden,
differieren. Da es nötig ist, alle Änderungen der genannten
Statusbits zu speichern, selbst wenn sie gleichzeitig
auftreten, würde eine vollständige Unterdrückung aller
Schreibzugriffe bis auf einen nicht zu richtigen Resultaten
führen.
Eine Lösung für das Problem gleichzeitiger Schreibzugriffe auf
eine Speicherstelle besteht darin, Mittel für eine
Kaskadenberechnung der Schreibzugriffe vorzusehen. In jedem
Teilzyklus wird für einen Schreibzugriff gesorgt und durch
diese aufeinanderfolgende Berücksichtigung der Schreibzugriffe
ist es möglich, einen korrekten Status der Matrix zu jedem
Zeitpunkt aufrechtzuerhalten. Wiederum besteht der Nachteil
des Unterteilens des Taktzyklus darin, daß Grenzen für die
maximal mögliche Taktfrequenz auferlegt werden.
Eine andere Lösung für das Problem gleichzeitiger
Schreibzugriffe auf ein und dieselbe Speicherstelle besteht
darin, zusätzliche Logik in den Schreibpfaden zu
implementieren, um verschiedene Schreibzugriffe auf einen
resultierenden Schreibzugriff zu kombinieren. In dem Fall, daß
eine Matrix von Statusbits über verschiedene Schreibpipen
aktualisiert wird, wäre ein großer Umfang schwieriger
Zusatzlogik erforderlich, was die Leistung verlangsamen würde.
Insbesondere in dem Fall einer großen Anzahl von Schreibpipen
müßten alle möglichen Kombinationen von Schreibzugriffen in
der Zusatzlogik berücksichtigt werden.
Alle die bis jetzt beschriebenen Lösungen beruhen darauf, daß
auf eine Zelle mit Mehrfachanschlüssen durch eine Vielzahl von
Schreibpipen über verschiedene Schreibanschlüsse zugegriffen
wird. Laßt uns das Beispiel betrachten, das die
genannte Speichermatrix Statusinformationen enthält, die über
verschiedene Schreibpipen durch verschiedene auf dem Chip
befindliche Einrichtungen aktualisiert werden. Dies erfordert
physische Schreibpfade, die jede der genannten Einrichtungen
mit der zentralen Matrix der genannten Statusbits verbinden.
Daher stellt eine Zelle mit Mehrfachanschlüssen immer einen
"heißen Fleck" dar, der mit einer Menge verschiedener
Chipstellen verbunden werden muß und der daher starke
Beschränkungen für den Chip-Layout und die Chip-Verdrahtung
auferlegt.
Es ist eine Aufgabe der Erfindung, einen Speicher anzugeben,
der die Funktionalität einer Zelle mit Mehrfach-Schreib
anschlüssen aufweist, die es gestattet, gleichzeitige
Zugriffe auf eine Speicherstelle über eine Vielzahl von Pipen
zu speichern, während die Nachteile der Lösungen nach dem
Stand der Technik vermieden werden.
Es ist eine weitere Aufgabe der Erfindung, eine zentralisierte
Zelle mit Mehrfach-Schreibanschlüssen durch eine verteilte
Einrichtung zu ersetzen, die die gleiche Funktionalität
aufweist.
Es ist eine weitere Aufgabe der Erfindung, einen Speicher zum
Festhalten von Statusinformationen anzugeben, die durch Pfade
für Mehrfachzugriff aktualisiert werden müssen, die das
Aktualisieren gleichzeitig durchführen können.
Die Aufgabe der Erfindung wird gelöst durch eine Menge von
Speichern nach Anspruch 1 durch ein Verfahren zum Speichern
von Daten in einer Menge von Speichern gemäß Anspruch 12 und
durch ein Verfahren zum Gewinnen von Daten aus einer Menge von
Speichern gemäß Anspruch 13.
Anstelle einer Zelle mit einem Mehrfach-Schreibanschluß wird
eine Menge von Speichern vorgesehen, um Mehrfachzugriffe über
verschiedene Schreibpipen zu erlauben. Immer wenn Daten, die
in der genannten Menge von Speichern enthalten sind, abzurufen
sind, müssen die Inhalte verschiedener Speicher der genannten
Menge von Speichern zusammen betrachtet werden. Nützliche
Informationen sind nicht in einem einzigen Speicher enthalten,
sondern statt dessen müssen die Inhalte einer Teilmenge C (z. B.
eine Spalte) der genannten Menge von Speichern kombiniert
werden. Zuerst werden die Inhalte der Untermenge C gelesen,
als nächstes wird eine Lesefunktion auf die genannten Inhalte
angewandt, um den derzeitigen Inhalt der genannten Menge von
Speichern zu bestimmen.
Das Verteilen der nützlichen Informationen unter einer Menge
von Speichern läßt eine Modifikation der genannten
Informationen über einen Schreibzugriff auf irgendeinen der
genannten Speicher zu. Daher werden gleichzeitige
Schreibzugriffe über verschiedene Pipen möglich.
Um die Informationen, die durch die Menge von Speichern
dargestellt werden, zu modifizieren, wird die folgende
Strategie verfolgt: zuerst werden die Inhalte von Speichern,
in die nicht geschrieben wird, gelesen. Abhängig von dem
Statuts dieser Speicher und abhängig von dem gewünschten
Inhalt der in der gesamten Menge der Speicher enthalten sein
soll, wird berechnet, wie eine andere Teilmenge der Menge von
Matrizen modifiziert werden muß, um zu erreichen, daß alle
Matrizen zusammengenommen den gewünschten Inhalt darstellen.
Daher sind die folgenden Schritte für einen Schreibzugriff auf
die genannte Menge von Speichern notwendig;
Lesen der Inhalte einer Teilmenge der genannten Menge von Speichern,
Anwenden einer Schreibfunktion auf die genannten Inhalte der genannten Teilmenge A der genannten Menge von Speichern und auf eine erste Menge von Werten, die in der genannten Menge von Speichern enthalten sein muß, um als ein Ausgangssignal der genannten Schreibfunktion eine zweite Menge von Werten zu bestimmen, die in eine Teilmenge B der genannten Menge von Speichern einzuschreiben ist,
wobei die genannte Teilmenge A der genannten Menge von Speichern und die genannte Teilmenge B der genannten Menge von Speichern keine Speicher gemeinsam haben,
Schreiben der genannten Menge von Werten in die genannte Teilmenge B der genannten Menge von Speichern.
Lesen der Inhalte einer Teilmenge der genannten Menge von Speichern,
Anwenden einer Schreibfunktion auf die genannten Inhalte der genannten Teilmenge A der genannten Menge von Speichern und auf eine erste Menge von Werten, die in der genannten Menge von Speichern enthalten sein muß, um als ein Ausgangssignal der genannten Schreibfunktion eine zweite Menge von Werten zu bestimmen, die in eine Teilmenge B der genannten Menge von Speichern einzuschreiben ist,
wobei die genannte Teilmenge A der genannten Menge von Speichern und die genannte Teilmenge B der genannten Menge von Speichern keine Speicher gemeinsam haben,
Schreiben der genannten Menge von Werten in die genannte Teilmenge B der genannten Menge von Speichern.
Das vorgeschlagene Verfahren zum Speichern von Daten in eine
und zum Abrufen aus einer Menge von Speichern zeigt eine
Anzahl von Vorteilen, verglichen mit einer Zelle mit einem
Mehrfach-Schreibanschluß. Einer dieser Vorteile besteht darin,
daß gleichzeitige Zugriffe auf die genannte Menge von
Speichern vorkommen können, ohne zusätzliche Logik in den
Schreibpfaden zu erfordern und ohne Unterteilen des Taktzyklus
in Teilzyklen. Dies führt zu Leistungsverbesserungen, da keine
Verzögerung in den Schreibpfaden eingeführt wird und da der
Taktzyklus ziemlich kurz sein kann.
Da die Informationen in all den Speichern der genannten Menge
von Speichern enthalten sind, gibt es keinen "heißen Fleck",
wie das der Fall war bei einer Zelle mit Mehrfach-Schreib
anschluß. Die Schreibpfade greifen nicht auf einen
zentralen Speicher zu, sondern statt dessen greift jeder
Schreibpfad auf einen verschiedenen Speicher zu. Dies führt zu
einer verteilten Lösung, was den Layout vereinfacht und was es
erlaubt, die Speicher auf dem Chip flexibel anzuordnen, um den
Verdrahtungsprozeß zu erleichtern.
Ein anderer Vorteil ist der, daß die Menge von Speichern, die
durch die Erfindung vorgeschlagen werden, an irgendeine Anzahl
von Schreibpipen angepaßt werden kann. Man kann einfache
Speicher benutzen, die einen Leseanschluß und einen
Schreibanschluß umfassen und mit diesen einfachen Geräten kann
die Funktionalität einer Zelle mit Mehrfach-Schreib
anschlüssen, die k Schreibpipen umfaßt, erhalten
werden.
Ein anderer Vorteil ist der, daß die Menge von vorgeschlagenen
Speichern bessere Bedingungen für das Testen liefert.
Gewöhnlich wird ein Speicher durch Schreiben von
Zufallsmustern in ihn getestet, durch Wiederauslesen dieser
Muster und durch Vergleichen des Eingangs- und des
Ausgangsmusters, um eine Signatur zu erhalten. Falls ein
Fehler auftritt, kann dies durch Beobachten der genannten
Signatur erkannt werden. Beim Testen einer Zelle mit einem
Mehrfach-Schreibanschluß durch Schreiben von Zufallsmustern in
die verschiedenen Schreibanschlüsse kann eine Situation
auftreten, in der eine Schreibpipe eine "0" in eine bestimmte
Speicherzelle schreiben will, während eine andere Schreibpipe
auf die gleiche Zelle mit einer "1" zugreift. Ein
nichtdefinierter Zustand der Speicherzelle ergibt sich. Durch
Benutzen der Menge von Speichern gemäß der Erfindung kann das
Testen mit Zufallsmustern über die verschiedenen Schreibpipen
durchgeführt werden und es entstehen keine solchen
nichtdefinierten Zustände. Da das Testen immer wichtiger
wird, ist dies ein großer Vorteil.
Bei einem bevorzugten Ausführungsbeispiel der Erfindung sind
die genannte Schreibfunktion und/oder die genannte
Lesefunktion als UNGERADE-Funktionen realisiert. Die Ungerade-Funktion
ist die einfachste Funktion, die die Anforderungen
erfüllt, die Lese- und Schreibfunktionen auferlegt werden. Sie
kann sehr leicht als eine Kaskade von Exklusiv-ODER-Gliedern
implementiert werden und liefert eine einfache und billige
Lösung.
Gemäß einem weiteren Ausführungsbeispiel der Erfindung werden
die genannten Teilmengen A und B der genannten Menge von
Speichern bestimmt entsprechend derjenigen der genannten
Pipen, welche auf die genannte Menge von Speichern zugreift.
Eine Entsprechung zwischen den genannten Teilmengen B, für die
ein Schreibzugriff erfolgt, und den verschiedenen Pipen wird
erstellt. Nur durch Leiten der Schreibzugriffe von
verschiedenen Pipen zu verschiedenen Teilmengen B, die keine
gemeinsamen Elemente aufweisen, werden gleichzeitige
Schreibzugriffe möglich. Bei einem weiteren
Ausführungsbeispiel der Erfindung sind die genannte Menge von
Werten, die in der genannten Menge von Speichern enthalten
ist, Statusinformationen und insbesondere MRU/LRU-Status
informationen.
Statusinformationen sind besonders gut geeignet, um in der
genannten Menge von Speichern enthalten zu sein, da
Statusinformationen durch eine Menge verschiedener Quellen
aktualisiert werden muß, die auf unterschiedlichen Positionen
auf dem Chip lokalisiert sind. Das Ersetzen einer zentralen
"Heißfleck"-Zelle mit Mehrfach-Schreibanschluß durch eine
Anordnung von Speichern ist besonders nützlich für
Statusinformationen, da jede Einrichtung, die
Statusinformationen aktualisiert, auf einen entsprechenden
Speicher zugreifen kann und gleichzeitige Aktualisierungen
gespeichert werden können.
Fig. 1A zeigt, wie ein Resultatwert durch Verdichten der
Inhalte einer Menge von Matrizen mittels einer
Lesefunktion erhalten werden kann.
Fig. 1B zeigt, wie ein Schreibzugriff auf eine Menge von
Matrizen mittels Pipe 2 durchgeführt wird.
Fig. 1C zeigt, wie ein Schreibzugriff auf eine Menge von
Matrizen mittels Pipe 1 durchgeführt wird.
Fig. 2A zeigt, wie eine UNGERADE-Funktion als eine Kaskade
von Exlusiv-ODER-Funktionen realisiert werden kann.
Fig. 2B zeigt die Wahrheitstabelle der genannten
UNGERADE-Funktion.
Fig. 3 zeigt eine alternative Implementierung einer Menge
von Matrizen, die zwei Schreibpipen umfaßt, wobei
die diagonalen Elemente, die Matrix 11 und die Matrix
22, weggelassen sind.
Fig. 4 stellt dar, wie zusätzliche Lesematrizen R1 und R2
vorgesehen sein können, welche die diagonalen
Elemente ersetzen sollen.
Fig. 5 zeigt einen alternativen Aufbau für eine Menge von
Matrizen, der drei Schreibpipen umfaßt, bei dem
die Matrizen 11, 22 und 33 weggelassen wurden.
Fig. 6A zeigt einen Lesezugriff in einer k × k-Menge von
Matrizen, die es erlaubt, k Schreibpipen
aufzunehmen.
Fig. 6B zeigt, wie ein Schreibzugriff mittels Pipe 3 auf die
Menge von k × k-Matrizen durchgeführt wird.
Fig. 7 zeigt, wie MRU/LRU-Statusbits benutzt werden, um die
Reihenfolge der Eingaben in einen assoziativen Cache
mit einer Vierweggruppe anzugeben.
Fig. 8 gibt an, wie die entsprechenden sechs
MLRU/LRU-Statusbits X1, X2, . . ., X6 geändert werden müssen,
wenn auf einen Eintrag in einer der sechs Spalten
Va, Vb, Vc oder Vd zugegriffen wird.
Fig. 9 zeigt, wie die MRU/LRU-Informationen in einer Gruppe
von Matrizen gespeichert und aktualisiert werden
können, die zwei Schreibpipen umfaßt.
Gemäß der Erfindung wird vorgeschlagen, eine einzelne Matrix,
in die Daten geschrieben und aus der Daten gelesen werden
können, durch eine Menge von Matrizen zu ersetzen, die die
gleichen Informationen enthalten sollen. In Fig. 1A ist eine
Menge von vier Matrizen, Matrix 11, Matrix 12, Matrix 21, und
Matrix 22 dargestellt. Die Matrizen sind in zwei Spalten und
zwei Zeilen angeordnet. Fig. 1A zeigt, wie ein Lesezugriff auf
die Menge der Matrizen durchgeführt wird. Keine der Matrizen
11, 12, 21 und 22 enthält für sich genommen gültige Daten. Um
gültige Daten aus der genannten Menge von Matrizen zu
erhalten, ist es notwendig, die Informationen, die in all den
Matrizen irgendeiner der Spalten enthalten ist, zu
kombinieren.
In Fig. 1A wird der Resultatwert aus den Matrizen der Spalte 2
abgerufen. Die Inhalte der Matrix 12 und der Matrix 22 werden
weitergeleitet (100) zu einer Einrichtung 101, die eine
"Lesefunktion" auf diese Eingangssignale anwendet. Mittels der
genannten Lesefunktion werden die Daten der Matrix 12 und der
Matrix 22 kombiniert, um die Resultatwerte der genannten Menge
von Matrizen zu erhalten. Die UNGERADE-Funktion ist ein
Beispiel einer möglichen Lesefunktion.
Anstelle des Verdichtens der Inhalte der Matrizen der Spalte 2
würde es auch möglich sein, die Inhalte der Matrizen der
Spalte 1 zu kombinieren. Der wichtige Punkt ist der, daß alle
die Matrizen einer Spalte zusammen nützliche Daten bilden,
aber daß keine der Matrizen der Menge, für sich selbst
genommen, nützliche Daten enthält.
Fig. 1B zeigt, wie ein Schreibzugriff auf die genannte Menge
von Matrizen über Pipe 2 (103) durchgeführt wird. Eine 2 × 2-
Menge von Matrizen 11, 12, 21 und 22 erlaubt es, zwei
Schreibpipen aufzunehmen.
Jede Schreibpipe veranlaßt eine Schreiboperation in die
Matrizen einer Zeile, die der genannten Schreibpipe
entspricht. In dem Fall der Fig. 1B veranlaßt ein
Schreibzugriff über Pipe 2 eine Schreiboperation in die
Matrizen der Zeile 2, die die Matrix 21 und die Matrix 22
(107) umfaßt. Die Werte, die in die Matrizen der Zeile 2
eingeschrieben werden, sind nur bedeutungsvoll, wenn sie in
Kombination mit den Inhalten anderer Matrizen, in diesem Fall
mit den Inhalten der Zeile 1, gelesen werden.
Bevor die Schreiboperation tatsächlich durchgeführt wird, muß
der aktuelle Status der Menge von Matrizen bestimmt werden. Um
dies zu tun, werden alle die Werte der Matrizen in einer
Spalte weitergeleitet (102) zu einer Einrichtung, die eine
Schreibfunktion (104) durchführt. Da die Matrizen der Zeile 2
überschrieben werden, ist es nicht notwendig, die Inhalte der
Matrizen dieser Zeile zu der Schreibfunktion weiterzuleiten.
Dies ist der Grund, warum der Inhalt der Matrix 22 nicht zu
der Schreibfunktion weitergeleitet wird. Während die Inhalte
der Matrizen einer Spalte einen Eingang (102) zu der
Schreibfunktion darstellen, bildet der gewünschte Resultatwert
den zweiten Eingang (103) der Schreibfunktion (104). Wenn das
gewünschte Resultat "UNGERADE" ist, wird eine "1" über die
Pipe 2 (103) zu der Schreibfunktion weitergeleitet. In dem
Fall, daß das gewünschte Resultat "GERADE" ist, wird eine "0"
zu der Schreibfunktion weitergeleitet. Die Schreibfunktion
kombiniert sowohl die aktuellen Spalteninhalte und die
gewünschten Resultatwerte, um die Ausgangswerte zu erzeugen,
die in die Zeile 2 (105) zu schreiben sind.
Bevor der genannte Wert tatsächlich in Zeile 2 (107)
eingeschrieben werden kann, muß er eine Stufe durchlaufen, die
als "Daten-Ein-Register und Schreibsteuerung" (106) bezeichnet
wird. Mittels dieser Stufe werden Bedingungen, die eine
Unterdrückung des Schreibzugriffs erzwingen, betrachtet. Eine
dieser Bedingungen besteht darin, daß sowohl Pipe 1 als auch
Pipe 2 beabsichtigen, die gleichen Daten in die gleiche
Speicherstelle zu schreiben. In diesem Fall wird nur dem
Schreibzugriff von Pipe 1 erlaubt, zu passieren, während der
Schreibzugriff der Pipe 2 unterdrückt wird. Auf diese
Bedingung wird in der Schreibsteuereinrichtung 106 geprüft.
In dem Fall, daß der Schreibzugriff passieren darf, wird der
durch die Schreibfunktion 104 berechnete Wert in die Matrizen
der Zeile eingeschrieben, die der Schreibpipe entspricht, die
den Schreibzugriff aufrief.
Der Zweck der Schreibfunktion ist es, aus den aktuellen
Spalteninhalten und aus dem gewünschten Resultatwert den Wert
zu erzeugen, der in eine Zeile zu schreiben ist. Der
Ausgangswert der Schreibfunktion muß in der Weise berechnet
werden, daß, wenn die Inhalte irgendeiner Spalte kombiniert
werden, der gewünschte Resultatwert erhalten wird. Eine
mögliche mathematische Funktion, die in dieser Stufe benutzt
werden kann, ist die UNGERADE-Funktion. Die UNGERADE-Funktion
schickt eine "0" an ihrem Ausgang zurück, wenn eine gerade
Zahl von "1 en" an ihre Eingänge angelegt wird, und sie
schickt eine "1" in dem Fall zurück, daß eine ungerade Anzahl
von "1'en" an ihre Eingänge angelegt wird. Neben der
UNGERADE-Funktion könnte man an andere mathematische Funktionen denken,
die als Lese- oder Schreibfunktionen benutzt werden können.
In Fig. 1C ist ein Schreibzugriff über Pipe 1 auf die Menge
von Matrizen dargestellt. Wieder wird als ein erster Schritt
auf den aktuellen Inhalt der Menge von Matrizen zugegriffen
durch Weiterleiten (110) der Inhalte einer Spalte (hier Spalte
1) zu der Schreibfunktion 112 als eine erste Eingabe. Der
gewünschte Resultatwert wird weitergeleitet als ein zweites
Eingangssignal über Pipe 1 (111) zu der Schreibfunktion. Aus
diesen beiden Eingangssignalen erzeugt die Schreibfunktion den
Wert, der in die Zeile von Matrizen einzuschreiben ist, die
der Pipe 1 entsprechen, was in Fig. 1C Zeile 1 ist. Bevor der
Ausgangswert der Schreibfunktion in die Matrizen der genannten
Zeile eingeschrieben wird, muß er die "Schreibsteuerungs"-Stufe
(114) passieren, in der die Bedingungen für das
Unterdrücken des Schreibzugriffs geprüft werden. In dem Fall,
daß der Schreibzugriff erlaubt wird, wird der Ausgangswert der
Schreibfunktion in die Matrizen 11 und 12 der Zeile 1 der
Menge von Matrizen eingeschrieben.
Fig. 2A zeigt, wie eine UNGERADE-Funktion durch eine Kaskade
von Exklusiv-ODER-Gliedern realisiert werden kann, die zwei
Eingänge aufweisen. In der ersten Stufe, die die
Exklusiv-ODER-Glieder 200 und 201 umfaßt, werden die fünf anfänglichen
Eingänge auf drei Signalleitungen verdichtet. Zwei dieser
Signalleitungen werden als Eingänge für das Exlusiv-ODER-Glied
202 der zweiten Stufe benutzt, die ein Ausgangssignal erzeugt.
Dieses Ausgangsignal wird zusammen mit dem Eingangssignal 203
zu dem Exklusiv-ODER-Glied 204 der dritten Stufe
weitergeleitet, die das endgültige Ausgangssignal der
UNGERADE-Funktion 205 erzeugt. Der Aufbau solch einer
Exklusiv-ODER-Kaskade kann wie folgt zusammengefaßt werden: so
viele Eingänge jeder Stufe wie möglich werden durch die Stufe
verdichtet, wobei die restlichen Signalleitungen zu der
nächsten Stufe weitergeführt werden.
Fig. 2B zeigt die Wahrheitstabelle einer UNGERADE-Funktion,
die drei Eingänge aufweist. Immer dann, wenn eine ungerade
Anzahl von Eingangssignalen gleich "1" ist, ist auch das
Ausgangssignal der UNGERADE-Funktion gleich "1". Immer dann,
wenn eine gerade Anzahl von Eingangssignalen gleich "1" ist,
ist das Ausgangssignal der UNGERADE-Funktion gleich "0".
Mittels der UNGERADE-Funktion kann irgendeine Anzahl von
Eingangssignalen in ein Ausgangssignal verdichtet werden.
Fig. 3 zeigt eine vereinfachte Implementierung einer Menge von
Matrizen, die zwei Schreibpipen aufweisen. Die zwei diagonalen
Elemente der Menge von Matrizen, die Matrix 11 und die Matrix
22, sind weggelassen worden. Mit solch einer vereinfachten
Menge von Matrizen kann trotzdem die gleiche Funktionalität,
wie sie in den Fig. 1A, 1B und 1C beschrieben wurde,
erreicht werden.
Wenn ein Schreibzugriff über Pipe 1 (300) ausgeführt wird, ist
es nur nötig, wie das aus Fig. 1C ersichtlich ist, den
aktuellen Inhalt der Matrix 21 (309) zu der entsprechenden
Schreibfunktion 302 weiterzuleiten (301). Es ist nicht
notwendig, auf irgendeine der Matrizen 11 oder 22 zuzugreifen.
Das Ausgangssignal der Schreibfunktion 302 wird über die
Schreibsteuerung 303 zu dem Schreibanschluß der Matrix 12
weitergeleitet (304). Dies ist von der in Fig. 1C
dargestellten Situation verschieden, wo das Ausgangssignal der
Schreibfunktion in alle Matrizen (Matrix 11 und Matrix 12) der
Zeile 1 eingeschrieben wird. Da die Matrix 11 in Fig. 3
weggelassen wurde, wird nur ein Schreibzugriff auf die Matrix
12 ausgeführt (304).
Wenn ein Schreibzugriff über Pipe 2 ausgeführt wird, ist die
Situation ähnlich. Wie in Fig. 1B wird der Inhalt der Matrix
12 (304) als ein erstes Eingangssignal zu der Schreibfunktion
307 weitergeleitet (306). Pipe 2 (305) bildet den zweiten
Eingang der Schreibfunktion 307. Aus beiden Werten bestimmt
die Schreibfunktion 307 den Wert, der in die Zeile
einzuschreiben ist, die der Pipe 2 entspricht. Da die Matrix
22 weggelassen wurde, wird der Ausgangswert der
Schreibfunktion 307 nur über die Schreibsteuerung 308 in den
Schreibanschluß der Matrix 21 (309) eingeschrieben, die die
einzige verbleibende Matrix der Zeile 1 in der Menge von
Matrizen ist.
Es erhebt sich die Frage, ob es möglich ist, gültige
Resultatwerte aus dieser reduzierten Menge von Matrizen zu
erhalten. Wenn man auf die Fig. 1A schaut, könnte man den
Eindruck gewinnen, daß entweder die vollständige Spalte 1 oder
die vollständige Spalte 2 notwendig ist zum Bestimmen des
aktuellen Inhaltes der Menge von Matrizen. Aber tatsächlich
kann die Lesefunktion noch durchgeführt werden, wenn die
Matrizen 11 und 12 weggelassen werden. Wenn ein Schreibzugriff
auf eine Menge von Matrizen durchgeführt wird, wird eine ganze
Zeile der Menge von Matrizen adressiert. Dies impliziert, daß
die Matrix 21 immer die gleichen Informationen wie die Matrix
22 enthält, (wie das aus Fig. 1B ersichtlich ist), und daß die
Matrix 12 stets die gleichen Informationen enthält wie die
Matrix 11 (wie das aus Fig. 1C ersichtlich ist).
Daher besteht die einzige Voraussetzung für das Durchführen
einer gültigen Lesefunktion darin, eine Matrix der Zeile 1
auszuwählen und eine Matrix der Zeile 2, und die Inhalte
dieser beiden Matrizen mittels der Lesefunktion zu
kombinieren. Der aktuelle Wert der Menge von Matrizen der Fig.
3 kann durch Weiterleiten (310, 311) des Inhaltes der Matrix
12 (304) und der Matrix 21 (309) an die Lesefunktion 312
erhalten werden, da die Matrix 12 ein Element der Zeile 1 und
die Matrix 21 ein Element der Zeile 2 ist. Daher wird gezeigt,
daß selbst mit der verringerten Menge der Matrizen gemäß Fig.
3 die gesamte Funktionalität der Fig. 1A, 1B und 1C erhalten
werden kann. Es ist jedoch zu beachten, daß für eine Lösung
gemäß der Fig. 3 sowohl die Matrix 12 als auch die Matrix 21
jede zwei Leseanschlüsse haben müssen, einen Leseanschluß, der
als ein Eingang für die Lesefunktion dient, und den anderen
Leseanschluß, der als Eingang für die Schreibfunktion dient.
Aus dem bis jetzt Beschriebenen ist offensichtlich, daß die
"diagonalen" Matrizen, die Matrizen 11 und 22, hauptsächlich
nützlich sind, um den aktuellen Inhalt der Menge von Matrizen
mittels der Lesefunktion zu erhalten. Ein weiteres
Ausführungsbeispiel für eine Menge von Matrizen, die zwei
Schreibpipen aufweisen, in denen die Matrizen in einer anderen
Weise angeordnet sind, wird in Fig. 4 gegeben. Wie bei
früheren Lösungen wird der Inhalt der Matrix 21 (401)
ausgelesen und als ein erstes Eingangssignal zu der
Schreibfunktion 402 geliefert. Pipe 1 (400) liefert das zweite
Eingangssignal der Schreibfunktion 402. Als nächstes wird das
Ausgangssignal der Schreibfunktion 402 über die
Schreibsteuerung 403 weitergeleitet. Bei früheren Lösungen
(Fig. 1C) wurde dieses Ausgangssignal in die Matrix 11 und die
Matrix 12 eingeschrieben. Bei der Lösung nach Fig. 4 ist die
Matrix 11 (411) durch die Lesematrix R 1 (410) ersetzt worden.
Der Ausgangswert der Schreibfunktion 402 wird jetzt sowohl in
die Matrix 12 (406) als auch in die Lesematrix R 1 (410)
geschrieben.
Der Schreibpfad der Pipe 2 (405) arbeitet entsprechend. Pipe 2
(405) dient als ein erster Eingang zur Schreibfunktion 407 und
der Inhalt der Matrix 12 (406) wird als ein zweites
Eingangssignal zu der Schreibfunktion weitergeleitet. Wieder
ist eine Schreibsteuerung (408) vorhanden, die den
Ausgangswert weiterzuleiten hat und die den Schreibzugriff
unterdrücken kann. Bei früheren Lösungen wurde das
Ausgangssignal in die Zeile 2 (Fig. 1B) der Menge von
Matrizen eingeschrieben, die die Matrix 21 (401) und die
Matrix 22 (413) umfaßte. Die Matrix 22 ist durch die
Lesematrix R 2 (412) ersetzt worden.
Um den aktuellen Wert, der in der Menge von Matrizen enthalten
ist, auszulesen, griff die Lesefunktion nach Fig. 1A auf die
Matrizen zu, die in einer Spalte enthalten waren. Der Wert
konnte durch Adressieren der Matrizen 11 und 21 oder durch
Adressieren der Matrizen 12 und 22 erhalten werden. Der
Nachteil dieser Lösung besteht darin, daß die Matrizen 12 und
21 sowohl durch die Lesefunktion als auch die Schreibfunktion
adressiert werden. Daher sind zwei Leseanschlüsse notwendig.
Die in Fig. 4 veranschaulichte Lösung führt den Lesezugriff
über die Lesematrizen Rl (410) und Rl (412) durch, was als
Ersatz für die Matrizen 11 und 22 gedacht werden kann. Da die
Lesematrix Rl (410) immer aktualisiert wird, wenn ein
Schreibzugriff (404) auf Zeile 1 vorkommt, und da die
Lesematrix R2 immer aktualisiert wird, wenn ein Schreibzugriff
(409) auf Zeile 2 vorkommt, enthalten die Lesematrizen R1 und
R2 zusammen die vollen Informationen der Menge von Matrizen.
Sowohl auf die Lesematrizen 410 und 412 wird durch die
Lesefunktion 414 zugegriffen, die aus den Inhalten der
genannten Lesematrizen die Werte berechnet, die tatsächlich in
der genannten Menge von Matrizen (415) enthalten sind. Ein
Vorteil dieser Lösung besteht darin, daß jede der benutzten
Matrizen, die Matrix 12, die Matrix 21, die Matrix R1 und die
Matrix R2 nur einen einzigen Leseanschluß haben muß. In den
anderen bisher beschriebenen Lösungen mußten die Matrizen 12
und 21 zumindest zwei Leseanschlüsse vorsehen.
Fig. 5 zeigt eine Implementierung für eine Menge von Matrizen,
auf die über drei Schreibpipen zugegriffen wird, wobei die
"Diagonal"-Matrizen 11, 22 und 33 weggelassen wurden. Daher
war es möglich, die Anzahl der erforderlichen Matrizen von 9
auf 6 zu verringern. Dies erlaubt es, die erforderliche
Chipfläche um ein Drittel zu verringern. Um die geringere
Anzahl von notwendigen Matrizen zu kompensieren, müssen
zumindest drei der Matrizen mit zwei Leseanschlüssen versehen
werden. Aber dennoch stellt Fig. 5 eine billige und leicht zu
implementierende Lösung für das Problem einer Matrix dar, die
gleichzeitige Schreibzugriffe über unterschiedliche
Schreibpipen zuläßt.
Wir betrachten zuerst einen Schreibzugriff, der über Pipe 1
(500) geschieht. Zusammen mit den Daten der Pipe 1 werden die
Inhalte der Matrix 21 (502) und der Matrix 31 (503) zu der
Schreibfunktion 501 weitergeleitet. Die Matrix 21 und die
Matrix 31 sind die Elemente der Spalte 1, die in Zeile 1 nicht
vorkommen und die daher nicht durch einen Schreibzugriff über
Pipe 1 modifiziert werden. Aus diesen drei Eingangssignalen
berechnet die Schreibfunktion einen Ausgangswert, der zu der
Schreibsteuerung 504 weitergeleitet wird. Falls der
Schreibzugriff nicht unterdrückt werden muß, wird der
Ausgangswert der Schreibfunktion 501 in alle Matrizen der
Zeile 1 eingeschrieben. Die Matrix 11 wurde trotzdem
weggelassen. Daher wird nur auf die Matrix 12 und die Matrix
13 über ihre entsprechenden Schreibanschlüsse (505, 506)
zugegriffen.
Ein Schreibzugriff über Pipe 2 (507) wird entsprechend
durchgeführt. Außer den Daten, die durch Pipe 2 weitergeleitet
werden, muß die Schreibfunktion 508 die Eingagssignale all der
Matrizen der Spalte 2 empfangen mit Ausnahme derjenigen, die
in Zeile 2 enthalten sind, da Zeile 2 die Zeile ist, die durch
die Schreibzugriffe modifiziert wird. Daher müssen die Werte
der Matrix 12 (509) und 32 (510) zu der Schreibfunktion 508
weitergeleitet werden. Aus diesen drei Eingangssignalen
erzeugt die Schreibfunktion 508 ein Ausgangssignal, das nach
dem Passieren der Schreibsteuerung 511 in all die Elemente der
Zeile 2 eingeschrieben werden muß. Da die Matrix 22
weggelassen wurde, werden die Daten in die Matrix 21 (512) und
die Matrix 23 (523) eingeschrieben.
Beim Betrachten des Schreibzugriffes, der über Pipe 3 (514)
durchgeführt wird, ist es offensichtlich, daß die Matrizen 13
und 23 der Spalte 3 zu der Schreibfunktion 515 weitergeleitet
werden müssen. Das Ausgangssignal der Schreibfunktion wird in
die Matrizen 31 und 32 (520, 519) der Zeile 3 eingeschrieben.
Um in der Lage zu sein, den aktuellen Inhalt der Menge von
Matrizen zu bestimmen, die die Matrizen 13, 23, 21, 23, 31 und
32 umfaßt, ist es notwendig, eine Matrix pro Zeile der
genannten Menge von Matrizen zu lesen. Für die Zeile 1 gibt es
zwei Kandidaten, die Matrix 12 und die Matrix 13. In dem
Beispiel nach Fig. 5 wurde die Matrix 13 gelesen. Ihre Daten
werden weitergeleitet (512) zu der Lesefunktion 524. Entweder
kann die Matrix 21 oder die Matrix 23 gelesen werden, um einen
Repräsentanten der Zeile 2 an die Lesefunktion 524 zu liefern.
Es ist unerheblich, ob die Matrix 21 oder 23 gewählt wird, da
beide in dem Sinne äquivalent sind, da sie die gleichen Daten
enthalten. Dies wird klar, wenn man betrachtet, daß sie den
gleichen Schreibpfad 512, 513 besitzen. In unserem Beispiel
wird die Matrix 21 als ein Eingangssignal (522) für die
Lesefunktion 524 gewählt. Aus den möglichen Kandidaten der
Zeile 3, der Matrix 31 und der Matrix 32, wird die Matrix 31
erregt. Ihr Inhalt wird als ein drittes Eingangssignal zu der
Lesefunktion 524 weitergeleitet (523). Durch Anwenden der
genannten Lesefunktion 524 auf ihre drei Eingangssignale 521,
522 und 523 kann der aktuelle Inhalt der Menge von Matrizen
ausgewertet werden.
In Fig. 6A und 6B ist das Konzept der Erfindung auf eine Menge
von k × k-Matrizen ausgedehnt worden, was es erlaubt,
k Schreibpipen, die bis zu k gleichzeitige Schreibzugriffe auf
die Menge von Matrizen durchführen können, aufzunehmen. Die
Matrizen der genannten Menge von Matrizen sind in k Zeilen und
k Spalten angeordnet.
Fig. 6A zeigt, wie der aktuelle Inhalt der genannten Menge von
Matrizen durch Zugreifen auf irgendeine Spalte der genannten
Menge von Matrizen bestimmt werden kann. In dem Beispiel
werden all die Inhalte der Matrizen der Spalte 3 ausgelesen
und zu der Lesefunktion 601 weitergeleitet (600), die z. B.
eine UNGERADE-Funktion sein kann. Die Inhalte all der Matrizen
der Spalte 3 werden zu einer "Matrix" von Ausgangswerten (602)
verdichtet, und auf diese Weise wird der aktuelle Inhalt der
Menge von Matrizen bestimmt (603).
Fig. 6B zeigt den Fall eines Schreibzugriffes über Pipe 3 auf
eine k × k -Menge von Matrizen. Ein Schreibzugriff über Pipe
3 (611) modifiziert die Inhalte der Matrizen der Zeile 3. Die
Aufgabe besteht darin, zu bestimmen, welche Werte in Zeile 3
eingeschrieben werden müssen, um zu erreichen, daß der
aktuelle gesamte Inhalt der Menge von Matrizen gleich dem
gewünschten Resultatwert ist, der über Pipe 3 vorgegeben wird.
Die Inhalte aller der Matrizen einer Spalte, die nicht Teil
der Zeile 3 sind, werden zur Einrichtung 612 weitergeleitet
(610). Dort werden die Inhalte der Matrizen zusammen mit dem
gewünschten Resultatwert, der über Pipe 3 (611) vorgegeben
wird, mittels einer Schreibfunktion verdichtet, die z. B. eine
UNGERADE-Funktion sein kann. Das Ausgangssignal dieser
arithmetischen Operation (613) bildet den Inhalt, der in alle
die Matrizen der Zeile 3 der Menge von Matrizen zu speichern
ist. Bevor die Speicheroperation tatsächlich durchgeführt
wird, werden die Ausgangswerte zu einer Stufe (614)
"Daten-Ein-Register und Schreibsteuerung" weitergeleitet, wo eine
Prüfung vorgenommen wird, ob irgendeine andere der k Pipen
einen Schreibzugriff auf die gleiche Adresse durchführt wie
die Pipe unter Betrachtung. Wenn die Adressen der beiden Pipen
übereinstimmen, wird geprüft, ob beide Pipen vorhaben,
äquivalente Daten einzuschreiben. Wenn dies auch der Fall
ist, muß einer der beiden Schreibzugriffe unterdrückt werden.
Für den Fall, daß der Schreibzugriff der Pipe 3 in dem
Beispiel der Fig. 6B nicht unterdrückt wird, werden die
Ausgangswerte in alle Matrizen der Zeile 3 (615)
eingeschrieben.
In den Fig. 7 bis 9 ist dargestellt, wie das Verfahren zum
gleichzeitigen Durchführen von Schreibzugriffen auf eine Menge
von Matrizen auf eine Matrix von MRU/LRU-Statusbits beim
Cache-Management angewendet werden kann. Cache-Aus
tauschalgorithmen stützen ihre Austauschstrategien auf die
genannten MRU/LTU-Statusbits, die aus verschiedenen Quellen
aktuallisiert werden.
In Fig. 7 ist ein assoziativer Cache mit einer Vierweggruppe
dargestellt, der vier Spalten Va, Vb, Vc, und Vd umfaßt für das
Festhalten der Cache-Einträge. Eine Hash-Funktion der Adresse
wird für das Zugreifen auf den Cache benutzt, was bedeutet,
daß eine bestimmte Zeile, die vier Eingabepositionen umfaßt,
durch die genannte Hash-Funktion der Adresse spezifiziert
wird.
Abhängig von dem Protokoll der Zugriffe, die auf die
Eintragungen einer Zeile vorgekommen sind, kann eine
Reihenfolge zwischen den Eingaben erstellt werden, abhängig
von dem letzten Mal, an dem auf einen Eintrag zugegriffen
wurde. Daher ist einer der vier Einträge der jüngst benutzte,
abgekürzt als (MRU = Most Recently Used), Eintrag, einer ist
der zweitjüngst benutzte Eintrag, ein anderer Eintrag ist der
drittjüngst benutzte Eintrag und ein Eintrag ist der am
längsten nicht benutzte, abgekürzt als (LRU = Least Recently
Used), Eintrag. Natürlich ist die Reihenfolge für jede Zeile
verschieden. Zum Beispiel ist in Zeile 700 Va der jüngst
benutzte Eintrag (704), Vd ist der zweitjüngst benutzte Eintrag
(705), Vb ist der drittjüngst benutzte Eintrag (706) und Vc
ist der am längsten nicht benutzte Eintrag. In Zeile 701 ist Vd
der jüngst benutzte Eintrag (704), Va ist der zweitjüngst
benutzte Eintrag (705), Vc ist der drittjüngst benutzte Eintrag
(706) und Vb ist der am längsten nicht benutzte Eintrag (707).
Immer wenn ein neuer Eintrag in eine bestimmte Zeile
einzuschreiben ist, ist es notwendig, einen der vier Einträge
zu löschen. Ein Cache-Austausch-Algorithmus wählt den Eintrag
für das Austauschen, der am längsten nicht benutzt wurde.
Daher ist der LRU-Eintrag der Eintrag, der durch einen neuen
Eintrag ersetzt wird.
Die Reihenfolge der vier Cache-Einträge einer Zeile wird durch
die MRU/LRU-Statusbits X1, X2, . . ., X6 angegeben. Für jedes
Statusbit gibt es zwei Zustände: "GERADE" und "UNGERADE". Zum
Beispiel gibt X1 an, welcher der Einträge Va und Vb jünger
benutzt wurde. Wenn, wie das in Zeile 700 der Fall ist, Va
jünger benutzt wurde als Vb, dann wird X1 auf "GERADE" gesetzt.
Bit X2 zeigt, welcher der Einträge Va und Vc jünger benutzt
wurde; es wird auf "GERADE" gesetzt, wenn Va jünger benutzt
wurde als Vc (dies ist auch in Zeile 700 wahr). In Zeile 700
ist Va jünger benutzt worden als Vd, und daher wird X3 auf
"GERADE" gesetzt. Das Bit X4 gibt an, ob Vb jünger benutzt
wurde als Vc, und dies ist auch für Zeile 700 wahr. X5
überwacht die Beziehung zwischen Vb und Vd. In Zeile 700 ist Vd
jünger benutzt als Vb und daher ist X5 auf "UNGERADE" gesetzt.
Das gleiche gilt für X6, das angibt, ob Vc oder Vd jünger
benutzt ist. Da Vd in Zeile 700 jünger benutzt ist, wird X6 auf
"UNGERADE" gesetzt. Für die Einträge in Zeile 701, 702 und 703
sind die resultierenden MRU/LRU-Statusbits ebenso angegeben.
Fig. 8 gibt an, wie die MRU/LRU-Statusbits X1, X2, . . ., X6
geändert werden müssen, wenn auf einen Eintrag in einer der
Spalten Va, Vb, Vc oder Vd des Cache zugegriffen wird.
In dem Fall, daß auf den Eintrag in Spalte Va zugegriffen wird,
ist der neue Eintrag der in die Spalte Va eingeschrieben wird,
der Eintrag, der jüngst benutzt wurde, da der neueste Zugriff
auf den Cache auf die Spalte Va gerichtet war. Daher ist Va
jünger benutzt als Vb, Vc und Vd, und daher müssen die
MRU/LRU-Statusbits X1, X2, und X3 entsprechend geändert werden. Dies
impliziert, daß X1 auf "GERADE" (800) gesetzt werden muß, X2
auf "GERADE" (801) gesetzt werden muß und X3 ebenfalls auf
"GERADE" (802) gesetzt werden muß. Die Statusbits X4, X5 und
X6 beziehen sich nicht auf Va. Statt dessen beziehen sie sich
auf die relative Reihenfolge von Vb, Vc und Vd, die nicht durch
einen Zugriff auf die Spalte Va geändert wurde. Daher bleiben
die Statusbits X4, X5 und X6 so wie sie sind (803, 804, 805),
und keine Änderungen werden an diesen Statusbits vorgenommen.
Demgemäß muß, wenn ein Zugriff auf die Spalte Vb erfolgt, X1
"UNGERADE" (806) sein, X4 muß "GERADE" (807) sein und X5 muß
"GERADE" (808) sein. Alle die anderen Bits (X2, X3, X6) müssen
nicht geändert werden.
In Fig. 9 ist gezeigt, wie MRU/LRU-Statusinformationen in
einer Menge von zwei Matrizen, Matrix 12 und Matrix 21,
enthalten sein und aktualisiert werden können. Die hier
benutzte Implementierung ist identisch mit der in Fig. 3
angegebenen Implementierung.
Weder die Matrix 12 noch die Matrix 21 enthält für sich
genommen gültige MRU/LRU-Statusinformationen. Gültige
Statusbits
können nur durch Kombinieren der Inhalte der Matrix 12 und der
Matrix 21 erhalten werden. Dies wird mittels der Lesefunktion
312 durchgeführt, die eine UNGERADE-Operation mit den Inhalten
der Matrix 12 und der Matrix 21 durchführt. Anfänglich enthält
die Matrix 12 das Bitmuster "011000", während die Matrix 21
das Muster "001110" enthält. Das Resultat der UNGERADE-Funktion
ist "010110" (900). Dies entspricht dem MRU/LRU-Muster
Vc, Va, Vd, Vb (901).
Das System besitzt zwei Schreibpipen. Im Zyklus 55 erfolgt ein
Schreibzugriff auf Vd über die Pipe 1. Nach Fig. 8 bedeutet
dies, daß X3 auf "UNGERADE" (812) geändert werden muß, X5 auf
"UNGERADE" (813) geändert werden muß und X6 auf "UNGERADE"
(814) auch geändert werden muß. Daher werden in einem ersten
Schritt die Bits X3, X5 und X6 aus der Matrix 21 ausgelesen.
Als nächstes werden die Werte dieser Bits invertiert (812,
813, 814) und zur Matrix 12 weitergeleitet. Die anderen Bits,
Bit X1, X2 und X4 der Matrix 12 bleiben ungeändert. Wenn die
neuen Inhalte der Matrix 12 und der Matrix 21 einer
Exklusiv-ODER-Verknüpfung unterworfen werden, ergibt sich das Bitmuster
"011111" (902), das die folgende Reihenfolge der Einträge: Vde
Vc-Va-Vb" (903) darstellt. Dies bedeutet, daß das Verfahren
beim Angeben von Vd als dem jüngst benutzten Eintrag
erfolgreich war.
Im Zyklus 56 greift Pipe 1 auf Vb zu und Pipe 2 greift auf Vc
zu. Die Bits X1, X4 und X5 der Matrix 21 werden gemäß Fig. 8
modifiziert und in die Matrix 12 eingeschrieben. Die Bits X2,
X4 und X6 der Matrix 12 werden auch gemäß Fig. 8 modifiziert
und in die Matrix 21 eingeschrieben. Alle anderen Bits (Bits
X2, X3 und X6 der Matrix 12 und die Bits X1, X3 und X5 der
Matrix 21) bleiben ungeändert. Nach dem Durchführen der
UNGERADE-Funktion mit den neuen Inhalten der Matrix 12 und der
Matrix 21 ergibt sich das Bitmuster "1110002" (904), das die
Eintragsfolge "Vb-Vc-Vd-Va" (905) darstellt. Daher sind beide
Schreibzugriffe auf Vb
und Vc korrekt gespeichert worden.
Claims (23)
1. Eine Menge von Speichern, umfassend Mittel zum Lesen der
Inhalte einer Teilmenge A der Menge der Speicher,
Mittel zum Einschreiben einer Menge von Werten in eine Teilmenge B der Menge der Speicher,
wobei die genannte Teilmenge A der Menge der Speicher und die genannte Teilmenge B der Menge der Speicher keinen Speicher gemeinsam haben,
Mittel zum Bestimmen durch Anwenden einer Schreibfunktion auf die genannten Inhalte der genannten Teilmenge A der Menge der Speicher und auf eine erste Menge von Werten, die in der Menge der Speicher enthalten sein muß, einer zweiten Menge von Werten, die in die genannte Teilmenge B der Menge von Speichern einzuschreiben ist,
Mittel zum Lesen der Inhalte einer Teilmenge C der Menge der Speicher,
wobei die genannte Teilmenge A der Menge der Speicher und die genannte Teilmenge C der Menge der Speicher zumindest einen Speicher gemeinsam haben,
und die genannte Teilmenge B der Menge der Speicher und die genannte Teilmenge C der Menge der Speicher zumindest einen Speicher gemeinsam haben,
Mittel zum Bestimmen durch Anwenden einer Lesefunktion auf die genannten Inhalte der genannten Teilmenge C der Menge der Speicher die Menge der Werte, die aktuell in der Menge der Speicher enthalten ist.
Mittel zum Einschreiben einer Menge von Werten in eine Teilmenge B der Menge der Speicher,
wobei die genannte Teilmenge A der Menge der Speicher und die genannte Teilmenge B der Menge der Speicher keinen Speicher gemeinsam haben,
Mittel zum Bestimmen durch Anwenden einer Schreibfunktion auf die genannten Inhalte der genannten Teilmenge A der Menge der Speicher und auf eine erste Menge von Werten, die in der Menge der Speicher enthalten sein muß, einer zweiten Menge von Werten, die in die genannte Teilmenge B der Menge von Speichern einzuschreiben ist,
Mittel zum Lesen der Inhalte einer Teilmenge C der Menge der Speicher,
wobei die genannte Teilmenge A der Menge der Speicher und die genannte Teilmenge C der Menge der Speicher zumindest einen Speicher gemeinsam haben,
und die genannte Teilmenge B der Menge der Speicher und die genannte Teilmenge C der Menge der Speicher zumindest einen Speicher gemeinsam haben,
Mittel zum Bestimmen durch Anwenden einer Lesefunktion auf die genannten Inhalte der genannten Teilmenge C der Menge der Speicher die Menge der Werte, die aktuell in der Menge der Speicher enthalten ist.
2. Ein Menge von Speichern gemäß Anspruch 1, weiter
gekennzeichnet dadurch, daß
die genannte Schreibfunktion eine UNGERADE-Funktion ist.
3. Eine Menge von Speichern gemäß Anspruch 1, weiter dadurch
gekennzeichnet, daß
die genannte Lesefunktion eine UNGERADE-Funktion ist.
4. Eine Menge von Speichern gemäß Anspruch 2 oder 3, weiter
dadurch gekennzeichnet, daß
die genannte UNGERADE-Funktion als eine Kaskade von
Exklusiv-ODER-Gliedern implementiert ist.
5. Eine Menge von Speichern nach den Ansprüchen 1 bis 4,
weiter dadurch gekennzeichnet, daß
die genannten Teilmengen A und B der Menge von Speichern
danach bestimmt werden, welche der genannten Schreibpipen
auf die Menge der Speicher zugreift.
6. Eine Menge von Speichern gemäß Anspruch 4 oder 5, weiter
dadurch gekennzeichnet, daß
die Menge der Speicher k Zeilen von k Speichern aufweist und k Spalten von k Speichern
und in dem Fall, daß Schreibpipe i auf die Menge der Speicher zugreift,
die genannte Teilmenge A der Menge der Speicher alle Speicher umfaßt, die in Spalte i der Menge von Speichern enthalten sind, mit Ausnahme des Speichers, der sowohl in Spalte i als auch in Zeile i enthalten ist,
die genannte Teilmenge B der Menge von Speichern alle Speicher umfaßt, die in Zeile i der Menge von Speichern enthalten sind,
wobei die genannte Teilmenge C der Menge von Speichern alle Speicher umfaßt, die in Spalte i der Menge von Speichern enthalten sind.
die Menge der Speicher k Zeilen von k Speichern aufweist und k Spalten von k Speichern
und in dem Fall, daß Schreibpipe i auf die Menge der Speicher zugreift,
die genannte Teilmenge A der Menge der Speicher alle Speicher umfaßt, die in Spalte i der Menge von Speichern enthalten sind, mit Ausnahme des Speichers, der sowohl in Spalte i als auch in Zeile i enthalten ist,
die genannte Teilmenge B der Menge von Speichern alle Speicher umfaßt, die in Zeile i der Menge von Speichern enthalten sind,
wobei die genannte Teilmenge C der Menge von Speichern alle Speicher umfaßt, die in Spalte i der Menge von Speichern enthalten sind.
7. Eine Menge von Speichern gemäß irgendeinem der
vorhergehenden Ansprüche, weiter dadurch gekennzeichnet,
daß
jeder der genannten Speicher zumindest einen
Schreibanschluß und zumindest einen Leseanschluß
aufweist.
8. Eine Menge von Speichern gemäß irgendeinem der
vorhergehenden Ansprüche, weiter dadurch gekennzeichnet,
daß
jeder der genannten Speicher eine Matrix von
Speicherzellen ist.
9. Eine Menge von Speichern gemäß irgendeinem der
vorhergehenden Ansprüche, weiter dadurch gekennzeichnet,
daß
die Menge der Werte, die in der Menge von Speichern
enthalten ist, Statusinformationen sind.
10. Eine Menge von Speichern gemäß irgendeinem der vorherge
henden Ansprüche, weiter dadurch gekennzeichnet, daß
die Menge der Werte, die in der Menge der Speicher
enthalten ist, MRU/LRU-Statusinformationen sind.
11. Verfahren zum Speichern von Daten in einer Menge von
Speichern, umfassend die Schritte des
Lesens der Inhalte aus einer Teilmenge A der Menge von Speichern,
Anlegens einer Schreibfunktion an die genannten Inhalte der genannten Teilmenge A der Menge von Speichern und an eine erste Menge von Werten, die in der Menge von Speichern enthalten sein muß, um als ein Ausgangssignal der genannten Schreibfunktion eine zweite Menge von Werten zu bestimmen, die in eine Teilmenge B der Menge von Speichern einzuschreiben ist,
wobei die genannte Teilmenge A der Menge von Speichern und die genannte Teilmenge B der Menge von Speichern keinen Speicher gemeinsam haben,
Schreibens der Menge von Werten in die genannte Teilmenge B der Menge von Speichern.
Lesens der Inhalte aus einer Teilmenge A der Menge von Speichern,
Anlegens einer Schreibfunktion an die genannten Inhalte der genannten Teilmenge A der Menge von Speichern und an eine erste Menge von Werten, die in der Menge von Speichern enthalten sein muß, um als ein Ausgangssignal der genannten Schreibfunktion eine zweite Menge von Werten zu bestimmen, die in eine Teilmenge B der Menge von Speichern einzuschreiben ist,
wobei die genannte Teilmenge A der Menge von Speichern und die genannte Teilmenge B der Menge von Speichern keinen Speicher gemeinsam haben,
Schreibens der Menge von Werten in die genannte Teilmenge B der Menge von Speichern.
12. Verfahren zum Abrufen von Daten aus einer Menge von
Speichern, umfassend die Schritte des
Lesens der Inhalte aus einer Teilmenge C der Menge von Speichern,
Anwendens einer Lesefunktion auf die Inhalte der genannten Teilmenge C der Menge von Speichern, um die Menge von Werten zu bestimmen, die aktuell in der Menge von Speichern enthalten ist.
Lesens der Inhalte aus einer Teilmenge C der Menge von Speichern,
Anwendens einer Lesefunktion auf die Inhalte der genannten Teilmenge C der Menge von Speichern, um die Menge von Werten zu bestimmen, die aktuell in der Menge von Speichern enthalten ist.
13. Verfahren nach Anspruch 11, weiter dadurch
gekennzeichnet, daß
die genannte Schreibfunktion eine UNGERADE-Funktion ist.
14. Verfahren gemäß Anspruch 13, weiter dadurch
gekennzeichnet, daß
die genannte UNGERADE-Funktion als eine Kaskade von
Exklusiv-ODER-Gliedern implementiert ist.
15. Verfahren gemäß Anspruch 12, weiter dadurch
gekennzeichnet, daß
die genannte Lesefunktion eine UNGERADE-Funktion ist.
16. Verfahren gemäß Anspruch 15, weiter dadurch
gekennzeichnet, daß
die genannte UNGERADE-Funktion als eine Kaskade von
Exklusiv-ODER-Gliedern implementiert ist.
17. Verfahren gemäß irgendeinem der Ansprüche 11 bis 16,
weiter umfassend
mehr als eine Schreibpipe zum Durchführen von
Schreibzugriffen, wobei mehr als ein Schreibzugriff
gleichzeitig über verschiedene Schreibpipen vorkommen
kann.
18. Verfahren gemäß Anspruch 17, weiter dadurch
gekennzeichnet, daß
die genannten Teilmengen A und B der Menge von Speichern
danach bestimmt werden, welche der genannten Schreibpipen
auf die Menge der Speicher zugreift.
19. Verfahren gemäß irgendeinem der Ansprüche 17 oder 18,
weiter dadurch gekennzeichnet, daß
die Menge der Speicher k Zeilen von k Speichern aufweist und k Spalten von k Speichern und in dem Fall, daß die Schreibpipe i auf die Menge der Speicher zugreift,
die genannte Teilmenge A der Menge von Speichern alle Speicher umfaßt, die in Spalte i der Menge von Speichern enthalten sind mit Ausnahme des Speichers, der sowohl in Spalte i und Zeile i enthalten ist,
die genannte Teilmenge B der Menge von Speichern alle Speicher umfaßt, die in Zeile i der Menge von Speichern enthalten sind,
die genannte Teilmenge C der Menge von Speichern alle Speicher umfaßt, die in Spalte i der Menge von Speichern enthalten sind.
die Menge der Speicher k Zeilen von k Speichern aufweist und k Spalten von k Speichern und in dem Fall, daß die Schreibpipe i auf die Menge der Speicher zugreift,
die genannte Teilmenge A der Menge von Speichern alle Speicher umfaßt, die in Spalte i der Menge von Speichern enthalten sind mit Ausnahme des Speichers, der sowohl in Spalte i und Zeile i enthalten ist,
die genannte Teilmenge B der Menge von Speichern alle Speicher umfaßt, die in Zeile i der Menge von Speichern enthalten sind,
die genannte Teilmenge C der Menge von Speichern alle Speicher umfaßt, die in Spalte i der Menge von Speichern enthalten sind.
20. Verfahren gemäß irgendeinem der Ansprüche 11 bis 19,
weiter dadurch gekennzeichnet, daß
jeder der genannten Speicher zumindest einen
Schreibanschluß und zumindest einen Leseanschluß umfaßt.
21. Verfahren gemäß irgendeinem der Ansprüche 11 bis 20,
weiter dadurch gekennzeichnet, daß jeder der genannten
Speicher eine Matrix von Speicherzellen ist.
22. Verfahren gemäß irgendeinem der Ansprüche 11 bis 21,
weiter dadurch gekennzeichnet, daß
die Menge der Werte, die in der Menge von Speichern
enthalten sind, Statusinformationen sind.
23. Verfahren gemäß irgendeinem der Ansprüche 11 bis 22,
weiter dadurch gekennzeichnet, daß
die Menge der Werte, die in der Menge von Speichern
enthalten ist, MRU/LRU-Statusinformationen sind.
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
EP97110556 | 1997-06-27 |
Publications (1)
Publication Number | Publication Date |
---|---|
DE19821581A1 true DE19821581A1 (de) | 1999-01-07 |
Family
ID=8226967
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
DE19821581A Withdrawn DE19821581A1 (de) | 1997-06-27 | 1998-05-14 | Speichermatrix, die mehrfache, gleichzeitige Schreibzugriffe zuläßt |
Country Status (3)
Country | Link |
---|---|
US (1) | US6032233A (de) |
KR (1) | KR100322718B1 (de) |
DE (1) | DE19821581A1 (de) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6490654B2 (en) * | 1998-07-31 | 2002-12-03 | Hewlett-Packard Company | Method and apparatus for replacing cache lines in a cache memory |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4322795A (en) * | 1980-01-24 | 1982-03-30 | Honeywell Information Systems Inc. | Cache memory utilizing selective clearing and least recently used updating |
US5471605A (en) * | 1992-08-27 | 1995-11-28 | Intel Corporation | Apparatus for updating a multi-way set associative cache memory status array |
US5611072A (en) * | 1993-10-12 | 1997-03-11 | Texas Instruments Incorporated | Cache with an extended single cycle read/write system and method |
-
1997
- 1997-07-01 US US08/886,304 patent/US6032233A/en not_active Expired - Fee Related
-
1998
- 1998-05-13 KR KR1019980017149A patent/KR100322718B1/ko not_active IP Right Cessation
- 1998-05-14 DE DE19821581A patent/DE19821581A1/de not_active Withdrawn
Also Published As
Publication number | Publication date |
---|---|
KR19990006439A (ko) | 1999-01-25 |
US6032233A (en) | 2000-02-29 |
KR100322718B1 (ko) | 2002-03-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
DE2350225C2 (de) | ||
DE2550339C2 (de) | Speichersystem mit einem langsam arbeitenden Hauptspeicher großer Kapazität und mit zumindest einem schnell arbeitenden Pufferspeicher geringer Kapazität | |
DE69814579T2 (de) | Parallel arbeitende exklusiv-oder-einheit | |
DE2515696C2 (de) | Datenverarbeitungssystem | |
DE3932474C2 (de) | Plattenzugriff-Steuerverfahren | |
DE4206286C2 (de) | Speicherzugriffssystem und Verfahren zum Ausgeben eines digitalen Datenstromes | |
EP0013737A1 (de) | Mehrstufige Speicherhierarchie für ein Datenverarbeitungssystem | |
DE2617408A1 (de) | Datenverarbeitungsgeraet | |
DE2350215A1 (de) | Rechnersystem sowie bei diesem verwendbares mehrebenen-speichersystem | |
DE2364408A1 (de) | System zur erstellung von schaltungsanordnungen aus hochintegrierten chips | |
DE3131341A1 (de) | "pufferspeicherorganisation" | |
DE3015875A1 (de) | Speicherzugriffssystem und verfahren fuer einen zugriff zu einem digitalen speichersystem | |
DE2310631B2 (de) | Speicherhierarchie fur ein Datenverarbeitungssystem | |
DE2062228A1 (de) | Datenverarbeitungssystem mit gleich zeitigem Zugriff auf mehrere Speicher stellen | |
DE3046912C2 (de) | Schaltungsanordnung zum selektiven Löschen von Cachespeichern in einer Multiprozessor-Datenverarbeitungsanlage | |
DE69432512T2 (de) | Für fensterumgebungsoperationen entworfenes rasterpuffersystem | |
DE3618136A1 (de) | Abwechselnd adressierte halbleiterspeichergruppe | |
DE3013064C2 (de) | Schaltungsanordnung zur Übertragung von Bitgruppen zwischen einer von mehreren peripheren Einheiten und einem Pufferspeicher | |
DE4114053A1 (de) | Computersystem mit cachespeicher | |
DE102007055138B4 (de) | System zum Zugreifen auf einen Einzelport-Mehrwege-Cache | |
EP0009625B1 (de) | Datentransferschalter mit assoziativer Adressauswahl in einem virtuellen Speicher | |
DE10105627B4 (de) | Mehrfachanschlussspeichereinrichtung, Verfahren und System zum Betrieb einer Mehrfachanschlussspeichereinrichtung | |
DE602004012923T2 (de) | Wortweise programmierbarer Flash-Speicher | |
EP0265636A1 (de) | Multiprozessor mit mehreren mit Cache-Speichern ausgerüsteten Prozessoren und einem gemeinsamen Speicher | |
CH495584A (de) | Datenverarbeitungsanlage |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
OP8 | Request for examination as to paragraph 44 patent law | ||
8139 | Disposal/non-payment of the annual fee |