-
Gebiet der Erfindung
-
Die
vorliegende Erfindung betrifft allgemein integrierte Schaltungen
(ICs). Insbesondere betrifft die vorliegende Erfindung eine verbesserte
Architektur mit gemeinsam genutzten Speichern.
-
Hintergrund der Erfindung
-
1 zeigt
ein Blockdiagramm eines Teils eines herkömmlichen Ein-Chip-Systems (System-on-Chip,
SOC) 100, wie beispielsweise eines digitalen Signalprozessors
(DSP). Wie dargestellt, weist das SOC einen Prozessor 110 auf,
der mit einem Speichermodul 160 über einen Bus 180 verbunden
ist.
-
Das
Speichermodul speichert ein Computerprogramm mit einer Abfolge von
Anweisungen. Während
des Betriebs des SOC ruft der Prozessor die Anweisungen vom Speichermodul
ab und führt
diese zur Durchführung
der gewünschten
Funktion aus.
-
Ein
SOC kann mit mehreren Prozessoren versehen sein, die beispielsweise
das gleiche Programm ausführen.
Abhängig
von der Anwendung können
die Prozessoren verschiedene Programme ausführen oder dasselbe Programm
gemeinsam nutzten. Üblicherweise
ist jedem Prozessor für
eine verbesserte Performance sein eigenes Speichermodul zugeordnet,
weil auf ein Speichermodul während jeder
Taktzeit nur von einem einzigen Prozessor zugegriffen werden kann.
Wenn der Prozessor sein eigenes Speichermodul aufweist, braucht
daher der Prozessor nicht darauf zu warten, bis der Speicher frei
wird, da er der einzige Prozessor ist, der auf das ihm zugeordnete
Speichermodul zugreift. Die gesteigerte Performance wird jedoch
mit dem Verlust einer größeren Chipgröße erreicht,
da mehrfache Speichermodule für
jeden Prozessor nötig
sind.
-
Die
US 3,931,613 offenbart ein
Datenverarbeitungssystem, dessen Betriebslogik ausgeführt ist, einen überlappenden
Zugriff oder Abrufoperationen, wie beispielsweise den Zugriff auf
ein zweites Speichermodul mit einer Prozessoreinheit zu ermöglichen,
bevor eine Datenübertragung
in Bezug auf ein erstes Speichermodul beendet ist, und ein Auslesen des
zweiten Speichermoduls während
eines Zurückschreibezyklus
des ersten Speichermoduls durchgeführt werden kann, um die Gesamtverarbeitungszeit zu
reduzieren.
-
Wie
aus der oben erfolgten Diskussion offensichtlich ist, ist es wünschenswert,
ein System bereitzustellen, in dem die Prozessoren ein Speichermodul gemeinsam
benützen
können,
um die Chipgröße ohne
Leistungsnachteilen herkömmlicher
Ausgestaltungen zu verringern.
-
Zusammenfassung der Erfindung
-
Die
vorliegende Erfindung betrifft ein Verfahren für eine gemeinsame Nutzung eines
Speichermoduls durch mehrere Prozessoren, aufweisend: Unterteilen
des Speichermoduls in n Bereiche, wobei n = wenigstens 2, wodurch
es ermöglicht
wird, dass auf das Speichermodul von einem oder mehreren Prozessoren
gleichzeitig zugegriffen werden kann, Kartieren des Speichermoduls
zum Zuordnen aufeinanderfolgender Adressen zu wechselnden Bereichen des
Speichers, Speichern von Datenwörtern
in dem Speicher, wobei Datenwörter
in aufeinanderfolgenden Adressen in abwechselnden Bereichen aufgrund der
Kartierung des Speichers gespeichert werden, Bereitstellen eines
ersten Signalpfades, der, wenn ausgewählt, einen Cache mit einem
Prozessor und dem Speichermodul koppelt, wobei der Cache erlaubt,
dass der Prozessor eine Mehrzahl von Datenwörtern von verschiedenen Bereichen
gleichzeitig abrufen kann, Bereitstellen eines zweiten Signalpfades,
der den Prozessor mit dem Speichermodul koppelt wenn ausgewählt, und
Auswählen
des ersten Signalpfades im Falle einer Kollision und Auswählen des
zweiten Signalpfades, wenn keine Kollision vorherrscht.
-
Kurze Beschreibung der Zeichnungen
-
1 zeigt
ein Blockdiagramm eines herkömmlichen
SOC;
-
2 zeigt
ein System;
-
3-5 zeigen
einen Fluss einer FCU;
-
6 zeigt
ein System gemäß einer
Ausführungsform
der Erfindung;
-
7-8 zeigen
Flussdiagramme einer Entscheidungseinheit gemäß mehrerer Ausführungsformen
der Erfindung; und
-
9-10 zeigen
Speichermodule gemäß mehrerer
Ausführungsformen
der Erfindung.
-
Bevorzugte Ausführungsformen
der Erfindung
-
2 zeigt
ein Blockdiagramm eines Teils eines Systems 200.
-
Das
System weist beispielsweise mehrere digitale Signalprozessoren (DSPs)
für Anwendungen im
Bereich von digitalen Mehrfach-Anschluss Teilnehmeranschlussleitung
(DSL) auf einem einzigen Chip auf. Das System umfasst m Prozessoren 210, wobei
m eine ganze Zahl größer als
oder gleich 2 ist. Das System umfasst beispielsweise erste und zweite Prozessoren 210a-b
(m = 2). Mehr als zwei Prozessoren können auch verwendet werden.
-
Die
Prozessoren sind mit einem Speichermodul 260 über entsprechende
Speicherbusse 218a und 218b gekoppelt. Der Speicherbus
hat beispielsweise eine Datenbusbreite von 16 Bits. Busse mit anderen
Datenbreiten können
ebenfalls abhängig
von der Datenbreite jedes Datenbytes benutzt werden. Von den Prozessoren
abgerufene Datenbytes werden im Speichermodul gespeichert.
-
Die
Datenbytes weisen wahlweise Programmanweisungen auf, wobei die Prozessoren
die Anweisungen von dem Speichermodul für eine Ausführung abrufen.
-
Wahlweise
teilen sich die Prozessoren das Speichermodul ohne einer bemerkbaren
Verringerung der Performance, wodurch die Notwendigkeit mehrere
Speichermodule für
jeden Prozessor vorzusehen vermieden wird.
-
Eine
bemerkbare Verringerung der Performance wird durch eine Aufteilung
des Speichermoduls in eine Anzahl n unabhängig betreibbarer Bereiche 265 vermieden,
wobei n eine natürliche
Zahl größer oder
gleich 2 ist. Bevorzugt entspricht die Anzahl n der Anzahl von Prozessoren
im System (d.h. n = m). Da die Speicherbereiche unabhängig voneinander
funktionieren, können
Prozessoren gleichzeitig auf verschiedene Bereiche des Speichermoduls während eines
Taktzyklus zugreifen.
-
Ein
Speicherbereich kann in eine Anzahl x verschiedener zugreifbarer
Blöcke 275a-p
unterteilt werden, wobei x eine natürliche Zahl größer gleich
1 ist. Wahlweise kann jeder Bereich in acht unabhängig zugreifbare
Blöcke
unterteilt werden. Im Allgemeinen gilt, je größer die Anzahl der Blöcke ist,
je geringer ist die Wahrscheinlichkeit einer Kollision. Die Anzahl
der Blöcke
ist gemäß einer
Ausführungsform
derart ausgewählt,
um die Performance zu optimieren und Kollisionen zu verringern.
-
Wahlweise
hat jeder Prozessor (210a oder 210b) einen Bus
(218a oder 218b), der mit jedem Bereich gekoppelt
ist. Die Blöcke eines
Speicherarray haben jeweils beispielsweise eine Steuerschaltung 278,
um geeignet Daten über
den Bus an die Prozessoren zu übermitteln.
-
Die
Steuerschaltung umfasst beispielsweise eine Multiplexerschaltung
oder Tri-State-Puffer, um die Daten an den gewünschten Prozessor zu leiten. Jeder
Bereich ist beispielsweise in acht Blöcke unterteilt. Indem unabhängige Blöcke innerhalb
eines Bereichs vorgesehen sind, können die Prozessoren in Vorteilhafterweise
auf verschiedene Blöcke
zugreifen, unabhängig
davon, ob dieser Teil desselben Bereichs sind oder nicht. Dies erhöht weiter
die Systemperformance durch eine Reduzierung potenzieller Konflikte
zwischen den Prozessoren.
-
Des
Weiteren ist der Speicher derart kartiert, sodass Kollisionsbehaftete
Speicheradressen zwischen den verschiedenen Speicherbereichen abgewechselt
werden. Beispielsweise in einem Zwei-Bereichs-Speichermodul (beispielsweise
Bereich 0 und Bereich 1) würde
eine ein Bereiche (Bereich 0) den geraden Adressen zugeordnet werden,
während
die ungeraden Adressen dem anderen Bereich (Bereich 1) zugewiesen
werden. Dies hat zur Folge, dass Datenbytes in nachfolgenden Adressen
in alternierenden Speicherbereichen gespeichert werden, sodass ein
Datenbyte 1 im Bereich 0, ein Datenbyte 2 im Bereich 1, ein Datenbyte
3 im Bereich 0 usw. gespeichert sind. Die Datenbytes weisen Anweisungen
eines Programms auf. Da die Programmanweisungen sequenziell mit
Ausnahme von Sprüngen
(beispielsweise Verzweigungs- und Schleifenanweisungen) ausgeführt werden,
würde ein
Prozessor im Allgemeinen auf verschiedene Bereiche des Speichermoduls
nach jedem Zyklus während
der Programmausführung
zugreifen.
-
Durch
Synchronisieren oder Staffeln der Prozessoren, um das Programm derart
auszuführen, dass
die Prozessoren auf ver schiedene Speicherbereiche im selben Taktzyklus
zugreifen, können
mehrere Prozessoren das im Speichermodul 260 gespeicherte
Programm gleichzeitig ausführen.
-
Eine
Flusskontrolleinheit (FCU) 245 synchronisiert den Zugriff
der Prozessoren auf verschiedene Speicherblöcke, um Speicherkonflikte oder
Kollisionen zu vermeiden. Im Falle eines Speicherkonflikts (beispielsweise
wenn zwei Prozessoren gleichzeitig auf denselben Block zugreifen),
dann sperrt die FCU einen der Prozessoren (beispielsweise durch
das Einfügen
eines Waitstate oder Taktzyklus) und erlaubt den anderen Prozessor,
auf den Speicher zuzugreifen. Dies sollte die Prozessoren derart
synchronisieren, dass diese auf verschiedene Speicherbereiche im
nächsten
Taktzyklus zugreifen. Einmal synchronisiert, können beide Prozessoren auf
das Speichermodul während
desselben Taktzyklus zugreifen bis ein Speicherkonflikt, beispielsweise
bedingt durch eine Sprunganweisung, auftritt. Wenn beide Prozessoren
(210a und 210b) während desselben Taktzyklus
versuchen, auf den Block 245a zuzugreifen, dann wird beispielsweise
für den
Prozessor 210b für
einen Takt ein Waitstate eingefügt,
sodass der Prozessor 210a als erstes auf den Block 275a zugreifen
kann. Im nächsten
Taktzyklus greift der Prozessor 210a auf den Block 275b und
der Prozessor 210b greift auf den Block 275a zu.
Die Prozessoren 210a und 210b sind demnach synchronisiert,
um auf verschiedene Speicherbereiche in nachfolgenden Taktzyklen
zuzugreifen.
-
Wahlweise
können
die Prozessoren mit entsprechenden kritischen Speichermodulen 215 ausgestattet
sein. Das kritische Speichermodul ist beispielsweise kleiner als
das Hauptspeichermodul 260 und wird zur Speicherung von
Programmen oder von Unterprogrammen verwendet, auf welche häufig die Prozessoren
zugreifen (beispielsweise kritische MIPS). Die Verwendung von kritischen
Speichermodulen erhöht
die Systemperformance durch Verringerung von Speicherkonflikten,
ohne eine deutliche Vergrößerung der
Chipgröße in Kauf
nehmen zu müssen.
-
Eine
Steuerschaltung 214 ist vorgesehen. Die Steuerschaltung
ist mit einem Bus 217 und 218 gekoppelt, um geeignet
Daten vom Speichermodul 260 oder vom kritischen Speichermodul 215 zu
multiplexen. Wahlweise umfasst die Steuerschaltung Tri-State-Ppuffer, um den geeigneten
Bus mit dem Prozessor zu koppeln oder zu entkoppeln.
-
Wahlweise
ist die FCU als Zustandsmaschine ausgeführt. 3 zeigt
einen allgemeinen Datenfluss einer FCU Zustandsmaschine. Wie dargestellt, steuert
die FCU die Zugriffe der Prozessoren (beispielsweise A oder B).
Beim Schritt 310 wird die FCU initialisiert. Während des
Betriebs rufen die Prozessoren entsprechende Speicheradressen (AAdd
oder BAAdd) entsprechend dem Speicherzugriff während des nächsten Taktzyklus auf. Die
FCU vergleicht AAdd und BAdd beim Schritt 320, um festzustellen, ob
ein Speicherkonflikt besteht oder nicht (beispielsweise ob die Prozessoren
auf dieselben oder verschiedene Speicherblöcke zugreifen). Wahlweise überprüft die FCU
die Adressen, ob auf eine der kritischen Speichermodule zugegriffen
wird (nicht dargestellt). Wenn entweder der Prozessor A oder der
Prozessor B auf seinen entsprechenden kritischen Speicher zugreift,
dann liegt kein Konflikt vor.
-
Wenn
kein Konflikt vorliegt, dann greifen die Prozessoren auf das Speichermodul
im selben Zyklus beim Schritt 340 zu. Wenn ein Konflikt
besteht, dann bestimmt die FCU die Zugriffspriorität der Prozessoren
beim Schritt 350. Wenn der Prozessor A die höhere Priorität hat, dann
erlaubt die FCU dem Prozessor A auf den Speicher zuzugreifen, während der Prozessor
B einen Waitstate ausführt,
Schritt 360. Wenn der Prozessor B die höhere Priorität hat, dann greift
der Prozessor B auf den Spei cher zu, während der Prozessor A einen
Waitstate ausführt,
Schritt 370.
-
Nach
dem Schritt 340, 360 oder 370 kehrt die FCU
zum Schritt 320 zurück,
um die Adressen für den
nächsten
Speicherzugriff durch die Prozessoren zu vergleichen. Beispielsweise
wenn ein Konflikt besteht, so wie beim Schritt 360, dann
wird ein Waitstate für
den Prozessor B eingefügt,
während
der Prozessor A bei der Adresse AAdd auf den Speicher zugreift.
Somit sind beide Prozessoren synchronisiert, um auf verschiedene
Speicherblöcke
in nachfolgenden Zyklen zuzugreifen.
-
4 zeigt
einen Datenfluss 401 einer FCU. Im Falle eines Konflikts
weist die FCU die Zugriffspriorität beim Schritt 460 durch Überprüfen des
Prozessors A zu, um zu ermitteln, ob er einen Sprung ausgeführt hat
oder nicht. Wahlweise, wenn der Prozessor B einen Sprung ausgeführt hat,
dann wird der Prozessor B gesperrt (beispielsweise durch Ausführen eines
Waitstate) während
dem Prozessor A die Zugriffspriorität erteilt wird. Ansonsten wird
der Prozessor A gesperrt und dem Prozessor B wird die Zugriffspriorität gewährt.
-
Wahlweise
vergleicht die FCU die Adressen der Prozessoren A und B im Schritt 440,
um zu ermitteln, ob die Prozessoren auf denselben Speicherblock
zugreifen. In dem Fall, dass die Prozessoren auf verschiedene Speicherblöcke zugreifen
(d.h. kein Konflikt), dann erlaubt die FCU beiden Prozessoren gleichzeitig
auf den Speicher beim Schritt 430 zuzugreifen. Wenn ein
Konflikt besteht, dann vergleicht die FCU beispielsweise die geringwertigsten
Bits der aktuellen und der vorhergehenden Adressen des Prozessors
A, um die Zugriffspriorität
im Schritt 460 zu ermitteln. Wenn die geringwertigsten
Bits nicht gleich sind (d.h. die aktuelle und die vorhergehenden Adressen
sind fortlaufend) dann kann der Prozessor B den Konflikt durch eine Ausführung eines
Sprungs verursacht haben. Somit fährt die FCU mit Schritt 470 weiter
und sperrt den Prozessor B während
sie dem Prozessor A erlaubt, auf den Speicher zuzugreifen. Wenn
die geringwertigsten Bits gleich sind, dann wird der Prozessor A
gesperrt und der Prozessor B greift auf den Speicher zu, Schritt 480.
-
5 zeigt
eine FCU 501. Vor dem Betrieb wird die FCU beim Schritt 510 initialisiert.
Beim Schritt 520 vergleicht die FCU die Adressen der Prozessoren,
um zu ermitteln, ob diese auf verschiedene Speicherblöcke zugreifen.
Wenn die Prozessoren auf verschiedene Speicherblöcke zugreifen, dann wird beiden
Prozessoren der Zugriff erlaubt, Schritt 530. Wenn aber
die Prozessoren auf denselben Speicherblock zugreifen, dann besteht
ein Konflikt. Während eines
Konfliktes ermittelt die FCU, welcher der Prozessoren den Konflikt
verursacht hat, beispielsweise durch einen Sprung. Wahlweise bei
den Schritten 550 und 555 werden die geringwertigsten
Bits der aktuellen und vorhergehenden Adressen der Prozessoren verglichen.
Wenn der Prozessor A den Sprung verursacht hat (beispielsweise wenn
die geringwertigsten Bits der vorhergehenden und aktuellen Adresse
des Prozessors A gleich sind während
die geringwertigsten Bits der vorhergehenden und aktuellen Adresse
des Prozessors B unterschiedlich sind) geht die FCU zum Schritt 570 über. Beim
Schritt 570 sperrt die FCU den Prozessor A und erlaubt
dem Prozessor B beim Schritt 570 auf den Speicher zuzugreifen. Wenn
der Prozessor B den Sprung verursacht hat, dann sperrt die FCU den
Prozessor B während
sie dem Prozessor A erlaubt, beim Schritt 560 auf den Speicher
zuzugreifen.
-
Es
kann vorkommen, dass beide Prozessoren einen Sprung durchgeführt haben.
In diesem Fall fährt
die FCU beim Schritt 580 fort und durchsucht ein Prioritätsregister,
welches eine Information darüber
enthält,
welcher Prozessor Priorität
hat.
-
Wahlweise
wird das Prioritätsregister
hin und her geschaltet, um die Priorität zwischen den beiden Prozessoren
abzuwechseln. Wie es in der 5 dargestellt
ist, schaltet die FCU das Prioritätsregister beim Schritt 580 um,
bevor es ermittelt, welcher Prozessor die Priorität hat. Alternativ
kann das Prioritätsregister
umgeschaltet werden, nachdem die Priorität ermittelt wurde. Wahlweise
deutet eine 1 im Prioritätsregister
an, dass der Prozessor A die Priorität hat (Schritt 585)
während
eine 0 andeutet, dass der Prozessor B die Priorität hat (Schritt 590).
Das Verwenden einer 1, um anzuzeigen, dass der Prozessor B die Priorität hat, und
eine 0, um anzuzeigen, dass A die Priorität hat, ist auch verwendbar.
Dasselbe Verfahren kann auch im Falle eines bestehenden Konflikts
durchgeführt
werden, wenn kein Prozessor einen Sprung verursacht hat (beispielsweise
geringwertigste Bits der aktuellen und vorhergehenden Adresse des
Prozessors A oder des Prozessors B sind nicht dieselben).
-
Andere
Arten von Entscheidungsprogrammen können ebenfalls durch die FCU
verwendet werden, um die Prozessoren zu synchronisieren. Die Prozessoren
können
einem spezifischen Prioritätslevel
gegenüber
dem anderen Prozessor oder den anderen Prozessoren zugeordnet werden.
-
6 zeigt
ein Blockdiagramm eines Teils eines Systems 600 gemäß einer
Ausführungsform der
Erfindung.
-
Das
System umfasst beispielsweise mehrere digitale Signalprozessoren
(DSPs) für
Anwendungen im Bereich von digitalen Mehrfachanschluss-Teilnehmeranschlussleitungen
(DSL) auf einem einzigen Chip. Das System umfasst m Prozessoren 610,
wobei m eine ganze Zahl gleich oder größer als 2 ist. Das System umfasst
beispielsweise erste und zweite Prozessoren 610a bis b (m
= 2). Mehr als zwei Prozessoren können auch verwendet werden.
-
Ein
Speichermodul 660 ist vorgesehen, um gemeinsam von den
Prozessoren benutzt zu werden. Datenwörter, auf die die Prozessoren
zugreifen, sind im Speichermodul gespeichert. Ein Datenwort umfasst
eine Gruppe von Bits (beispielsweise 32 Bits). In einer Ausführungsform
weisen die Datenwörter Programmanweisungen
auf, auf die von den Prozessoren im Speichermodul über Speicherbusse
(beispielsweise 618a und 618b) für eine Ausführung zugegriffen
werden. Die Datenwörter
können
ebenfalls Applikationsdaten aufweisen.
-
Gemäß einer
Ausführungsform
der Erfindung teilen sich die Prozessoren das Speichermodul ohne
eine bemerkbare Verringerung der Performance, wodurch die Notwendigkeit
mehrfacher Speichermodule für
jeden Prozessor vorzusehen vermieden wird.
-
Eine
bemerkbare Verringerung der Performance wird durch eine Aufteilung
des Speichermoduls in eine Anzahl n unabhängig betreibbarer Bereiche
(beispielsweise 665a und 665b) vermieden, wobei
n eine Zahl größer oder
gleich 2 ist. Bevorzugt entspricht die Anzahl n der Anzahl von Prozessoren im
System (d.h. n = m). Da die Speicherbereiche unabhängig voneinander
funktionieren, können
Prozessoren gleichzeitig auf verschiedene Bereiche des Speichermoduls
während
eines Taktzyklus zugreifen.
-
Gemäß einer
weiteren Ausführungsform können die
Bereiche in eine Anzahl x verschiedener zugreifbarer Blöcke 665a-p
unterteilt werden, wobei x eine natürliche Zahl größer gleich
1 ist.
-
Ein
Bereich ist beispielsweise in acht unabhängig zugreifbare Blöcke unterteilt.
Im Allgemeinen gilt, je größer die
Anzahl der Blöcke
ist, je geringer ist die Wahrscheinlichkeit einer Kollision. Die
Anzahl der Blöcke
ist gemäß einer
Ausführungsform
derart ausgewählt,
um die Performance zu optimieren und Kollisionen zu verringern.
-
Die
Blöcke
des Speicherarray haben beispielsweise Kontrollschaltungen 668,
um geeignet Daten über
die Speicherbusse (beispielsweise 618a oder 618b)
an die Prozessoren (610a oder 610b) zu übermitteln.
Die Steuerschaltung umfasst beispielsweise Multiplexerschaltungen
oder Tri-State-Puffer, um die Daten an den gewünschten Prozessor zu leiten.
Indem unabhängige
Blöcke
innerhalb eines Bereichs vorgesehen sind, können die Prozessoren vorteilhafterweise
auf verschiedene Blöcke
zugreifen, egal ob diese Teil desselben Bereichs sind oder nicht.
-
Dies
erhöht
weiter die Systemperformance durch eine Reduzierung potenzieller
Konflikte zwischen den Prozessoren.
-
Des
Weiteren ist der Speicher derart kartiert, sodass einen Konflikt
aufweisende Speicheradressen zwischen den verschiedenen Speicherbereichen abgewechselt
werden. Beispielsweise in einem Zweibereichspeichermodul (beispielsweise
Bereich 0 und Bereich 1) würde
einem Bereich (Bereich 0) die geraden Adressen zugeordnet werden,
während
die ungeraden Adressen dem anderen Bereich (Bereich 1) zugewiesen
werden. Dies hat zur Folge, dass Datenbits in nachfolgenden Adressen
in alternierenden Speicherbereichen gespeichert werden, sodass ein Datenwort
1 im Bereich 0, ein Datenwort 2 im Bereich 1, ein Datenwort 3 im
Bereich 0 usw. gespeichert sind. In einer Ausführungsform weisen die Datenwörter Programmanweisungen
auf. Da die Programmanweisungen sequenziell mit Ausnahme von Sprüngen (beispielsweise
Verzweigung- und Schleifenanweisungen) ausge führt werden, würde ein
Prozessor im Allgemeinen auf verschiedene Bereiche des Speichermoduls
nach jedem Zyklus während
der Programmausführung
zugreifen. Durch Synchronisieren oder Staffeln der Prozessoren,
um das Programm derart auszuführen,
dass die Prozessoren auf verschiedene Speicherbereiche im selben
Taktzyklus zugreifen, können
mehrere Prozessoren das im Speichermodul 660 gespeicherte
Programm gleichzeitig ausführen.
-
Eine
Entscheidungssteuereinheit (ACU) 645 ist vorgesehen, die
mit dem Prozessor über
den Datenbus und mit dem Speichermodul über den Speicherbus gekoppelt
ist. Die ACU steuert den Zugriff auf den Speicher durch die Prozessoren.
Im Falle eines Speicherkonflikts (beispielsweise greifen zwei Prozessoren
gleichzeitig auf denselben Bereich zu) ermittelt die ACU, welcher
Prozessor die Priorität hat,
um auf das Speichermodul zuzugreifen, während die anderen Prozessoren
gesperrt sind (beispielsweise durch Ausführen eines Waitstate oder Wartezyklus).
Dies synchronisiert im Allgemeinen die Prozessoren, um auf verschiedene
Bereiche im nachfolgenden Taktzyklus zuzugreifen.
-
Gemäß einer
Ausführungsform
ist ein Prioritätsregister
vorgesehen, um anzugeben, welcher Prozessor Priorität hat. Im
Falle eines Systems mit zwei Prozessoren kann das Prioritätsregister
ein Bit (P Bit) aufweisen. Zusätzliche
Bits können
hinzukommen, um eine zusätzliche
Anzahl von Prozessoren zu berücksichtigen.
Das Prioritätsregister
wird nach dem Auftreten einer Kollision aktualisiert, um die Priorität zwischen
den Prozessoren abzuwechseln.
-
Beispielsweise
deutet ein Wert 1' im
P Bit an, dass der erste Prozessor Priorität hat, und eine 0' deutet an, dass
der zweite Prozessor Priorität
hat. In jedem Zyklus, in dem eine Kollision auftritt, wird das P
Bit hin- und hergeschaltet, um die Priorität der Prozessoren umzuschalten.
Andere Arten von Entscheidungsprogrammen können ebenfalls verwendet werden.
-
Wahlweise
können
die Prozessoren mit entsprechenden kritischen Speichermodulen 615 ausgestattet
sein. Das kritische Speichermodul ist beispielsweise kleiner als
das Hauptspeichermodul 660 und wird zur Speicherung von
Programmen oder von Unterprogrammen verwendet, auf die die Prozessoren
häufig
zugreifen (beispielsweise kritische MIPS). Die Verwendung von kritischen
Speichermodulen erhöht
die Systemperformance durch Verringerung von Speicherkonflikten,
ohne eine deutliche Vergrößerung der
Chipgröße in Kauf
nehmen zu müssen.
-
Die
ACU 645 ist mit n Speicherlogikeinheiten (CLUs) gekoppelt,
und zwar einer für
jeden der n Prozessoren. Die ACU weist beispielsweise eine erste CLU 648a für den ersten
Prozessor 610a und eine zweite CLU 648b für den zweiten
Prozessor 610b auf. Ist eine CLU aktiviert, dann ist dem
entsprechenden Prozessor der Zugang zum Speichermodul erlaubt. In
einer Ausführungsform
ist die CLU mit einem Prozessor und mit den n Bereichen des Speichermoduls
gekoppelt, um dem Prozessor gleichzeitig Zugriff auf die n Speicherbereiche
zu erlauben. Da die Bandbreite eines Prozessors gleich der Bandbreite des
Speicherbereichs ist, erlaubt die CLU dem Prozessor mehr Wörter vom
Speicher abzurufen als nötig.
In einer Ausführungsform
kann der Prozessor potenziell zweimal so viele Wörter als nötig abrufen.
-
Die
CLU weist erste (Cache) und zweite (normal) Signalpfade auf. Der
Cache-Signalpfad weist beispielsweise ein Cacheregister (633a oder 633b) und
einen Multiplexer (636a oder 636b) auf. Wenn der
Cachepfad ausgewählt
ist, dann greift der mit der CLU gekoppelte Prozessor auf die ersten
und zweiten Speicherbereiche (665a bis b) zu. Gemäß einer Ausführungsform
wird auf den aktuelle Adressenplatz (Addr), wie vom Prozessor spezifiziert,
und auf die nächste
Adresse (Addr+1) zugegriffen.
-
Der
Multiplexer wählt
das Wort bei der Adresse (Addr+1) aus und speichert es im Cache, während das
Wort bei der aktuellen Adresse (Addr) zum Prozessor weiter geleitet
wird. Die Adresse des Wortes, das im Cache gespeichert ist, wird
beispielsweise in einem Cache-Adressregister (640a oder 640b)
gespeichert. Ist der zweite Pfad (normal) ausgewählt, dann greift der Prozessor
auf den aktuellen Speicherplatz zu. Die CLU übermittelt das Datenwort des
aktuellen Speicherplatzes an den Prozessor über den zweiten Signalpfad.
Indem ein Cache zum Speichern von Datenwörtern in nachfolgenden Adressen
vorgesehen ist, wird die Wahrscheinlichkeit eines Datenzugriffs
auf den Speicher verringert, wodurch die Wartezeit, bedingt durch
einen Speicherkonflikt, reduziert wird.
-
Die
Prozessoren können
mit entsprechenden kritischen Speichermodulen 615a und 615b ausgestattet
sein. Das kritische Speichermodul ist beispielsweise kleiner als
das Hauptspeichermodul 660 und wird für die Speicherung von Daten
(beispielsweise Programme oder Unterprogramme) verwendet, auf die
häufig
die Prozessoren zugreifen (beispielsweise kritische MIPS). Die Verwendung
von kritischen Speichermodulen erhöht die Systemperformance, indem
Speicherkonflikte reduziert werden, ohne wesentlich die Chipgröße zu erhöhen.
-
7 zeigt
einen Datenfluss einer ACU Zustandsmaschine gemäß einer Ausführungsform
der Erfindung. Wie dargestellt, steuert die ACU die Zugriffe der
ersten und zweiten Prozessoren (A oder B). Die ACU wird beispielsweise
vor einer Systemausführung
(beispielsweise System power up) initialisiert (710).
-
Die
Initialisierung umfasst beispielsweise das Setzen des Prioritätsbits,
um anzuzeigen, welcher Prozessor im Falle eines Speicherkonflikts
Priorität
hat. Das Prioritätsregister
ist beispielsweise derart gesetzt, dass der Prozessor A Priorität hat.
-
Während des
Betriebs des Systems rufen die Prozessoren entsprechende Speicheradressen (AAddr
oder BAddr, die die Speicheradressen repräsentieren, die aktuell vom
Prozessor A und Prozessor B aufgerufen werden) auf, die einem Speicherzugriff
im nächsten
Taktzyklus entsprechen. Die ACU ermittelt bei den Schritten 720 und 722,
ob ein Speicherkonflikt vorliegt oder nicht, beispielsweise ob die Prozessoren
auf denselben Speicherbereich zugreifen oder nicht. Der Speicherbereich
stimmt gemäß einer
Ausführungsform
mit einem Speicherblock überein.
In einer anderen Ausführungsform
stimmt der Speicherbereich mit Speicherblöcken in verschiedenen Bereichen überein,
wobei die Speicherblöcke nachfolgende
Adressen aufweisen. Wenn kein Konflikt vorliegt, dann greifen die
Prozessoren A und B auf entsprechende Bereiche des Speichermoduls
beim Schritt 750 zu. Die CLUs der Prozessoren A und B sind
aktiviert, wobei die normalen Signalpfade ausgewählt sind. Daher ruft jeder
Prozessor Datenwörter von
den entsprechenden Speicherbereichen bei den Adressen Addr und BAddr
ab.
-
Wenn
eine Kollision vorliegt, dann überprüft die ACU
das Prioritätsregister,
um zu entscheiden, welcher Prozessor Zugriffspriorität hat, Schritt 726. Dem
Prozessor P mit der Zugriffspriorität (beispielsweise Prozessor
A) wird Zugriff auf den Speicher erlaubt, während der andere Prozessor
P' mit geringerer
Priorität
beim Schritt 728 einen Waitstate (beispielsweise Prozessor
B) ausführt.
Daher, wenn die Prozessoren anschließend auf Datenwörter in
aufeinanderfolgenden Plätzen
in den nächsten
Zyklen zugreifen, werden auf verschiedene Bereiche ohne Ausführung von
Waitstates zugegriffen. Durch Synchronisieren oder Staffeln der
Prozessoren für
ein Ausführen
des Programms derart, dass die Prozessoren auf verschiedene Speicherbereiche
in demselben Zyklus zugreifen, können
mehrere Prozesse dasselbe in dem Speichermodul 660 gespeicherte Programm
gleichzeitig ohne Kollision ausführen.
-
Die
CLU des Prozessors P wird aktiviert, wobei der Cache-Signalpfad ausgewählt ist,
Schritt 730. Die Daten von der augenblicklichen Adresse
PAddr und der nächsten
nachfolgenden Adresse PAddr+1 werden aus den Speicherbereichen ausgelesen.
Die Daten der augenblicklichen Adresse PAddr wird an den Prozessor
P für einen
Zugriff übermittelt
und Daten der nächsten
Adresse PAddr+1 werden in das Cache-Register gespeichert. Die ACU
aktualisiert die Priorität
beim Schritt 332 für
die nächste
Kollisionsauswertung beim Schritt 722.
-
Die
ACU ermittelt beim Schritt 734, ob die neue Adresse PAddr,
die durch den Prozessor im nächsten
Zyklus spezifiziert wird, mit der Adresse der Cache-Daten (d.h.
dem Cache-Treffer, engl.: cache hit) übereinstimmt. Wenn ein Cache-Verfehlen
(engl.: chache miss) auftritt, dann wird der Vorgang durch Auswertung
der durch die Prozessoren A und B spezifizierten Adressen für eine Kollision
in dem Schritt 720 wiederholt. Gemäß einer Ausführungsform
werden die Daten in dem dem Prozessor P zugeordneten Cache-Register
verworfen.
-
Ein
Cache-Treffer würde
es dem Prozessor P ermöglichen,
mit der Ausführung
durch Abfragen der Daten aus dem Cache anstatt aus dem Speicher fortzufahren,
wodurch das Hinzufügen
eines Waitstate beim Schritt 736 vermieden wird. In einer
Ausführungsform
wird die CLU des Prozessors P' aktiviert, wobei
der Cache-Signalpfad beim Schritt 734 ausgewählt wird.
-
Die
Daten der aktuellen Adresse PAddr und der nächsten Adresse PAddr+1 werden
aus den Speicherbereichen ausgelesen. Die Daten der aktuellen Adresse
PAddr werden zum Prozessor P für
einen Zugriff übermittelt
und die Daten der nächsten Adresse
PAddr+1 werden im Cache-Register gespeichert, der dem Prozessor
P' zugeordnet ist.
Liegt ein Cache-Treffer für
den Prozessor P' im
nächsten
Zyklus vor, dann wird auf die Cache-Daten vom Prozessor P' beim Schritt 740 zugegriffen.
-
Auf
die Daten der aktuellen Adresse PAddr des Prozessors P wird vom
Prozessor zugegriffen und die Daten der nächsten Adresse PAddr+1 werden
im dem Prozessors P zugeordneten Cache-Register gespeichert.
-
Es
besteht keine Notwendigkeit, einen Kollision zu überprüfen, da lediglich ein Prozessor
auf den Speicher zugreift. Die Bestimmung eines Cache-Treffers für den Prozessor
P wird in dem Schritt 734 wiederholt. Wenn ein Cache-Verfehlen
für P' in dem Schritt 738 auftritt,
dann wiederholt die ACU in einem Schritt den gesamten Vorgang.
-
In
einer weiteren, in der 8 dargestellten Ausführungsform
weist die ACU den Cache-Signalpfad für jeden Prozessor auf, wobei
der Cache-Speichersignalpfad ein Auslesen von mehr als vom Prozessor
verlangten Datenwörtern
aus dem Speicher ermöglicht.
Der Cache-Signalpfad weist beispielsweise ein Cache-Register und einen
Multiplexer. Während
des Betriebs des Systems werden die von den Prozessoren A und B
aufgerufenen Adressen auf eine Kollision bei den Schritten 820 und 822 ausgewertet.
Wenn eine Kollision besteht, dann wird die Priorität festgesetzt,
und Waistates für
den Prozessor mit der niedrigeren Priorität eingefügt, wie es in 7 obenstehend
beschrieben ist.
-
Wenn
keine Kollision besteht, dann werden die den beiden Prozessoren
zugeordneten Caches auf einen Cache-Treffer beim Schritt 852 ausgewertet.
-
Wenn
keine Cache-Treffer beobachtet werden, dann rufen die Prozessoren
A und B entsprechende Bereiche des Speichermoduls über entsprechende
Cache-Signalpfade beim Schritt 850 auf. Gemäß einer
Ausführungsform
werden die CLUs der Prozessoren A und B aktiviert, wobei die Cache-Pfade
ausgewählt
sind. Die Daten der aktuellen Speicheradressen (AAddr und BAddr)
werden zu den entsprechenden Prozessoren für einen Zugriff übermittelt,
und Daten der nächsten
nachfolgenden Adressen (AAddr+1 und BAddr+1 werden in den entsprechenden
Cache-Registern gespeichert. Wenn Cache-Treffer beider Prozessoren
erkannt werden, dann werden auf die entsprechenden Cache-Inhalte von
den Prozessoren beim Schritt 862 zugegriffen, und der Vorgang
beim Schritt 820 wiederholt.
-
Wenn
ein Cache-Treffer nur für
einen der Prozessoren erkannt wird, dann kann der Speicherzugriff
für den
anderen Prozessor ohne der Notwendigkeit einer Kollisionsüberprüfung weitergeführt werden,
da nur ein Prozessor auf den Speicher zugreift. Wird beispielsweise
ein Cache-Treffer des Prozessors A und ein Cache-Verfehlen des Prozessors B
entdeckt, dann wird auf den Inhalt des dem Prozessor A zugeordneten
Cache zugegriffen, während
auf die Daten der aktuellen Speicheradresse BAddr vom Prozessor
B zugegriffen wird, Schritt 854. Daten des Speichers bei
dem nächsten
Platz BAddr+1 werden in dem dem Prozessor B zugeordneten Cache gespeichert.
-
Beim
nächsten
Zyklus wird der Cache des Prozessors B wieder auf einen Cache-Treffer
hin beobachtet. Wenn ein Cache-Treffer erfolgt, dann wird der Cache-Inhalt
für den
Prozessor B beim Schritt 856 abgerufen. Die Daten des Speichers
bei der Adresse AAddr werden für
den Prozessor A abgerufen. Ein Cache-Verfehlen beim Schritt 858 veranlasst den
Vorgang vom Schritt 820 an zu wiederholen. 9 und 10 veranschaulichen
die Kartierung des Speichers gemäß verschiedener
Ausführungsformen
der Erfindung.
-
Bezugnehmend
auf 9, ist ein Speichermodul 260 mit zwei
Bereichen (Bereich 0 und Bereich 1) gezeigt, wobei jeder der Bereiche
in 8 Blöcke
(Blöcke
0 bis 7) unterteilt ist. Beispielsweise wird angenommen, dass das
Speichermodul 512 Kb Speicher mit einer Breite von 16 Bits
aufweist, wobei jedem Block 2K adressierbare Speicherplätze zugeordnet sind
(2K × 16bit × 16 Blöcke). Gemäß einer
Ausführungsform
werden gerade Adressen dem Bereich 0 (d.h., 0, 2, 4 ... 32K-2) und
ungerade Adressen dem Bereich 1 (d.h. 1, 3, 5 ... 32K-1)
zugewiesen.
-
Der
Block 0 des Bereiches 0 hat dann die Adresse 0, 2, 4 ... 4K-2; der
Block 1 des Bereiches 1 hat dann die Adressen 1, 3, 5 ... 4K-1.
-
Mit
Bezugnahme auf 10 ist ein Speichermodul mit
vier Bereichen (Bereiche 0 bis 3) gezeigt, wobei jeder Bereich in
8 Blöcke
(Blöcke
0-7) unterteilt ist. Angenommen, das Speichermodul 512 Kb
weist einen Speicher mit einer Breite von 16 Bit auf, dann ist jedem
Block 1K adressierbarer Speicherplatz zugeordnet (1K × 16bits × 32 Blöcke). In
dem Fall, dass das Speichermodul vier Bereiche umfasst, wie dies
in der 10 gezeigt ist, würden die
Adressen wie folgt zugeordnet werden: Bereich 0: Jede vierte Adresse ausgehend
von 0 (d.h. 0, 4, 8, etc.) Bereich 1: Jede vierte Adresse ausgehend
von 1 (d.h. 1, 5, 9, etc.) Bereich 2: Jede vierte Adresse ausgehend
von 2 (d.h. 2, 6, 10, etc.) Bereich 3: Jede vierte Adresse ausgehend
von 3 (d.h. 3, 7, 11, etc.). Die Speicherkartierung kann für n Bereiche
wie folgt verallgemeinert werden: Bereich 0: Jede n-te Adresse beginnend
mit 0 (d.h. 0, n, 2n. 3n etc.) Bereich 1: Jede n-te Adresse beginnend
mit 1 (d.h. 1, 1+n, 1+2n, 1+3n, etc.) Bereich n-1: Jede nt-e Adresse
beginnend mit n-1 (d.h. n-1, n-1+n, n-1+2n, etc.). Obwohl die vorliegende
Erfindung insbesondere unter Bezugnahme auf verschiedene Ausführungsformen
dargestellt und beschrieben wurde, ist es für den Fachmann offensichtlich,
dass Modifikationen und Änderungen
der vorliegende Erfindung vorgenommen werden können, ohne sich vom Erfindungsgedanken
zu entfernen. Der Gegenstand der Erfindung wird daher nicht durch
die Bezugnahme auf die oben erfolgte Beschreibung bestimmt, sondern
unter Bezugnahme auf die beiliegenden Ansprüche.