-
1. HINTERGRUND
DER ERFINDUNG
-
1.1 GEBIET DER
ERFINDUNG
-
Die vorliegende Erfindung betrifft
Speichervorrichtungen in Computersystemen, im Besonderen ein Verfahren
zur Bestimmung des Eintrags mit der höchsten Prioritäat in einem
Pufferspeicher hierarchisches Prioritätsfilterverfahren und einer
Speichervorrichtung, die in der Lage ist, im Verlauf der Verarbeitung
von Programmanweisungen in einem Computersystem wiederholt allokiert
und deallokiert zu werden. Also ein verbessertes Verfahren und System zum
Betrieb von Systemspeichervorrichtungen und insbesondere Pufferspeicher,
die im Prozessor in umlaufender Weise betrieben werden.
-
Obgleich die vorliegende Erfindung
ein breites Anwendungsgebiet besitzt, weil die Verbesserung bzw.
Optimierung von Speicherstrategien ein sehr allgemeines Ziel in
der Computertechnik und insbesondere der Systemarchitektur darstellt,
soll sie im Zusammenhang mit dem Stand der Technik auf einem speziellen
Anwendungsgebiet beschrieben und diskutiert werden, nämlich im
Kontext des Betriebs eines sogenannten Anweisungsfensterpuffers
(instruction window buffer, in der Literatur auch als „Reservation
Station/Reorder Buffer" (Buchungs-/Umordnungspuffer)
bezeichnet), im Folgenden als IWB bezeichnet, welcher gewöhnlich in
den meisten modernen Computersystemen vorhanden ist, um eine parallele
Verarbeitung von Anweisungen durch mehrere Verarbeitungseinheiten
zu ermöglichen.
Solche Prozessoren werden hier als „Außer-Reihe-Prozessoren" (out-of-order processors)
bezeichnet.
-
In vielen modernen „Außer-Reihe-Prozessoren" wird ein solcher
IWB benutzt, um alle Anweisungen und/oder Registerinhalte zu speichern,
bevor die berechneten Ergebnisse ausgegeben werden. Während des
Festschreibens wird der IWB-Eintrag gelöscht und kann von einer neuen
Anweisung überschrieben
werden. Wenn die Ergebnisse spekulativ über eine Verzweigungsanweisung
mit unbekanntem Ziel hinaus berechnet wurden, können sie, sobald sich die Verzweigungsvoraussage
sich als falsch erweist, einfach dadurch verworfen werden, dass
diese Einträge
aus dem Puffer gelöscht
und mit neuen korrekten Anweisungen überschrieben werden. Dies ist eine
der Voraussetzungen für
die „außer-Reihe"-Verarbeitung (out-of-order
processing).
-
Oft haben solche Puffer 32, 64 oder 128 Einträge, die
sequentiell angeordnet sind. Üblicherweise werden
sie in umlaufender Weise als sogenannte Wrap-Around-Puffer (Umlaufpuffer)
genutzt, wobei eine Folge von gültigen
Einträgen über das
Pufferende hinausreicht und am Pufferanfang weitergeführt wird,
d. h. vom Pufferende zum Pufferanfang umläuft.
-
Einer der Hauptparameter, der die
Leistung der Prozessoren beeinflusst, ist die Puffergröße: Ein großer Puffer
kann viel mehr Anweisungen und Ergebnisse enthalten und somit „außer-Reihe"-Verarbeitung in
größerem Ausmaß zulassen.
Ein Entwurfsziel besteht deshalb darin, einen großen Puffer zu
haben. Dieses Ziel steht jedoch im Widerspruch zu anderen Entwurfsanforderungen
wie Zykluszeit, Pufferfläche
usw. Wird z. B. der Puffer zu groß gewählt, dann verringert der für eine so
große
Zahl von Speicherpositionen erforderliche Verwaltungsaufwand die
Leistung dieses Puffers.
-
Oft werden solche Puffer nach dem FIFO-Prinzip
betrieben: Der erste gespeicherte Eintrag wird als erster zur Weiterverarbeitung
ausgegeben.
-
Insbesondere und mit besonderem Bezug auf
die vorliegende Erfindung wird nach dem Stand der Technik ein nachgeschaltetes
Prioritätsfilter
benutzt, um den ältesten
zur Ausführung
bereiten Eintrag in diesem Puffer zu ermitteln und diesen als Nächsten auszuführen. Dies
ist notwendig, weil der Pufferbereich, der für die Folge der auszuwertenden gültigen Einträge steht,
während
des Betriebs nicht an einer festen Position im Puffer bleibt. Dieser
Bereich lässt
sich bildhaft mit einem Wurm vergleichen: Er besteht aus einem Stück ohne
Lücken
zwischen den Einträgen,
er bewegt sich, zieht sich zusammen oder dehnt sich aus während des
Betriebs.
-
Ein Anweisungsfensterpuffer nach
dem Stand der Technik, wie in der US-Patentschrift Nr. 5,923,900
A „Circular
Buffer With N Sequential Real And Virtual Entry Positions For Selectively
Inhibiting N Adjacent Entry Positions Including The Virtual Entry
Positions" offengelegt,
wird gemäß folgender Schemata
betrieben:
Um die Anweisungswarteschlange zu verwalten, werden
die Anweisungen während
der Zuteilungsphase der Reihe nach in den Puffer geschrieben, dann „außer-Reihe" ausgeführt – Absetzphase – und der
Reihe nach wieder in die Register der jeweiligen Architektur zurückgeschrieben – Festschreibephase.
-
Sobald alle Ursprungsdaten für eine Anweisung
vorhanden sind, wird sie ausführbar,
was durch ein Gültigkeitsbit
(valid bit) vb angezeigt wird. Es können mehrere Anweisungen zu
gleicher Zeit gültig sein;
eine davon, d. h. die älteste,
wird von einem Prioritätsfilter
ausgewählt,
das Anweisungsfilter (instruction filter) genannt und mit if abgekürzt wird,
und die Daten werden an die Anweisungsausführungseinheit (instruction
execution unit) ieu gesendet. Nach Abschluss der Ausführung wird
das Gültigkeitsbit
von einem Ausführungsbit
(execution bit) ebn überschrieben,
dessen aktiver Zustand als niedriger Signalpegel definiert ist,
sodass die nächste
gültige Anweisung
ausgewählt
werden kann. Alternativ könnte
das Gültigkeitsbit
vb nach dem Senden der Daten an die Ausführungseinheit abgeschaltet
werden, statt ein Ausführungsbit
zu haben.
-
Der Umlaufpuffer nach dem Stand der
Technik verfügt über ein
Fenster der aktiven Einträge.
Einträge
außerhalb
des Fensters werden ignoriert. Dies geschieht z. B., indem das Aktivitätsfensterbit
(active window bit) awb das am Filtereingang anliegende Gültigkeitsbit
vb mit Null überschreibt.
Im normalen Modus hat – im
Gegensatz zum Wrap-Around-Modus – der nächste zu schreibende Eintrag
einen höheren Feldindex
als der älteste
Eintrag im Fenster der aktiven Einträge. Im Wrap-Around-Modus verhält es sich umgekehrt.
Zur Behandlung beider Fälle
durchsucht das Filter den sogenannten auseinandergefalteten Datenvektor
vb(0:127), wobei vb(64:127) ein Duplikat von vb(0:63) ist. Dieser
virtuelle Vektor sorgt dafür,
dass der älteste
Eintrag immer den niedrigsten Feldindex sowohl im normalen als auch
im Wrap-Around-Modus hat.
-
Nun wieder auf das von der vorliegenden
Erfindung angegangene Problem bezogen: Entscheidet man sich beim
Entwurf einer Architektur für
einen größeren Fensterpuffer,
so ergibt sich eine höhere Wahrscheinlichkeit
dafür,
eine gültige
Anweisung im Fenster der aktiven Einträge zu finden, zugleich erhöht sich
aber auch der Umfang des oben erwähnten Prioritätsfilters,
das den duplizierten, d. h. auseinandergefalteten Datenbereich durchsuchen
muss, wenn der Wrap-Around-Fall abgedeckt werden muss.
-
Überschreitet
der IWB eine bestimmte Größe, dann
wird dieses Filter selbst zu dem Element, das die Leistung begrenzt.
-
Ein wesentlicher Fortschritt hin
zu größeren IWB-Speichern
erfordert daher eine andere Technik für das Prioritätsfilter,
um die Gesamtleistung der Anweisungsverarbeitung zu steigern.
-
Es ist daher das Ziel der vorliegenden
Erfindung, die Effizienz der Pufferbenutzung zu erhöhen.
-
2. ÜBERBLICK UND VORTEILE DER ERFINDUNG
-
Dieses Ziel der Erfindung wird durch
die in den beigefügten
unabhängigen
Ansprüchen
(PA 1, 8 und 15 bis 17) genannten Merkmale erreicht. Weitere vorteilhafte
Anordnungen und Ausführungsarten
der Erfindung sind in den jeweiligen Unteransprüchen dargestellt.
-
Gemäß den grundlegenden Prinzipien
der vorliegenden Erfindung wird ein neuartiges Schema eines hierarchischen
Prioritätsfilters
vorgeschlagen, das kleine und schnelle "Unterfilter" benutzt, die jeweils nur auf einen
im Vorhinein festgelegten disjunkten Teilbereich der Puffereinträge wirken.
Jedes dieser Unterfilter bestimmt den ältesten Eintrag. Die logische
ODER-Verknüpfung
der Filtereingänge,
die parallel zu dieser Bestimmung stattfindet, erzeugt ein zusätzliches
Ausgangssignal, das es ermöglicht,
den insgesamt ältesten
Eintrag mit Hilfe einer einfachen nachgeschalteten Auswahllogik
zu ermitteln. Die gesamte Filterschaltung hat einen geringen Implementierungsflächenbedarf
und ist wesentlich schneller als eine einzelne Filterschaltung,
die alle Einträge verarbeitet.
-
Darüber hinaus ergibt sich eine
beachtliche Leistungssteigerung und Flächenersparnis aus der Tatsache,
dass sich die zusätzlichen "ODER"-Stufen mit geringem
Aufwand implementieren lassen. Die ODER-Stufen werden als Bestandteil
des gesamten Unterfilters unter Benutzung einer dynamischen ODER-Struktur
implementiert. Die Eingänge
eines dynamischen ODER-Gatters sind die jeweiligen Unterbereiche
der Filtereinträge.
-
Da eine solche ODER-Stufe außerdem parallel
zum Filter selbst geschaltet ist, hat sie vernachlässigbare
Auswirkungen auf Last und Laufzeitverzögerung.
-
Daher lässt sich der Fensterpuffer
ohne Einschränkung
durch die Leistung des Prioritätsfilters weiter
vergrößern.
-
Falls das Puffermerkmal des Wrap-Around-Modus
unterstützt
werden soll, gehört es
zu den Konzepten der Erfindung, dass eine zweite Anordnung oder
Gruppe von "ODER"-Stufen eingeführt wird,
die im Wrap-Around-Fall, wie er weiter oben beschrieben ist, benutzt
werden. D. h., bei einem Puffer mit 64 Einträgen bearbeitet
eine Gruppe vorteilhafterweise die Einträge 0 bis 63,
während
die zweite Gruppe die virtuellen Einträge 64 bis 127 bearbeitet.
-
Darüber hinaus kann das erfindungsgemäße Prinzip
der "ODER"-Verknüpfung von
Unterbereichen oder "Unterugruppen" mit nachfolgender
Prioritätsauswahl
aus den Ergebnissen auf seine mehrfache Anwendung ausgeweitet werden.
Dieses Prinzip kann mehrfach hintereinander angewendet werden. Somit
ist das erfindungsgemäße Verfahren
stufenlos skalierbar und läßt sich
perfekt zur Behandlung größerer Zahlen
von Einträgen,
d. h. mehrerer hundert, anpassen, wenn dies unter irgendeinem architekturbezogenen
Gesichtspunkt erforderlich sein sollte.
-
Zusätzlich und gemäß einem
zweiten Aspekt der vorliegenden Erfindung kann das vorgeschlagene
Implementierungsprinzip leicht ausgeweitet werden, sodass es die
Serialisierung abdeckt, welche in jeder beliebigen Implementierung
eines IWB von vorrangigem Interesse ist. Gemäß der Erfindung wird die Serialisierung
in die Gesamtimplementierung des Filters integriert, um die Erfordernis
einer besonderen externen Logik zu überwinden.
-
Dies wird erreicht, wie im Folgenden
zusammengefasst: Für
jeden Eintrag existiert ein Aktivitätsfensterbit awb, das benutzt
wird, um den Zustand des Eintrags anzuzeigen – ob er belegt werden soll
oder ob er zum Überschreiben
frei ist, wie in der US-Patentschrift Nr. 5,923,900 A vorgeschlagen.
-
Zunächst wird das Aktivitätsfensterbitfeld awb
ODER-verknüpft
mit dem Gültigkeitsbitfeld
vb, das anzeigt, dass ein Eintrag zum Absetzen bereit ist, und dem
Ausführungsbitfeld
ebn, das anzeigt, dass ein Eintrag noch nicht abgesetzt worden ist,
was zu dem sogenannten effektiven Gültigkeitsbitfeld (effective
valid bit string) evb führt.
-
Gemäß der vorliegenden Erfindung
wird dieses Bitfeld evb "ODER"-verknüpft mit
einem Serialisierungsbitfeld F – Markierungsbits,
die auf „Ein" geschaltet sind,
wenn die zugehörige
Anweisung vor allen anderen folgenden jüngeren Anweisungen ausgeführt werden
muss, oder im Normalfall der nicht erfolgenden Serialisierung auf „Aus" geschaltet sind. Diese "ODER"-Verknüpfung erfolgt
am Eingang des Prioritätsfilters,
das bereits oben erwähnt
worden ist. Dadurch wird jeder Eintrag mit eingeschaltetem evb oder
mit eingeschalteter Serialisierung für das Filter als "aktiv" markiert und kann
dadurch ausgewählt werden,
während
die Einträge
nach demjenigen mit eingeschalteter Serialisierung nicht ausgeführt werden
können,
weil sie jünger
sind. Dies garantiert, dass die jüngeren Einträge erst
ausgewählt
werden können,
nachdem die serialisierte Anweisung abgeschlossen ist.
-
Die serialisierte Anweisung ist aus
Sicht des Filters auch dann aktiv, wenn das evb-Bit nicht aktiv ist.
Um zu verhindern, dass dieser Eintrag ausgewählt und an die Ausführungseinheit
gesendet wird, wird eine zusätzliche "UND"-Verknüpfung zwischen dem
Filterausgang und dem evb-Bit benötigt. So kann die Anweisung
nur dann ausgeführt
werden, wenn sowohl das evb-Gültigkeitsbit
als auch das Serialisierungsbit auf „Ein" geschaltet, d. h. aktiv sind. Nach
Ausführung
der serialisierten Anweisung setzt eine Steuerlogik F zurück – z. B.
sobald die Anweisung festgeschrieben ist – und ermöglicht die Ausführung aller
folgenden Anweisungen.
-
Diese Integration in das Filter erfordert
nur zwei zusätzliche
Stufen. Ihre Auswirkung auf die Leistung über die gesamte Laufzeitverzögerung im Prioritätsfilter
ist daher gering.
-
Die vorliegende Erfindung wird durch
Beispiele veranschaulicht und ist nicht beschränkt auf die Gestalt der Figuren
der begleitenden Zeichnungen, von denen
-
1 ein
Blockdiagramm ist, das die wesentlichen logischen Schaltkreise darstellt,
die in einer bevorzugten Ausführungsart
des erfindungsgemäßen Prioritätsfilters
benutzt werden, angewandt auf den Betrieb mit einem Anweisungsfensterpuffer (IWB)
und basierend auf der Erzeugung von 4 Untergruppen und dem Abdecken
des Wrap-Around-Falls,
-
2 eine
schematische Darstellung ist, welche die Funktion der einfach zu
implementierenden dynamischen "ODER"-Stufen zeigt,
-
3 bis 6 Blockdiagramme sind, welche den
Betrieb des erfindungsgemäßen Prioritätsfilters mit
integrierter Serialisierung in einer Abfolge von vier verschiedenen
Situationen zeigt, beginnend mit einer ausgewählten Situation in 3 und von da ausgehend in
der Weiterentwicklung.
-
4. BESCHREIBUNG
DER BEVORZUGTEN AUSFÜHRUNGSART
-
Unter allgemeiner Bezugnahme auf
die Figuren und nun mit besonderem Bezug auf 1 besitzt ein Anweisungsfensterpuffer,
der als Ganzes mit dem Referenzzeichen 10 bezeichnet ist,
beispielhaft 64 Einträge,
d. h. die Einträge 0 bis 63.
-
Dieser Puffer ist logisch in vier
Unterfenster 12a, 12b, 12c und 12d aufgeteilt.
Die Einträge
selbst und ihre Inhalte sind nicht von vorrangigem Interesse für die vorliegende
Erfindung und daher nicht in der Zeichnung abgebildet.
-
Jedes Unterfenster 12 wird
von kleinen Filtern überwacht,
deren Eingang der auseinandergefaltete Gültigkeitsbit-Vektor des Unterfensters
darstellt, um so den Fall des Wrap-Around abzudecken. Das Auseinanderfalten
des Gültigkeitsbit-Vektors
ergibt 128 anstatt 64 zu verwaltende Speicherpositionen,
wie es nach dem Stand der Technik wohl bekannt ist. Falls der Wrap-Around-Fall
nicht abgedeckt würde,
wären insgesamt
nur 64 Speicherstellen zu verwalten.
-
Für
die sachgemäße Bearbeitung
der Einträge
zum Zweck der „außer-Reihe"-Ausführung werden
für jeden
Eintrag drei verschiedene Markierungsbits benutzt: ebn-Bit: Auf „Ein" geschaltet, wenn
die Anweisung gespeichert, d. h. in den IWB geschrieben wird, wodurch
sie Teil des Fensters der aktiven Einträge des IWB wird, oder wenn
sie erneut an eine Anweisungsausführungseinheit (IEU) übergeben
werden muss, auf „Aus" geschaltet, wenn
sie an eine Ausführungseinheit übergeben
worden ist.
-
awb-Bit: Auf „Ein" geschaltet, wenn die Anweisung in den
IWB gespeichert wird, wodurch sie Teil des Fensters der aktiven
Einträge
des IWB wird, auf „Aus" geschaltet, wenn
die Anweisung durch den Festschreibevorgang aus dem IWB entfernt
wird.
-
vb-Bit: Auf „Ein" geschaltet, wenn alle Ursprungsdaten
für die
Anweisung verfügbar
sind, auf „Aus" geschaltet, wenn
Urprungsdaten nicht zur Verfügung
stehen.
-
Diese Bits stellen einen Bitfeld-Kontrollvektor dar,
der am linken Rand der Zeichnung in vier Gruppen abgebildet ist,
wobei jede Gruppe aus einem Paar besteht, dessen einer Teil den
regulären
Fall abdeckt, Indizes 0 bis 63, und dessen anderer
Teil den Wrap-Around-Fall mit den Indizes 64 bis 127 abdeckt.
Um ausgewählt
zu werden, muss eine Anweisung gültig
sein (vb = 1), sie muss sich innerhalb des Fensters der aktiven
Einträge
befinden (awb = 1) und sie darf noch nicht ausgeführt worden
sein (abn = 1). Die UND-Verknüpfung
der Bitfelder ebn<0..127>, awb<0..127> und vb<0..127> definiert das effektive Gültigkeitsbitfeld
evb<0..127>.
-
Gemäß der erfindungsgemäßen Ausführungsart
ist eine Anzahl von vier Absetz-Unterfiltern (issue subfilter bzw.
Prioritäts-Unterfilter
Schaltkreisen) 18a, 18b, 18c und 18d, abgekürzt als if0..if3, so verschaltet,
dass sie den oben erwähnten
Bitfeldvektor als Eingabe lesen und ein Auswahlsignal – das Bit im
Auswahlbitvektor auf „Ein" geschaltet – ausgeben, das
den ältesten
Eintrag als Eingabe in eine nachgeschaltete Auswahllogik 16 festlegt.
Die Auswahllogik wählt
die älteste
Untergruppe aus, indem sie als Schalter wirkt, der nur die älteste Untergruppe
an den Absetzbitvektor weiterleitet und die Bits aller anderen Teilgruppen
auf „Aus" schaltet, wie es
weiter unten detaillierter beschrieben wird.
-
Die Absetzfilter arbeiten als Unterfilter
jeweils auf disjunkten Untermengen der Gesamtheit der Einträge des IWB
und überwachen
somit das Bitfeld der Einträge
des IWB. Insbesondere arbeitet if0 auf evb(0..15,64..79), if1 auf
evb(16..31,80..95), if2 auf evb(32..47,96..111) und if3 auf evb(48..63,112..127).
-
Jedes der Filter if0..if3 wählt den ältesten
gültigen
Eintrag innerhalb seines zugehörigen
Datenbereichs aus und setzt einen Auswahlbitvektor (select bit vector,
sel). Weil ein Filter auf eine Untergruppe wirkt, wird nur ein Bit
im von einem Filter erzeugten Auswahlbitvektor „sel" auf „Ein" geschaltet. Dieses auf „Ein" geschaltete Bit
im Auswahlvektor entspricht der ältesten
Anweisung in der Teilgruppe, die auf das Absetzen wartet. Die Auswahlbitvektoren
bilden die Eingänge
der nachgeschalteten Auswahllogik, die den Absetzvektor<0..63> erzeugt. Der Auswahlvektor
sel<0..63>, wie er von den Filtern
if0..if3 erzeugt wird, wird direkt so auf den Absetzvektor issue<0..63> abgebildet, dass nur
dasjenige der auf „Ein" geschalteten Bits,
das zu der Untergruppe mit der ältesten
Anweisung gehört,
in issue<0..63> auf „Ein" geschaltet wird.
Um diese Auswahl zu treffen, muss für jede Untergruppe bekannt
sein, ob ein Bit auf „Ein" geschaltet ist und
ob es aufgrund der Filtereingänge
evb<0..63> oder der Filtereingänge evb<64..127> auf „Ein" geschaltet ist.
-
Diese Information wird durch die
beiden ODER-Stufen erzeugt, die zu jedem Filter gehören, wie
es in 18a–d
gezeigt ist. Genauer gesagt umfasst jede der 4 Teilgruppen ein Paar
ODER-Stufen, eine erste, die mit dem Index _1, d. h. or_1, bezeichnet
ist, die für
den unteren Datenvektorbereich 0..63 zuständig ist, und or_u, die für den oberen
Datenvektor 64..127 zuständig
ist. Somit ist die zweite ODER-Stufe dieses Paars, bezeichnet als 14a bis 14d,
in der Lage, den Wrap-Around-Fall abzudecken, weil sie auf eine
Hilfsanordnung von Einträgen
reagiert, die sich aus dem Auseinanderfalten der Eintragsfolge ergibt.
-
Z. B. wird das Bit or_10 von den
ODER-Stufen mit den Eingängen
evb<0..15> auf „Ein" geschaltet, wenn
eine der Leitungen evb<0..15> auf „Ein" steht. Darüber hinaus
wird das Bit or_u0 durch die ODER-Stufe mit den Eingängen evb<64..79> auf „Ein" geschaltet, wenn
eine der Leitungen evb<0..15> auf „Ein" steht.
-
Im Wesentlichen umfasst diese ODER-Stufe eine
Verbindungsleitung, d. h. ein "Mehrfach-ODER"-Gatter (dotted 0R)
zwischen den 16 Mitgliedern jeder Untergruppe. Wenn festgestellt
wird, dass auf einer entsprechenden Eingangsleitung das evb mit
dem kleinsten Index auf „Ein" geschaltet ist, dann
wird diese Verbindungsleitung als Ganzes entladen, d. h., die Position
des ältesten
Eintrags lässt sich
aus der Tatsache ableiten, dass der älteste Eintrag den kleinsten
Index hat. Dabei ist anzumerken, dass das Feld evb auseinandergefaltet
ist. Die tatsächlichen
Einträge
des IWB sind evb[0..63]. Beim Auseinanderfalten werden die virtuellen
Einträge evb[64..127]
so erzeugt, dass im Feld evb[0..127] die älteren Anweisungen vor allen
jüngeren
Anweisungen stehen. Somit ist die Anweisung im Eintrag 0 – Warten
auf Absetzung wird in evb<0> angezeigt – jünger als
die Anweisung in Eintrag 1. So sind z. B. im Wrap-Around-Fall,
wenn der Eingangszeiger auf den dritten Eintrag zeigt, der erste
und zweite Eintrag die jüngsten
im IWB, somit steht evb<0> auf 0, und evb<1> steht auf 0, aber
die virtuellen Einträge evb<64> und evb<65> stehen auf 1. Darum
entspricht immer der niedrigste Index, für den evb<index> auf
1 steht, dem ältesten
Eintrag.
-
Dies wird mit Bezug auf 1 im Folgenden detaillierter
beschrieben.
-
Mit dem auseinandergefalteten Bitfeld evb[0..127]
als Eingang ist ein Eintrag im unteren Bereich (or_1) immer älter als
ein Eintrag im oberen Bereich (or_u), ein if0-Eintrag ist älter als
ein if1-Eintrag, ein if1-Eintrag ist älter als ein if2-Eintrag und
ein if2-Eintrag älter
als ein if3-Eintrag.
-
Ein besonderer "Auswahllogik"-Block 16 dekodiert dann diese
Information und ermittelt den ältesten
Eintrag aus allen vier ausgewählten
Einträgen der
Unterfenster. Dies kann von einer Schalterstruktur ausgeführt werden,
in welcher die Zustände
der Schalter durch die Signale or_1 und or_u in der Weise gesteuert
werden, dass die älteste
Untergruppe auf die entsprechenden Bits des Absetzvektors abgebildet
wird und alle anderen Bits auf „Aus" geschaltet, d. h. auf 0 gesetzt werden.
-
Wenn z. B. sowohl bei if0 als auch
if3 das or_1-Signal zusätzlich
zur Auswahl gesetzt ist, d. h., wenn der normale Modus vorliegt,
dann ist der if0-Eintrag älter
als der if3-Eintrag. Daher setzt die Auswahllogik issue<0..15> gleich sel<0..15> und issue<16..63>= „0..0".
-
Oder wenn bei if0 das or_u-Signal
zusätzlich zur
Auswahl gesetzt ist und bei if3 das or_1-Signal – Wrap-Around-Fall -, dann
ist der if3-Eintrag älter
als der if0-Eintrag. In diesem Fall setzt die Auswahllogik issue<48..63> gleich sel<48..63>, weil dies die älteste Untergruppe
ist, die ein auf „Ein" geschaltetes Bit enthält, und
die anderen Ausgänge
der Auswahllogik, issue<0..47>, werden alle auf Null
gesetzt.
-
Wenn sowohl bei if0 als auch bei
if3 das or_u-Signal zusätzlich
zur Auswahl gesetzt ist und also der Wrap-Around-Modus vorliegt,
dann ist auch hier der if0-Eintrag älter als der if3-Eintrag.
-
Unter zusätzlicher Bezugnahme auf 2 wird im Folgenden als
Nächstes
die bevorzugte Implementierung der ODER-Verknüpfung beschrieben, die eine
dynamische "Mehrfach-ODER"-Struktur benutzt.
-
Wenn der Takteingang (clk) auf dem
unteren Signalpegel liegt, wird die "punktierte" Bitleitung 25 auf den oberen
Signalpegel, d. h. auf die Versorgungsspannung, vorgeladen, weil
der P-Transistor PFET 20 durchschaltet und der N-Transistor
NFET 22 sperrt, wenn der Eingang clk auf dem unteren Signalpegel
liegt. Dies impliziert, dass das ODER-Ausgangssignal 32 auf
dem unteren Signalpegel liegt. Wenn der Eingang clk auf „Ein" geschaltet wird,
beginnt die Auswertungsphase und der Ausgangswert wird gemäß der logischen
ODER-Funktion der Eingänge
in0..15 gesetzt. Die logische ODER-Funktion legt fest, dass der
Ausgang OR auf dem unteren Signalpegel bleibt, wenn alle Eingänge in0..15
auf dem unteren Signalpegel liegen. Wenn alle Eingänge in0..15
auf dem unteren Signalpegel liegen, sperren alle N-Transistoren
NFET im gestrichelten Kasten 24, und die Bitleitung 25 bleibt
auf dem oberen Signalpegel. Daher wird der Ausgang 32 wegen
des zwischen die Bitleitung 25 und den ODER-Ausgang geschalteten
Inverters 30 auf dem unteren Signalpegel bleiben. Während der
Auswertungsphase auftretende Leckströme werden durch Durchschalten
des P-Transistors PFET 21 ausgeglichen.
-
Wenn mindestens einer der Eingänge in0..15 auf
dem oberen Signalpegel liegt, wird die Bitleitung 25 auf
den unteren Signalpegel geschaltet, weil diejenigen NFETs im gestrichelten
Kasten 24, die mit den auf dem oberen Signalpegel liegenden
Eingängen
aus in0..15 verbunden sind, durchschalten und der vom Eingang clk
gesteuerte NFET 22 durchschaltet. Wenn die Bitleitung 25 auf
dem unteren Signalpegel liegt, setzt die Invertervorrichtung 30 den ODER-Ausgang
auf den oberen Signalpegel, wie es die ODER-Funktion erfordert.
-
Im Wesentlichen findet sich die gleiche Struktur
der Bitleitung mit den aufgereihten NFETs im Prioritätsfilter, wo
sie die Auswahl einer jüngeren
Anweisung in einer Untergruppe zum Absetzen verhindert. Darum kann
solch ein dynamisches ODER-Gatter vollständig in ein Prioritätsfilter
if0..if3 integriert werden.
-
Unter Bezugnahme auf die 3, 4, 5 und 6 wird nun als Nächstes der
Betrieb des erfindungsgemäßen Prioritätsfilters
mit integrierter Serialisierung in einer Abfolge von vier verschiedenen
Situationen beschrieben, wobei in 3 mit
einer bestimmten Situation begonnen und dann die weitere, durch
den Betrieb des Prozessors bedingte Entwicklung dargestellt wird.
-
Die Figuren haben alle die gleiche
Struktur: Veranschaulicht wird ein Teil des Prioritätsfilters 10, der
drei von 64 Ausgängen
des IWB umfasst, die dazu dienen, das effektive Gültigkeitsbit
evb über
die jeweils entsprechende der Leitungen 41a, b und c sowie
das mit F gekennzeichnete Serialisierungsbit über eine der Leitungen 42a,
b und c einzulesen. Wenn F für
eine bestimmte Anweisung auf „Ein" steht, muss die
Anweisung in Reihe statt außer
Reihe ausgeführt
werden.
-
Eine zusätzliche ODER-Stufe 43a,
b und c erhält
die Leitungen 41 und 42 als Eingänge. Ihr
Ausgang ist als Eingang mit einem jeweils entsprechenden der Unterfilter
if0,..if3 verbunden.
-
Mit dem Ausgang des Filters 10 ist
eine zusätzliche
UND-Stufe 44a, b und c verbunden, die das oben beschriebene
Ausgangssignal des Filters erhält und
als Zweites das evb-Signal, das durch UND-Verknüpfung von ebn, awb und vb erzeugt
wird – vgl. oben 1. Diese Anordnung arbeitet
wie folgt:
Das evb-Signal jedes Eintrags wird am Filtereingang mit
dem Serialisierungsbit F ODER-verknüpft. Dadurch ist jeder Eintrag,
der gültig
oder serialisiert ist, aus Sicht des Filters aktiv und kann somit
ausgewählt werden.
Keiner der Einträge
nach dem serialisierten Eintrag kann ausgeführt werden, weil sie jünger sind. Diese
Maßnahme
garantiert, dass die jüngeren
Anweisungen erst für
das Absetzen zur Ausführung ausgewählt werden
können,
nachdem der Eingang F<i> der serialisierten
Anweisung auf 0 gesetzt worden ist, z. B. vom Festschreibeprozess.
-
Die serialisierte Anweisung ist jedoch
aus Sicht des Filters sogar dann aktiv, wenn das Gültigkeitsbit
nicht aktiv ist, d. h., wenn es auf „Aus" geschaltet ist. Dann darf der Eintrag
natürlich
nicht auswählbar
sein. Um zu verhindern, dass dieser Eintrag ausgewählt und
an die Ausführungseinheit
gesendet wird, sorgt die zusätzliche
UND-Stufe 44a,b und c, die den Filterausgang und
das evb-Bit miteinander verknüpft,
dafür,
dass die Anweisung nur ausgeführt werden
kann, wenn das evb-Bit und das Serialisierungsbit F gleichzeitig
aktiv sind.
-
Beginnend nun mit 3, sind Eintrag (i – 1) und Eintrag (i + 1) gültig, Eintrag
i aber serialisiert. Somit sind für das Filter alle Einträge gültig. Eintrag
(i – 1)
wird als der älteste
ermittelt und zum Absetzen ausgewählt.
-
In 4 ist
die Ausführung
von Eintrag (i – 1) abgeschlossen,
evb(i – 1)
wird wegen ebn mit Null überschrieben – vgl. 1. Eintrag i ist nicht gültig und
ist serialisiert. Somit wird er ausgewählt, aber in der Ausgabestufe
angehalten. Eintrag (i + 1) ist gültig, wegen der Serialisierung
aber nicht ausgewählt.
-
In 5 ist
Eintrag (i) gültig
und serialisiert. Somit wird er zum Absetzen ausgewählt. Eintrag
(i + 1) ist jünger
als Eintrag (i) und wird nicht ausgewählt.
-
Nachdem die serialisierte Anweisung
ausgeführt
ist, setzt eine nicht explizit abgebildete Steuerlogik F auf „Aus" zurück und erlaubt
die Ausführung
aller folgenden Anweisungen.
-
In 6 ist
die Ausführung
von Eintrag (i) abgeschlossen. Somit wird das Serialisierungsbit
F(i) und das effektive Gültigkeitsbit
evb(i) mit Null überschrieben.
Somit wird Eintrag (i + 1) zum Absetzen ausgewählt.
-
Wie man anhand der vorangehenden
Beschreibung nachvollziehen kann, arbeitet das erfindungsgemäße IWB-Prioritätsfilter
einschließlich
Serialisierung wie beabsichtigt.
-
Aufgrund ihrer ganz allgemeinen Natur
kann die vorliegende Erfindung in jedem beliebigen Warteschlangenverwaltungssystem
angewendet werden und ist ausdrücklich
nicht auf das FIFO-Prinzip beschränkt. Das erfindungsgemäße Verfahren
und System kann auf jedes andere Prioritätskriterium angewendet werden,
solange die Priorität
durch Auslesen irgendeines Bits der Einträge oder durch. Auswertung irgendeines
anderen Kriteriums festgestellt werden kann.
-
Des Weiteren kann die Zahl der Untergruppen,
d. h. Unterbereiche, je nach den Anforderungen der aktuellen Systemarchitektur
variiert werden.
-
Schließlich kann ein Wege steuerndes
Netz (Routing-Netz) Vorteil aus dem erfindungsgemäßen Verfahren
ziehen, weil die Priorisierungsaufgaben vorteilhafterweise damit
durchgeführt
werden können.