-
Das Zwischenspeichern von Daten in einem Cache in großer Nähe zu einem Processing-Core ist ein üblicher Ansatz zur Beschleunigung der Leistung des Mikroprozessors oder eines anderen Verarbeitungssystems. Der Cache kann ein kleiner interner Speicher bzw. Memory sein, der Daten und/oder Befehle, die kürzlich oder häufig verwendet wurden bzw. werden, speichert. Dadurch dass die Daten und/oder Befehle nahe an der Verarbeitungseinheit gespeichert werden, ist die Speicherzugriffszeit kurz und die Verarbeitungsgeschwindigkeit insgesamt kann im Vergleich zum direkten Zugriff auf einen größeren Systemspeicher, der eine längere Speicherzugriffszeit haben kann, erhöht werden.
-
Es sind zahlreiche Ansätze für das Cachen von Mikroprozessorsystemen bekannt. Viele Systeme verwenden getrennte Daten- und Programm-Caches. Dieser Ansatz ist eher unflexibel, da jeder Cache entweder Daten oder Programmen zugewiesen ist. Da bei Anwendungen das Verhältnis, das für einen effizienten Betrieb jeweils notwendig ist, variieren kann, sind getrennte Daten- und Programm-Caches möglicherweise nicht für unterschiedliche Anwendungen optimiert, und in der Tat sind sie für viele Anwendungen eher zu groß, um dadurch zu gewährleisten, dass alle Anwendungen schnell laufen. Separate Caches implizieren auch ein doppeltes Steuerungs-Overhead und verdoppeln das Memory-/Umgebungs-Overhead, beispielsweise die interne Steuerung, Wortleitungs-Decoder und Sense Amps.
-
Um den Platz auf dem Chip, der vom Cache verwendet wird, so klein wie möglich zu halten, verwenden viele Systeme kombinierte Daten- und Programm-Caches, die eher flexibler sind, da sie sowohl von der Daten- als auch der Programmseite des Mikroprozessors verwendet werden können. Viele Systeme ermöglichen auch eine Dedizierung bestimmter Wege eines Mehrwege-Cache, um entweder die Befehle für eine Programmabrufeinheit oder die Daten für eine Lade-/Speichereinheit im Cache zu speichern. Diese Dedizierung ist nötig, um eine ständige Ersetzung von zeitkritischen, im Cache gespeicherten Code-Abschnitten durch einen Zugriff auf Daten, die im Memory verstreut sind und somit eine geringe Trefferquote haben, zu verhindern. In solchen Systemen kann der Nutzer individuell, beispielsweise durch Software, die exakte Aufteilung der Cache-Abschnitte auf die einzelnen Mikroprozessor-Untereinheiten (Lade-/Speicher- vs. Abrufeinheit) bestimmen. Die Leistung kann in solchen Systemen schwach sein, da Daten- und Programmzugriffe möglicherweise gleichzeitig und parallel versucht werden, der Cache jedoch nur jeweils einen Zugriff auf einmal bewältigen kann. Somit beträgt die Bandbreite im Vergleich zu derjenigen bei Verwendung separater Caches nur etwa die Hälfte. Die Verwendung von Dualport-SRAMs benötigt viel mehr Platz und verbraucht mehr Leistung. Solche SRAMS würden auch viele potentiell schwierige Problemfälle erzeugen, die durch umgebende Steuerlogik gelöst werden müssten.
-
In der
US 5386547 A ist ein System zum Zugreifen auf einen Cache gezeigt. In dem System wird ein einzelner Ausgabe-Multiplexer verwendet, mit dessen Hilfe selektiert wird, ob Daten von mit einem Level-2-Cache assoziierten Daten-Leitungen zur Ausgabe verwendet werden sollen, oder - bei einem Cache-Miss - Daten von weiteren Leitungen, die mit einem Speicher eines anderen Hierarchie-Levels assoziiert sind, als der Level-2-Cache.
-
Die Erfindung hat zur Aufgabe, ein System zum Zugreifen auf einen Einzelport-Mehrwege-Cache zur Verfügung zu stellen, wobei bei einem aus Einzelportspeichern gebildeten Mehrwege-Cache gleichzeitig in dem Cache gespeicherte Daten und Programmbefehle ausgegeben werden können.
-
Die Erfindung erreicht dieses Ziel durch den Gegenstand des Anspruchs 1. Vorteilhafte Weiterbildungen der Erfindung sind in den Unteransprüchen angegeben.
-
Figurenliste
-
- 1 ist ein Blockschema, das ein System für den gleichzeitigen Zugriff auf einen Einzelport-Cache für sowohl Daten als auch Programmbefehle gemäß einem Ausführungsbeispiel darstellt.
- 2 ist ein Blockschema eines Systems für den gleichzeitigen Zugriff auf einen Einzelport-Cache für Daten und Programmbefehle gemäß einem Ausführungsbeispiel.
- 3 ist ein Ablaufschema, das ein Verfahren zum gleichzeitigen Zugreifen auf einen Einzelport-Cache für Daten und Programmbefehle in einem Ausführungsbeispiel darstellt.
- 4 ist ein Blockschema einer alternativen Anordnung an Multiplexern in 2.
-
Ausführliche Beschreibung
-
In der folgenden Beschreibung wird auf die begleitende Zeichnung Bezug genommen, die einen Teil dieser Beschreibung bildet, und die zur Erläuterung bestimmter Ausführungsformen gezeigt ist, die in die Praxis umgesetzt werden können. Diese Ausführungsformen werden in ausführlicher Einzelheit beschrieben, um den Fachmann in die Lage zu versetzen, die Erfindung in die Praxis umzusetzen, und selbstverständlich können auch andere Ausführungsformen verwendet werden und es können strukturelle, logische und elektrische Änderungen vorgenommen werden, ohne vom Bereich der Erfindung abzuweichen. Die folgende Beschreibung von Ausführungsbeispielen soll daher nicht als Beschränkung aufgefasst werden, und der Bereich der vorliegenden Erfindung wird durch die beigefügten Ansprüche definiert.
-
In einer Ausführungsform wird ein Einzelport-Cache verwendet, um gleichzeitig Daten und Befehle für ein System bereitzustellen. In dem System finden gleichzeitig Programmabrufzugriffe und Datenlade-/Datenspeicherzugriffe unter der Voraussetzung statt, das nur Einzelport-Memories verwendet werden. Ausgewählte Hardware, die den Einzelport-Cache umgibt, ist verdoppelt, um eine Ausnutzung vom im Wesentlichen der gesamten Bandbreite für gleichzeitige Programm- und Datenzugriffe zu ermöglichen, vorausgesetzt, es existiert eine Wegededizierung für Laden/Speichern und Programmdaten, wobei kaum Platz hinzugefügt wird und kein Dualport-Speicher oder separate Caches erforderlich sind. Der Ausdruck „gleichzeitig“, wie hierin verwendet, bezeichnet die Fähigkeit des Cache, Daten während eines einzigen Abruftakts bereitzustellen, und muss nicht so aufgefasst werden, dass Ereignisse exakt zur gleichen Zeit stattfinden müssen. In einigen Ausführungsformen kann der Zugriff ungefähr oder im Wesentlichen gleichzeitig stattfinden.
-
1 stellt ein System 100 dar, das einen Prozessor 110 einschließt. In einer Ausführungsform kann es sich bei dem Prozessor 110 um einen Mikroprozessor oder irgendeine andere Art von Prozessor handeln, der Daten entsprechend Programmbefehlen verarbeitet. Der Prozessor 110 weist einen Memory-Controller 115 auf oder ist mit diesem verkoppelt. Der Memory-Controller 115 kann eine Programmabrufeinheit und eine Datenlade-/Datenspeichereinheit aufweisen, die Adressen für den Zugriff auf Programme und Daten in einem Einzelport-Cache 120 bereitstellt. In einigen Ausführungsformen können weitere Schaltungseinrichtungen wie nachstehend dargestellt verwendet werden, um die Adressierung des Cache 120 zu multiplexen bzw. zu vervielfältigen und um zu bestimmen, ob sich abgefragte Informationen im Cache befinden. In einigen Ausführungsformen können solche Schaltungseinrichtungen Teil des Memory-Controller sein oder anderweitig mit diesem und dem Cache verkoppelt sein.
-
Ein Zugriff auf Informationen im Cache kann den gleichzeitigen Zugriff auf Daten und Programmbefehle beinhalten. In einer Ausführungsform ist der Cache ein Mehrwege-Cache, wobei Informationen von mehreren Datensätzen in den Wegen mit jedem Cache-Zugriff bereitgestellt werden. Ein Paar Multiplexer 125, einer für Daten und einer für Programmbefehle, wird verwendet, um Informationen, die vom Cache erhalten werden, zu sortieren, so dass abgefragte Daten und Programmbefehle gleichzeitig ausgegeben werden. Die Daten und die Programmbefehle können in verschiedenen Memory- oder Speichereinrichtungen 130 und 135 gespeichert werden, auf die der Cache 120 einen schnelleren Zugriff ermöglicht.
-
In weiteren Ausführungsformen können SRAMs mit drei Ausgangszuständen bzw. Tristate-Ausgängen verwendet werden. Die Tristate-Ausgänge können miteinander verdrahtet sein, der Ausgang kann entsprechend gesteuert werden, um nur einem SRAM einen Data-Drive zu ermöglichen. Ein Multiplexer kann auf verschiedene Weise implementiert sein, z.B. über Transfer-Gates und/oder Solution usw.) In einer weiteren Ausführungsform können zwei Tristate-Ausgänge einem Memory hinzugefügt und einzeln gesteuert werden.
-
In einer Ausführungsform ist die Bandbreite des Cache 120 effektiv verdoppelt. In einer Ausführungsform wird mindestens ein 2-Wege-Cache verwendet. Für mehr Flexibilität bei der Verwendung eines größeren Teils des Cache für Daten oder Programmbefehle können 4-Wege-, 8-Wege- oder höhere, beispielsweise 32-Wege-Caches verwendet werden. Es können auch andere als Zweierpotenzen verwendet werden, beispielsweise ein 6-Wege-Cache. Somit können mehrere Wege Daten zugewiesen werden, wenn eine Anwendung datenintensiv ist. Die Zuweisung der Wege zum Laden/Speichern oder Befehlen kann, falls gewünscht, für jede Anwendung neu programmiert werden, ohne die Systemarchitektur umgestalten zu müssen.
-
2 zeigt bei 200 ein weiteres Detail eines Systems, das einen gleichzeitigen Zugriff auf Daten und Programmbefehle von einem Einzelport-Cache zeigt. Ein Indexadressen-Multiplexer 210 empfängt einen Indexabschnitt von zwei Adressen vom Prozessor. Es ist zwar nur ein Weg dargestellt, aber dies wird für alle Wege durchgeführt. Auf die Adressen wird in einer Ausführungsform als Index Bezug genommen, einer für eine Ladung oder Speicherung von Daten 212 und der andere für einen Programmbefehlabruf bei 214. Die Indizes, die einen Tag-Abschnitt einschließen, werden an einen Mehrwege-Cache 215 angelegt, der in der Darstellung Z Zeilen von Daten mit y Bits in jeder Zeile und Z Zeilen von Programmbefehlen mit y Bits in jeder Zeile enthält. Die beiden verschiedenen Zeilenarten, Daten und Programmbefehle, sind jeweils mit einem Paar Ausgangsmultiplexern bei 220 verkoppelt, die y Bit Daten zum Laden/Speichern bei 222 und y Bit Programmbefehlabrufe bei 224 bereitstellen.
-
Da ein Cache die abgerufenen Informationen nicht unbedingt enthalten muss, ist auch ein Überprüfungsmechanismus vorgesehen. Abschnitte der Adressen, die verwendet werden, um auf den Cache zuzugreifen, enthalten auch Tag-Adressen-Bits. Tag-Adressen-Bits werden einem Tag-Adressen-Multiplexer 230 bereitgestellt, von dem zwar nur einer dargestellt ist, von denen aber für jeden Weg einer vorhanden ist. Sowohl Tag-Adressen-Bits zum Abrufen von Programmbefehlen bei 232 und zum Laden/Speichern von Daten 234 werden dem Multiplexer 230 bereitgestellt. Diese Bits werden gemultiplext und einem Tag-Bit-Abschnitt 235 zusammen mit der gemultiplexten Adresse über den Multiplexer 210 bereitgestellt. Ein Tag-Bit-Cache-Abschnitt 235 enthält Z Zeilen mit jeweils w Tag-Bits - Tag-Adresse, Valids, Dirty usw. Sie werden ferner Mehrfach-Komparatoren 240 bereitgestellt, jeweils einem für jeden Weg. Komparatoren 240 vergleichen die Tag-Adress-Bits vom Prozessor, der auf den Cache zuzugreifen versucht, mit denen, die im Cache gespeichert sind, um zu bestimmen, ob die Informationen, seien es nun Daten- oder Programmbefehle, derzeit im Cache 215 gespeichert sind. Die Komparatoren 240 sind mit den Ausgangs-Multiplexern 220 verkoppelt, um diese so zu steuern, dass sie die Daten und Befehle, die tatsächlich im Cache 215 gespeichert sind, bereitstellen. Eine Miss- oder No-Hit-Anzeige wird ausgegeben, wenn die Daten und/oder Befehle bei 222 und 224 ignoriert werden sollten. Die Komparatoren weisen zwei Ausgänge auf und steuern in einer Ausführungsform Laden/Speichern und Programm unabhängig voneinander. Die Steuerung beeinflusst den Multiplexer 220 und die Treffer-Logik 260. Es kann auch eine andere Logik, die in der Lage ist, Informationen zu vergleichen und für eine entsprechende Steuerung zu sorgen, anstelle des Komparators verwendet werden, falls gewünscht. Ebenso können viele verschiedene Cache-Hit- oder -Miss-Algorithmen verwendet werden.
-
Ein Konfigurationsblock 250 stellt eine Cache-Konfigurationssteuerung für die Multiplexer 210 und 230 bereit, um festzustellen, welche Informationssätze und Tag-Bits im Cache 215, 235 Daten entsprechen und welche Programmbefehlen entsprechen. Der Konfigurationsblock 250 und die Komparatoren 240 sind auch mit einem Cache-Hit- oder Cache-Miss-Block 260 verkoppelt, um sicherzustellen, dass Ergebnisse ignoriert werden, wenn die Tag-Bits keinen Cache-Hit festgestellt haben. Die Steuerung der Multiplexer 220 wird dementsprechend auch vom Konfigurationsblock 250 beeinflusst. Es existieren 2 Ausgänge für jeden Komparator für die Multiplexer 220 und nur ein Ausgang der Komparatoren darf von einem Hit aktiviert werden, da der andere für einen anderen Datentyp dediziert ist.
-
In einer Ausführungsform können Stillstandtakte und Wartetakte im Prozessor 110, beispielsweise einem Mikroprozessor, die auf Kollisionen im Cache zurückgehen, verhindert werden. Dies wird durch Verdoppeln der Adresspfade für jedes Daten/Tag-Array jedes Weges bewerkstelligt, wodurch eine Selektion möglich ist, wenn der Weg durch die Adresse der Lade/Speicher- oder Programmabrufeinheiten gesteuert werden sollte. Außerdem berücksichtigt die Steuereinheit, die auch dafür zuständig ist, den Weg-Hit in die Daten-Multiplexersignale zu übersetzen, welcher Weg für Laden/Speichern und Programmabrufen zugelassen ist, und steuert die beiden Daten-Multiplexer dementsprechend und unabhängig voneinander. Außerdem werden zwei Hit-Signale von der Steuerlogik erzeugt, eines für die Lade/Speicher- und eines für die Programmabrufeinheit, wobei wiederum die Wegededizierung für Lade/Speicher- und Programmabrufeinheiten berücksichtigt wird. Außerdem stellt die Steuerlogik sicher, dass in einem Fall, wo es gleichzeitig zu zwei Misses kommt, einem Miss im Lade/Speicher-Zugriff und einem im Programmabrufzugriff, die notwendigen Refills und möglicherweise ein Write-Back nacheinander durchgeführt werden. Solche Cache-Misses können auf bekannte Weise behandelt werden.
-
Eine typische Ausführungsform weist mindestens 4 oder 8 Wege auf, wobei zwei zwar auch gehen, aber nicht die Flexibilität bei der Zuweisung variierender Cache-Abschnitte bereitstellen. Andere Wegzahlen, wie 5, 6 oder 7, sind ebenfalls möglich. Ein Datenbus kann eine Breite von 16, 32 oder 64 Bits für einen Datenabschnitt des Cache und ungefähr 64 oder 128 oder sogar 256 Zeilen pro Weg aufweisen. Die Zahl der Zeilen pro Weg kann in verschiedenen Ausführungsformen viel größer oder kleiner sein. Jede Cache-Zeile kann in der Regel ein Mehrfaches der Datenbusbreite ausmachen, wie 4 x 64 Bits. Beispielsweise kann eine Cache-Zeile (gekennzeichnet durch einen Eintrag im Tag-Array) Daten, die 4 Zeilen entsprechen, im zugewiesenen Datenabschnitt aufweisen. In einem solchen Fall definieren die unteren Bits der Adresse, welcher Teil der Cache-Zeile gelesen werden soll, und die oberen Adress-Bits entscheiden über den Index. In einer Ausführungsform selektiert der gleiche Index den Tag-Eintrag in den Tag-Arrays, der nur einmal pro Cache-Zeile vorkommt. Der Tag-Eintrag enthält die Adress-Tags, in der Regel mit einer Breite von 20 Bits, je nach der Zahl der Cache-Zeilen und der Adressbusbreite des Prozessors. In einer Ausführungsform kann der Adressenraum von einer Adressbusbreite von 32 Bits oder in zukünftigen Ausführungsformen von mehr Bits adressiert werden. Zusätzlich speichert das Tag Informationen über den Status der Cache-Zeile, beispielsweise ob sie dirty und/oder valid ist. Das Tag kann auch Paritäts-Bits des Tag-Abschnitts und die Paritäten für die Datenabschnitte enthalten. Paritäts-Bits für Daten können alternativ mit den Daten gespeichert werden. Paritäts- und Fehlerkorrektur-Bits können nach Wunsch verwendet werden, dies ist jedoch kein Muss.
-
In weiteren Ausführungsformen kann das System 200 mehrere andere Caches einschließen, ebenso wie einen Speicher mit wahlfreiem Zugriff, einen entfernbaren Speicher und einen nicht-entfernbaren Speicher. Das System 200 kann eine Computer-Umgebung einschließen oder Zugriff auf diese haben, die einen Eingang, einen Ausgang und eine Kommunikationsverbindung aufweist. Das System kann in einer vernetzten Umgebung unter Verwendung einer Kommunikationsverbindung für den Fernanschluss eines oder mehrerer Computer operieren. Der fern stehende Computer kann unter anderem ein Personal Computer (PC), ein Server, ein Router, ein Netzwerk-PC, eine Peer-Einrichtung oder ein anderer üblicher Netzwerkknoten oder dergleichen sein. Die Kommunikationsverbindung kann ein Local Area Network (LAN), ein Wide Area Network (WAN) oder ein anderes Netzwerk sein.
-
3 ist ein Ablaufschema, das ein Verfahren 300 zum gleichzeitigen Zugreifen auf einen Mehrwege-Cache, der einen einzigen Port aufweist, darstellt. Bei 310 adressiert das Verfahren gleichzeitig einen Weg oder einen Datensatz und einen Weg oder einen Programmbefehlssatz im Mehrwege-Cache. Bei 320 wird auch auf Sätze mit Tag-Bits im Mehrwege-Cache zugegriffen. Das Verfahren bestimmt dann bei 330, ob gewünschte Daten und/oder Programmbefehle im Mehrwege-Cache vorhanden sind. Das Verfahren bestimmt dann bei 330, ob gewünschte Daten und/oder Programmbefehle im Mehrwege-Cache vorhanden sind. Bei 340 werden Daten und Programmbefehle, die aus dem Cache ausgelesen werden, so selektiert, dass sowohl Daten als auch Programmbefehle aus den Datensätzen im Mehrwege-Cache selektiert werden, vorausgesetzt, es wird festgestellt, dass sie vorhanden sind.
-
In einer weiteren Ausführungsform, die bei 400 in 4 dargestellt ist, können mehrere Busse als Alternative zu Multiplexern verwendet werden. Ein SRAM weist mehrere Wege auf, wie vom Weg 0 bei 410 bis zum Weg x bei 412 dargestellt. Jeder Weg weist einen ersten Ausgang OUT1 415 und einen zweiten Ausgang OUT2 bei 417 auf. Die Ausgänge sind mit einem Lade-/Speicherbus 425 und einem Programmbus 427 verkoppelt. Die Busse arbeiten in dieser Ausführungsform ähnlich wie Ausgangs-Multiplexer.