-
Die
Erfindung betrifft einen Multithread-Prozessor mit einer Synchronisationseinheit
zur Synchronisation eines Befehlsflusses mit einem zugehörigen Datenfluss
und zur Generierung eines speicher-getriggerten Kontext-Umschaltsignals
und ein Verfahren zum Betreiben eines solchen.
-
Eingebettete
Prozessoren und deren Architekturen werden an ihrem Leistungsverbrauch,
ihrem Durchsatz, ihrer Auslastung (Utilization), ihren Kosten und
ihrer Realzeitfähigkeit
gemessen. Um insbesondere den Durchsatz und die Auslastung zu erhöhen, kommt
das Prinzip des Multithreading zum Einsatz. Die Grundidee des Multithreading
basiert darauf, dass ein Prozessor mehrere Threads bearbeitet. Dabei
wird insbesondere ausgenützt,
dass bei einer Latenzzeit des einen Threads, Programmbefehle des anderen
Threads bearbeitet werden können.
Dabei bezeichnet ein Thread einen Kontrollpfad eines Codes bzw.
Quellcodes bzw. Programms, wobei innerhalb eines Threads Datenabhängigkeiten
bestehen und zwischen verschiedenen Threads schwache oder keine
Datenabhängigkeiten
bestehen (wie in Kapitel 3 in T. Beierlein, O. Hagenbruch: "Taschenbuch Mikroprozessortechnik", 2. Auflage, Fachbuchverlag
Leipzig im Karl-Hanser-Verlag München – Wien,
ISBN 3-446-21686-3 beschrieben). Ein Kontext eines Threads ist der
Ausführungszustand
der Programmbefehlsfolge des Threads. Demnach ist der Kontext eines
Threads definiert als ein temporärer Prozessorzustand
während
der Bearbeitung des Threads durch diesen Prozessor. Der Kontext
wird von der Hardware des Prozessors, herkömmlicherweise dem Programmzählregister
bzw. Programmcounter, dem Registerfile bzw. Kontextspeicher und dem
dazugehörigen
Statusregister gehalten.
-
Beispielsweise
ist in Ungerer, Theo et al. (2003) "Survey of Processors With Explicit Multithreading" in ACM Computing
Surveys, Volume 35, March 2003, eine umfangreiche Auflistung der
bekannten Multithread-Prozessoren und deren Architekturen beschrieben.
-
Um
die Decodierung der Programmbefehle und das Adressieren und Lesen
der Speicherstellen bereitzustellen, wird in einer herkömmlichen
Pipeline eines Multithread-Prozessors die Speicherlesezugriffseinheit
bzw. Ladeeinheit (load unit), welche Daten bzw. Speicherwerte aus
der Speicherstelle für
einen entsprechenden Programmbefehl lädt, erst spät in der Pipeline vorgesehen.
In einer Multithread-Architektur führt dies zwangsläufig zur
Implementierung von der Speicherlesezugriffseinheit nachgeordneten
Befehlszwischenspeichern. Die nachgeordneten Befehlszwischenspeicher
sind nötig,
um ein speicher-getriggertes Kontext-Umschalten zu ermöglichen,
falls beispielsweise eine Leseanforderung (read request) an die
Speicherstelle nicht in einer vorgegebenen Zeit beantwortet wird
bzw. beantwortet werden kann. Eine solche Implementierung von Befehlszwischenspeichern
(replay buffers) wird beispielsweise in K. W. Rudd "VLIW Processors:
Efficiently Exploiting Instruction Level Parallelism", PhD Thesis, Stanford
University, December 1999 beschrieben.
-
Nachteiligerweise
sind die Befehlszwischenspeicher, die gemäß den bekannten Implementierungen
nach der Speicherlesezugriffseinheit in der Pipeline angeordnet
sind, so groß zu
implementieren, dass sie für
jeden durch den Multithread-Prozessor zu
bearbeitenden Thread sämtliche
Programmbefehle, die sich jeweils in der Pipeline oberhalb der Befehlszwischenspeicher
befinden können,
zwischenspeichern können,
so dass ein Thread-Umschalten ohne Taktzyklusverlust gewährleistet
wird. Bearbeitet beispielsweise ein Multithread-Prozessor drei Threads
und weist die Pipeline drei Pipelinestufen oberhalb der Speicherlesezugriffseinheit
auf, so sind drei Befehlszwischenspeicher mit jeweils wenigstens vier
Speicher stellen zu implementieren. Das bedeutet, dass relativ große Befehlszwischenspeicher
vorzusehen sind, welche einen hohen Platzaufwand benötigen und
deren Implementierung mit hohen Kosten verbunden ist.
-
Die
Druckschrift
US 6,507,862
B1 beschreibt ein Umschaltverfahren in einem Multithread-Prozessor.
Der beschriebene Multithread-Prozessor weist eine einzelne Pipeline
auf, die eine Vielzahl von Threads bearbeitet. Dabei wird ein aktiver
Thread, der nicht blockiert ist, ausgewählt. Dieser aktive Thread stellt
den funktionalen Blöcken,
die mit der Pipeline verbunden sind, Daten bereit. Wenn der aktive
Thread blockiert wird, schaltet die Pipeline sofort auf einen nicht-blockierten Thread
um, falls ein solcher Thread vorhanden ist, und beginnt die Ausführung des
nicht-blockierten Threads. Als Antwort auf eine Blockierung aufgrund
eines misslungenen Speicherzugriffs, friert der Prozessor den gesamten
Pipeline-Status des ausführenden
Threads in der geteilten Prozessor-Pipeline ein.
-
Die
Druckschrift
US 6,295,600
B1 zeigt ein Verfahren und eine Vorrichtung zum Umschalten
zwischen Threads eines Programms als Antwort auf ein Ereignis, das
eine lange Latenzzeit bedingt.
-
Es
ist daher Aufgabe der Erfindung, ein speicher-getriggertes Kontext-Umschalten
für einen
Multithread-Prozessors unter Einsatz möglichst kleiner Befehlszwischenspeicher
bereitzustellen.
-
Erfindungsgemäß wird die
gestellte Aufgabe durch einen Multithread-Prozessor mit den Merkmalen
des Patentanspruchs 1 sowie durch ein Verfahren zum Betreiben eines
Multithread-Prozessors
mit den Merkmalen des Patentanspruchs 17 gelöst.
-
Demgemäß wird erfindungsgemäß ein Multithread-Prozessor
mit einer Prozessor-Pipeline (4) vorgeschlagen, die aufweist:
- – eine
Synchronisationseinheit als eine Prozessor-Pipelinestufe, welche bei einem Empfangen eines
Ladezyklusanzeigeflags mit einem positiven logischen Signalpegel,
welches bei Vorliegen eines Ladebefehls auf den positiven logischen
Signalpegel gesetzt wird und angibt, dass ein Ladezyklus auf ein
Speichersystem durchgeführt
wird, von einer Speicherlesezugriffseinheit als eine weitere der
Synchronisationseinheit vorgeschalteten Prozesser-Pipelinestufe
eine Kontextkennung und eine Zielregisterkennung und bei einem Empfangen
eines Gültigkeitssignals
mit einem positiven logischen Signalpegel von einer Speichersystem
einen entsprechenden Speicherwert lädt, die Kontextkennung, die
Zielregisterkennung und den Speicherwert zwischenspeichert und synchronisiert
an eine nachgeordnete Pipelinestufe weiterleitet,
und welche
eine Logikschaltung aufweist, die bei Empfangen des Ladezyklusanzeigeflags
mit einem positiven logischen Signalpegel und des Gültigkeitssignals
mit einem negativen logischen Signalpegel ein Kontext-Umschaltsignal
generiert, wobei ein positiver logischer Signalpegel des Gültigkeitssignals
angibt, dass der Speicherwert gültig
ist.
-
Vorteilhafterweise
wird durch die erfindungsgemäße Generierung
des Kontext-Umschaltsignals eine kostengünstige und sehr einfache Möglichkeit einer
Implementierung einer speicher-getriggerten Kontext-Umschaltung
bereitgestellt.
-
Ein
weiterer Vorteil der vorliegenden Erfindung ist, dass durch das
Akzeptieren einer potenziellen Latenzzeit aufgrund des Wartens auf
die durch einen Ladebefehl angeforderten Speicherwerte und damit
einhergehenden Generierung des erfindungsgemäßen Kontext-Umschaltsignals
ermöglicht
wird, die Befehlszwischenspeicher deutlich oberhalb der Speicherlesezugriffseinheit
in der Pipeline des Multithread-Prozessors anzuordnen. In herkömmlichen Implementierungen
von Multithread-Prozessoren ist oberhalb der Speicherlesezugriffs einheit
bzw. Ladeeinheit eine konfliktfreie Zone von mehreren Pipelinestufen
ausgebildet, die aufgrund anderer Rahmenbedingungen, wie beispielsweise
der Behandlung von Interrupts oder der Vereinfachung der Prozessoransteuerung,
bedingt ist. Das bedeutet, dass die aufgrund der genannten anderen
Rahmenbedingungen inhärent
vorhandene konfliktfreie Zone von Pipelinestufen oberhalb der Speicherlesezugriffseinheit
erfindungsgemäß genutzt
wird, um die Befehlszwischenspeicher oberhalb dieser konfliktfreien
Zone anzuordnen und mittels des erfindungsgemäß generierten Kontext-Umschaltsignals
zu steuern. Somit werden gegenüber
den bekannten Implementierung erfindungsgemäß nur sehr kleine Replay-Buffer
bzw. Befehlszwischenspeicher benötigt.
Somit wird Platz auf der Platine des Multithread-Prozessors eingespart. Des
Weiteren vereinfacht sich die Ansteuerung der Befehlszwischenspeicher
und somit werden weitere Kosten eingespart.
-
Ein
weiterer besonderer Vorteil des erfindungsgemäßen Multithread-Prozessors
und des erfindungsgemäßen Verfahrens
ist, dass mittels der erfindungsgemäßen Synchronisationseinheit
der Datenfluss, die Speicherwerte, und der Befehlsfluss, Kontextkennung
und Zielregisterkennung, synchronisiert werden.
-
Vorteilhafte
Ausgestaltungen und Weiterbildungen ergeben sich auch den Unteransprüchen sowie
aus der Beschreibung unter Bezugnahme auf die Zeichnungen.
-
Gemäß einer
bevorzugten Ausgestaltung der Erfindung weist der Multithread-Prozessor
weiter auf:
- – ein Speichersystem, welches
eine Vielzahl von Speicherstellen aufweist, wobei eine Speicherstelle
durch eine Speicheradresse adressierbar ist und einen veränderbaren
Speicherwert speichert und welche als Antwort auf eine an das Speichersystem übertragene
Anforderung und Speicheradresse den entsprechenden Speicherwert
bereitstellt und das zugehörige
Gültigkeitssignal
mit einem positiven logischen Signalpegel an die Synchronisationseinheit überträgt;
- – einer
Prozessorpipeline zur Verarbeitung von Programmbefehlen verschiedener
Threads, wobei die Prozessorpipeline wenigstens aufweist:
– eine Speicherlesezugriffseinheit,
welche bei einem Ladebefehl das Ladezyklusanzeigeflag mit einem
positiven logischen Signalpegel zur Anzeige eines Ladezyklus auf
das Speichersystem an die Synchronisationseinheit überträgt und die Kontextkennung
zur Angabe des entsprechenden Kontextes des Ladebefehls und die
Zielregisterkennung zur Angabe der Zielspeicherstelle des Speichersystems
des Ladebefehls bereitstellt; und
– die Synchronisationseinheit.
-
Gemäß einer
weiteren bevorzugten Ausgestaltung weist die Synchronisationseinheit
einen ersten FIFO-Speicher auf, in welchem jeweils die Kontextkennung
und die zugehörige
Zielregisterkennung zusammen zwischengespeichert werden. Vorteilhafterweise
wird durch das gemeinsame Zwischenspeichern der Kontextkennung und
der Zielregisterkennung in einem gemeinsamen FIFO-Speicher sichergestellt,
dass diese Daten in einer Reihe geordnet für eine Synchronisation mit
den Speicherwerten vorliegen.
-
Gemäß einer
weiteren bevorzugten Ausgestaltung weist die Synchronisationseinheit
einen zweiten FIFO-Speicher auf, in welchem jeweils der Speicherwert
zwischengespeichert wird. Vorteilhafterweise wird durch das Vorsehen
des zweiten FIFO-Speichers
sichergestellt, dass auch die geladenen Speicherwerte geordnet für die Synchronisation bereitgestellt
werden. Ein besonderer Vorteil der erfindungsgemäßen Anordnung ist, dass durch
die Bereitstellung des ersten FIFO-Speichers und des zweiten FIFO-Speichers
sichergestellt ist, dass die Kontextkennung und die zugehörige Zielregisterkennung mit
dem zugehörigen
Speicherwert innerhalb des Synchronisationseinheit synchronisiert
vorliegen.
-
Gemäß einer
bevorzugten Weiterbildung der Erfindung sind der erste FIFO-Speicher
und der zweite FIFO-Speicher jeweils als ein flankengesteuertes Flip-Flop
ausgebildet.
-
Gemäß einer
weiteren bevorzugten Ausgestaltung setzen der erste FIFO-Speicher
und der zweite FIFO-Speicher jeweils ein Leeranzeigeflag ausgangsseitig
auf einen positiven logischen Signalpegel, falls der entsprechende
FIFO-Speicher leer ist.
-
Gemäß einer
weiteren bevorzugten Ausgestaltung weist die Synchronisationseinheit
einen ersten Multiplexer und einen zweiten Multiplexer auf, welche
mittels der Logikschaltung steuerbar sind und die FIFO-Speicher
kurzschließen,
falls die beiden Leeranzeigeflags, das anliegende Ladezyklusanzeigeflag
und das anliegende Gültigkeitssignal
jeweils auf einen positiven logischen Signalpegel gesetzt sind.
Somit ist erfindungsgemäß sichergestellt,
dass bei einem Ladezyklus, wenn gültige Daten von dem Speichersystem
ladbar sind und die beiden FIFO-Speicher leer sind, die Kontextkennung,
die Zielregisterkennung und der zugehörige Speicherwert sofort, synchron
und ohne Verzögerung
an eine nachgeordnete Pipelinestufe weitergeleitet werden können.
-
Gemäß einer
weiteren bevorzugten Weiterbildung steuert die Logikschaltung den
ersten Multiplexer und den zweiten Multiplexer mittels eines einzigen
Steuersignals. Somit wird erfindungsgemäß die Synchronisation des Daten-
und Befehlsflusses sichergestellt.
-
Gemäß einer
weiteren bevorzugten Weiterbildung leitet die Synchronisationseinheit
einen Programmbefehl, welcher nicht einen Speicherwert einer Speicherstelle
benötigt,
dessen zugehörige
Zielregisterkennung in dem ersten FIFO-Speicher zwischengespeichert
ist, ohne Verzögerung
an die nachgeordnete Pipelinestufe. Somit wird vorteilhafterweise
sichergestellt, dass Programmbefehle, die keine Synchronisation
mit angefor derten Speicherwerten benötigen, durch die Synchronisationseinheit
nicht aufgehalten werden.
-
Gemäß einer
weiteren bevorzugten Weiterbildung leitet die Synchronisationseinheit
einen Programmbefehl, welcher in eine Speicherstelle schreibt, dessen
zugehörige
Zielregisterkennung in dem ersten FIFO-Speicher zwischengespeichert
ist, ohne Verzögerung
weiter und ignoriert den nachfolgenden, von der entsprechenden Speicherstelle übertragenen,
zugehörigen
Speicherwert. Vorteilhafterweise wird somit sichergestellt, dass
Programmbefehle, die in eine Speicherstelle schreiben, deren Zielregisterkennung
in dem ersten FIFO gespeichert ist, sofort weitergeleitet werden,
und die später
erhaltenen, zugehörigen
Speicherwerte nicht mehr bearbeitet werden müssen, da der besagte Schreibbefehl selbst
in die entsprechende Speicherstelle schreibt.
-
Gemäß einer
weiteren bevorzugten Ausgestaltung ist die der Synchronisationseinheit
nachgeordnete Pipelinestufe als eine Zurückschreibeeinheit ausgebildet,
welche von der Synchronisationseinheit als Ausgangsspeicherwerte
e bereitgestellte Speicherwerte unter einer mittels der zugehörigen Zielregisterkennung
gebildeten Ausgangspeicheradresse in die entsprechende Speicherstelle
schreibt.
-
Gemäß einer
weiteren bevorzugten Ausgestaltung weist der Multithread-Prozessor
für einen
jeden zu bearbeitenden Thread einen Kontextzwischenspeicher auf,
in welchen jeweils Programmbefehle eines bestimmten Threads zwischenspeicherbar
sind, welche wenigstens eine Pipelinestufe vor der Speicherlesezugriffseinheit
angeordnet sind und welche jeweils mittels des Kontext-Umschaltsignals steuerbar
sind.
-
Gemäß einer
weiteren bevorzugten Ausgestaltung ist die Prozessorpipeline des
Multithread-Prozessors wenigstens durch eine Befehlsdecodiereinheit
zur Decodierung eines Programmbefehls, einer Befehlsausführungseinheit
zur Ausführung
des de codierten Programmbefehls, der Speicherlesezugriffseinheit,
der Synchronisationseinheit und der Zurückschreibeeinheit ausgebildet.
-
Gemäß einer
weiteren bevorzugten Weiterbildung bearbeitet der Multithread-Prozessor
einen Programmbefehl in einer vorbestimmten Anzahl von Taktzyklen,
falls dieser kein Datenzugriffsbefehl oder Ladebefehl ist.
-
Gemäß einer
weiteren bevorzugten Weiterbildung besteht die Prozessorpipeline
des Multithread-Prozessors aus einem Teil eines DSP-Prozessors,
eines Protokoll-Prozessors oder eines Universal-Prozessors.
-
Gemäß einer
weiteren bevorzugten Weiterbildung ist die Befehlsausführungseinheit
eine arithmetisch-logische Einheit oder eine Adressengeneratoreinheit.
-
Die
Erfindung wird nachfolgend anhand der in den schematischen Figuren
der Zeichnung angegebenen Ausführungsbeispielen
näher erläutert. Es zeigen:
-
1 ein
schematisches Blockschaltbild eines ersten bevorzugten Ausführungsbeispiels
des erfindungsgemäßen Multithread-Prozessors;
-
2 ein
schematisches Blockdiagramm eines zweiten bevorzugten Ausführungsbeispiels
des erfindungsgemäßen Multithread-Prozessors;
-
3 ein
schematisches Blockdiagramm eines besonders bevorzugten Ausführungsbeispiels der
Synchronisationseinheit des Multithread-Prozessors gemäß der vorliegenden
Erfindung; und
-
4 ein
schematisches Ablaufdiagramm eines bevorzugten Ausführungsbeispiels
des erfindungsgemäßen Verfahrens
zum Betreiben eines Multithread-Prozessors.
-
In
allen Figuren sind gleiche bzw. funktionsgleiche Elemente und Signale – sofern
nichts anderes angegeben ist – mit
denselben Bezugszeichen versehen worden.
-
1 zeigt
ein schematisches Blockschaltbild eines ersten bevorzugten Ausführungsbeispiels des
erfindungsgemäßen Multithread-Prozessors 1. Der
erfindungsgemäße Multithread-Prozessor 1 weist
ein Speichersystem 2 auf, welches aus einer Vielzahl von
Speicherstellen 31–36 besteht.
Eine Speicherstelle 31–36 ist
durch eine Speicheradresse adr adressierbar und speichert Speicherwerte
data_i. Als Antwort auf eine an das Speichersystem 2 übertragene
Anforderung req und Speicheradresse adr stellt das Speichersystem 2 den
entsprechenden Speicherwert data_i der entsprechenden Speicherstelle 31–36 bereit.
Weiter stellt das Speichersystem 2 ein zugehöriges Gültigkeitssignal
valid_i zur Angabe der Gültigkeit
des bereitgestellten Speicherwertes data_i der Synchronisationseinheit 6 bereit
bzw. überträgt dieses
an die Synchronisationseinheit 6. Das Gültigkeitssignal valid_i ist
vorzugsweise dann gültig,
wenn es einen positiven logischen Signalpegel aufweist.
-
Der
Multithread-Prozessor 1 weist weiter eine Prozessorpipeline 4 zur
Verarbeitung von Programmbefehlen PB, LB verschiedener Threads auf. Ein
Ladebefehl LB bzw. Datenzugriffsbefehle ist ein spezieller Programmbefehl
PB, der auf das Speichersystem 2 zugreift. Dabei beinhaltet
die Prozessorpipeline 4 vorzugsweise eine Speicherlesezugriffseinheit 5.
Die Speicherlesezugriffseinheit 5 setzt bei Vorliegen eines
Ladebefehls LB ein Ladezyklusanzeigeflag load_i auf einen positiven
logischen Signalpegel und überträgt das Ladezyklusanzeigeflag load_i
an die Synchronisationseinheit 6. Das Ladezyklusanzeigeflag
load_i gibt an, dass ein Ladezyklus auf das Speicher system 2 vorgenommen
wird. Weiter stellt die Speicherlesezugriffseinheit 5 eine Kontextkennung
ctx_i bereit, welche angibt, zu welchem Kontext bzw. Thread der
entsprechende Ladebefehl LB zugehörig ist. Außerdem stellt die Speicherlesezugriffseinheit 5 eine
Zielregisterkennung reg_i bereit, welche das Zielregister 31–36 des
Speichersystems 2, auf welches der entsprechende Ladebefehl
LB zugreift, kennzeichnet. Vorzugsweise ist die Synchronisationseinrichtung
Teil der Prozessorpipeline 4.
-
Die
Synchronisationseinheit 6 empfängt das Ladezyklusanzeigeflag
load_i von der Speicherlesezugriffseinheit 5. Weist das
empfangene Ladezyklusanzeigeflag load_i einen positiven logischen
Signalpegel auf, so lädt
die Synchronisationseinheit 6 die zugehörige Kontextkennung ctx_i und
die zugehörige Zielregisterkennung
reg_i von der Speicherlesezugriffseinheit 5.
-
Des
Weiteren empfängt
die Synchronisationseinheit 6 das Gültigkeitssignal valid_i von
dem Speichersystem 2. Weist das Gültigkeitssignal valid_i, welches
von der Synchronisationseinheit 6 empfangen wurde, einen
positiven logischen Signalpegel auf, so lädt die Synchronisationseinheit 6 den zugehörigen Speicherwert
data_i der entsprechenden Speicherstelle 31–36.
-
Die
Synchronisationseinheit 6 synchronisiert die geladene Kontextkennung
ctx_i und die geladene Zielregisterkennung reg_i mit dem geladenen,
zugehörigen
Speicherwert data_i und speichert diese zwischen. Nachfolgend werden
die synchronisiert zwischengespeicherten Kennungen ctx_i, reg_i
und der Speicherwert an eine nachgeordnete Pipelinestufe (nicht
gezeigt) weitergeleitet.
-
Des
Weiteren weist die Synchronisationseinheit 6 eine Logikschaltung 14 (vgl. 3)
auf, die bei Empfangen des Ladezyklusanzeigeflags load_i mit einem
positiven logischen Signalpegel und des Gültigkeitssignals valid_i mit
einem negati ven logischen Signalpegel das Kontext-Umschaltsignal
css generiert.
-
2 zeigt
ein schematisches Blockdiagramm eines zweiten bevorzugten Ausführungsbeispiels
des erfindungsgemäßen Multithread-Prozessors 1.
-
Der
Multithread-Prozessor 1 weist ein Speichersystem 2 auf,
welches eine Vielzahl von Speicherstellen 31–36 beinhaltet.
Eine Speicherstelle 31–36 ist
mittels einer Speicheradresse adr adressierbar und speichert einen
veränderbaren
Speicherwert data_i, data_o. Als Antwort auf eine an das Speichersystem 2 übertragene
Anforderung req und Speicheradresse adr, welche beide in Folge eines Ladebefehls
LB von der Speicherlesezugriffseinheit 5 bereitgestellt
werden, stellt das Speichersystem 2 den entsprechenden
Speicherwert data_i der entsprechenden Speicherstelle 31–36 bereit.
Weiter stellt das Speichersystem 2 ein zugehöriges Gültigkeitssignal
valid_i bereit, welches einen positiven logischen Signalpegel zur
Angabe der Gültigkeit
des zugehörigen
Speicherwertes data_i aufweist, und überträgt dieses an die Synchronisationseinheit 6.
-
Weiter
weist der erfindungsgemäße Multithread-Prozessor 1 eine
Prozessorpipeline 4 zur Verarbeitung von Programmbefehlen
PB, LB verschiedener Threads auf.
-
Die
Prozessorpipeline 4 weist vorzugsweise unter anderem eine
Speicherlesezugriffseinheit 5 auf. Die Speicherlesezugriffseinheit 5 setzt
bei Vorliegen eines Ladebefehls LB das Ladezyklusanzeigeflag load_i
auf einen positiven logischen Signalpegel und überträgt dieses an die Synchronisationseinheit 6.
Das Ladezyklusanzeigeflag load_i gibt an, dass ein Ladezyklus auf
das Speichersystem 2 vorgenommen wird. Weiter stellt die
Speicherlesezugriffseinheit 5 die Kontextkennung ctx_i
zur Angabe des entsprechenden Kontext des Ladebefehls LB und die Zielregisterkennung
reg_i zur Angabe des Zielre gisters 31–36 des Speichersystems 2 des
Ladebefehls LB bereit. Vorzugsweise ist die Synchronisationseinheit 6 Teil
der Prozessorpipeline 4.
-
Vorzugsweise
ist die der Synchronisationseinheit 6 nachgeordnete Pipelinestufe 9 als
eine Zurückschreibeeinheit
ausgebildet, welche von der Synchronisationseinheit 6 als
Ausgangsspeicherwert data_o bereitgestellte Speicherwerte data_i
unter einer mittels der zugehörigen
Zielregisterkennung reg_i gebildeten Ausgangsspeicheradresse adr_o
in das entsprechende Register 31–36 schreibt.
-
Vorzugsweise
weist der Multithread-Prozessor 1 weiter für einen
jeden zu bearbeitenden Thread einen Kontextzwischenspeicher 151, 152 auf,
in welchen jeweils Programmbefehle PB, LB eines bestimmten Threads
zwischenspeicherbar sind, welche wenigstens eine Pipelinestufe vor
der Speicherlesezugriffseinheit 5 angeordnet sind und welche
jeweils mittels des Kontextumschaltsignals css steuerbar sind. Beispielsweise
sind die Kontextzwischenspeicher 151, 152 zwischen
einer Befehlsdecodiereinheit 7 und einer Befehlsausführungseinheit 8 angeordnet.
-
Vorzugsweise
ist die Prozessorpipeline 4 des Multithread-Prozessors 1 durch
die Befehlsdecodiereinheit 7 zur Decodierung eines Programmbefehls
PB, LB, einer Befehlsausführungseinheit 8 zur Ausführung des
Decodierprogrammbefehls PB, LB, der Speicherlesezugriffseinheit 5,
der Synchronisationseinheit 6 und der Zurückschreibeeinheit 9 ausgebildet.
-
Vorzugsweise
bearbeitet der Multithread-Prozessor 1 einen Programmbefehl
PB in einer vorbestimmten Anzahl von Taktzyklen, falls dieser kein
Datenzugriffsbefehl oder Ladebefehl LB ist.
-
Beispielsweise
besteht die Prozessorpipeline 4 des Multithread-Prozessors 1 aus
einem Teil eines DSP-Prozessors, eines Protokoll-Prozessors oder
eines Universal-Prozessors. Die Befehlsausführungseinheit 8 kann
beispielsweise eine artithmetisch-logische Einheit (ALU) oder eine
Adressengeneratoreneinheit (AGU) sein.
-
3 zeigt
ein schematisches Blockdiagramm eines besonders bevorzugten Ausführungsbeispiels
der Synchronisationseinheit 6 des Multithread-Prozessors 1 gemäß der vorliegenden
Erfindung. Vorzugsweise weist die Synchronisationseinheit 6 einen
ersten FIFO-Speicher 10, einen zweiten FIFO-Speicher 11,
einen ersten Multiplexer 12, einen zweiten Multiplexer 13 und
eine Logikschaltung 14 auf. Bei Vorliegen eines Ladezyklusanzeigeflags load_i
mit einem positiven logischen Signalpegel lädt die Logikschaltung 14 die
Kontextkennung ctx_i und die zugehörige Zielregisterkennung reg_i
von der Speicherlesezugriffseinheit 5 (nicht gezeigt) mittels eines
ersten Push-Signals
push_10 und speichert die geladenen Kennungen ctx_i, reg_i in dem
ersten FIFO-Speicher 10 zwischen.
-
Bei
Vorliegen eines Gültigkeitssignals
valid_i mit einem positiven logischen Signalpegel lädt die Logikschaltung 14 den
entsprechenden Speicherwert data_i von der entsprechenden Speicherstelle 31–36 des
Speichersystems 2 (nicht gezeigt) mittels eines zweiten
Push-Signals push_11 und speichert den geladenen Speicherwert data_i
in dem zweiten FIFO-Speicher 11 zwischen.
-
Vorzugsweise
sind der erste FIFO-Speicher 10 und der zweite FIFO-Speicher 11 jeweils
als ein flankengesteuertes Flip-Flop ausgebildet. Vorzugsweise setzen
der erste FIFO-Speicher 10 und der zweite FIFO-Speicher 11 jeweils
ein Leeranzeigeflag empty_10, empty_11 ausgangsseitig auf einen
positiven logischen Signalpegel und übertragen jeweils dieses Leeranzeigeflag
empty_10, empty_11 an die Logikschaltung 14, falls der
entsprechende FIFO-Speicher 10, 11 leer ist. Die
Logikschaltung 14 schiebt die jeweils zuerst abgespeicherten
Daten mit tels eines ersten bzw. zweiten Pop-Signals pop_10, pop_11
aus dem ersten bzw. zweiten FIFO-Speicher 10, 11.
-
Vorzugsweise
weist die Synchronisationseinheit 6 einen ersten Multiplexer 12 und
einen zweiten Multiplexer 13 auf. Der erste Multiplexer 12 schließt beispielsweise
den ersten FIFO-Speicher 10 kurz
und der zweite Multiplexer 13 schließt beispielsweise den zweiten
FIFO-Speicher 11 kurz. Die beiden FIFO-Speicher 10, 11 werden
durch die beiden Multiplexer 12, 13 kurzgeschlossen,
falls die beiden Leeranzeigeflags empty_10, empty_11, das anliegende
Ladezyklusanzeigeflag load_i und das anliegende Gültigkeitssignal
valid_i jeweils auf einem positiven logischen Signalpegel gesetzt
sind. Dabei steuert die Logikschaltung 14 vorzugsweise
den ersten Multiplexer 12 und den zweiten Multiplexer 13 mittels
eines einzigen Steuersignals S.
-
Vorzugsweise
leitet die Synchronisationseinheit 6 einen Programmbefehl
PB, LB, welcher nicht einen Speicherwert data_i einer Speicherstelle 31–36 benötigt, dessen
zugehörige
Zielregisterkennung reg_i in dem ersten FIFO-Speicher 10 zwischengespeichert
ist, ohne Verzögerung
an die nachgeordnete Pipelinestufe 9 bzw. Zurückschreibeeinheit 9.
-
Vorzugsweise
leitet die Synchronisationseinheit 6 einen Programmbefehl
PB, LB, welcher in eine Speicherstelle 31–36 schreibt,
dessen zugehörige Zielregisterkennung
reg_i in dem ersten FIFO-Speicher 10 gespeichert ist, ohne
Verzögerung
weiter und ignoriert den nachfolgenden, von der entsprechenden Speicherstelle 31–36 übertragenen
zugehörigen Speicherwert
data_i.
-
4 zeigt
ein schematisches Ablaufdiagramm eines bevorzugten Ausführungsbeispiels
des erfindungsgemäßen Verfahrens
zum Betreiben eines Multithread-Prozessors 1 mit einer
Synchronisation eines Befehlsflusses mit einem zugehörigen Datenfluss
und mit einer Generierung eines speicher- getriggerten Kontext-Umschaltsignals
css. Dabei weist das erfindungsgemäße Verfahren folgende Verfahrensschritte
auf:
-
Verfahrensschritt a):
-
Empfangen
eines Ladezyklusanzeigeflags load_i von einer Speicherlesezugriffseinheit 5.
-
Verfahrensschritt b):
-
Laden
einer zu dem Ladezyklusanzeigeflag load_i zugehörigen Kontextkennung ctx_i
und einer zugehörigen
Zielregisterkennung reg_i im Falle eines positiven logischen Signalpegels
des empfangenen Ladezyklusanzeigeflags load_i.
-
Verfahrensschritt c):
-
Empfangen
eines Gültigkeitssignals
valid_i von einem Speichersystem 2.
-
Verfahrensschritt d):
-
Laden
eines zu dem empfangenen Gültigkeitssignal
valid_i zugehörigen
Speicherwertes data_i von dem Speichersystem 2 im Falle
eines positiven logischen Signalpegels des empfangenen Gültigkeitssignals
valid_i.
-
Verfahrensschritt e):
-
Synchronisiertes
Zwischenspeichern der geladenen Kontextkennung ctx_i und der geladenen Zielregisterkennung
reg_i mit dem zugehörigen
geladenen Speicherwert data_i und Weiterleiten der synchronisierten
Daten ctx_i, reg_i, data_i.
-
Verfahrensschritt f):
-
Generieren
eines Kontext-Umschaltsignals css, falls das empfangene Ladezyklusanzeigeflag load_i
einen positiven logischen Signalpegel und das empfangene Gültigkeitssignal
valid_i einen negativen logischen Signalpegel aufweisen.
-
Obwohl
die vorliegende Erfindung vorstehend anhand bevorzugter Ausführungsbeispiele
beschrieben wurde, ist sie darauf nicht beschränkt, sondern auf vielfältige Art
und Weise modifizierbar. Beispielsweise ist die Logik der Anzeigeflags
einfach umkehrbar.
-
- 1
- Multithread-Prozessor
- 2
- Speichersystem
- 31–36
- Speicherstelle
- 4
- Prozessorpipeline
- 5
- Speicherlesezugriffseinheit
- 6
- Synchronisationseinheit
- 7
- Befehlsdecodiereinheit
- 8
- Befehlsausführungseinheit
- 9
- Zurückschreibeeinheit
- 10
- erster
FIFO-Speicher
- 11
- zweiter
FIFO-Speicher
- 12
- erster
Multiplexer
- 13
- zweiter
Multiplexer
- 14
- Logikschaltung
- 151
- erster
Befehlszwischenspeicher.
- 152
- zweiter
Befehlszwischenspeicher
- req
- Anforderung
- adr
- Speicheradresse
- data_i
- Speicherwert
- load_i
- Ladezyklusanzeigeflag
- ctx_i
- Kontextkennung
- reg_i
- Zielregisterkennung
- data_o
- Ausgangsspeicherwert
- valid_i
- Gültigkeitssignal
- ctx_o
- Ausgangskontextkennung
- reg_o
- Ausgangszielregisterkennung
- adr_o
- Ausgangsspeicheradresse
- PB
- Programmbefehl
- LB
- Ladebefehl
- css
- Kontext-Umschaltsignal
- empty_10
- Leeranzeigeflag
für den
ersten FIFO-Speicher
- empty_11
- Leeranzeigeflag
für den
zweiten FIFO-Speicher
- push_10
- erstes
Push-Signal
- push_11
- zweites
Push-Signal
- pop_10
- erstes
Pop-Signal
- pop_11
- zweites
Pop-Signal