-
Gebiet der
Erfindung
-
Die
vorliegende Erfindung bezieht sich im Allgemeinen auf Datenverarbeitung
und im Besonderen auf ein Datenverarbeitungssystem, das eine optimierte
Verzweigungssteuerung hat, und ein zugehöriges Verfahren.
-
Hintergrund der Erfindung
-
Konstruktionstechniken
mit geringerer Leistung haben in der Mikroprozessor- und Mikroprozessorsteuerungskonstruktion
wegen der breitgestreuten Verwendung von tragbaren und handgestützten Anwendungen
Bedeutung erlangt. Solche Anwendungen erfordern eine lange Batterie-Lebensdauer und
niedrige Systemkosten. Eine tragbare Anwendung arbeitet typischerweise
alternativ zwischen zwei Betriebsmodi: (i) Burstmodus, wo aktive
Berechnungen durchgeführt
werden; und (ii) Abschaltmodus (oder Schlafmodus), wo das System
schläft,
wobei es darauf wartet, dass ein neues berechenbares Ereignis eintritt.
Wenn ein Teilsystem (einschließlich
Mikroprozessor) nur einen kleinen Anteil der Gesamtsystemleistung
verbraucht, dann sollten niedrige Kosten und Hochleistung die Konstruktionsziele
für das
Teilsystem sein.
-
Verzweigungen
sind seit langem als ein Hauptfaktor bei dem vermindern der Leistung
einer Pipelinemaschine anerkannt. Dies liegt daran, dass Verzweigungen
den kontinuierlichen Fluss des Befehlsstroms unterbrechen. Außerdem können Verzweigungen
oft nur tief in der Ausführungspipeline aufgelöst werden.
Techniken wie z. B. Verzweigungsvorhersage und spekulative Ausführung werden
breit eingesetzt, um den nachteiligen Effekt von Verzweigungen zu
verringern. Diese Techniken verlangen leider oft nach hardwareintensiven
Implementierungen. Andere alternative preiswerte Ansätze werden
benötigt,
um die Leistung auf Verzweigungen zu verbessern.
-
Das
Dokument JELEMENSKY J ET AL: "THE
MC68332 MICROCONTROLLER",
IEEE MICRO INC. NEW YORK, Seiten 31–50, XP000049918, ISSN: 0272–1732 offenbart
die Kennzeichen der MC688332-Mikroprozessorsteuerung. Seite 38,
beginnend bei dem letzten Absatz, beschreibt den Schleifenmodus
dieser Mikroprozessorsteuerung. Der DBcc-Befehl bearbeitet drei
Operanden: einen Schleifenzähler,
eine Verzweigungsbedingung und eine Verzweigungsverschiebung.
-
Verfahren
nach dem Stand der Technik, die verwendet werden, um Verzweigungspfade
zu optimieren, die von Mikroprozessoren benutzt werden, sind verwendet
worden. Ein Verfahren nach dem Stand der Technik des Optimierens
der Ausführung von
Verzweigungsbefehlen ist als Softwareschleifen abwickeln ("software loop unrolling") bekannt. Softwareschleifenabwickeln
tritt in der Kompilierzeit auf, wenn bekannt ist, dass eine besondere
Schleife viele Male ausgeführt
werden wird. Softwareschleifenabwickeln kopiert den Code in der
Schleife und verringert die Zahl der Iterationen durch die Schleife
durch einen Faktor der gleich der Anzahl von Malen ist, die der
Code kopiert worden ist. Wenn z. B. in der Kompilierzeit bekannt
ist, dass eine besondere Softwareschleife 100 mal ausgeführt werden
wird, ist es möglich,
zwei Kopien des enthaltenen Codes in der abgewickelten Schleife
anzuordnen, und die spezifische Verzweigung nur 50 mal auszuführen. Obwohl
ein solches Verfahren potentiell Zyklen pro Iteration spart, erzeugt
es jedoch eine größere statische
Programmgröße.
-
Ein
anderes bekanntes Verfahren nach dem Stand der Technik zum Optimieren
von Verzweigungen ist die Verwendung eines speziellen Schleifenbefehls
gewesen. Spezielle Schleifenbefehle nach dem Stand der Technik waren
so konstruiert, dass eine Verzweigung und ein Dekrement (oder Inkrement) des
Schleifenzählers
in einem einzelnen Befehl auftreten. Als ein Ergebnis wird ein Taktzyklus
pro Iteration eingespart. Jeder spezielle Schleifenbefehl benötigt jedoch
einen eindeutigen Operationscode. Daher wird er, obwohl die Verwendung
spezieller Verzweigungsbefehle einen Taktzyklus pro Iteration einsparen
kann, auf Kosten eines größeren Befehlssatzes
erreicht.
-
Noch
ein anderes Verfahren nach dem Stand der Technik beinhaltet einen
Schleifenmodus zusammen mit speziellen Schleifenbefehlen. Der Schleifenmodus
ist ein Befehl, der anzeigt, dass der vorherige Befehl eine bestimmte
Anzahl von Malen wiederholt werden soll. Solch eine Implementie rung
vermeidet, dass der Befehl, der zahlreiche Male in Folge ausgeführt werden
muss, abgerufen werden muss. Dieses Verfahren benötigt jedoch
die Existenz der speziellen Schleifenbefehle und begrenzt den Schleifenkörper auf
einen einzelnen Befehl.
-
Daher
ist ein vielseitigeres Verfahren des Verzweigens wünschenswert,
das die Zahl der Taktzyklen, die benötigt werden, um Programmschleifen auszuführen, minimiert.
-
Kurze Beschreibung
der Zeichnungen
-
1 stellt das Befehlsformat
für kurze Rückwärtsverzweigungs
(SBB = "Short Backwards Branch")-Befehle dar.
-
2 stellt das Befehlsformat
für kurze
Vorwärtsverzeigungs
(SFB = "Short Forwards Branch")-Befehle dar.
-
3 stellt eine Programmschleife
dar, die einen SBB am Ende der Schleife enthält.
-
4 stellt, in Form eines
Blockdiagramms, ein Datenverarbeitungssystem gemäß der vorliegenden Erfindung
dar.
-
5 stellt, in Form eines
Blockdiagramms, die CPU 12 von 4 dar.
-
6 stellt, partiell in Form
eines Blockdiagramms und partiell in Form eines Logikdiagramms, die
Adressenerzeugungseinheit 30 von 5 ausführlicher dar.
-
7 stellt, partiell in Form
eines Blockdiagramms und partiell in Form eines Logikdiagramms, die
Verzweigungssteuerung 34 von 5 ausführlicher
dar.
-
8 stellt ein partielles
Statusdiagramm zum Beschreiben des Betriebs einer Statusmaschine der
Verzweigungssteuerung 34 dar.
-
9 stellt ein Timingdiagramm
verschiedener Signale des Datenverarbeitungssystems von 4 gemäß der vorliegenden Ausführungsform
dar.
-
10 stellt eine Programmschleife
dar, die einen SBB und einen SFB umfasst.
-
11 stellt, partiell in Form
eines Blockdiagramms und partiell in Form eines Logikdiagramms, die
Verzweigungssteuerung 34 von 5 für eine alternative
Ausführungsform
dar.
-
12 stellt ein Timingdiagramm
verschiedener Signale des Datenverarbeitungssystems von 4, die eine alternative
Ausführungsform
verwendet, gemäß der vorliegenden
Ausführungsform
dar.
-
Beschreibung
einer bevorzugten Ausführungsform
-
1 stellt das Befehlsformat
für kurze Rückwärtsverzweigungsbefehle,
als SBB bezeichnet, dar. 2 stellt
das Befehlsformat für
kurze Vorwärtsverzweigungsbefehle,
als SFB bezeichnet, dar. Der SBB und der SFB sind bedingte relative
PC-Verzweigungsbefehle oder solche ohne Bedingung. Verschiedene
Verzweigungsbefehle (mit verschiedenen Operationscodes) können gemeinsam
als SBB-Befehle oder SFB-Befehle
definiert werden.
-
Diese
Befehle können
in zwei Felder aufgeteilt werden: (i) Operationscode, der die Art
der Verzweigung spezifiziert; und (ii) Verzweigungsverschiebung – die Verschiebung,
die zu dem Programmzähler
(PC) hinzugefügt
wird, um die Verzweigungszieladresse zu bilden. Für SBB-Befehle
hat die Verzweigungsverschiebung führende Einsen, die anzeigen, dass
sie eine negative Verzweigungsverschiebung hat, und ein Rückwärtsverzweigungsziel
erzeugt, wenn sie zu dem PC hinzugefügt wird. In ähnlicher Weise
hat die Verzweigungsverschiebung für SFB-Befehle führende Nullen,
die anzeigen, dass sie eine positive Verzweigungsverschiebung hat.
-
Das
Verzweigungsverschiebungsfeld kann in zwei Felder weiter aufgeteilt
werden: (i) ein oberes Verschiebungsfeld, das als UD bezeichnet
wird; und (ii) ein unteres Verschiebungsfeld, das als LD bezeichnet
wird. Das obere Verschiebungsfeld sind alle Einsen für den SBB
und alle Nullen für
den SFB. In einer Ausführungsform
sind die Breiten der LD-Felder
des SBB und des SFB dieselben, nämlich
w Bits breit. Definitionsgemäß hat ein
SBB einen begrenzten Rückwärtsverzweigungsabstand,
der durch 2w gegeben ist, wo w die Breite des LD-Feldes ist. In ähnlicher
Weise hat ein SFB einen begrenzten Vorwärtsverzweigungsabstand, der
durch 2w gegeben ist.
-
3 stellt eine Programmschleife
dar, die am Ende der Schleife einen SBB-Befehl enthält. Der SBB-Befehl
ist bei der Adresse ASBB angeordnet. Der Befehl, der dem SBB folgt,
wird als der Fehlschlagsbefehl (IFT) bezeichnet, der bei der Adresse AFT
angeordnet ist. In ähnlicher
Weise ist der Befehl, der auf den IFT folgt IFT + 1, der bei der
Adresse AFT + 1 angeordnet ist.
-
4 stellt eine Datenverarbeitung 10 gemäß einer
Ausführungsform
der vorliegenden Erfindung in Form eines Blockdiagramms dar. In
einer Ausführungsform
umfasst die Datenverarbeitung 10 eine zentrale Verarbeitungseinheit
(CPU) 12, den Speicher 14, das Busschnittstellenmodul 16 und
andere Module 18, die bidirektional miteinander durch den
Bus 20 gekoppelt sind. Das Busschnittstellenmodul 16 kann
durch den externen Bus 26 mit der Datenverarbeitung 10 extern
gekoppelt sein. Die anderen Module 18 sind optional durch
einen oder mehrere integrierte Schaltkreisanschlüsse 28 mit der Datenverarbeitung 10 extern
gekoppelt. Der Speicher 14 ist optional durch einen oder
mehrere integrierte Schaltkreisanschlüsse 24 mit der Datenverarbeitung 10 extern
gekoppelt. Die zentrale Verarbeitungseinheit 12 ist optional
durch einen oder mehrere integrierte Schaltkreisanschlüsse 22 mit
der Datenverarbeitung 10 extern gekoppelt.
-
Es
wird weiter auf 4 Bezug
genommen, darin können
alternative Ausführungsformen
der vorliegenden Erfindung eine beliebige Art von Struktur für die Datenverarbeitung 10 verwenden.
Zusätzlich kann
die Datenverarbeitung 10 eine breite Vielfalt von Funktionen
durchführen.
Die Datenverarbeitung 10 kann z. B. eine RISC ("Reduced Instruction
Set Computer" =
Computer mit reduziertem Befehlsvorrat)-Architektur verwenden, eine Harvard-Architektur verwenden,
ein Vektorprozessor sein, ein SIMD ("Single Instruction Multiple Data" = Einzelbefehl für Mehrfachdaten)-Prozessor
sein, Fließkomma-Arithmetik
durchführen,
digitale Signal verarbeitungsberechnungen durchführen, etc.
-
5 stellt die CPU 12 gemäß der vorliegenden
Erfindung in Form eines Blockdiagramms dar. Die CPU 12 umfasst
die Adressenerzeugungseinheit 30, die Steuereinheit 32,
das Befehlsregister (IR) 36, den Multiplexer 38,
das Fehlschlagsbefehlregister (IRFT) 40, den Befehlsdecodierer 42,
die Ausführungseinheit 44,
den Dateneingangspuffer 46, und den Datenausgangspuffer 48.
Die Steuereinheit 32 umfasst die Verzweigungssteuerung 34.
-
Der
Speicher 14 ist mit einem Adressenbus zum Empfangen einer
mit "ADRESSE" bezeichneten Adresse
und mit einem Datenbus zum Empfangen und Bereitstellen von mit "DATEN" bezeichneten Daten
gekoppelt. Der Speicher 14 kann eine beliebige Art eines
konventionellen Speichers sein, der flüchtige Speicher, wie z. B.
statische Direktzugriffsspeicher (SRAMs) und dynamische Direktzugriffsspeicher
(DRAMSs) oder nicht-flüchtige
Speicher, wie z. B. elektrisch programmierbare Nur-Lese-Speicher (EPROM)
und Flash-Speicher, umfasst. Zusätzlich kann
der Speicher 14 auf derselben integrierten Schaltung wie
die CPU 12 oder extern zu der CPU 12 angeordnet
sein. Die Adressenerzeugungseinheit 30 hat eine erste Mehrzahl
von Eingangsanschlüssen zum
Empfangen einer als "OPERANDEN
ADRESSE" bezeichneten
Operandenadresse von der Ausführungseinheit 44,
eine zweite Mehrzahl von Eingangsanschlüssen zum Empfangen eines Verzweigungsverschiebungsfeldes
aus dem Befehlsregister 36 und eine Mehrzahl von Ausgangsanschlüssen zum
Bereitstellen der Adressensignale "ADRESSE" an den Speicher 14. Die Adressenerzeugungseinheit und
der Speicher 14 werden durch die Steuereinheit 32 über als "STEUERUNG" bezeichnete Steuersignale
gesteuert.
-
Der
Multiplexer 38 hat eine erste Mehrzahl von Eingangsanschlüssen zum
Empfangen von Befehlen aus dem Dateneingangspuffer 46,
eine zweite Mehrzahl von Eingangsanschlüssen, die mit dem Ausgangsanschluss
des Fehlschlagsbefehlsregisters (IRFT) 40 gekoppelt sind,
und eine Mehrzahl von Ausgangsanschlüssen zum Bereitstellen entweder des
Befehls aus dem Dateneingangspuffer 46 oder des in dem
Register 40 gespeicherten Fehlschlagsbefehls. Die Verzweigungssteuerung 34 stellt
die Steuersignale zum Steuern des Betriebs des Befehlsregisters 36,
des Multiplexers 38 und des Fehlschlagsregisters 40 zur
Verfügung.
-
Der
Dateneingangspuffer 46 empfängt Daten aus dem Speicher 14 und
stellt gepufferte Daten an die Ausführungseinheit 44 und/oder
Befehle an die erste Mehrzahl von Eingangsanschlüssen des Multiplexers 38 zur
Verfügung.
Der Datenausgangspuffer 48 empfängt Ausgangsdaten aus der Ausführungseinheit 44 und
stellt Daten zur Verfügung,
die in den Speicher 14 geschrieben werden sollen. Der Dateneingangspuffer 46 und
der Datenaungangspuffer 48 werden durch die Steuersignale
gesteuert, die durch die Steuereinheit 32 zur Verfügung gestellt werden.
-
Der
Befehlsdecodierer 42 ist mit dem Befehlsregister 36 zum
Empfangen eines Befehls gekoppelt. Der Befehlsdecodierer 42 ist
mit der Ausführungseinheit 44 gekoppelt.
Die Ausführungseinheit 44 ist
mit dem Dateneingangspuffer 46 zum Empfangen von Daten
aus dem Speicher 14 gekoppelt. In ähnlicher Weise ist die Ausführungseinheit 44 mit dem
Datenausgangspuffer 48 zum Bereitstellen von Daten an den
Speicher 14 gekoppelt. Die Ausführungseinheit 44 führt selektiv
die Befehle aus, die durch den Befehlsdecodierer 42 decodiert
werden, und stellt die Ergebnisse dem Datenausgangspuffer 48 oder
der Adressenerzeugungseinheit 30 zur Verfügung. Die
Ausführungseinheit 44 kann
z. B. eine arithmetische Logikeinheit (ALU) umfassen.
-
Die
Steuereinheit 32 ist mit dem Befehlsregister 36 zum
Empfangen von Befehlen gekoppelt und stellt in Reaktion darauf als "STEUERUNG" bezeichnete Steuersignale
zum Steuern des Betriebs der Adressenerzeugungseinheit 30 und
des Speichers 14 zur Verfügung. Die Steuereinheit 32 ist
mit dem Befehlsdecodierer 42 und der Ausführungseinheit 44 gekoppelt.
Die Ausführungseinheit 44 stellt der
Steuereinheit 32 Codebedingungsinformationen zur Verfügung.
-
Das
Datenverarbeitungssystem 10 verarbeitet Befehle in einer
Vierstufenpipeline. Die vier Stufen umfassen eine Abrufstufe, eine
Decodierstufe, eine Ausführungsstufe
und eine Rückschreibstufe.
Während
der Befehlsabrufstufe wird ein Befehl aus einem Speicher, wie z.
B. aus dem Speicher 14, abgerufen. Der Befehl wird dann
in dem Befehlsdecodierer 42 decodiert. Der decodierte Befehl
wird der Ausführungseinheit 44 zur
Verfügung
gestellt und steuert den Betrieb der Ausführungseinheit 44.
Die Ausführungseinheit 44 schreibt
dann die Ergebnisse der Befehlsausführung über den Datenausgangspuffer 48 an
den Speicher 14 zurück.
-
6 stellt, partiell in Form
eines Blockdiagramms und partiell in Form eines Logikdiagramms, die
Adressenerzeugungseinheit 30 von 5 ausführlicher dar. Die Adressenerzeugungseinheit 30 umfasst
den Adressenmultiplexer 50, das Register 52, den
Programmzähler 54,
das Zieladressenregister 58, den Addierer 56,
das SBB-Register 60, den Multiplexer 62, den Multiplexer 64,
den Addierer 66 und den Multiplexer 68. Der Adressenmultiplexer 50 hat
eine erste Mehrzahl von Eingangsanschlüssen zum Empfangen einer als "OPERANDEN ADRESSE" bezeichneten Adresse,
eine zweite Mehrzahl von Eingangsanschlüssen, die mit den Ausgangsanschlüssen des
Addierers 66 gekoppelt sind, eine dritte Mehrzahl von Eingangsanschlüssen, die
mit den Ausgangsanschlüssen
des Multiplexers 68 gekoppelt sind, und eine Mehrzahl von
Ausgangsanschlüssen, die
mit den Eingangsanschlüssen
der Register 52 gekoppelt sind. Die Register 52 haben
eine Mehrzahl von Ausgangsanschlüssen
zum Bereitstellen von als "ADRESSE" bezeichneten Adressensignalen
an die Eingangsanschlüsse
des Programmzählers 54 und an
die Eingangsanschlüsse
des Registers 58. Der Programmzähler 54 hat eine Mehrzahl
von Ausgangsanschlüssen,
die mit einer ersten Mehrzahl von Eingangsanschlüssen des Addierers 56 und
mit einer ersten Mehrzahl von Eingangsanschlüssen des Multiplexers 62 gekoppelt
sind. Der Addierer 56 addiert den Ausgang des Programmzählers 54 zu "2" und stellt das Ergebnis auf den Ausgangsanschlüssen einer
zweiten Mehrzahl von Eingangsanschlüssen des Multiplexers 68 und
den Eingangsanschlüssen
des Registers 60 zur Verfügung. Die "2" wird
zu dem Programmzähler 54 addiert,
weil die Befehlsbreite gleich zwei Bytes ist. Es ist zu beachten,
dass, obwohl in der dargestellten Ausführungsform eine "2" zu dem Programmzählerwert addiert wird, andere
Ausführungsformen,
die unterschiedliche Befehlsbreiten haben, eine andere Zahl verwenden
würden.
Die Ausgangsanschlüsse
des als "ASBB" bezeichneten Registers 60 sind
mit der zweiten Mehrzahl von Eingangsanschlüssen des Multiplexers 62 gekoppelt. Der
Multiplexer 64 hat eine erste Mehrzahl von Eingangsanschlüssen zum
Empfangen einer Eingabe "4" und eine zweite
Mehrzahl von Eingangsanschlüssen,
die mit dem Befehlsregister 36 zum Empfangen eines Verzweigungsverschiebungsfeldes
eines Befehls gekoppelt sind. Eine "4" wird
zu dem ASBB addiert, so dass die AFT + 1 dem Speicher 14 zu
Verfügung
gestellt werden kann. Die AFT + 1 ist die Adresse für den IFT
+ 1, der zwei Befehle nach dem SBB angeordnet ist. In anderen Ausführungsformen
kann die AFT + 1 durch Verwenden anderer Verfahren erzeugt werden.
Der Multiplexer 64 hat eine Mehrzahl von Ausgangsanschlüssen, die
mit einer zweiten Mehrzahl von Eingangsanschlüssen des Addierers 66 gekoppelt
sind. Die Ausgangsanschlüsse
des als "VERZWEIGUNGSADRESSE" bezeichneten Addierers 66 sind
mit den Eingangsanschlüssen
des Adressenmultiplexers 50 gekoppelt.
-
7 stellt, partiell in Form
eines Blockdiagramms und partiell in Form eines Logikdiagramms, die
Verzweigungssteuerung 34 von 5 ausführlicher
dar. Die Verzweigungssteuerung 34 umfasst eine Statusmaschine
(in dieser Abbildung nicht gezeigt), das LD-Register 70,
den Multiplexer 72, das Zähl_register 74, den
Addierer 76 und den Komparator 78. Das LD-Register 70 hat
eine Mehrzahl von Eingangsanschlüssen
zum Empfangen der unteren Verschiebungsbits des Verzweigungsverschiebungsfeldes
eines Befehls aus dem Befehlsregister 36 und eine Mehrzahl
von Ausgangsanschlüssen,
die mit einer ersten Mehrzahl von Eingangsanschlüssen des Multiplexers 72 gekoppelt
sind. Der Multiplexer 72 hat außerdem eine zweite Mehrzahl
von Eingangsanschlüssen
zum Empfangen der unteren Verschiebungsbits aus dem Befehlsregister 36 und
eine dritte Mehrzahl von Eingangsanschlüssen, die mit dem Ausgang des
Addierers 76 gekoppelt sind. Eine Mehrzahl von Ausgangsanschlüssen des
als "ZÄHLUNG" bezeichneten Multiplexers 72 ist
mit den Eingangsanschlüssen
des Zähl_registers 74 gekoppelt. Die
Ausgangsanschlüsse
des Zähl_registers 74 sind mit
einer ersten Mehrzahl von Eingangsanschlüssen des Addierers 76 gekoppelt.
Der Addierer 76 hat eine zweite Mehrzahl von Eingangsanschlüssen zum Empfangen
von "1". Die Register 70, 74 und
der Multiplexer 72 werden aus der Steuereinheit 32 gesteuert.
Der Komparator 78 hat eine erste Mehrzahl von Eingangsanschlüssen, die
mit dem Ausgang des Multiplexers 72 und einer zweiten Mehrzahl
von Eingangsanschlüssen
zum Empfangen von "–1" gekoppelt sind,
und einen Ausgang zum Bereitstellen eines durch "VORHERSAGE_GENOMMEN" bezeichneten Schleifenende-Signals
an die Steuereinheit 32. In anderen Ausführungsformen
können
andere Mittel verwendet werden, um das VORHERSAGE_GENOMMEN-Signal
zu erzeugen, wie z. B. ein Adressenvergleich.
-
8 stellt ein vereinfachtes
Statusprogramm zum Beschreiben des Betriebs einer Statusmaschine
der Verzweigungssteuerung 34 von 5 dar. Die Statusmaschine der Verzweigungssteuerung 34 hat
zwei Betriebszustände.
Der erste Zustand, der RUHE-Zustand 40, zeigt an, dass
eine kurze Rückwärtsverzweigung
(SBB) nicht detektiert worden ist. Nach der Detektion eines SBB
und für
den Fall, dass der SBB genommen wird, verlässt die Statusmaschine der
Verzweigungssteuerung 34 den RUHE-Zustand 40 und
tritt in den AKTIV-Zustand 42 ein. In einer Ausführungsform,
kehrt die Statusmaschine, wenn sie in einem AKTIV-Zustand ist und
für den
Fall, dass ein anderer SBB detektiert und genommen wird, in den
RUHE-Zustand zurück.
In einer anderen Ausführungsform
verbleibt die Statusmaschine, wenn sie in einem AKTIV-Zustand ist
und für
den Fall, dass ein anderer SBB detektiert und genommen wird, in
dem AKTIV-Zustand. In diesem Falle, werden das LD-Register 70 und
die ZÄHLUNG
von 7 mit dem LD-Feld
des neu angetroffenen SBB neu geladen. Die Statusmaschine kehrt
in den RUHE-Zustand zurück,
wenn eine der folgenden Bedingungen erfüllt ist: (1) der detektierte
SBB-Befehl, der den Übergang aus
einem RUHE-Zustand
in einen AKTIV-Zustand auslöste
wird nicht genommen; oder (2) eine Veränderung des Flusses ist aufgetreten
und sie wird nicht durch den auslösenden SBB verursacht. Die
Bedingung (1) entspricht dem Fall, wo die Schleife durch den SBB
am Ende der Schleife sequentiell existiert. Die Bedingung (2) entspricht
dem Fall, wo es eine Veränderung
im Fluss in dem Schleifenkörper
mit einem Ziel gibt, das in dem Schleifenkörper sein kann oder nicht.
-
9 stellt ein Timingdiagramm
von verschiedenen Signalen des Datenverarbeitungssystems von 4 gemäß der vorliegenden Erfindung dar.
Es wird nun auf 1 bis 9 Bezug genommen, hierin
wird jetzt der Betrieb des Datenverarbeitungssystems 10 diskutiert.
-
Das
Datenverarbeitungssystem 10 führt im Allgemeinen Befehle
aus, die sequentiell aus dem Speicher 14 abgerufen werden,
bis eine Änderung des
Flussbefehls, wie z. B. ein Verzweigungsbefehl angetroffen wird. 9 stellt die Erzeugung der Adressen
A0 bis A2 in aufeinanderfolgenden Taktzyklen dar. Außerdem werden
Daten, die jeder erzeugten Adresse entsprechen, in jedem nachfolgenden Taktzyklus
abgerufen. Zum Beispiel wird der Befehl 10, der der Adresse
A0 entspricht, in dem Zyklus 2 aus dem Speicher abgerufen, der Befehl 11 in
dem Zyklus 3, nach der Erzeugung der Adresse A1, abgerufen, und
so weiter. In dem Taktzyklus 4 wird eine Adresse, die dem SBB-Befehl
entspricht, namentlich ASBB, an den Speicher 14 ausgegeben.
Der SBB-Befehl wird in dem Taktzyklus 6 detektiert. In Reaktion
darauf, dass der SBB-Befehl detektiert wird, wird die Zieladresse,
die Adresse A0, in das Register 58 geladen. Zur selben
Zeit wird ein Fehlschlagsbefehl IFT in das IRFT-Register 40 geladen. Der
IFT-Befehl ist der Befehl, der in der statischen Programmordnung
unmittelbar einem SBB-Befehl folgt.
-
Ein
halber Taktzyklus nachdem jede Adresse dem Speicher 14 zum
Abrufen von Befehlen zur Verfügung
gestellt worden ist, wird die Adresse in dem Programmzähler 54,
wie in 9 dargestellt,
verriegelt. Es ist zu beachten, dass die Taktzyklen 3 bis 7 eine
erste Iteration definieren. Die SBB-Detektion tritt in der Decodierstufe
auf. Wenn vorgesehen ist, dass der SBB einen Zyklus später genommen
werden soll, geht die Statusmaschine der Steuereinheit 32 aus
einem RUHE-Zustand in einen AKTIV-Zustand über. Außerdem wird, wenn der SBB detektiert
wird, das untere Verschiebungsfeld LD, aus dem Befehlsregister 36 in
das LD-Register 70 geladen (7).
Für jeden
nachfolgenden Befehl, der ausgeführt
wird, wird der ZÄHL-
oder Schleifenwert von 4 durch
1 inkrementiert. Ein Schleifenende-Signal VORHERSAGE_GENOMMEN (7) wird der Steuereinheit 32 aus
dem Komparator 78 zur Verfügung gestellt. VORHERSAGE_GENOMMEN
wird behauptet, wenn die ZÄHLUNG
von 7 –1 erreicht.
-
Die
zweite Iteration der Schleife fährt
fort, bis die ZÄHLUNG
in dem Taktzyklus 9 einen Wert von –1 erreicht. In dem Taktzyklus
9 wird eine Vorhersage gemacht, wann das VORHERSAGE_GENOMMEN-Signal
an die Steuereinheit 32 behauptet wird, was darin resultiert,
dass die Zieladresse A0 aus dem Zieladressen-Register 58 auf
dem Adressenbus zu dem Speicher 14 geladen wird.
-
Außerdem enthält der Programmzähler 54, in
dem Taktzyklus 9, die Adresse A2. Diese Adresse wird durch Verwenden
des Addierers 56 durch 2 inkrementiert, was ein Ergebnis
von ASBB erzeugt. Diese resultierende Adresse wird dann in das SBB-Adressenregister 60 geladen.
Der Programmfluss fährt
durch die dritte Iteration fort, bis zu dem Zyklus 12,
wo eine andere Vorhersage gemacht wird. Die Adresse A0 wird wieder
aus dem Zieladressenregister 58 genommen und dem Speicher 14 zur
Verfügung
gestellt. Am Ende des Taktzyklus 14, wie in diesem Beispiel
gezeigt, wird bestimmt, dass die Verzweigung falsch vorhergesagt
ist. Eine Verzweigung wird durch den Wert des Bedingungscodes und
der Art der Verzweigung bestimmt, falsch vorhergesagt zu sein. Der
Befehl I0 ist bereits verriegelt und decodiert worden, wenn in dem
Zyklus 14 eine falsche Vorhersage identifiziert wird. Die
Adresse, die vorher in das Adressenregister 60 geladen
wurde, wird durch 4 inkrementiert, wodurch ein Ergebnis von AFT +
1 erzeugt wird. Diese resultierende Adresse wird dann auf dem Adressenbus
zu dem Speicher 14 geladen. Dies bewirkt, dass der Befehlsabruf
aus der AFT + 1 initiiert, wodurch verhindert wird, dass eine Ausführungsblase
auftritt. Die Wiederherstellung beginnt in dem Taktzyklus, der der
falschen Vorhersage folgt, und an diesem Punkt ist der Befehl I0
in der Ausführungsstufe.
Die Ausführung
von I0 wird beendet. Nach der Beendigung des Befehls I0 wird, in
Reaktion auf die falsche Vorhersage, der Befehl IFT aus dem IRFT 40 in
das Befehlsregister 36 geladen. Die Befehlsausführung wird
dann mit dem IFT fortgesetzt. Die falsche Vorhersage bewirkt außerdem, dass
die Statusmaschine von 8 aus
dem AKTIV- zu dem RUHE-Zustand übergeht.
-
Durch
gleichzeitiges Bereitstellen des IFT an das Befehlsregister 36 und
Ausgeben der Adresse AFT + 1 in dem selben Zyklus wie der Wiederherstellungszyklus,
d. h. Zyklus 15, wird ein Falschvorhersagungs-Null-Strafzyklus
erreicht. Es ist außerdem
zu beachten, dass die erste Iteration der in 9 gezeigten Schleife fünf Zyklen
durchläuft.
Die zweite Iteration mit richtiger Vorhersage durchläuft nur
drei Zyklen, das sind zwei weniger als die, die sie normalerweise
ohne Faltverzweigungen durchläuft.
Die dritte Iteration mit falscher Vorhersage durchläuft vier Zyklen
(wobei der Wiederherstellungszyklus nicht umfasst wird, weil der
IFT in diesem Zyklus decodiert wird).
-
In
der oben beschriebenen Ausführungsform verlässt die
Statusmaschine den AKTIV-Zustand, wenn sie in einem AKTIV-Zustand ist und für den Fall,
dass es eine Veränderung
des Flusses gibt, die nicht durch den SBB verursacht wird, die den Übergang
aus dem RUHE- zu dem AKTIV-Zustand auslöste, und sich das Ziel der
Veränderung
des Flusses in dem Schleifenkörper
befindet. Dies tritt trotz der Tatsache ein, dass das Ziel der Veränderung
des Flusses noch in dem Schleifenkörper sein kann. Um solche Einschränkungen
zu überwinden,
stellt die nachfolgende Ausführungsform
ein verbessertes Verzweigungsfaltverfahren zur Verfügung.
-
10 stellt eine Programmschleife
dar, die einen SBB am Ende der Schleife umfasst. Sie umfasst außerdem einen
SFB in dem Schleifenkörper, der
bei A1 angeordnet ist. Das Ziel des SFB ist A4, und der Vorwärtsverzweigungsabstand
ist +3. 10 wird in Verbindung
mit 12 verwendet, um einen
verbesserten Verzweigungsfaltbetrieb zu beschreiben.
-
11 stellt, partiell in Form
eines Blockdiagramms und partiell in Form eines Logikdiagramms, die
Verzweigungssteuerung 34 von 5 ausführlicher
dar. Die Verzweigungssteuerung 34 umfasst eine Statusmaschine
(in dieser Abbildung nicht gezeigt), das LD-Register 94,
den Multiplexer 90, das Zähl_register 82, den
Addierer 80, den Komparator 98, den Nicht-Negativ-Detektor 100,
das korrigierte_Zählungsregister 92 und
den Addierer 96. Das Register 94 hat eine Mehrzahl
von Eingangsanschlüssen
zum Empfangen der unteren Verschiebungsbits des Verzweigungsverschiebungsfeldes
eines Befehls aus dem Befehlsregister 36 und eine Mehrzahl
von Ausgangsanschlüssen,
die mit einer ersten Mehrzahl von Eingangsanschlüssen des Multiplexers 90 gekoppelt
sind. Der Multiplexer 90 hat außerdem eine zweite Mehrzahl
von Eingangssignalen zum Empfangen der unteren Verschiebungsbits aus
dem Befehlsregister 36, eine dritte Mehrzahl von Eingangsanschlüssen, die
mit dem Ausgang des Addierers 80 gekoppelt sind, und eine
vierte Mehrzahl von Eingangsanschlüssen, die mit dem Ausgang des korrigierten_Zählungsregisters 92 gekoppelt
sind. Eine Mehrzahl von als "ZÄHLUNG" bezeichneten Ausgangsanschlüssen des
Multiplexers 90 ist mit den Eingangsanschlüssen des
Zähl_registers 82 gekoppelt.
-
Die
Ausgangsanschlüsse
des Zähl_registers 82 sind
mit einer ersten Mehrzahl von Eingangsanschlüssen des Addierers 80 gekoppelt.
Der Addierer 80 hat eine zweite Mehrzahl von Eingangsanschlüssen zum
Empfangen von "1". Die LD-Register 94, das
Zähl_register 82,
das korrigierte_Zähl_register 92 und
der Multiplexer 90 werden aus der Steuereinheit 32 gesteuert.
Der Komparator 98 hat eine erste Mehrzahl von als "ZÄHLUNG" bezeichneten Eingangsanschlüssen, die
mit dem Ausgang des Multiplexers 90 gekoppelt sind, und
eine zweite Mehrzahl von Eingangsanschlüssen zum Empfangen von "–1" und einen Ausgang zum Bereitstellen
eines durch "VORHERSAGE_GENOMMEN" bezeichneten Schleifenende-Signals
an die Steuereinheit 32. Der Nicht-Negativ-Detektor 100 hat
eine Mehrzahl von Eingangsanschlüssen,
die mit dem Ausgang des Multiplexers 90 gekoppelt sind,
und einen Ausgang zum Bereitstellen eines durch "ANNULLIEREN" bezeichneten Signals an die Steuereinheit 32.
Das korrigierte_Zähl_register 92 hat
eine Mehrzahl von Eingangsanschlüssen,
die mit dem Ausgang des Addierers 96 gekoppelt sind. Das
Zähl_register 82 hat eine
Mehrzahl von durch "LATCH-CNT" bezeichneten Ausgangsanschlüssen, die
mit der zweiten Mehrzahl von Eingangsanschlüssen des Addierers 96 gekoppelt
sind. In anderen Ausführungsformen
können andere
Mittel verwendet wer den, um das "VORHERSAGE_GENOMMEN"-Signal zu erzeugen,
wie z. B. ein Adressenvergleich.
-
12 stellt ein Timingdiagramm
von verschiedenen Signalen des Datenverarbeitungssystems von 4 gemäß dem verbesserten Betrieb dar.
Es wird nun auf 10 bis 12 Bezug genommen, darin
wird der Betrieb des Datenverarbeitungssystems 10 nun für das verbesserte
Schema diskutiert.
-
Während der
Ausführung
der ersten Iteration wird ein bei der Adresse ASBB angeordneter
SBB detektiert (in dem Zyklus 2). Sein unteres Verschiebungsfeld
wird in die ZÄHLUNG
von 11 geladen. Der
SBB ist dafür
vorgesehen, in dem folgenden Zyklus genommen zu werden. In dem selben
Zyklus (Zyklus 3) tritt die Statusmaschine in den AKTIV-Zustand ein. Die
Ausführung
fährt von
I0 aus fort. In dem Zyklus 5 wird ein SFB detektiert. Während dieses
Zyklus ist die ZÄHLUNG –4 und der
LATCH_CNT –5.
Das untere Verschiebungsfeld des SFB, welches +3 ist, wird zu dem
LATCH_CNT addiert. Gegen Ende der zweiten Iteration wird eine Vorhersage
für den
SBB gemacht (in dem Zyklus 7). Die ZÄHLUNG wird mit –6 aus dem
LD-Register 94 neu geladen. Da richtig vorhergesagt wird,
dass der SBB genommen werden soll, fährt die Ausführung von
I0 aus fort. In dem Zyklus 10 wird derselbe SFB erneut
detektiert. In diesem Beispiel ist vorgesehen, dass der SFB in dem
Zyklus 11 nicht genommen wird. Als ein Ergebnis wählt der
Multiplexer 90 immer noch aus, um seinen Eingang aus dem
Ausgang des Addierers 80 anstatt aus dem Ausgang des korrigierten_Zähl_registers 92 zu
versorgen. Somit fährt
die ZÄHLUNG
fort, für
jeden ausgeführten
Befehl durch 1 zu inkrementieren. In dem Zyklus 13, wo die
ZÄHLUNG –1 erreicht,
wird eine andere Vorhersage für den
SBB gemacht. Die Ausführung
fährt fort wie
zuvor beschrieben.
-
Im
Allgemeinen erlaubt die vorliegende Erfindung ein Verzweigungsfalten
ohne Abrufen des Verzweigungsbefehls. Für ein Einzelausgabe-Vierstufenpipeline-Datenverarbeitungssystem
ist die Zahl der eingesparten Zyklen Null, wenn die Zahl der Iterationen
zwei oder weniger ist. Für
drei Iterationen ist die Zahl der eingesparten Zyklen zwei, für vier Iterationen
ist die Zahl der eingesparten Zyklen vier und für fünf Iterationen ist die Zahl
der eingesparten Zyklen sechs. Die Zahl der eingesparten Zyklen
kann als 2m – 4
ausgedrückt
werden, wo m gleich die Zahl der Iterationen ist. Außerdem gibt
es, wenn die Vorhersage "falsch
vorhergesagt" ist,
keinen Strafzyklus wie im Falle der Verzweigungsvorhersagetechnik nach
dem Stand der Technik.
-
Die
Zahl der eingesparten Zyklen wird mit einer minimalen zusätzlichen
Hardware erreicht. Außerdem
wird Energie gespart und die Leistung verbessert, weil der Verzweigungsbefehl
und der Fehlschlagsbefehl nach der ersten Iteration nicht abgerufen,
decodiert und ausgeführt
werden.
-
Obwohl
die Erfindung in dem Kontext spezifischer Ausführungsformen beschrieben worden
ist, ist dem Fachmann auf dem Gebiet klar, dass die vorliegende
Erfindung auf verschiedenen Wegen modifiziert werden kann, und ihm
werden viele andere Ausführungsformen
als die oben im Besonderen beschriebene, in den Sinn kommen. Zum
Beispiel kann der Zähl-
oder Schleifenwert, der in dem Zähl_register
gespeichert wird, tatsächlich
ein Adressenwert sein, der inkrementiert und mit einem zweiten Adressenwert
verglichen wird. Entsprechend sollen die angehängten Ansprüche alle Modifikationen der
Erfindung abdecken, die in den wahren Bereich der Erfindung fallen.