-
Gebiet der
Erfindung
-
Die vorliegende Erfindung betrifft
eine Computersystem-CPU oder einen Computersystem-Mikroprozessor
mit einem Allzweck-Kern und einem DSP-Kern, wobei die CPU einen DSP-Funktions-Dekodierer
aufweist, der zum Ausführen
von DSP-Typ-Funktionen vorgesehene Allzweck-Opcode-Sequenzen dekodiert
und diese Opcodes in entsprechende DSP-Makros zur Ausführung durch
den DSP-Kern konvertiert.
-
Beschreibung
des relevanten Standes der Technik
-
Personal-Computer-Systeme und Allzweck-Mikroprozessoren
wurden ursprünglich
für geschäftliche Verwendungszwecke
entwickelt, wie z. B. Textvearbeitung und Spreadsheets u. a. Derzeit
werden Computersystem jedoch auch zur Handhabung einer Anzahl von
in Echtzeit ablaufenden DSP-bezogenen
Anwendungen eingesetzt, einschließlich Multimedia-Anwendungen
mit Video- und Audio-Komponenten, Videoaufnahme und -playback, Telefon-Anwendungen,
Spracherkennung und -synthese, und Kommunikationsanwendungen u.
a. Diese Echtzeit oder DSP-artigen Anwendungen verlangen typischerweise
eine erhöhte
CPU-Floating-Point-Leistung.
-
Ein Problem, das aufgetreten ist,
besteht darin, dass Allzweck-Mikroprozessoren, die ursprünglich für geschäftliche
Anwendungen entwickelt wurden, nicht sehr gut geeignet sind für Echtzeit-Erfordernisse
und die Erfordernisse mathematischer Berechnungen bei modernen DSP-bezogenen
Anwendungen, wie z. B. Multimedia-Anwendungen und Kommunikations-Anwendungen.
Beispielsweise ist die x86-Familie von Intel Corporation zu Berechungen
auf Ganzzahl-Basis und Speicher-Management-Funktionen hin orientiert
und führt Funktionen
vom DSP-Typ nicht gut durch.
-
Da sich Personal-Computersysteme
zu stärker
echtzeitbezogenen und multimedia-fähigen Systemen entwickelt haben,
wird von der Allzweck-CPU entsprechend verlangt, mathematisch intensivere
Funktionen vom DSP-Typ durchzuführen.
Deshalb weisen zahlreiche Computersysteme nun einen oder mehrere
Signalprozessoren auf, die auf diese komplexen mathematischen Funktionen
zugeschnitten sind.
-
Eine aktueller Trend bei Computersystem-Architekturen
besteht in einer Entwicklung zur "Ursprungssignal-Verarbeitung" (native signal processing
NSP). Die Ursprungssignal-Verarbeitung oder NSP wurde anfangs von
der Intel Corporation als eine Strategie entwickelt, die DSPs von
bestimmten Funktionen zu entlasten und diese Funktionen in der Haupt-
oder Allzweck-CPU
durchzuführen.
Die Strategie basiert darauf, dass, während die Leistung und die
Taktgeschwindigkeiten von Allzweck-CPUs zunehmen, die Allzweck-CPU
in der Lage ist, zahlreiche der Funktionen durchzuführen, die
zuvor von speziell vorgesehenen DSPs durchgeführt wurden. Somit besteht ein
Trend in der Mikroprozessorindustrie in dem Bemühen, CPU-Designs mit höheren Geschwindigkeiten
und mit Erweiterung um DSP-Typ-Fähigkeiten
zu schaffen, wie z. B. mit leistungsfähigeren Floating-Point-Einheiten.
Ein weiterer Trend in der Industrie ist derjenige, dass DSP-Hersteller
DSPs schaffen, die nicht nur mit höheren Geschwindigkeiten laufen,
sondern auch CPU-Typ-Fähigkeiten
wie z. B. Speicher-Management-Funktionen anstreben können.
-
Ein Digitalsignalprozessor ist im
wesentlichen ein Allzweck-Mikroprozessor, der spezielle Hardware zum
Ausführen
mathematischer Funktionen mit Geschwindigkeiten und Graden an Effizienz
enthält,
die bei Mikroprozessoren normalerweise nicht vorhanden sind. Bei
derzeitigen Computersystemen werden DSPs als Ko-Prozessoren verwendet
und arbeiten im System in Verbindung mit Allzweck-CPUs. Beispielsweise
können derzeitige
Computersysteme eine Allzweck-CPU als Haupt-CPU und eine oder mehrere
Multimedia- oder Kommunikations-Erweiterungskarten
enthalten, die spezielle vorgese hene DSPs aufweisen. Die CPU gibt
mathematische Funktionen an den Digitalsignalprozessor ab, so dass
die System-Effizienz verbessert wird.
-
Digitalsignalprozessoren enthalten
Ausführungseinheiten
mit einer oder mehreren arithmetischen Logik-Einheiten (ALUs), die
mit Hardware-Multiplikatoren verbunden sind, welche komplexe mathematische
Algorithmen in Pipeline-Weise implementieren. Das Instruktions-Set
weist primär
Instruktionen vom DSP-Typ auf und enthält ferner eine kleine Anzahl
von Instruktionen, die eine Nicht-DSP-Funktionalität aufweisen.
-
Das DSP ist typischerweise optimiert
für mathematische
Algorithmen wie z. B. Korrelation, Konvolution, Filter mit finiter
Impulsreaktion (FIR), Filter mit infiniter Impulsreaktion (IIR),
Fast-Fourier-Transformationen (FFTs), Matrix-Berechnungen und innere
Produkte, unter anderen Operationen. Implementierungen dieser mathematischen
Algorithmen weisen generell lange Sequenzen systematischer arithmetischer/multiplikativer Operationen
auf. Diese Operationen werden bei verschiedenen Gelegenheiten durch
Befehle vom Entscheidungs-Typ unterbrochen. Generell sind die DSP-Sequenzen
eine Wiederholung eines sehr kleinen Sets von Operationen, die während 70%
bis 90% der Zeit ausgeführt
werden. Die übrigen
10% bis 30% der Instruktionen sind primär Boole'sche/Entscheidungs-Operationen (oder
generell Datenverarbeitung).
-
Eine Allzweck-CPU weist generell
eine Ausführungseinheit,
eine Speicher-Management-Einheit
und eine Floating-Point-Einheit sowie weitere Logik auf. Die Aufgabe
einer Allzweck-CPU besteht darin, Code- und Ausführungs-Operationen an Daten in dem Computer-Speicher
vorzunehmen und somit die Bereechungs-Plattform zu handhaben. Generell
ist die Allzweck-CPU-Architektur
primär
zur Durchführung
von Boole'schen/Management-/Datenmanipulationsentscheidungs-Operationen
ausgelegt. Die von einer Allzweck-CPU ausgeführten Instruktionen oder Opcodes
enthalten basale mathematische Funktionen. Jedoch sind diese mathematischen
Funktionen nicht sehr gut geeignet für komplexe mathematische Funktionen
vom DSP- Typ. Somit
ist eine Allzweck-CPU erforderlich, um eine große Anzahl von Opcodes oder
Instruktionen zur Durchführung
basaler DSP-Funktionen auszuführen.
-
Somit besteht der Wunsch nach einer
Computersystem- und CPU-Architektur, die eine Allzweck-CPU enthält und die
ferner mathematische Funktionen vom DSP-Typ mit erhöhter Leistung
durchführt.
Ferner wird eine CPU-Architektur
gewünscht,
die abwärtskompatibel
mit existierenden Software-Anwendungen
ist, welche annehmen, dass die Allzweck-CPU sämtliche der mathematischen
Berechungen durchführt.
Gewünscht
ist ferner eine neue CPU-Architektur, die eine verbesserte mathematische
Leistung für
existierende Software-Anwendungen bietet.
-
Bei einem populären Mikroprozessor, der in
Personal-Computer-Systemen verwendet wird, handelt es sich um die
X86-Mikroprozessor-Familie. Zu der x86-Mikroprozessor-Familie gehören die
Mikroprozessoren der Typen 8088, 8086, 80186, 80286, 80386, 1486,
Pentium und P6 von Intel Corporation. Zu der X86-Mikroprozessor-Familie
gehören
ferner X86-kompatible Prozessoren wie die Prozessoren 4486 und K5
von Advanced Micro Devices, der M1-Prozessor von Cyrix Corporation,
und die Prozessoren NextGen 5 × 86
und 6 × 86 von
NextGen Corporation. Die X86-Mikroprozessor-Familie wurde ursprünglich für geschäftliche
Anwendungen konzipiert und entwickelt. Generell enthält das Instruktions-Set
der X86-Mikroprozessor-Familie keine hinreichende mathematische
oder DSP-Funktionalität
für moderne
Multimedia- und Kommunikations-Anwendungen. Deshalb wird ferner
eine neue X86-CPU-Architektur gewünscht, bei der DSP-Funktionen
in effizienterer Weise als bei derzeitigen X86-Prozessoren implementiert
sind, die jedoch auch keine neuen Opcodes für den X86-Prozessor benötigt.
-
EP-A-0,071,028 beschreibt ein Datenverarbeitungssystem
mit einer Ausführungseinheit,
die durch Mikroprogrammierung gesteuert wird. Ein Sequenz-Detektor prüft Opcode-Felder
von Instruktionen, die ausgeführt
werden sollen, um das Vorhandensein bestimmter vordefinierter Instruktions-Sequen zen
festzustellen. Bei Detektion einer bestimmten Sequenz modifiziert
ein Substitutions-Instruktions-Generator die erste Instruktion der
Sequenz, indem er den ursprünglichen
Opcode durch einen einzigartigen Opcode ersetzt, der das Vorhandensein
einer Pseudo-Instruktion angibt, die nicht in den zugewiesenen Opcodes
des Instruktions-Set gefunden wird. Ein geeigneter Microcode im
Steuerspeicher des Prozessors bewirkt die Ausführung der Pseudo-Instruktionen.
-
Überblick über die
Erfindung
-
Die vorliegende Erfindung ist in
den Ansprüchen
1 und 17 aufgeführt.
-
Die vorliegende Erfindung weist eine
CPU oder einen Mikroprozessor mit einer Allzweck-CPU-Komponente
wie z. B. einem X86-Kern und mit einem DSP-Kern auf. Die CPU enthält einen
intelligenten DSP-Funktions-Dekodierer oder Vorprozessor, der Sequenzen
von Instruktionen oder Opcodes (X86-Opcodes) prüft und feststellt, ob gerade
eine DSP-Funktion ausgeführt
wird. Falls der DSP-Funktions-Dekodierer feststellt, dass gerade
eine DSP-Funktion
ausgeführt
wird, nimmt der DSP-Funktions-Dekodierer eine Konvertierung oder
Abbildung der Instruktions-Sequenz auf eine DSP-Makro-Instruktion oder
eine Funktions-Identifizierung vor, die dem DSP-Kern zugeführt wird.
Der DSP-Kern führt
eine oder mehrere DSP-Instruktionen durch, um die gewünschte DSP-Funktion,
auf die von dem DSP-Makro oder die Funktions-Identifizierung verwiesen
wird, zu implementieren. Der DSP-Kern führt die DSP-Funktion parallel
mit anderen Operationen aus, die von dem Allzweck-CPU-Kern ausgeführt werden.
Der DSP-Kern führt
die DSP-Funktion ferner mittels einer geringeren Anzahl von Instruktionen
und auch in der einer reduzierten Anzahl von Taktzyklen aus, so
dass die Systemleistung erhöht
wird.
-
Gemäß der bevorzugten Ausführungsform
enthält
die CPU der vorliegenden Erfindung einen Instruktions-Speicher oder
einen Instruktions-Cache, der Mikroprozessor-Instruktionen oder
-Opcodes aus dem Systemspeicher empfängt und diese Opcodes zur Verwendung
durch die CPU speichert. Die CPU enthält ferner einen DSP-Funktions-Dekodierer
oder -Vorprozessor, auch bezeichnet als Instruktions-Sequenz-Vorprozessor,
der Instruktions-Sequenzen in dem Instruktions-Cache analysiert
und auf intelligente Weise feststellt, wann eine Funktion vom DSP-Typ
implementiert ist oder durch die Instruktions-Sequenz repräsentiert
ist. Der Funktions-Vorprozessor führt eine Vorausabtastung auf
Instruktions-Sequenzen in dem Instruktions-Cache durch, die DSP-Funktionen implementieren.
-
Gemäß einer Ausführungsform
enthält
der Funktions-Vorprozessor einen Mustererkennungsdetektor, der mehrere
Bit-Muster speichert, die Instruktions-Sequenzen angeben, mit denen
DSP-Funktionen implementiert werden. Der Mustererkennungsdetektor
vergleicht jedes Muster mit einer Instruktions-Sequenz und stellt
fest, ob eines der Muster im wesentlichen der Instruktions-Sequenz
entspricht. Gemäß einer
Ausführungsform
tritt eine wesentliche Entsprechung auf, wenn ein Muster zu mehr
als 90% der Instruktions-Sequenz entspricht. Gemäß einer weiteren Ausführungsform
enthält
der Funktions-Vorprozessor eine Look-up-Tabelle, in der mehrere
Bit-Muster-Einträge gespeichert
sind, die Instruktions-Sequenzen angeben, mit denen DSP-Funktionen
implementiert werden. Der Funktions-Vorprozessor vergleicht jeden
Muster-Eintrag mit einer Instruktions-Sequenz und stellt fest, ob
einer der Einträge
exakt der Instruktions-Sequenz entspricht. Bei anderen Ausführungsformen
sind eine zweistufige Bestimmung der Look-up-Tabelle und ein Mustererkennungsdetektor
vorgesehen.
-
Gemäß der bevorzugten Ausführungsform
detektiert der Funktions-Vorprozessor X86-Instruktions-Sequenzen,
die zur Durchführung
von DST-Typ-Funktionen
vorgesehen sind, wie z. B. Konvolution, Korrelation, Fast-Fourier-Transformationen
(FFTs), Filter mit finiter Impulsreaktion (FIR), Filter mit infiniter
Impulsreaktion (IIR), innere Produkte und Matrix-Berechnungs-Operationen.
-
Falls die Instruktionen in dem Instruktions-Cache
oder Instruktions-Speicher keine Funktion vom DSP-Typ implementieren,
werden die Instruktionen dem Allzweck- oder X86-Kern oder einer
oder mehreren X86-Ausführungseinheiten
zugeführt,
wie es derzeit bei herkömmlichen
Computersystemen erfolgt. Somit führt der X86-Kern diejenigen
Allzweck-X86-Instruktionen aus, die keine DSP-Funktionen repräsentieren.
-
Wenn der Funktions-Vorprozessor eine
Sequenz von X86-Instruktionen detektiert, die eine DSP-Funktion
implementieren, d. h. zum Durchführen
einer DSP-Typ-Funktion vorgesehen sind, dekodiert der Funktions-Vorprozessor
die Sequenz von X86-Instruktionen und erzeugt einen einzelne Makro-
oder Funktions-Identifizierung, welche die von der Sequenz von X86-Instruktionen
angezeigte Funktion repräsentiert.
Der Funktions-Vorprozessor prüft
ferner die Information in der X86-Instruktions-Sequenz und erzeugt
null oder mehr Parameter, welche die Daten-Werte angeben, die gerade
für die
DSP-Typ-Operation verwendet werden. Der Funktions-Vorprozessor gibt
dann die Funktions-Identifizierung und die verschiedenen erforderlichen
Parameter an den DSP-Kern oder an eine oder mehrere DSP-Ausführungseinheiten
aus.
-
Der DSP-Kern empfängt die Makro- oder Funktions-Identifizierung
und die jeweiligen Parameter und verwendet das Makro zur Indexeingabe
in eine DSP-Mikrocode-Sequenz, welche die angezeigte DSP-Funktion
implementiert. Der DSP-Kern verwendet ferner die jeweiligen Parameter
beim Ausführen
der DSP-Funktion. Da der DSP-Kern für diese mathematischen Operationen
des DSP-Typs optimiert ist, kann der DSP-Kern generell die gewünschte Funktion
in einer reduzierten Anzahl von Instruktionen und Taktzyklen ausführen.
-
Der DSP-Kern nimmt die Ausführung parallel
mit dem Allzweck-CPU-Kern vor. Somit werden die X86-(Nicht-DSP-)Opcodes
potentiell von dem Allzweck-CPU-Kern oder dem X86-Kern parallel
mit den DSP-Funktionen durchgeführt,
unter der Annahme, dass eine Daten-Unabhängigkeit besteht.
-
Der Allzweck-Kern und der DSP-Kern
sind miteinander verbunden und tauschen Daten- und Zeitsteuerungs-Signale
für Synchronisationszwecke
aus. Gemäß einer
Ausführungsform
ist zwischen dem Allzweck-Kern und dem DSP-Kern ein Cache oder Puffer
für die Übertragung
von Information zwischen den beiden Einheiten enthalten.
-
Somit führt der Allzweck-CPU-Abschnitt
X86-Instruktionen wie bei den herkömmlichen Systemen aus. Was
jedoch diejenigen Instruktions-Sequenzen betrifft, die zum Durchführen von
DSP-Typ-Funktionen vorgesehen sind, detektiert der Funktions-Vorprozessor
diese Sequenzen auf intelligente Weise und gibt ein entsprechendes
Makro und Parameter an den DSP-Kern aus. Somit entlastet der DSP-Kern
den Allzweck-Kern von diesen mathematischen Funktionen, so dass
die Systemleistung verbessert wird. Der DSP-Kern arbeitet ferner parallel mit dem
Allzweck-Kern, was weitere Leistungsvorteile bewirkt.
-
Somit handelt ist gemäß der vorliegenden
Erfindung eine Allzweck-CPU mit einem DSP-Kern vorgesehen, der DSP-Operationen
durchführt.
Die CPU weist einen intelligenten DSP-Funktions-Dekodierer oder -Vorprozessor
auf, der Instruktions-Sequenzen prüft und Sequenzen, die DSP-Funktionen
ausführen,
konvertiert und in eine DSP-Makro-Instruktion zur Ausführung durch
den DSP-Kern abbildet. Der DSP-Kern verwendet die DSP-Makro-Instruktion,
um die gewünschte
DSP-Funktion zu implementieren. Der DSP-Kern leistet das Implementieren
oder Ausführen
der DSP-Funktion mit einer kleineren Anzahl von Instruktionen und
auch in einer reduzierten Anzahl von Taktzyklen, wodurch die Systemleistung
verbessert wird. Somit implementiert die CPU der vorliegenden Erfindung
DSP-Funktionen effizienter als eine X86-Logik, während sie keine zusätzlichen
X86-Opcodes benötigt.
Die CPU der vorliegenden Erfindung führt ferner einen Code aus,
der an einer Nur-X86-CPU
arbeitet, so dass eine Abwärtskompatibilität mit existierender
Software gegeben ist. Ferner arbeitet der für die CPU der vorliegenden
Erfindung geschriebene Code auch korrekt an einer Nur-X86-CPU.
-
Kurzbeschreibung
der Zeichnungen
-
Ein besseres Verständnis der
vorliegenden Erfindung ergibt sich aus der folgenden detaillierten
Beschreibung der bevorzugten Ausführungsform in Verbindung mit
den folgenden Zeichnungen:
-
1 zeigt
ein Blockschaltbild eines Computersystems, das eine gemäß der vorliegenden
Erfindung ausgebildete CPU mit einem Allzweck-CPU-Kern und einem DSP-Kern aufweist;
-
2 zeigt
ein Blockschaltbild der gemäß der vorliegenden
Erfindung ausgebildeten CPU von 1, die
einen Allzweck-CPU-Kern und einen DSP-Kern aufweist und einen DSP-Funktions-Vorprozessor
aufweist;
-
3 zeigt
ein Flussdiagramm zur Veranschaulichung der Arbeitsweise der vorliegenden
Erfindung;
-
4 zeigt
ein detaillierteres Blockschaltbild der CPU gemäß 1;
-
5 zeigt
ein Blockschaltbild der Instruktions-Dekodiereinheit gemäß 4;
-
6 zeigt
ein Blockschaltbild des Funktions-Vorprozessors gemäß einer
Ausführungsform
der Erfindung;
-
7 zeigt
ein Blockschaltbild des Funktions-Vorprozessors mit einem Mustererkennungsdetektor gemäß einer
Ausführungsform
der Erfindung;
-
8 zeigt
die Arbeitsweise des Mustererkennungsdetektors gemäß 7;
-
9 zeigt
ein Blockschaltbild des Funktions-Vorprozessors mit einer Look-up-Tabelle
gemäß einer Ausführungsform
der Erfindung;
-
10 zeigt
die Arbeitsweise der Look-up-Tabelle gemäß 9; und
-
11 zeigt
ein Blockschaltbild des Funktions-Vorprozessors mit einem Mustererkennungsdetektor und
einer Look-up-Tabelle gemäß einer
Ausführungsform
der Erfindung.
-
Detaillierte Beschreibung
der bevorzugten Ausführungsform
-
Computersystem-Blockschaltbild
-
Die nun zu erläuternde 1 zeigt ein Blockschaltbild eines Computersystems,
in dem eine Zentralverarbeitungseinheit (CPU) oder ein Mikroprozessor 102 gemäß der vorliegenden
Erfindung enthalten ist. Das Computersystem gemäß 1 ist nur ein Beispiel, und die CPU 102 gemäß der vorliegenden
Erfindung kann in einem beliebigen unter verschiedenen Typen von
Computersystemen enthalten sein.
-
Wie gezeigt enthält die CPU 102 einen
Allzweck-CPU-Kern 212 und einen DSP-Kern 214.
Der Allzweck-CPU-Kern 212 führt Allzweck-(Nicht-DSP-) Opcodes
aus, und der DSP-Kern 214 führt Funktionen vom DSP-Typ
aus, wie noch beschrieben wird. Gemäß der bevorzugten Ausführungsform
ist der Allzweck-CPU-Kern 212 ein X86-Kern, d. h. er ist
kompatibel mit der X86-Mikroprozessor-Familie. Bei dem Allzweck-CPU-Kern 212 kann
es sich jedoch um eine beliebige CPU unter verschiedenen Typen von
CPUs handeln, einschließlich
der PowerPC-Familie, der DEC Alpha- und der SunSparc-Familie von Prozessoren
u. a. In der folgenden Offenbarung wird der Allzweck-CPU-Kern 212 aus
Gründen
der leichteren Erläuterung
als X86-Kern bezeichnet. Der Allzweck-CPU-Kern 212 kann
eine oder mehrere Allzweck- Ausführungseinheiten aufweisen,
und der DSP-Kern 214 kann eine oder mehrere Digitalsignalverarbeitungs-Ausführungseinheiten aufweisen.
-
Wie gezeigt ist die CPU 102 durch
einen CPU-Lokal-Bus 104 mit einer Host-/PCI-/Cache-Brücke oder einem Chipset 106 verbunden.
Das Chipset 106 ist vorzugsweise ähnlich dem von Intel Corporation
vertriebenen Triton-Cipset ausgebildet. Bei Bedarf kann ein (nicht
gezeigter) Zweitebenen- oder L2-Cache-Speicher
mit einem Cache-Controller in dem Chipset verbunden sein. Ferner
kann bei einigen Prozessoren der externe Cache ein L1- oder Erstebenen-Cache
sein. Die Brücke
oder das Chipset 106 ist über einen Speicher-Bus 108 mit
dem Hauptspeicher 110 verbunden. Der Hauptspeicher 110 ist
vorzugsweise ein DRAM-(dynamischer Direktzugriffs-) oder EDO-(erweiterter Datenausgangs-)Speicher,
oder er ist ein Speicher eines anderen Typs, falls gewünscht.
-
Das Chipset 106 weist verschiedene
Peripherieeinrichtungen auf, einschließlich eines Interrupt-Systems,
eines Echtzeit-Taktgebers (RTC) und Zeitgebern, eines Direktspeicherzugriffs-(DMA-)Systems,
eines ROM/Flash-Speichers, Kommunikationsports, Diagnostikports,
Befehls-/Status-Registern und einem nichtflüchtigen statischen Direktzugriffsspeicher
(NVSRAM) (sämtlich
nicht gezeigt).
-
Die Host-/PCI-/Cache-Brücke oder
das Chipset 106 steht in Interface-Verbindung mit einem Peripherie-Komponenten-Interconnect-(PCI-)Bus 120.
Gemäß der bevorzugten
Ausführungsform
wird ein PCI-Lokal-Bus verwendet. Es ist jedoch zu beachten, dass
auch andere Lokal-Busse verwendet werden können, wie z. B. ein VESA-(Video
Electronics Standards Association)VL-Bus. Mit dem CPU-Bus 120 können verschiedene
Typen von Vorrichtungen verbunden sein. Bei der Ausführungsform
gemäß 1 sind ein Video-/Graphik-Controller
oder -Adapter 170 und ein Netzwerk-Interface-Controller 140 mit
dem PCI-Bus 120 verbunden. Der Video-Adapter ist mit einem
Video-Monitor 172 verbunden, und der Netzwerk-Interface-Controller 140 ist mit
einem Lokalbereichs-Netzwerk (LAN) verbunden. Ein SCSI- (small computer systems
interface)Adapter 122 kann wie gezeigt ebenfalls mit dem
PCI-Bus 120 verbunden sein. Der SCSI-Adapter 122 kann
je nach Wunsch mit verschiedenen SCSI-Vorrichtungen 124 verbunden
sein, wie z. B. einem CD-ROM-Laufwerk und einem Bandlaufwerk. Es
können
verschiedene weitere Einrichtungen mit dem PCI-Bus 120 verbunden
sein, wi auf dem Gebiet weithin bekannt ist.
-
Die Erweiterungs-Bus-Brücken-Logik 150 kann
auch mit dem PCI-Bus 120 verbunden sein. Die Erweiterungs-Bus-Brücken-Logik 150 steht
in Interface-Verbindung mit einem Erweiterungs-Bus 152.
Der Erweiterungs-Bus 152 kann ein Bus unter verschiedenen
Typen sein, einschließlich
dem Industrie-Standard-Architektur-(ISA-)Bus, der auch als AT-Bus
bezeichnet wird, dem erweiterten Industrie-Standard-Architektur-(EISA-)Bus
oder dem MicroChannel-Architektur-(MCA-)Bus. Mit dem Erweiterungs-Bus
können
verschiedene Einrichtungen verbunden sein, wie z. B. der Erweiterungs-Bus-Speicher 154 und
ein Modem 156.
-
CPU-Blockschaltbild
-
Die nun zu erläuternde 2 zeigt ein auf hoher Ebene angesetztes
Blockschaltbild zur Darstellung bestimmter Komponenten in der CPU 102 gemäß 1. Wie gezeigt enthält die CPU 102 einen
Instruktions-Cache oder Instruktions-Speicher 202, der
Instruktionen oder Opcodes aus dem System-Speicher empfängt. Der Funktions-Vorprozessor 204 ist
mit dem Instruktions-Speicher 202 verbunden und prüft Instruktions-Sequenzen
oder Opcode-Sequenzen in dem Instruktions-Speicher 202.
Der Funktions-Vorprozessor 204 ist ferner mit dem X86-Kern 212 und
dem DSP-Kern 214 verbunden. Wie gezeigt übermittelt
der Funktions-Vorprozessor 204 Instruktionen oder Opcodes
an den X86-Kern 212 und übermittelt ferner Information
an den DSP-Kern 214.
-
Der X86-Kern 212 und der
DSP-Kern 214 sind miteinander verbunden und tauchen Daten-
und Zeitsteuerungs-Signale untereinander aus. Gemäß einer
Ausführungsform
enthält
die CPU 102 einen oder mehrere (nicht gezeigte) Puffer,
die ein Interface zwischen dem X86-Kern 212 und dem DSP-Kern 214 bilden,
um die Übertragung
von Daten zwischen dem X86-Kern 212 und dem DSP-Kern 214 zu
erleichtern.
-
Flussdiagramm gemäß 3
-
Die nun zu erläuternde 3 zeigt ein Flussdiagramm zur Erläuterung
der Arbeitsweise der vorliegenden Erfindung. Anzumerken ist, dass
zwei oder mehr der Schritte gemäß 3 gleichzeitig ausgeführt werden können und
die Arbeitsweise der Erfindung zur besseren Veranschaulichung in
Form eines Flussdiagramms gezeigt ist. Wie gezeigt empfängt in dem
Schritt 302 der Instruktions-Speicher 202 mehrere
X86-Instruktionen und speichert diese. Die mehreren X86-Instruktionen
können
eine oder mehrere Instruktions-Sequenzen enthalten, in denen eine
DSP-Funktion implementiert ist. Im Schritt 304 analysiert
der Funktions-Vorprozessor 204 die Opcodes, d. h. eine
Instruktions-Sequenz, in dem Instruktions-Speicher 202,
und im Schritt 306 stellt er auf intelligente Weise fest,
ob die Sequenz von Instruktionen zum Durchführen einer DSP-Typ-Funktion
konzipiert oder vorgesehen ist, d. h. er stellt fest, ob in der
Instruktions-Sequenz eine DSP-Typ-Funktion implementiert ist. In der vorliegenden
Offenbarung weist eine DSP-Typ-Funktion eine oder mehrere der folgenden mathematischen
Funktionen auf: Korrelation, Konvolution, Fast-Fourier-Transformation,
Filter mit finiter Impulsreaktion, Filter mit infiniter Impulsreaktion,
inneres Produkt und Matrix-Maniopulation u. a. Die Arbeitsweise
des Funktions-Vorprozessors 204 wird in der anhand von 4 gegebenen Beschreibung
näher erläutert.
-
Falls die in dem Instruktions-Cache 202 gespeicherten
Instruktionen oder Opcodes nicht einer DSP-Typ-Funktion entsprechen,
werden die Instruktionen im Schritt 308 dem X86-Kern zugeführt. Somit
werden diese Instrukti onen oder Opcodes direkt aus dem Instruktions-Cache 202 an
den X86-Kern zwecks
Ausführung übermittelt,
wie es in den mit dem herkömmlichen
X86 kompatiblen CPUs erfolgt. Nachdem die Opcodes an den X86-Kern 212 übermittelt
worden sind, führt
der X86-Kern 212 im Schritt 310 die Instruktionen aus.
-
Falls der Funktions-Vorprozessor 204 im
Schritt 306 eine Sequenz von Instruktionen detektiert,
die einer DSP-Typ-Funktion entsprechen oder diese implementieren,
dann analysiert im Schritt 204 der Funktions-Vorprozessor 204 die
Sequenz von Instruktionen und bestimmt die jeweilige DSP-Typ-Funktion, die implementiert
wird. Im Schritt 312 bildet der Funktions-Vorprozessor 204 die
Sequenz von Instruktionen auf eine jeweiligen DSP-Makro-Identifizierung
ab, die auch als Funktions-Identifizierung bezeichnet wird. Der
Funktions-Vorprozessor 204 analysiert im Schritt 312 auch
die Information in der Sequenz von Opcodes und erzeugt null oder
mehr Parameter zur Verwendung durch den DSP-Kern oder Beschleuniger 214 beim
Ausführen
der Funktions-Identifizierung. Wie gezeigt übermittelt im Schritt 314 der
Funktions-Vorprozessor 204 die Funktions-Identifizierung
und die Parameter an den DSP-Kern 214.
-
Der DSP-Kern 214 empfängt die
Funktions-Identifizierung und die zugehörigen Parameter aus dem Funktions-Vorprozessor 204 und
führt im
Schritt 316 die betreffende DSP-Funktion aus. Gemäß der bevorzugten
Ausführungsform
verwendet der DSP-Kern die Funktions-Identifizierung zum Indexieren
in ein DSP-Mikrocode-RAM oder -ROM, um eine Sequenz von DSP-Instruktionen oder
-Opcodes auszuführen.
Die DSP-Instruktionen veranlassen den DSP zum Ausführen der
gewünschten
DSP-Typ-Funktion. Der DSP-Kern 214 verwendet
auch die jeweiligen Parameter beim Ausführen der DSP-Funktion.
-
Wie bereits erwähnt sind der X86-Kern 212 und
der DSP-Kern 214 miteinander verbunden und tauschen Daten-
und Zeitsteuerungs-Signale miteinander aus. Gemäß der bevorzugten Ausführungsform
arbeiten der X86-Kern
212 und der DSP-Kern 214 im
wesentlichen parallel. Somit kann, während der X86-Kern 212 eine
Sequenz von Opcodes ausführt,
der DSP-Beschleuniger 214 eine oder mehrere DSP-Funktionen
ausführen,
die einer anderen Sequenz von Opcodes entsprechen. Somit arbeitet
der DSP-Kern 214 nicht als Slave oder Ko-Prozessor, sondern
arbeitet vielmehr als eine unabhängige
Ausführungseinheit
oder Pipeline. Der DSP-Kern 214 und der X86-Kern 212 übertragen
Daten- und Zeitsteuerungs-Signale zueinander, um den Status von
Operationen anzugeben und um sämtliche
erzeugten Daten-Ausgangssignale auszugeben, sowie um die Daten-Kohärenz/-Unabhängigkeit
zu gewährleisten.
-
Beispiel einer
Arbeitsweise
-
Im folgenden wird ein Beispiel beschrieben,
wie ein Strang oder eine Sequenz von X86-Opcodes in eine Funktions-Identifizierung
konvertiert wird und dann von dem DSP-Kern oder Beschleuniger 214 gemäß der vorliegenden
Erfindung ausgeführt
wird. Es wird eine Beschreibung einer X86-Opcode-Sequenz gegeben, die eine einfache
Innen-Produkt-Berechnung durchführt,
wobei das innere Produkt über
einen Vektor gemittelt wird, der 20 Werte aufweist:
-
X86-Code
(einfaches
inneres Produkt)
-
Wie gezeigt weisen die X86-Opcode-Instruktionen
für ein
einfaches inneres Produkt mehrerer Bewegungs-Instruktionen auf,
gefolgt von einer F-Lade-Funktion,
in der diese Sequenz mehrere Male wiederholt wird. Falls diese X86-Opcode-Sequenz
von dem X86-Kern 212 ausgeführt würde, würde die Ausführungszeit für diese
Innen-Produkt-Berechnung 709 Zyklen (9 + 20 × 35) umfassen.
Dabei werden eine X86-Zeitsteuerung, gleichzeitige Ausführung von
Floating-Point-Operationen und Cache-Treffer für sämtliche von der Innen-Produkt-Berechnung
verlangten Instruktionen und Daten angenommen. Der Funktions-Vorprozessor 204 analysiert
die Sequenz von Opcodes und detektiert, dass die Opcodes eine Innen-Produkt-Berechung
durchführen.
Der Funktions-Vorprozessor 204 konvertiert dann diese gesamte
Sequenz von X86-Opcodes zu einer einzigen Makro- oder Funktions-Identifizierung und
einem oder mehr Parametern. Ein Beispiel einer Makro- oder Funktions-Identifizierung,
die auf der Basis der oben gezeigten X86-Opcode-Sequenz erzeugt wird, ist das
folgende:
-
Beispiel-Makro
(wie
es im Assembler auftritt)
-
Der Funktions-Identzifizierer und
der eine oder die mehreren Parameter werden an den DSP-Kern 214 ausgegeben.
Der DSP-Kern 214 verwendet das aus dem Funktions-Vorprozessor 204 zugeführte Makro,
um einen oder mehrere DSP-Opcodes oder Instruktionen zu laden, welche
die DSP-Funktion
ausführen.
Gemäß der bevorzugten
Ausführungsform
verwendet der DSP-Kern 214 das Makro zum Indexieren in
ein ROM, das die zum Ausführen
der DSP-Funktion verwendeten Instruktionen enthält. Gemäß diesem Beispiel sind der DSP-Code
oder die Instruktionen, die von dem DSP-Kern 214 auf den
Empfang des oben beschriebenen Makros hin ausgeführt werden, wie nachstehend
gezeigt ausgelegt:
-
DSP-Code
(einfaches
inneres Produkt)
-
Gemäß diesem Beispiel führt der
DSP-Kern 214 dieses Produkt gemittelt über einen Vektor aus, der 20
Werte aufweist und insgesamt 26 Zyklen (6 + 20 × 1) verbraucht. Dabei werden
eine typische DSP-Zeitsteuerung ein schließlich einer Ein-Zyklen-Operation
von Instruktionen, eine Null-Overhead-Schleifenbildung und Cache-Treffer
für sämtliche
Instruktionen und Daten angenommen. Somit bietet der DSP-Kern 214 einen Leistungsanstieg,
der mehr als 28mal so hoch ist wie in dem Fall, in dem der X86-Kern 212 diese
DSP-Funktion ausführt.
-
4 – CPU-Blockschaltbild
-
Die nun zu beschreibende 4 zeigt ein detaillierteres
Blockschaltbild der inneren Komponenten der CPU 102 gemäß der vorliegenden
Erfindung. Elemente in der CPU 102, die für das Verständnis der
vorliegenden Erfindung nicht erforderlich sind, werden um der Einfachheit
willen nicht beschrieben. Wie gezeigt enthält gemäß der bevorzugten Ausführungsform
die CPU 102 eine Bus-Interface-Einheit 440, einen
Instruktions-Cache 202, einen Daten-Cache 444,
eine Instruktions-Dekodiereinheit 402, mehrere Ausführungseinheiten 448, eine
Lade-Speicher-Einheit 450, einen Neuordnungspuffer 452,
eine Registerdatei 454 und eine DSP-Einheit 214.
-
Wie gezeigt weist die CPU 102 eine
Bus-Interface-Einheit 440 auf, die eine Schaltung zum Durchführen der
Kommunikation auf dem CPU-Bus 104 enthält. Die Bus-Interface-Einheit 440 bildet
ein Interface mit dem Daten-Cache 444 und
dem Instruktions-Cache 202. Der Instruktions-Cache 202 ruft
die Instruktionen aus dem Systemspeicher 110 im voraus
ab und speichert die Instruktionen zur Verwendung durch die CPU 102. Die
Instruktions-Dekodiereinheit 402 ist mit dem Instruktions-Cache 202 verbunden
und empfängt
Instruktionen aus dem Instruktions-Cache 202. Die Instruktions-Dekodiereinheit 402 enthält wie gezeigt
den Funktions-Vorprozessor 204. Der Funktions-Vorprozessor 204 in
der Instruktions-Dekodiereinheit 402 ist mit dem Instruktions-Cache 202 verbunden.
Die Instruktions-Dekodiereinheit 402 enthält ferner
eine Instruktions-Ausrichteinheit sowie weitere Logik.
-
Die Instruktions-Dekodiereinheit 402 verbindet
mehrere Ausführungseinheiten 448,
den Neuordnungspuffer 452 und die Lade-/Speicher-Einheit 450.
Die mehreren Ausführungseinheiten 448 werden
hier kollektiv als Ausführungseinheiten 448 bezeichnet.
Der Neuordnungspuffer 452, die Ausführungseinheiten 448 und
die Lade-/Speicher-Einheit 450 sind jeweils mit einen Weitergabebus 458 zum
Weitergeben der Ausführungsergebnisse
verbunden. Die Lade-/Speicher-Einheit 450 ist mit einem
Daten-Cache 444 verbunden. Die DSP-Einheit 214 ist
durch den DSP-Ausgabe-Bus 456 direkt mit der Instruktions-Dekodiereinheit 402 verbunden.
Anzumerken ist, dass eine oder mehrere DSP-Einheiten 214 mit
der Instruktions-Dekodiereinheit 402 verbunden sein können.
-
Die Bus-Interface-Einheit 440 ist
zum Durchführen
der Kommunikation zwischen dem Mikroprozessor 102 und den
mit dem System-Bus 104 verbundenen Einrichtungen konfiguriert.
Beispielsweise werden Instruktions-Abrufe, die den Instruktions-Cache 202 verfehlen,
durch die Bus-Interface-Einheit 440 aus
dem Hauptspeicher 110 heraus übertragen. In ähnlicher
Weise werden von der Lade-/Speicher-Einheit 450 durchgeführte Daten-Requests, die den
Daten-Cache 444 verfehlen, durch die Bus-Interface-Einheit 440 aus
dem Hauptspeicher 110 heraus übertragen. Ferner kann der
Daten-Cache 444 eine Cache-Leitung von Daten, die von dem Mikroprozessor 102 modifiziert
worden ist, verwerfen. Die Bus-Interface-Einheit 440 übermittelt
die modifizierte Leitung an den Hauptspeicher 110.
-
Der Instruktions-Cache ist vorzugsweise
ein Hochgeschwindigkeits-Cache-Speicher
zum Speichern von Instruktionen. Anzumerken ist, dass der Instruktions-Cache
in einer Set-assoziativ- oder Direktabbildungs-Konfiguration ausgelegt
sein kann. Der Instruktions-Cache kann zusätzlich einen Abzweig-Vorhersage-Mechanismus
enthalten, um Abzweige entweder als genommen oder als nicht genommen
vorherzusagen. Eine "genommene" Abzweig-Instruktion
bewirkt, dass der Instruktions-Abruf und die Ausführung an
der Ziel-Adresse der Abzweig-Instruktion fortgesetzt werden. Eine "nicht genommene" Abzweig-Instruktion
bewirkt, dass der Instruktions-Abruf und die Ausführung an
der auf die Abzweig-Instruktion folgenden Instruktion fortgesetzt
werden. Instruktionen werden aus dem Instruktions-Cache 202 abgerufen
und der Instruktions-Dekodiereinheit 402 zum Dekodieren und Ausgeben
an eine Ausführungseinheit übermittelt.
Der Instruktions-Cache 202 kann auch einen Makro-Vorhersagemechanismus
zur Vorhersage von Makro-Instruktionen und zum Ausführen der
geeigneten Schritte aufweisen.
-
Die Instruktions-Dekodiereinheit 402 dekodiert
aus dem Instruktions-Cache 202 empfangene Instruktionen
und übermittelt
die Instruktionen an die Ausführungseinheiten 448,
die Lade-/Speicher-Einheit 450 oder die DSP-Einheit 214.
Die Instruktions-Dekodiereinheit 402 ist typischerweise
zum Ausgeben einer Instruktion an mehr als eine Ausführungseinheit 448 konfiguriert.
-
Die Instruktions-Dekodiereinheit 402 weist
den Funktions-Vorprozessor 204 auf. Gemäß der vorliegenden Erfindung
ist der Funktions-Vorprozessor 204 in der Instruktions-Dekodiereinheit 402 konfiguriert
zum Detektieren von X86-Instruktions-Sequenzen in dem Instruktions-Cache 202,
die DSP-Funktionen entsprechen oder diese ausführen. Falls eine derartige
Instruktions-Sequenz
detektiert wird, erzeugt der Funktions-Vorprozessor 204 ein
entsprechendes Makro und Parameter und gibt das entsprechende DSP-Makro
und die Parameter auf den DSP-Ausgabe-Bus 456 an die DSP-Einheit 214 aus.
Die DSP-Einheit 214 empfängt das DSP-Funktions-Makro
und die Parameter-Funktion aus der Instruktions-Dekodiereinheit 402 und
führt die
angegebene DSP-Funktion aus. Zusätzlich
ist die DSP-Einheit 214 vorzugsweise zum Zugreifen auf
den Daten-Cache 444 programmiert, um Daten-Operanden zu erhalten.
Daten-Operanden können
zwecks schnelleren Zugriffs in einem Speicher innerhalb der DSP-Einheit 214 gespeichert
werden, oder auf sie kann bei Bedarf direkt aus dem Daten-Cache 444 zugegriffen
werden. Der Funktions-Vorprozessor 204 gibt dem Instruktions-Cache 222 ein
Feedback, um zu gewährleisten,
dass ausreichende Lookahead-Instruktionen
für eine Makro-Suche
verfügbar
sind.
-
Falls die X86-Instruktionen in dem
Instruktions-Cache 202 nicht zum Ausführen einer DSP-Funktion vorgesehen
sind, dekodiert die Instruktions-Dekodiereinheit 402 die
aus dem Instruktions-Cache 202 abgerufenen Instruktionen
und gibt die Instruktionen an die Ausführungseinheiten 448 und/oder
die Lade-/Speicher-Einheit 450 aus. Die Instruktions-Dekodiereinheit 402 detektiert
ferner die von der Instruktion verwendeten Register-Operanden und fordert
diese Operanden von dem Neuordnungs-Puffer 452 und der
Register-Datei 454 an. Die Ausführungseinheiten 448 führen die
Instruktionen aus, wie auf dem Gebiet bekannt ist.
-
Ferner gibt, falls die DSP 214 nicht
in der CPU 102 enthalten ist oder durch. Software deaktiviert
ist, die Instruktions-Dekodiereinheit 402 sämtliche
X86-Instruktionen an die Ausführungseinheiten 448 aus.
Die Ausführungseinheiten 448 führen die
Instruktionen wie beim Stand der Technik aus. Auf diese Weise werden, falls
die DSP-Einheit 214 deaktiviert ist, die X86-Codes einschließlich der
Instruktionen, die DSP-Funktionen ausführen, von dem X86-Kern ausgeführt, wie
es derzeit bei den herkömmlichen
X86-Mikroprozessoren erfolgt. Somit wird, falls die DSP-Einheit 214 deaktiviert
ist, das Programm exakt ausgeführt,
obwohl die Betriebsweise weniger effizient ist als die Ausführung einer
entsprechenden Routine in dem DSP 214. Vorteilhafterweise
wird durch das Aktivieren oder Deaktivieren oder das Vorhandensein
oder Nichtvorhandensein des DSP-Kerns 214 in der CPU 102 die
korrekte Ausführung
des Programms nicht beeinträchtigt.
-
Gemäß einer Ausführungsform
handelt es sich bei den Ausführungseinheiten 448 um
symmetrische Ausführungseinheiten,
die jeweils zum Ausführen
des vom Mikroprozessor 102 verwendeten Instruktions-Sets konfiguriert
sind. Gemäß einer
weiteren Ausführungsform
sind die Ausführungseinheiten 448 asymmetrische Ausführungseinheiten,
die zum Ausführen
ungleicher Instruktions-Subsets konfiguriert sind. Beispielsweise können die
Ausführungseinheiten 448 eine
Abzweig-Ausführungseinheit
zum Ausführen
von Abzweig-Instruktionen, eine oder mehrere arithmetische/Logik-Einheiten
zum Ausführen
arithmetischer und logischer Instruktionen und eine oder mehrere
Floating-Point-Einheiten zum Ausführen von Floating-Point-Instruktionen
aufweisen. Die Instruktions-Dekodiereinheit 402 gibt eine
Instruktion an eine Ausführungseinheit 448 oder
eine Lade-/Speicher-Einheit 450 aus, die zum Ausführen dieser
Instruktion konfiguriert ist.
-
Die Lade-/Speicher-Einheit 450 zwischen
den Ausführungseinheiten 448 und
dem Daten-Cache 444. Die Lade- und Speichervorrichtungs-Operationen
werden durch die Lade-/Speicher-Einheit 450 zu dem Daten-Cache 444 hin
ausgeführt.
Zusätzlich
werden Speicher-Abhängigkeiten
zwischen den Lade- und
Speichervorrichtungs-Operationen von der Lade-/Speicher-Einheit 450 detektiert
und gehandhabt.
-
Die Ausführungseinheiten 448 und
die Lade-/Speicher-Einheit(en) 450 können eine oder mehrere Reservierungsstationen
zum Speichern von Instruktionen aufweisen, deren Operanden noch
nicht geliefert worden sind. Eine Instruktion wird aus den in den
Reservierungsstationen gespeicherten Instruktionen zur Ausführung gewählt, falls:
(1) die Operanden der Instruktion vorgelegt worden sind, und (2)
die Instruktionen, die vor der gerade gewählten Instruktion liegen, noch
keine Operanden empfangen haben. Anzumerken ist, dass eine zentralisierte
Reservierungsstation anstelle separater Reservierungsstationen vorgesehen
sein kann. Die zentralisierte Reservierungsstation ist zwischen
die Instruktions-Dekodiereinheit 402, die Ausführungseinheiten 448 und
die Lade-/Speicher-Einheit 450 geschaltet. Eine derartige
Ausführungsform
kann Ausgabe-Funktionen in der zentralisierten Reservierungsstation
ausführen.
-
Die CPU 102 stützt vorzugsweise
eine außer
Reihenfolge erfolgende Ausführung
und verwendet den Neuordnungs-Puffer 452 zum Speichern
von Ausführungsergebnissen
spekulativ ausgeführter
Instruktionen und zum in Programm-Reihenfolge durchzuführenden
Speichern dieser Ergebnisse in der Register-Datei 454, zum
Durchführen
einer Abhängigkeits-Prüfung und
einer Register-Neubenennung, und zur Erbringung einer Rückgewinnung
für fehlvorhergesagte
Abzweigungen und Ausnahmen. Wenn eine Instruktion von der Instruktions-Dekodiereinheit 402 dekodiert
wird, werden Requests für
die Register-Operanden an den Neuordnungs-Puffer 452 und
die Register-Datei 454 ausgegeben. Auf die Register-Datei-Requests
hin wird an die Ausführungseinheit 448 und/oder
die Lade-/Speicher-Einheit 450, welche die Instruktion
empfängt,
einer von drei Werten übermittelt:
(1) der in dem Neuordnungs-Puffer 452 gespeicherte Wert,
falls der Wert spekulativ erzeugt worden ist; (2) ein Tag, das eine
das Ergebnis speichernde Stelle in dem Neuordnungs-Puffer 452 identifiziert,
falls der Wert nicht spekulativ erzeugt worden ist; oder (3) der
in der Register-Datei 454 gespeicherte Wert, falls keine
Instruktionen in dem Neuordnungs-Puffer 452 das Register 452 modifizieren.
Zusätzlich
ist eine Speicherstelle in dem Neuordnungs-Puffer 452 zum Speichern der
Ergebnisse der von der Instruktions-Dekodiereinheit 402 dekodierten
Instruktion zugewiesen. Die Speicherstelle wird durch ein Tag identifiziert,
das der die Einheit empfangenden Einheit zugeführt wird. Anzumerken ist, dass,
falls mehr als eine einzige Neuordnungs-Puffer-Speicherstelle zum Speichern
von Ergebnissen zugewiesen wird, die einem bestimmten Register entsprechen,
der Wert oder das Tag, der bzw. das dem letzten Ergebnis in der
Programm-Reihenfolge entspricht, auf ein Register-Operanden-Request
für dieses
bestimmte Register hin übermittelt
wird.
-
Wenn die Ausführungseinheiten 448 oder
die Lade-/Speicher-Einheit 450 eine Instruktion ausführen, wird
das Tag, das mittels des Neuordnungs-Puffers 452 der Instruktion
zugewiesen worden ist, zusammen mit dem Ergebnis der Instruktion
auf dem Ergebnis-Bus 458 übermittelt. Der Neuordnungs-Puffer 452 speichert das
Ergebnis an der angegebenen Speicherstelle. Ferner vergleiche die
Ausführungseinheiten 448 und
die Lade-/Speicher-Einheit 450 die
auf dem Ergebnis-Bus 458 übermittelten Tags mit den Tags
darin gespeicherter Operanden. Falls eine Entsprechung auftritt,
erfasst die Einheit das Ergebnis von dem Ergebnis-Bus 458 und speichert
es mit der entsprechenden Instruktion. Auf diese Weise kann eine
Instruktion die Operanden erhalten, die sie bearbeiten soll. Das
Erfassen von Ergebnis sen von dem Ergebnis-Bus 458 zwecks
Verwenden durch Instruktionen wird als "Ergebnis-Weitergabe" bezeichnet.
-
Instruktions-Ergebnisse werden durch
den Neuordnungs-Puffer 452 in der Progamm-Reihenfolge in der
Register-Datei 454 gespeichert. Das Speichern der Ergebnisse
einer Instruktion und das Löschen
der Instruktion aus dem Neuordnungs-Puffer 452 werden als "Zurückziehen" der Instruktion
bezeichnet. Indem die Instruktionen in der Programm-Reihenfolge
zurückgezogen
werden, kann eine Rückgewinnung
aus einer inkorrekten spekulativen Ausführung durchgeführt werden.
Falls beispielsweise eine Instruktion auf eine Abzweig-Instruktion
folgt, deren Genommen-/Nicht-genommen-Vorhersage inkorrekt ist,
dann kann die Instruktion möglicherweise
inkorrekt ausgeführt
werden. Wenn eine fehlvorhergesagte Abzweig-Instruktion oder eine Instruktion,
die eine Ausnahme verursacht, detektiert wird, verwirft der Neuordnungs-Puffer 452 die
Instruktionen, die auf die fehlvorhergesagten Abzweig-Instruktionen
folgen. Die in dieser Weise verworfenen Instruktionen werden ferner
aus den Ausführungseinheiten 448,
der Lade-/Speicher-Einheit 450 und
der Instruktions-Dekodiereinheit 402 geflusht.
-
Die Register-Datei 454 enthält Speicherstellen
für jedes
Register, das durch die vom Mikroprozessor 102 verwendete
Mikroprozessor-Architektur definiert ist. Beispielsweise weist bei
der bevorzugten Ausführungsform,
bei der die CPU 102 eine X86-Mikroprozessor-Architektur
aufweist, die Register-Datei 454 Stellen zum
Speichern der EAX-, EBX-, ECX-, EDX-, ESI-, EDI-, ESP- und EBP-Registerwerte
auf.
-
Der Daten-Cache 444 ist
ein Hochgeschwindigkeits-Cache-Speicher, der zum Speichern von Daten konfiguriert
ist, die von dem Mikroprozessor 102 bearbeitet werden.
Anzumerken ist, dass der Daten-Cache 444 in einer Setassoziativ-
oder Direktabbildungs-Konfiguration ausgestaltet sein kann.
-
5 – Instruktions-Dekodiereinheit
-
Die nun zu erläuternde 5 zeigt eine Ausführungsform der Instruktions-Dekodiereinheit 402.
Die Instruktions-Dekodiereinheit 402 enthält eine
Instruktions-Ausrichteinheit 460, mehrere Dekodierschaltungen 462 und
einen DSP-Funktions-Vorprozessor 204. Die Instruktions-Ausrichteinheit 460 ist
zum Empfangen aus dem Instruktions-Cache 202 abgerufener
Instruktionen geschaltet und richtet die Instruktionen zu den Dekodierschaltungen 462 hin
aus.
-
Die Instruktions-Ausrichteinheit 260 leitet
die Instruktionen zu den Dekodierschaltungen 462. Gemäß einer
Ausführungsform
enthält
die Instruktions-Ausrichteinheit 260 eine Byte-Warteschlange,
in der aus dem Instruktions-Cache abgerufenen Instruktions-Bytes
aufgereiht sind. Die Instruktions-Ausrichteinheit 460 lokalisiert
gültige
Instruktionen aus der Warteschlange her und gibt die Instruktionen
an jeweilige Dekodierschaltungen 462 aus. Gemäß einer
weiteren Ausführungsform
enthält
der Instruktions-Cache 202 eine
Vordekodier-Schaltung, welche die Instruktions-Bytes vordekodiert,
wenn sie in dem Instruktions-Cache 202 gespeichert werden.
Start- und End-Byte-Information, die den Beginn und das End von
Instruktionen angibt, wird in dem Instruktions-Cache 202 erzeugt
und gespeichert. Die Vordekodier-Daten werden zusammen mit den Instruktionen
an die Instruktions-Ausrichteinheit 460 übertragen,
und die Instruktions-Ausrichteinheit 460 überträgt die Instruktionen
entsprechend der Vordekodier-Information
zu den Dekodierschaltungen 462.
-
Der Funktions-Vorprozessor 204 ist
ferner mit dem Instruktions-Cache 202 verbunden und arbeitet zum
Detektieren von Instruktions-Sequenzen in dem Instruktions-Cache,
die DSP-Instruktionen durchführen. Die
Dekodierschaltungen 462 und der Funktions-Vorprozessor 204 empfangen
X86-Instruktionen aus der Instruktions-Ausrichteinheit 460.
Der Funktions-Vorprozessor 204 gibt
an jede der Dekodierschaltungen 462 über einen DSP-Bus ein Instruktions-Deaktivierungssignal
aus.
-
Jede Dekodierschaltung 462 dekodiert
die aus der Instruktions-Ausrichteinheit 460 empfange Instruktion,
um die von der Instruktion manipulierten Register-Operanden sowie
die Einheit zu bestimmen, welche die Instruktion empfangen soll.
Ein Hinweis auf die Einheit, welche die Instruktion empfangen soll,
sowie die Instruktion selbst werden auf mehreren Ausgabe-Bussen 468 an
die Instruktions-Ausrichteinheiten 460 und die Lade-/Speicher-Einheit 450 übermittelt.
Weitere Busse, die nicht gezeigt sind, werden zum Anfordern von
Register-Operanden aus dem Neuordnungs-Puffer 452 und der
Register-Datei 454 verwendet.
-
Der Funktions-Vorprozessor analysiert
Ströme
oder Sequenzen von X86-Instruktionen
aus dem Instruktions-Cache 202 und stellt fest, ob eine
DSP-Funktion ausgeführt wird.
Falls dies der Fall ist, bildet der Funktions-Vorprozessor 204 den
X86-Instruktions-Strom auf ein DSP-Makro und null oder mehr Parameter
ab und gibt diese Information an eine der einen oder mehreren DSP-Einheiten 214 weiter.
Gemäß einer
Ausführungsform
gibt der Funktions-Vorprozessor 204, wenn eine betreffende
Instruktions-Sequenz die Dekodierschaltungen 462 erreicht,
ein Deaktivierungssignal an jeden der Dekodierer 462 aus,
um den Betrieb der Dekodieren 462 für die detektierte Instruktions-Sequenz
zu deaktivieren. Wenn eine Dekodierschaltung 462 das Deaktivierungssignal
aus dem Funktions-Vorprozessor 204 detektiert, unterbricht
die Dekodierschaltung 462 die Dekodier-Operationen, bis
das Deaktivierungssignal aufgehoben wird. Nachdem die der DSP-Funktion entsprechende
Instruktions-Sequenz den Instruktions-Cache 202 verlassen
hat, entfernt der Funktions-Vorprozessor 204 das an jeden
der Dekodierer 462 ausgegebene Deaktivierungssignal. Anders
ausgedrückt
wird, nachdem der Funktions-Vorprozessor 204 das Ende der
X86-Instruktions-Sequenz detektiert hat, durch den Funktions-Vorprozessor 204 das
an jeden der Dekodierer 462 ergehende Deaktivierungssignal
beseitigt, und die Dekodierer nehmen den Betrieb wieder auf.
-
Jede der Dekodierschaltungen 462 ist
konfiguriert zum Übermitteln
einer Instruktion auf einem der Ausgabe-Busse 468 zusammen
mit einem Hinweis auf die Einheit oder die Einheiten, welche die
Instruktion empfangen sollen. Gemäß einer Ausführungsform
ist in dem Hinweis für
jede der Ausführungseinheiten 448 und
die Lade-/Speicher-Einheit 450 ein Bit vorgesehen. Falls
ein bestimmtes Bit gesetzt ist, dann soll eine entsprechende Einheit
die Instruktion ausführen.
Falls eine bestimmte Instruktion von mehr als einer Einheit ausgeführt werden
soll, kann mehr als ein Bit in dem Hinweis gesetzt werden.
-
Funktions-Vorprozessor
-
Die nun zu erläuternde 6 zeigt ein Blockschaltbild des Funktions-Vorprozessors 204 gemäß einer Ausführungsform
der Erfindung. Wie gezeigt weist bei dieser Ausführungsform der Funktions-Vorprozessor 204 eine
Scan-ahead-Schaltung 502 zum Prüfen oder Abtasten von Sequenzen
von Instruktionen in dem Instruktions-Speicher oder dem Instruktions-Cache 202 auf.
Gemäß einer
Ausführungsform
prüft die Scan-ahead-Schaltung 502 die
in dem Instruktions-Speicher 202 gespeicherten Instruktions-Sequenzen
vor der Betätigung
des Instruktions-Dekodierers 402 zum Dekodieren der Instruktionen,
welche die jeweilige gerade abgetastete Instruktions-Sequenz aufweisen.
Somit prüft
die Scan-ahead-Schaltung im voraus die Instruktions-Sequenzen in
dem Instruktions-Cache 202, bevor die jeweiligen Instruktionen
an den Instruktions-Dekodierer 402 ausgegeben werden.
-
Der Funktions-Vorprozessor 204 weist
ferner eine Instruktions-Sequenz-Bestimmungsschaltung 504 auf,
um festzustellen, ob eine Sequenz von Instruktionen in dem Instruktions-Speicher 202 eine
Digitalsignal-Verarbeitungsfunktion implementiert. Diese Feststellung
kann auf verschiedene Arten erfolgen, wie weiter unten beschrieben.
-
Der Funktions-Vorprozessor 204 weist
ferner eine Konvertierungs-/Abbildungs-Schaltung 506 zum Konvertieren
einer Sequenz von Instruktionen in dem Instruktions-Speicher 502 auf,
die eine Digitalsignal-Verarbeitungsfunktion in eine Digitalsignal-Verarbeitungsfunktions-Identifizierung
oder Makro-Identifizierung und null oder mehr Parameter implementiert.
Somit konvertiert, falls die Instruktions-Sequenz-Bestimmungsschaltung 504 feststellt,
dass eine Sequenz von Instruktionen in dem Instruktions-Speicher 202 eine
FFT-Funktion implementiert, die Konvertierungs-/Abbildungs-Schaltung 506 diese
Sequenz von Instruktionen in eine FFT-Identifizierung und null oder
mehr Parameter.
-
7 – Mustererkennungsschaltung
-
Gemäß der nun zu erläuternden 7 weist gemäß einer
Ausführungsform
der Funktions-Vorprozessor 204 eine Mustererkennungsschaltung
oder einen Mustererkennungsdetektor 512 auf, der feststellt,
ob eine Sequenz von Instruktionen in dem Instruktions-Speicher 202 eine
Digitalsignalverarbeitungsfunktion implementiert. Die Mustererkennungsschaltung 512 speichert
mehrere Muster von Instruktions-Sequenzen, die Digitalsignalverarbeitungsfunktionen
implementieren. Die Mustererkennungsschaltung 512 speichert
Bit-Muster, die Opcode-Sequenzen von Maschinensprachen-Instruktionen
entsprechen, welche DSP-Funktionen ausführen, wie z. B. FFTs, innere
Produkte, Matrix-Handhabung, Korrelation, Konvolution etc.
-
Der Mustererkennungsdetektor 512 prüft eine
in dem Instruktions-Speicher 202 gespeicherte Sequenz von
Instruktionen und vergleicht die Sequenz von Instruktionen mit den
mehreren gespeicherten Mustern. Die Arbeitsweise des Mustererkennungsdetektors 512 ist
in 8 gezeigt. Gemäß einer
Ausführungsform
vergleicht der Mustererkennungsdetektor 512 jedes der Muster
an vorbestimmten Stellen in der Instruktions-Sequenz mit einer Instruktions-Sequenz.
Der Mustererkennungsdetektor 512 kann bei Bedarf eine Look-up-Tabelle
als Einheit zum Durchführen
der Mustervergleiche auf weisen. Der Mustererkennungsdetektor 512 kann auch
eine Makro-Vorhersage an den Instruktions-Sequenzen vornehmen, um
die Leistung zu verbessern.
-
Der Mustererkennungsdetektor 512 stellt
fest, ob die Sequenz von Instruktionen in dem Instruktions-Speicher 202 im
wesentlichen einem der gespeicherten Muster entspricht. Eine wesentliche
Entsprechung zeigt an, dass die Sequenz von Instruktionen eine Digitalsignalverarbeitungsfunktion
implementiert. Gemäß der bevorzugten
Ausführungsform
tritt eine wesentliche Entsprechung ein, wenn die Instruktions-Sequenz
einem gespeicherten Muster zu mehr als 90% entspricht. Bei Bedarf
können
auch andere Entsprechungs-Schwellwert, wie z. B. 95% oder 100%,
verwendet werden. Falls eine Entsprechung auftritt, stellt der Mustererkennungsdetektor 512 den
Typ des DSP-Funktionsmusters auf, der zu der Sequenz von Instruktionen passte,
und gibt den Typ des DSP-Funktionsmusters an die Konvertierungs-/Abbildungsschaltung 506 aus.
-
9 – Look-up-Tabelle
-
Gemäß der nun zu erläuternden 9 weist entsprechend einer
weiteren Ausführungsform
der Funktions-Vorprozessor 204 eine Look-up-Tabelle 514 auf,
die feststellt, ob eine Sequenz von Instruktionen in dem Instruktions-Speicher 202 eine
Digitalsignalverarbeitungsfunktion implementiert. Bei dieser Ausführungsform kann
die Look-up-Tabelle zusätzlich
zu dem Mustererkennungsdetektor 512 oder statt des Detektors
vorgesehen sein.
-
Bei einer Ausführungsform, bei welcher der
Funktions-Vorprozessor 204 nur die Look-up-Tabelle 514 enthält, speichert
die Look-up-Tabelle 514 mehrere Muster, wobei jedes der
Muster mindestens ein Sub-Set einer Instruktions-Sequenz ist, die eine Digitalsignalverarbeitungsfunktion
implementiert. Somit ist diese Ausführungsform ähnlich der oben beschriebenen
Ausführungsform
gemäß 6 ausgelegt, außer dass
der Funktions-Vorprozessor 204 eine Look-up-Tabelle 514 statt
des Mustererkennungsdetektors 512 enthält, um die Instruktions-Sequenzen
zu detektieren, die DSP-Funktionen implementieren. Zusätzlich speichert
bei dieser Ausführungsform
die Look-up-Tabelle 514 kleinere
Muster, die kleineren Instruktions-Sequenzen, entsprechen, d. h.
Sub-Sets von Instruktions-Sequenzen, die eine DSP-Funktionalität implementieren.
Bei dieser Ausführungsform
erfordert die Look-up-Tabelle
eine exakte Entsprechung zu einer betreffenden Sequenz von Instruktionen.
Falls eine exakte Entsprechung nicht auftritt, dann wird die Sequenz
von Instruktionen an eine oder mehrere Allzweck-Ausführungseinheiten,
d. h. den Allzweck-CPU-Kern 212, zur Ausführung weitergeleitet.
-
10 zeigt
die Arbeitsweise der Look-up-Tabelle 514 bei dieser Ausführungsform.
Wie gezeigt wird eine Sequenz von Instruktionen in dem Instruktions-Cache 202 zeitweilig
in dem Instruktions-Latch-Speicher 542 gespeichert. Der
Inhalt des Instruktions-Latch-Speichers 542 wird dann durch
das Element 546 mit jedem der Einträge in der Look-up-Tabelle 514 verglichen.
Falls der Inhalt des Instruktions-Latch-Speichers 542 einem
der Einträge
in der Look-up-Tabelle 514 exakt entspricht, dann wird
die DSP-Funktion oder -Instruktion 548, die diesem Eintrag
entspricht, an die DSP-Ausführungseinheit 214 ausgegeben.
-
Bei den obigen Ausführungsformen
gemäß 7 und 9 sind der Mustererkennungsdetektor 512 und/oder
die Look-up-Tabelle 514 derart konfiguriert, dass sie nur
dann feststellen, dass eine Instruktions-Sequenz eine DSP-Funktion
implementiert, wenn die Feststellung mit relativer Sicherheit getroffen
werden kann. Dies ist der Fall, weil eine "fehlgegangene" Instruktions-Sequenz, d. h. eine Instruktions-Sequenz,
die eine DSP-Funktion implementiert, jedoch nicht als eine DSP-Funktion
implementierend detektiert wurde, den Betrieb der CPU 102 nicht
beeinträchtigt,
da der Allzweck-Kern oder die Ausführungseinheiten die Instruktions-Sequenz
ausführen
können.
Eine Instruktions-Sequenz jedoch, die nicht eine DSP-Funktion implementiert,
welche als eine Sequenz fehl-identifiziert worden ist, die eine
DSP-Funktion implementiert,
ist problematischer und könnte
möglicherweise
zu einem fehlerhaften Betrieb führen.
Somit ist zu erwarten, dass der Mustererkennungsdetektor 512 oder
die Look-up-Tabelle 514 möglicherweise nicht jede Instruktions-Sequenz,
die eine DSP-Funktion implementiert, korrekt detektieren. In diesem
Fall wird die Instruktions-Sequenz wie im Stand der Technik an eine
oder mehrere Allzweck-Einheiten ausgegeben.
-
11 – Mustererkennunasschaltung
mit Look-up-Tabelle
-
Gemäß der nun zu erläuternden 11 weist entsprechend einer
weiteren Ausführungsform
der Funktions-Vorprozessor 204 sowohl die Look-up-Tabelle als auch
den Mustererkennungsdetektor 512 auf. Bei dieser Ausführungsform
verwendet der Instruktions-Dekodierer 402 sowohl die Look-up-Tabelle als auch
den Mustererkennungsdetektor 512, um festzustellen, ob
eine Sequenz von Instruktionen in dem Instruktions-Speicher 202 eine
Digitalsignalverarbeitungsfunktion implementiert. Bei dieser Ausführungsform
wird vorzugsweise eine Zwei-Stufen-Analyse einer Sequenz von X86-Instruktionen verwendet,
wobei die Look-up-Tabelle 514 zuerst feststellt, ob die
Sequenz wahrscheinlicherweise eine DSP-Funktion implementiert, und
dann stellt der Mustererkennungsdetektor 512 den Typ der
DSP-Funktion fest, die gerade implementiert wird. Alternativ stellt der
Mustererkennungsdetektor 512 erst fest, ob die Sequenz
wahrscheinlicherweise eine DSP-Funktion
implementiert, und dann stellt die Look-up-Tabelle 514 den
Typ der DSP-Funktion fest, die gerade implementiert wird.
-
Bei einer Ausführungsform speichert die Look-up-Tabelle 514 kleine
Muster, die atomischen DSP-Instruktionen entsprechen. Beispielsweise
speichert die Look-up-Tabelle ein Muster aus X86-Instruktionen,
die eine Multiplizierungs-Akkumulations-Addierfunktion
durchführen,
die bei DSP-Architekturen üblich
ist. Die Look-up-Tabelle 514 speichert auch andere Muster,
die atomische DSP-Funktionen implementieren. Der Mustererkennungsdetektor 512 speichert
Muster, die gesamten DSP-Funktionen entsprechen, wie z. B. ein FFT, eine
Korrelation und eine Konvolution u. a.
-
Zuerst vergleicht die Look-up-Tabelle
jeden Eintrag mit den eintreffenden Instruktions-Sequenzen und speichert
die Anzahl von "Treffern" oder Entsprechungen
für eine
Sequenz. Falls die Anzahl von Entsprechungen größer als ein bestimmter definierter
Schwellwert ist, dann enthält
die Sequenz eine Anzahl von DSP-Typ-"Instruktionen", und es wird somit angenommen, dass
sie eine DSP-Funktion implementiert. In diesem Fall wird der Mustererkennungsdetektor 512 dahingehend
aktiviert, dass er die gesamte Sequenz mit jedem der gespeicherten
Muster vergleicht, um den Typ der DSP-Funktion, der gerade von der X86-Instruktions-Sequenz
implementiert wird, zu bestimmen. Wie bereits erwähnt, stellt
der Mustererkennungsdetektor 512 fest, ob die Instruktions-Sequenz
einem der gespeicherten Muster im wesentlichen entspricht.
-
Schlussbemerkung
-
Somit handelt es sich bei der vorliegenden
Erfindung um eine neuartige CPU- oder Mikroprozessor-Architektur,
welche die Ausführung
von DSP- und/oder
mathematischen Operationen optimiert, während die Abwärtskompatibilität mit existierender
Software aufrechterhalten wird.