DE69333630T2 - System und Verfahren zur Übersetzung eines fremden Befehlsstroms zur Ausführung in einem Gastgeberprozessor - Google Patents

System und Verfahren zur Übersetzung eines fremden Befehlsstroms zur Ausführung in einem Gastgeberprozessor Download PDF

Info

Publication number
DE69333630T2
DE69333630T2 DE69333630T DE69333630T DE69333630T2 DE 69333630 T2 DE69333630 T2 DE 69333630T2 DE 69333630 T DE69333630 T DE 69333630T DE 69333630 T DE69333630 T DE 69333630T DE 69333630 T2 DE69333630 T2 DE 69333630T2
Authority
DE
Germany
Prior art keywords
command
register
instruction
instructions
bytes
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Lifetime
Application number
DE69333630T
Other languages
English (en)
Other versions
DE69333630D1 (de
Inventor
Brett Coon
Le Trong Nguyen
Yoshiyuki Miyayama
Johannes Wang
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Seiko Epson Corp
Original Assignee
Seiko Epson Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Seiko Epson Corp filed Critical Seiko Epson Corp
Application granted granted Critical
Publication of DE69333630D1 publication Critical patent/DE69333630D1/de
Publication of DE69333630T2 publication Critical patent/DE69333630T2/de
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30101Special purpose registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/30149Instruction analysis, e.g. decoding, instruction word fields of variable length instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/30149Instruction analysis, e.g. decoding, instruction word fields of variable length instructions
    • G06F9/30152Determining start or end of instruction; determining instruction length
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • G06F9/30163Decoding the operand specifier, e.g. specifier format with implied specifier, e.g. top of stack
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • G06F9/30167Decoding the operand specifier, e.g. specifier format of immediate specifier, e.g. constants
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/3017Runtime instruction translation, e.g. macros
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/3017Runtime instruction translation, e.g. macros
    • G06F9/30174Runtime instruction translation, e.g. macros for non-native instruction set, e.g. Javabyte, legacy code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30181Instruction operation extension or modification
    • G06F9/30185Instruction operation extension or modification according to one or more bits in the instruction, e.g. prefix, sub-opcode
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3816Instruction alignment, e.g. cache line crossing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3818Decoding for concurrent execution
    • G06F9/382Pipelined decoding, e.g. using predecoding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3853Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution of compound instructions
    • BPERFORMING OPERATIONS; TRANSPORTING
    • B82NANOTECHNOLOGY
    • B82YSPECIFIC USES OR APPLICATIONS OF NANOSTRUCTURES; MEASUREMENT OR ANALYSIS OF NANOSTRUCTURES; MANUFACTURE OR TREATMENT OF NANOSTRUCTURES
    • B82Y10/00Nanotechnology for information processing, storage or transmission, e.g. quantum computing or single electron logic

Description

  • HINTERGRUND DER ERFINDUNG
  • 1. Erfindungsgebiet
  • Die vorliegende Erfindung betrifft allgemein superskalare RISC-Mikroprozessoren und insbesondere eine CISC-in-RISC-Mikroprozessor-Befehls-Abgleicheinheit und -Decodiereinheit, um komplexen Befehlen zu gestatten, auf RISC-basierter Hardware zu laufen.
  • 2. Stand der Technik
  • Alle Computer mit komplexem Befehlssatz (CISC-Computer), die Befehle variabler Länge verwenden, stehen dem Problem gegenüber, die Länge jedes Befehls, der in dem Befehlsstrom angetroffen wird, zu bestimmen. Befehle werden als aufeinanderfolgende Bytes von Daten in den Speicher gepackt, sodass, wenn die Adresse eines Befehls gegeben ist, es möglich ist, die Anfangsadresse des nächsten Befehls zu bestimmen, wenn die Länge des ersten Befehls bekannt ist.
  • Für einen herkömmlichen Prozessor hat diese Längenbestimmung keinen wesentlichen Leistungseinfluss verglichen mit anderen Stufen in der Verarbeitung eines Befehlsstromes, z. B. die tatsächliche Ausführung jedes Befehls. Als Folge werden typischerweise recht einfache Schaltungen verwendet. Andererseits können superskalare Computer mit reduziertem Befehlssatz (RISC-Computer) Befehle bei einer viel höheren Rate verarbeiten, wobei Befehle viel schneller aus dem Speicher extrahiert werden müssen, um mit der parallelen Ausführung von mehrfachen Befehlen Schritt zu halten. Dieser durch die Rate, mit der Befehle aus dem Speicher extrahiert werden können, auferlegte Begrenzungsfaktor wird als 'Flynn Bottleneck' bezeichnet.
  • Die Aufgabe des Bestimmens der Länge jedes Befehls und Extrahierens dieses Befehls aus dem Befehlsstrom wird von einer Funktionseinheit durchgeführt, die Befehls-Abgleicheinheit (IAU) genannt wird. Dieser Block muss Decoderlogik enthalten, um die Befehlslänge zu be stimmen, und einen Schieber, um die Befehlsdaten mit der Decoderlogik abzugleichen.
  • Für den Intel 80386 Mikroprozessor kann das erste Byte eines Befehls zahlreiche Auswirkungen auf die Gesamtbefehlslänge haben und kann erfordern, dass zusätzliche Bytes zu prüfen sind, bevor die endgültige Länge bekannt ist. Außerdem können die zusätzlichen Bytes andere zusätzliche Bytes spezifizieren. Es ist daher äußerst schwer, schnell die Länge des X86-Befehls zu bestimmen, weil der Prozess inhärent sequenziell ist.
  • Basierend auf der in dem i486 Programmer's Reference Guide bereitgestellten Information können mehrere Folgerungen bezüglich der in dem i486 vorhandenen Abgleicheinheit gezogen werden. Die IAU des i486 ist bestimmt, nur auf die ersten paar Bytes des Befehls zu schauen. In Fällen, wo diese Bytes die Länge nicht voll spezifizieren, werden diese Anfangsbytes extrahiert, und der Prozess wird auf den restlichen Bytes wiederholt. Jede Wederholung dieses Prozesses benötigt einen vollen Zyklus, sodass es im schlimmsten Fall mehrere Zyklen dauern kann, um einen Befehl ganz abzugleichen.
  • Situationen, die zusätzliche Zyklen für den i486 erfordern, umfassen das Vorhandensein von vorangestellten und entwichenen (2 Byte) Opcodes. Beide sind in i486 Programmen üblich. Außerdem können komplexe Befehle Verschiebungs- und Sofort-Daten umfassen. Der i486 benötigt zusätzliche Zeit, um diese Daten zu extrahieren.
  • Ein Beispielformat für einen CISC-Prozessorbefehl wird in 1 gezeigt. Dieses Beispiel stellt die möglichen Bytes eines i486 CISC-Befehls variabler Länge dar. Die Befehle werden im Speicher auf Bytegrenzen gespeichert. Die Mindestlänge eines Befehls ist 1 Byte, und die Maximallänge eines Befehls, einschließlich Präfixen, beträgt 15 Bytes. Die Gesamtlänge des Befehls wird durch die Präfixe Opcode-, ModR/M- und SIB-Bytes bestimmt.
  • EP 0 459 232 beschreibt einen Mikroprozessor, der aus einem Hauptspeicher durch eine Ladereinheit rückgewonnene Befehle teilweise decodiert und sie dann in den integrierten Befehls-Zwischenspeicher legt. Zwei Schlitze des Befehls-Zwischenspeichereintrags werden entsprechend ihren Funktionen mit Zusatzinformation verwendet, um die parallele Ausführung sowie die Emulation von komplexen Befehlen zu steuern. Ein einzelnes Bit in jedem Befehls-Zwischenspeichereintrag wird verwendet, um anzugeben, ob Befehle parallel ausgegeführt werden können oder sequenziell ausgeführt werden müssen.
  • ZUSAMMENFASSUNG DER ERFINDUNG
  • Die vorliegende Erfindung, wie in den Ansprüchen 1 und 6 dargelegt, ist ein Untersystem und Verfahren eines Mikroprozessors mit einem superskalaren Computer-Prozessor mit reduziertem Befehlssatz (RISC), der bestimmt ist, einen Computer mit komplexem Befehlssatz (CISC), z. B. einen Intel 80 × 86 Mikroprozesor oder andere CISC-Prozesoren, zu emulieren.
  • Der CISC-in-RISC-Übersetzungsvorgang der vorliegenden Erfindung umfasst zwei Grundschritte. CISC-Befehle müssen zuerst aus dem Befehlsstrom extrahiert werden und dann decodiert werden, um Nano-Befehle zu erzeugen, die von dem RISC-Prozessor verarbeitet werden können. Diese Schritte werden von einer Befehls-Abgleicheinheit (IAU) bzw. einer Befehls-Decodiereinheit (IDU) durchgeführt.
  • Die IAU extrahiert einzelne CISC-Befehle aus dem Befehlsstrom, indem sie auf die ältesten 23 Bytes von Befehlsdaten schaut. Die IAU extrahiert 8 fortlaufende Bytes beginnend mit einem Byte in einer Bodenlinie eines Befehls-FIFO. Während jeder Taktphase bestimmt die IAU die Länge des gegenwärtigen Befehls und benutzt diese Information, um zwei Schieber zu steuern, um den gegenwärtigen Befehl auszuschieben, wobei der nächste folgende Befehl in dem Strom gelassen wird. Die IAU gibt daher einen abgeglichenen Befehl während jeder Taktphase bei einer Spitzenrate von zwei Befehlen pro Zyklus aus. Ausnahmen von dieser bestmöglichen Leistung werden unten in Abschnitten 2.0 und 2.1 erörtert.
  • Nachdem CISC-Befehle aus dem Speicher extrahiert sind, wandelt die IAU diese abgeglichenen Befehle in gleichwertige Folgen von RISC-Befehlen, genannt Nano-Befehle, um. Die IDU schaut auf jeden abgeglichenen Befehl, wenn er von der IAU ausgegeben wird, und decodiert ihn, um verschiedene Faktoren zu bestimmen, z. B. die benötigte Zahl und Art von Nano-Befehlen, die Größe der Datenoperanden, und ob ein Speicherzugriff nötig ist, um den abgeglichenen Befehl zu vervollständigen. Einfache Befehle werden durch Decoder-Hardware direkt in Nano-Befehle übersetzt, während komplexere CISC-Befehle durch Unterroutinen in einem speziellen Befehlssatz, genannt Mikrocode-Routinen, emuliert werden, die dann in Nano-Befehle decodiert werden. Diese Information wird für zwei Befehle während eines vollständigen Zyklus gesammelt und dann miteinander kombiniert, um einen Informationsbehälter zu bilden, der die Nano-Befehle enthält, die beiden Quellenbefehlen entsprechen. Dieser Behälter wird dann an eine Befehls-Ausführungseinheit (IEU) zur Ausführung durch einen RISC-Prozessor übergeben. Die Ausführung des Nano-Befehls-Behälters liegt außerhalb des Umfangs der vorliegenden Erfindung.
  • Das Vorangehende und andere Merkmale und Vorteile der Erfindung werden aus der folgen genden ausführlicheren Beschreibung von bevorzugten Ausführungen der Erfindung, wie in den anliegenden Zeichnungen veranschaulicht, ersichtlich werden.
  • KURZBESCHREIBUNG DER ZEICHNUNGEN
  • Die Erfindung wird besser verstanden werden, wenn auf die begleitenden Zeichnungen Bezug genommen wird.
  • 1 zeigt ein Datenstrukturformat eines herkömmlichen CISC-Befehls.
  • 2 zeigt ein Blockschaltbild des Befehls-Vorholpuffers der vorliegenden Erfindung.
  • 3 zeigt ein Blockschaltbild der Befehls-Abgleicheinheit der vorliegenden Erfindung.
  • 4 zeigt ein repräsentatives Flussdiagramm der Befehlsextraktions- und Abgleichverfahrens der vorliegenden Erfindung.
  • 5 zeigt ein mit dem Blockschaltbild von 3 und dem Flussdiagramm von 4 verbundenes vereinfachtes Timing-Diagramm.
  • 6 ist ein Blockschaltbild des STACK der vorliegenden Erfindung.
  • 7A ist ein Blockschaltbild des Nächster-Befehl-Decoders (NID) der vorliegenden Erfindung.
  • 7B ist ein Blockschaltbild des Restlicher-Nächster-Befehl-Decoders (RNID) der vorliegenden Erfindung.
  • 8 ist ein Blockschaltbild des Sofortdaten- und Versetzungs-Decoders (IDDD) der vorligenden Erfindung.
  • 9 ist ein Blockschaltbild des Präfix-Decoders (PD) der vorliegenden Erfindung.
  • 10 ist ein Blockschaltbild des Präfix-Nummer-Decoders (PRFX_NO) der vorliegenden Erfindung.
  • 11 ist ein Blockschaltbild eines Nano-Befehls-Behälters der vorliegenden Erfindung.
  • 12 ist ein repräsentatives Blockschaltbild der Befehls-Decodiereinheit (IDU) der vorliegenden Erfindung.
  • 13A13C zeigen Befehls-Bitmaps der vorliegenden Erfindung.
  • 14 zeigt ein Beispiel-Blockschaltbild des Befehls-Decoderabschnitts des IDDD der vorliegenden Erfindung.
  • 15 zeigt ein repräsentatives Block- und Logikschaltbild eines Satzes von Decodern des in 14 gezeigten Befehlsdecoders.
  • 16A16C zeigen ein begriffliches Blockschaltbild des Decodier-FIFO der vorliegenden Erfindung.
  • 17 zeigt Beispiele des Nanobefehlsfeldformats der vorliegenden Erfindung.
  • Inhaltsverzeichnis
  • Ausführliche Beschreibung der bevorzugten Ausführungen 8
    • 1.0 Die Befehls-Holeinheit 8
    • 2.0 Übersicht der Befehls-Abgleicheinheit 9
    • 2.1 Blockschaltbilder der Befehls-Abgleicheinheit 12
    • 3.0 Übersicht der Befehls-Decodiereinheit 33
    • 3.1 Mikrocode-Dispatch-Logik 36
    • 3.2 Mailboxen 39
    • 3.3 Nanobefehlsformat 40
    • 3.4 Spezielle Befehle
    • 3.5 Blockschaltbilder der Befehls-Decodiereinhert 43
    • 4.0 FIFO für decodierte Befehle 54
  • AUSFÜHRLICHE BESCHREIBUNG DER BEVORZUGTEN AUSFÜHRUNGEN
  • 1.0 Die Befehls-Holeinheit
  • Eine Befehls-Holeinheit (IFU) der vorliegenden Erfindung wird verwendet, um Befehlsbytes aus einem Befehlsstrom, der in einem Befehlsspeicher, Befehlszwischenspeicher oder dergleichen gespeichert ist, zu holen und die Befehlsbytes einem Decoderabschnitt zur Ausführung bereitzustellen. Befehle, die von der Befehls-Abgleicheinheit abzugleichen sind, werden daher von der IFU geliefert. 2 zeigt ein Blockschaltbild von drei Befehls-Vorholpuffern 200 in der IFU, die umfassen: Einen Hauptbefehlspuffer (MBUF) 204, einen Emulations-Befehlspuffer (EBUF) 202 und einen Ziel-Befehlspuffer (TBUF) 206. Die Vorhol-Befehlspuffer können 128 Bits (16 Bytes) eines Befehlsstromes von einem Befehlszwischenspeicher in einem einzelnen Zyklus laden. Diese Daten werden in einem der drei Puffer zur Verwendung durch die IAU gehalten.
  • Während normaler Programmausführung wird der MBUF 202 benutzt, um Befehlsbytes an die IAU zu liefern. Wenn ein bedingter Steuerfluss (d. h. ein bedingter Verzweigungsbefehl) angetroffen wird, werden Befehle, die der Verzweigungszieladresse entsprechen, in dem TBUF 206 gespeichert, während die Ausführung aus dem MBUF 202 weitergeht. Sobald die Verzweigungsentscheidung aufgelöst ist, wird der TBUF 206 entweder weggeworfen, wenn die Verzweigung nicht genommen wird, oder der TBUF 206 wird in MBUF übertragen, wenn die Verzweigung genommen wird. In jedem Fall geht die Ausführung von dem MBUF weiter.
  • Der EBUF 204 arbeitet in einer etwas anderen Weise. Wenn der Emulationsmodus betreten wird, sei es infolge eines Emulationsbefehls oder einer Ausnahme, werden sowohl die Befehlsholung als auch -Ausführung auf den EBUF 204 übertragen. (Emulationsmodus und Ausnahmebehandlung werden unten im Detail erörtert.) Die Ausführung geht aus dem EBUF 204 werter, solange sich der Prozessor im Emulationsmodus befindet. Wenn die Emulationsroutine endet, wird die Ausführung aus den in dem MBUF 202 verbleibenden Befehlsdaten fortgesetzt. Dies beseitigt die Notwendigkeit, die Hauptbefehlsdaten nach Ausführen der Emulationsroutine erneut zu holen.
  • 2.0 Übersicht der Befehls-Abgleicheinheit
  • Ein Befehls-Abgleicheinheit-Untersystem in Kombination mit der vorliegenden Erfindung benutzt die RISC-Strategie, um schnell mit dem gewöhnlichen Fall umzugehen, indem der überlegene Pro-Zyklus-Befehlsdurchsatz eines superskalaren Prozessors benutzt wird.
  • Im Kontext der vorliegenden Erfindung bedeutet der Begriff "Abgleichen", die Bytes eines Befehls so zu positionieren, dass sie zur späteren Decodierung von angrenzenden Bytes in dem Befehlsstrom unterschieden werden können. Die IAU unterscheidet das Ende des gegenwärtigen Befehls vom Anfang des nächsten Befehls durch Bestimmen der Zahl von Bytes in dem gegenwärtigen Befehl. Die IAU gleicht dann den gegenwärtigen Befehl so ab, dass das der IDU präsentierte geringstwertige Byte das erste Byte des gegenwärtigen Befehls ist. Eine andere Folge der Bytes wie sie der IDU präsentiert werden ist auch möglich.
  • Das IAU-Untersystem der vorliegenden Erfindung ist imstande, die gebräuchlichsten Befehle mit einer Rate von zwei pro Zyklus bei allen Taktraten abzugleichen, und stellt die Fähigkeit bereit, die meisten anderen Befehle mit dieser gleichen Rate bei reduzierten Taktgeschwindigkeiten abzugleichen. Befehle, die Präfixe enthalten, benötigen einen zusätzlichen Halbzyklus zum Abgleichen. Sofort-Daten und Verschiebungsfelder werden parallel extrahiert und benötigten daher keine zusätzliche Zeit.
  • Außerdem beträgt die ungünstigste Abgleichzeit der IAU nur 2.0 Zyklen für einen Befehl, was weniger ist als die Zeit, die benötigt wird, um viele gebräuchliche Befehle in herkömmlichen CISC-Prozessoren abzugleichen. Der ungünstigste Fall tritt auf, wenn der Befehl aus dem Satz ist, der einen vollen Zyklus benötigt, um die Länge zu bestimmen, und der Befehl (ohne die Präfixe) größer als acht Bytes in der Länge ist (was einen zusätzlichen Halbzyklus, somit 2 volle Zyklen, benötigt).
  • Diese Leistung wird durch mehrere Architektur-Merkmale erzielt. Erstens, die IAU ist bestimmt, einen vollständigen Abgleichvorgang während jeder Phase des Taktes durch Verwenden von Wechselphasen-Latches und Multiplexern in den Abgleichschaltungen durchzuführen. Zweitens, die Decodierlogik teilt CISC-Befehle in zwei Kategorien basierend auf der Zahl von Bits, die in Betracht gezeogen werden muss, um die Länge jedes Befehls zu bestimmen: Befehle mit einer durch eine kleine Zahl von Bits spezifizierten Länge werden in einer einzigen Phase (Halbzyklus) abgeglichen, wogegen andere Befehle typischerweise eine zusätzliche Taktphase benötigen. Schließlich, die IAU extrahiert in einer einzigen Verschiebung bis zu acht Bytes aus dem Befehlsstrom, was es erlaubt, lange Befehle (bis zu 15 Bytes für i486) in einer kleinen Zahl von Schiebeoperationen und die meisten Befehle mit einer einzigen Verschiebung abzugleichen.
  • Die folgenden Aufgaben werden von der IAU durchgeführt, um einen CISC-Befehl schnell und genau zu decodieren.
    Erfassen des Vorhandenseins und der Länge von Präfix-Bytes;
    Isolieren der Opcode-, ModR/M- und SIB- (Skala, Index, Basis) Bytes;
    Erfassen der Länge von Befehlen (was die Stelle des nächsten Befehls angibt) und
    Senden der folgenden Information an die Befehls-Decodiereinheit (IDU):
    • – Opcode, 8 Bits plus 3 optionale Erweiterungsbits. Für 2-Byte Opcodes ist das erste Byte immer 0F Hex, sodass das zweite Bytes als der Opcode gesendet wird.
    • – ModR/M-Byte, SIB-Byte und Verschiebungs- und Sofort-Daten und
    • – Information bezüglich der Zahl und Art von Präfixen.
  • Das oder die Opcode-Bytes spezifizieren die durch den Befehl durchgeführte Operation. Das ModR/M-Byte spezifiziert die zu verwendende Adressenform, wenn der Befehl auf einen Operanden im Speicher verweist. Das ModR/M-Byte kann auch auf ein zweites Adressierungsbyte, das SIB- (Skala, Index, Basis) Byte, verweisen, das benötigt werden kann, um die Adressierungsform vollständig zu spezifizieren.
  • 2.1 Blockschaltbilder der Befehls-Abgleicheinheit
  • 3 zeigt ein Blockschaltbild der IAU. Das Schaltbild ist in zwei Abschnitte geteilt: Einen Hauptdatenpfad 302 (angegeben durch den gestrichelten Kasten) und einen Vordercoder 304 (angegeben durch den gestrichelten Kasten). Befehls-Verschiebung und -Extraktion finden in dem Hauptdatenpfad 302 statt, während die Längenbestimmung und Datenpfadsteuerung durch den Vordecoder 304 gehandhabt werden.
  • Der Hauptdatenpfad 302 umfasst mehrere Register, Latches und Multiplexer. Ein Extrakt-Schieber 306 empfängt in Bytes angeordnete Befehlsdaten von der IFU. Zwei Busse (allgemein bei 303 gezeigt) IFI0b_Bus [127:0] und IFI1b_Bus [55:0] stellen Befehlsdatenausgänder IFU dar. Die IFU aktualisiert diese Befehlsinformation als Reaktion auf Anfordenrungen von der IAU auf einer DAVance BUFfer REQuest (ADVBUFREQ) Leitung 308. Acht Bytes von Daten, die dem gegenwärtigen Befehl entsprechen, werden von dem Extrakt-Schieber ausgegeben und auf einem Bus 307 an den Abgleich-Schieber 310 gesendet. Der Abgleich-Schieber hält insgesamt 16 Bytes an Befehlsdaten und kann bis zu 8 Bytes pro Phase schieben. Der Abgleich-Schieber wird benutzt, um Präfixe von ihrem Befehl zu trennen, wenn sie erfasst werden, indem sie ausgeschoben werden. Der Abgleich-Schieber wird auch verwendet, um den Befehl auf seine niederwertigen Bytes abzugleichen und den ganzen Befehl auszuschieben, nachdem er abgeglichen ist.
  • Die 8 Bytes werden auch über einen Bus 309 an einen Sofortdaten-Schieber (IMM-Schieber) 312 gesendet, der Sofortdaten aus dem gegenwärtigen Befehl extrahiert, und an einen Versetzungs-Schieber (DISP-Schieber) 314, der Versetzungsdaten aus dem gegenwärtigen Befehl extrahiert. Daten an diese zwei Schieber werden durch ein Omega-Zyklus-Verzögerungselement 316 verzögert, um sie mit dem abgeglichenen Befehl synchronisiert zu haften.
  • Der Abgleich-Schieber 310 gibt den nächsten abgeglichenen Befehl auf einem Bus 311 an zwei ALIGN_IR-Latches 318 oder 320 aus. Diese Latches arbeiten auf entgegengesetzten Phasen des Systemtaktes, was es erlaubt, zwei Befehle pro Zyklus zu verriegeln. Die Latches ALIGN_IR 318 und 320 geben abgeglichene Befehlsbytes auf zwei Ausgangsbussen 321 aus. Während der Phase, in der eines der Latches einen neuen Wert empfängt, wird der Ausgang des anderen Latchs (der der gegenwärtige abgeglichene Befehl ist) durch einen Multiplexer (MUX 322) ausgewählt. Der MUX 322 gibt den gegenwärtigen abgeglichenen Befehl auf einem Bus 323 für abgeglichene Befehle aus. Der Ausgang 323 ist der primäre Ausgang der IAU. Dieser Ausgang wird vom Vordecoder 304 benutzt, um die Länge des gegenwärtigen Befehls zu bestimmen, und er wird in den Abgleich-Schieber 310 als Daten zurückgeführt, aus denen der nächste Befehl extrahiert wird. Der gegenwärtige abgeglichene Befehl wird über den Bus 325, einen Stark 334 und einen werteren Bus 336 zu dem Abgleich- Schieber 310 zurückgeführt. Der Bus 336 sendet auch die gegenwärtige abgeglichene Befehlsinformation an die Omega-Zyklus-Datenverzögerung 316. Die Schieber IMM und DISP 312 bzw. 314 können daher die Sofortdaten und die Versetzungsdaten schieben, weil sie auch insgesamt 16 Bytes zum Schieben benötigen. Die Omega-Zyklus-Datenverzögerung 316 gibt Befehlsbytes auf einem Bus an die Schieber aus. Der IMM-Schieber 312 gibt Sofortdaten, die dem gegenwärtigen Befehl entsprechen, auf einem Sofortdaten-Bus 340 aus. Der DISP-Schieber 314 gibt Versetzungsdaten, die dem gegenwärtigen Befehl entsprechen, auf einem Versetzungsdaten-Bus 342 aus.
  • Der Vordecoder 304 umfasst drei Decoderblöcke: Einen Nächster-Befehl-Detektor (NID) 324, einen Sofortdaten- und Versetzungs-Detektor (IDDD) 326 und einen Präfix-Detektor (PD) 328. Der NID und PD steuern den Abgleich-Schieber und den Extrakt-Schieber, während der IDDD den IMM-Schieber 312 und den DISP-Schieber 314 steuert.
  • Der PD 328 ist bestimmt, die Anwesenheit von Präfixbytes in einem Befehl zu erfassen. Er bestimmt die Zahl vorhandener Präfixe und liefert Schiebesteuersignale an den Abgleich-Schieber 310 und den Zähler-Schieber 308 über eine Leitung 331, einen MUX 330 und eine Leitung 333 zur Extraktion der Präfixe aus dem Befehlsstrom in dem nächsten Halbzyklus. Außerdem decodiert der PD 328 die Präfixe selbst und liefert diese Präfixinformation auf einer Ausgangsleitung 329 an die IDU.
  • Der Grundaufbau des PD 328 besteht aus vier identischen Präfix-Detektionseinheiten (um bis zu vier Präfixe zu erfassen), und einem zweiten Logikblock, um die Präfixe selbst zu decodieren. Das CISC-Format definiert die Reihenfolge, in der Präfixe vorkommen können, aber die vorliegende Erfindung prüft die Anwesenheit aller Präfixe in jeder der ersten vier Bytepositionen. Des Werteren sind die Funktionen des Erfassens der Anwesenheit von Präfixen und Decodierens der Präfixe getrennt, um Vorteil aus den reduzierten Geschwindigkeitsanforderungen für den Decoder zu ziehen. Eine ausführlichere Beschreibung des Aufbaus des PD 328 erfolgt unten.
  • Der IDDD 326 ist bestimmt, Sofortdaten und Versetzungsdaten aus jedem Befehl zu extrahieren. Der IDDD versucht immer, beide Felder zu extrahieren, seien sie vorhanden oder nicht. Der IDDD 326 steuert den IMM-Schieber 312 und den DISP-Schieber 314 auf einem Paar Leitungen 344 bzw. 346. Die IDU benötigt einen Halbzyklus, um den abgeglichenen Befehl zu verarbeiten, hat aber keine Verwendung für die Sofortdaten und die Versetzungsdaten. Die Sofort- und Versetzungsdaten werden daher durch die Omega-Zyklus-Datenverzögerung 316 verzögert, um dem IDDD 326 mehr Zeit zu geben, um Schiebebeträge zu be rechnen, weil das Schieben während der folgenden Phase stattfindet, anders als der NID 324, der in der gleichen Phase decodiert und schiebt.
  • Der NID 324 ist das Herz des Vordecoders. Der NID 324 bestimmt die Länge jedes Befehls, sobald die Präfixe entfernt sind. Der NID 324 steuert den Abgleich-Schieber 310 und einen Zähler-Schieber 308 über eine Steuerlietung 325, den MUX 330 und die Leitung 333. Der NID umfasst zwei Unterblöcke, einen Untermengen-Nächster-Befehl-Detektor (SNID 702) und eine Restlichen-Nächster-Befehl-Detektor (RNID 704) die in Verbindung mit 7A und 7B erörtert werden.
  • Der SNID 702 bestimmt, wie sein Name sagt, die Längen einer Untermenge des CISC-Befehlssatzes. Befehle in der Untermenge können durch den SNID mit einer Rate von zwei pro Zyklus abgeglichen werden.
  • Der RNID bestimmt die Längen aller verbleibenden Befehle und beötigt einen zusätzlichen Halbzyklus, der seine Gesamt-Decodierzeit auf einen vollen Zyklus bringt. Die Feststellung, ob ein Befehl in der Untermenge ist oder nicht, wird durch den SNID getroffen, und dieses Signal wird in dem NID verwendet, um entweder den Ausgang des SNID oder des RNID zu wählen.
  • Wenn ein neuer Befehl abgeglichen wird, wird zu Anfang angenommen, dass er sich in der Untermenge befindet, und daher wird der Ausgang des SNID gewählt. Wenn der SNID (währen des gleichen Halbzyklusses) feststellt, dass der Befehl von dem RNID gehandhabt werden muss, wird ein Signal geltend gemacht, und die IAU schleift den gegenwärtigen Befehl, um ihn für einen weiteren Halbzyklus zu halten. Während dieses zweiten Halbzyklusses wird der RNID-Ausgang gewählt, und der Befehl wird richtig abgeglichen.
  • Dieser Aufbau der NID hat mehrere Vorteile. Einer, der früher erwähnt wurde, ist, dass die Wahl zwischen dem SNID und dem RNID während eines einzigen Halbzyklusses erfolgen kann, wenn die Zykluszeit ausreichend lang ist, was es erlaubt, alle Befehle in einer einzigen Phase abzugleichen (ausgenommen die Zeit, um Präfixe und Befehle länger als acht Bytes zu extrahieren). Dies ergibt eine Erhöhung der Pro-Zyklus-Leistung bei niedrigeren Zyklusraten ohne zusätzliche Hardware.
  • Ein zweiter Vorteil ist, dass das Auswählsignal als ein Abgleich-Aufheben-Signal benutzt werden kann, weil es die IAU veranlasst, die SNID-Schiebeausgänge zu ignorieren und den gegenwärtigen Befehl für einen zusätzlichen Halbzyklus zu halten. Der SNID könnte ausge legt sein, bestimmte Befehlskombinationen oder Längen vorherzusagen und dann das Aufhebungssignal zu erzeugen, wenn diese Vorhersagen falsch waren. Dies könnte benutzt werden, um z. B. mehrfache Befehle in einem einzigen Halbzyklus abzugleichen, was die Leistung weiter steigern würde.
  • Die IAU umfasst auch einen Zähler-Schieber 332. Der Zähler-Schieber 332 wird benutzt, um den Schiebebetrag für den Extrakt-Schieber 306 über eine Leitung 335 zu bestimmen und mittels der ADVBUFREQ-Leitung 308 zusätzliche Befehlsbytes von der IFU anzufordern. Die Funktionalität des Zähler-Schiebers 332 wird am besten verstanden, indem das folgende Flussdiagramm der IAU-Arbeitsweise und ein Zeitdiagrammbeispiel durchgesehen werden.
  • 4 zeigt ein allgemeines Flussdiagramm der Befehlsbyte-Extraktion und des Abgleichs, die von der IAU der vorliegenden Erfindung durchgeführt werden. Wenn neue Daten auf die unterste Leitung 205 des MBUF 204 der IFU (genannt BUCKET_#0) gelangen, extrahiert der Extrakt-Schieber 306 8 Bytes beginnend mit dem ersten Befehl, wie in Schritt 402 gezeigt. Die 8 Befehlsbytes werden zu den ALIGN_IR-Latches 318 und 320 geleitet, während der Abgleich-Schieber 310 umgangen wird, wie in Schritt 404 gezeigt. Die IAU wartet dann auf die nächste Taktphase, während sie den abgeglichenen Befehl in dem ALIGN_IR-Latch hält, wie in Schritt 406 gezeigt.
  • Während der nächsten Taktphase gibt die IAU den abgeglichenen Befehl an die IDU, den STACK 334, den IDDD 326, den NID 324 den PD 328 und die Omega-Zyklus-Datenverzögerung 316 aus. Die Sofortdaten- und Versetzungsinformation wird dann auf Bussen 340 und 342 an die IDU ausgegeben. Diese Daten entsprechen dem während der vorherigen Phase abgeglichenen Befehl, wenn es einen gab. Diese Operationen werden allgemein in Schritt 408 von 4 gezeigt.
  • Ein bedingter Befehl 409 wird dann in die IAU eingegeben, um festzustellen, ob ein oder mehr Präfixe vorhanden sind. Diese Feststellung wird durch den PD (Präfix-Decoder) 326 getroffen. Wenn ein oder mehr Präfixe durch den PD erfasst werden, wie durch den "JA"-Pfeil, der den bedingten Befehl 409 verlässt, angegeben, geht der Prozess zu einem Schritt 410, wo die IAU den Ausgang des PD mit dem MUX 330 wählt. Die decodierte Präfix-Information wird dann verriegelt, um während der nächsten Phase mit dem entsprechenden abgeglichenen Befehl an die IDU gesendet zu werden, wie in einem Schritt 412 gezeigt. Wenn keine Präfix-Befehlsbytes erfasst wurden, wie durch einen "NEIN"-Pfeil, der den bedingten Befehl 409 verlässt, angegeben, wird der Ausgang des NID 324 mit dem MUX 330 gewählt, wie in einem Schritt 414 gezeigt.
  • Sobald die Schritte 412 oder 414 vollendet sind, wird der momentane Ausgang des Zähler-Schiebers 332 verwendet, um den EXTRAKT-Schieber 306 zu steuern, um die nächsten 8 Bytes von Befehlsdaten an den Abgleich-Schieber 310 und die Omega-Zyklus-Verzögerung 316 zu liefern, wie in einem Block 416 gezeigt. Dann benutzt die IAU den Ausgang des MUX 330 als eine Variable, genannt SHIFT_A, die benutzt wird, um den Abgleich-Schieber 310 zu steuern, um den nächsten Befehl abzugleichen. Die SHIFT_A wird auch zu dem momentanen Extrakt-Schieber-Schiebebetrag (genannt BUF_COUNT) addiert, um den Schiebebetrag zur Verwendung während der nächsten Phase zu berechnen. Diese Addition wird in dem Zähler-Schieber 308 durchgeführt, wie in einem Schritt 418 gezeigt.
  • Der nächste von der IAU durchgeführte Operationsschritt ist das Verriegeln des Ausgangs des Abgleich-Schiebers in dem ALIGN_IR-Latch, wie in Schritt 420 gezeigt. Die Position der Sofortdaten und Versetzungsdaten in dem IDDD 326 wird dann berechnet, und dieser Schiebebetrag wird um einem Omega-Zyklus verzögert, wie in Schritt 422 gezeigt. Dann benutzt die IAU den während des vorherigen Halbzyklusses berechneten Schiebebetrag, um die Daten zu schieben, die momentan in den IMM-Schieber 322 und DISP-Schieber 314 gelangen, wie in Schritt 424 gezeigt. Schließlich wiederholt sich der Prozess beginnend in Schritt 406, um auf die nächste Taktphase zu warten. Die Schritte 408 bis 424 werden für die restlichen Befehlsbytes in dem Befehlsstrom wiederholt.
  • 5 zeigt ein mit der IAU von 3 verbundenes Timing-Diagramm. Zwei Befehlskübel werden oben in 5 gezeigt. Diese Befehlskübel, bezeichnet BUCKET_#0 und BUCKET_#1, umfassen je 16 Befehlsbytes, die von der IFU (aus einem nicht gezeigten Befehlsspeicher) an die IAU in 3 geliefert werden. Der Befehlsabgleich erfolgt immer von rechts aus BUCKET_#0 (d. h. der untere Kübel). In diesem Beispiel sind BUCKET_#0 und BOCKET_#1 die unteren zwei Kübel des MBUF 204 der IFU. Andere Anordnungen sind auch möglich.
  • In diesem Beispiel sind die ersten drei an die IAU gesendeten Befehle OP0, OP1 und OP2, die Längen von 5 Bytes, 3 Bytes bzw. 11 Bytes aufweisen. Man beachte, dass nur die ersten 8 Bytes des Befehls OP2 in BUCKET_#0 passen. Die restlichen 3 Bytes gehen an den Anfang von BUCKET_#1. Um dieses Beispiel zu vereinfachen, wird angenommen, das diese drei Befehle keine Präfix-Bytes haben. Eine zusätzliche Phase wäre für den Abgleich eines Befehls erforderlich, wenn Präfixe erfasst werden.
  • Befehle können an jeder Stelle eines Kübels beginnen. Befehle werden bis zu 8 Bytes zu einer Zeit aus dem unteren Kübel beginnend mit irgendeinem Befehl in diesem Kübel extrahiert. Die IAU schaut auf zwei Kübel, um Befehle zu akkommodieren, die sich in den zwei ten Kübel erstrecken, z. B. OP2 in dem vorliegenden Beispiel.
  • Spur "1" in dem Timing-Diagramm ist einer von zwei Systemtakten CLK0. In diesem Beispiel hat der Systemtakt einen 6-Nanosekunden- (ns) Halbzyklus. CLK0, der verglichen mit dem anderen Systemtakt CLK1 entgegengesetzte Phase hat, steigt bei T6 und fällt bei T0, wo T0 die steigende Flanke von CLK1 ist und T6 die steigende Flanke von CLK0 ist. Die drei Haupttaktphasen von 5 sind _1, _2 und _3 bezeichnet, um dieser Erörterung zu helfen.
  • Spuren "2" und 3" in dem Timing-Diagramm stellen Befehlsdaten auf den Eingangsbussen IFI1B und IFI0B dar. Ein neuer BUCKET_#0 wird auf dem Bus IFI0B am Beginn von _1 verfügbar, wie bei 502 gezeigt. Eine kurze Zeit später werden die ersten 8 Bytes beginnend mit OP0 (B#0;7–0) durch den Extrakt-Schieber 306 bei 504 extrahiert. BUCKET_#0-Bytes 7–0 sind als gültig gezeigt. Das Timing des Extrakt-Schiebers wird in einer Spur "4" gezeigt.
  • Wenn die CISC-in-RISC-Decodierung eines Befehlsstromes beginnt, steuert der Zähler-Schieber 332 den Extrakt-Schieber 306, um die ersten 8 Bytes aus BUCKET_#0 zu extrahieren. Der Zähler-Schieber signalisiert dem Extrakt-Schieber, weitere Bytes der Kübel zu schieben und zu extrahieren, wenn der Abgleich von Befehlen voranschreitet. Wenn BUCKET_#0 von Befehlsbytes entleert ist, wird der Inhalt von BUCKET_#1 in BUCKET_#0 geschoben, und BUCKET_#0 wird aus dem Befehlsstrom neu gefüllt. Nach dem anfänglichen Extrahieren von 8 Bytes extrahiert und schiebt der Extrakt-Schieber Bytes unter der Steuerung des Zähler-Schiebers auf der Leitung 335 basierend auf Befehlslänge, Präfix-Länge und vorheriger Schiebeinformation.
  • Für dieses Beispiel signalisiert jedoch der Zähler-Schieber dem Extrakt-Schieber, null zu schieben, um den ersten Befehl abzugleichen. Der Extrakt-Schieber schiebt daher die ersten 8 Bytes des ersten Befehls in den Abgleich-Schieber 310 aus. Das Timing von Signalen im Abgleich-Schieber wird in Spur "5" des Timing-Diagramms gezeigt. Diese 8 Bytes werden in dem Abgleich-Schieber während _1 in der durch Verweisnummer 506 gezeigten Zeitperiode gültig.
  • Die ersten 8 Bytes von BUCKET_#0 umgehen den Abgleich-Schieber und werden in den zwei ALIGN_IR-Latches 318 oder 320 gespeichert, wie in Spuren "6" und "7" in 5 gezeigt. Die ALIGN_IR-Latches empfangen die Befehlsbytes in einer alternierenden Weise basierend auf dem Timing der Taktsignale CLK0 und CLK1. ALIGN_IR0 318 ist ein Taktsignal-CLK0-Latch, was bedeutet, dass es verriegelt wird, während das Taktsignal CLK0 hoch ist. ALIGN_IR1 320 ist ein Taktsignal-CLK1-Latch, das verriegelt, wenn das Taktsignal CLK1 hoch ist. Die ersten 8 Bytes werden in dem ALIGN_IR0 vor dem Ende der ersten Taktsignal-CLK0-Phase gültig, wie durch Verweisnummer 508 in Richtung des Ende von _1 gezeigt.
  • Der MUX 322 wählt das Latch aus, das während der vorherigen Phase verriegelt hat. In diesem Beispiel gibt daher der MUX 322 die ersten 8 Bytes von OP0 während der zweiten vollen Phase, _2, aus.
  • Die ersten 8 Bytes von OP0 fließen dann in den NID 324 und den STACK 334. Der NID 324 erfasst, dass der erste Befehl 5 Byte lang ist und sendet diese Information über die Leitung 325, den MUX 330 und die Leitung 333 an den Abgleich-Schieber und den Zähler-Schieber. Zur gleichen Zeit fließen die ersten 8 Bytes durch den Stack und werden zu dem Abgleich-Schieber zurückgeführt, wie oben erörtert. Der Abgleich-Schieber empfängt daher Befehlsbytes von dem Extrakt-Schieber und indirekt von sich selbst. Der Grund ist, dass der Abgleich-Schieber 16 Bytes an Eingabe benötigt, um ein Maximum von 8 Bytes pro Zyklus zu schieben. Wenn der Abgleich-Schieber eine Zahl von X Bytes rechts schiebt, wirft er die geringstwertigen X Bytes weg und leitet die nächsten 8 Bytes von Daten an die Latches 318 und 320. In diesem Fall liefert der STACK 334 die Bytes 0–7 an den Abgleich-Schieber 310.
  • Ein Bypass 336 um den Abgleich-Schieber herum wird in den anfänglichen Fall verwendet, wenn der Extrakt-Schieber den ersten Befehl aus dem Befehlsstrom extrahiert. Für den Abgleich-Schieber ist es nicht erforderlich, in dem Anfangsfall zu schieben, weil, Präfix-Bytes ausgenommen, der erste Befehl abgeglichen ist.
  • Während _2 des Timing-Diagramms schiebt der Extrakt-Schieber 8 Bytes aus, Bytes 15–8 von BUCKET_#0. Siehe 510 in 5. Diese Bytes werden an den Abgleich-Schieber gesendet, der nun insgesamt 16 aufeinanderfolgende Bytes hat, um damit zu arbeiten. Der Abgleich-Schieber schaut während _2 auf den Ausgang des Extrakt-Schiebers und den gültigen Ausgang der Latches 318 und 320.
  • Gegen Ende von _2 schiebt der Abgleich-Schieber die Bytes 12–5 von BUCKET_#0 in seine Ausgänge, basierend auf dem Signal von dem NID, das dem Abgleich-Schieber anzeigte, 5 Bytes nach rechts zu schieben, um dadurch die 5 geringstwertigen Bytes, die Befehl OP0 entsprechen, wegzuwerfen. Siehe das Signal Shift_5_byte 512 in Spur "8" des Timing-Diagramms. Die 8 Bytes von restlichen Befehlsdaten, Bytes 12–5, fließen dann durch den Abgleich-Schieber. Man beachte, dass Byte 5 das erste Byte des nächsten Befehls OP1 ist.
  • Der Zähler-Schieber 332 schiebt dann die 8 Bytes des Extrakt-Schiebers 306, weil die ers ten 8 Bytes nun von den ALIGN_IR-Latches zur Verfügung stehen, sodass die nächsten Bytes benötigt werden. Beginnend in Phase 3 wird der Zähler-Schieber dem Extrakt-Schieber signalisieren, seinen Schiebebetrag um die Zahl von Bytes zu erhöhen, die während der vorherigen Phase durch den Abgleich-Schieber 310 ausgeschoben wurde. Der Zähler-Schieber muss deshalb Logik umfassen, um den vorherigen Schiebebetrag des Extrakt-Schiebers zu speichern und den Schiebebetrag des Abgleich-Schiebers zu diesem Wert zu addieren.
  • Jedes Mal, wenn es einen neuen Wert für den Abgleich-Schieber gibt, addiert der Zähler-Schieber diesen Betrag zu seinem alten Schiebebetrag. In diesem Beispiel schob er während _2 8 Bytes. In _3 muss er daher dem Extrakt-Schieber sagen, 8 + 5 oder 13 Bytes zu schieben. Die von dem Extrakt-Schieber ausgegebenen Bytes sind Bytes 20–13. Man beachte, dass die ALIGN_IR-Latches Bytes 12–5 während _3 ausgeben werden, und daher werden Bytes 20–5 am Abgleich-Schieber zur Verfügung stehen.
  • Während _3 wird der Extrakt-Schieber Bytes 20–13 ausgeben. Der BUCKET_#0 enthält jedoch nur Bytes 15–0, daher müssen Bytes 20–16 von dem BUCKET_#1 genommen werden. Wie bei 514 in dem Timing-Diagramm gezeigt, wird der BUCKET_#1 am Beginn von _3 gültig. Der Extrakt-Schieber schiebt dann Bytes 4–0 von BUCKET_#1 und Bytes 15–13 von BUCKET_#0, wie bei 516 gezeigt. Wenn BUCKET_#1 zu dieser Zeit nicht gültig war, hätte die IAU warten müssen, bis er gültig wird.
  • Wie oben erwähnt, wurde das Signal Shift_5_byte während _2 von dem NID erzeugt. Basierend auf diesem Signal werden Bytes 12–5 von BUCKET_#0 durch den Abgleich-Schieber ausgeschoben, wie bei 518 gezeigt, und kurz danach in das ALIGN_IR1 verriegelt, wie bei 520 gezeigt.
  • Am Beginn von _3 werden Bytes 12–5 durch den MUX 322 an den STACK 334 und den NID 324 gesendet. Der STACK führt die Bytes 12–5 zurück zu dem Abgleich-Schieber, wie bei 336 gezeigt, und der NID bestimmt die Länge von OP1 als 3 Bytes und gibt das Signal Shift_5_bytes während der letzten Hälfte von _3 aus, wie in Spur "9" bei 522 gezeigt. Der Abgleich-Schieber schiebt 3 Bytes (15–8), und dieser Betrag wird zu dem Zähler-Schieber addiert.
  • Dann wiederholt sich der obige Prozess. Sobald ein Befehl über BUCKET_#0 hinausgeht (d. h. BUCKET_#0 ist vollständig benutzt), wird BUCKET_#1 BUCKET_#0 werden, und ein neuer BUCKET_#1 wird später gültig werden.
  • Spur "10" in dem Timing-Diagramm zeigt das Timing für die Extraktion von Bytes aus dem Befehlsstrom. Die Buf_Count#0-Blöcke stellen den gespeicherten Extrakt-Schiebebetrag dar. Während jeder Phase wird der abgeglichene Schiebebetrag zu Buf_Count#0 addiert, und das Ergebnis wird der Extrakt-Schiebebetrag während der nächsten Phase (siehe die mit COUNTER_SHIFT bezeichneten Blöcke).
  • Spur "11" in dem Timing-Diagramm zeigt das Befehlsabgleich-Timig. Die mit IR_Latch_#0 und IF_Latch_#1 bezeichneten Blöcke stellen das Timing dar, während dem die Befehle in dem entsprechenden ALIGN_IR-Latch gültig werden. Die mit MUX1 bezeichneten kleinen Blöcke stellen die Zeit dar, wenn der MUX 322 beginnt, das gültige Abgleich-Latch auszuwählen. Die mit MUX2 bezeichnten kleinen Blöcke stellen die Zeit dar, wenn der MUX 330 beginnt, den durch den NID 324 bestimmten Schiebebetrag auszuwählen. Schließlich stellen die mit ALIGN_SCHIFT bezeichneten Blöcke die Zeit dar, wenn der Abgleich-Schieber beginnt, den Befehl auszugeben.
  • Präfixe werden mit dem gleichen Verfahren extrahiert, mit dem Befehle abgeglichen werden, aber der Ausgang von PD 328 wird anstelle des Ausgangs von NID 324 durch den MUX 330 ausgewählt.
  • Ein Blockschaltbild eines Abschnitts des STACK 334 wird in 6 gezeigt. Der STACK umfasst 64 1-Bit Stacks, die parallel angeordnet sind. Jeder 1-Bit Stack 600 umfasst zwei Latches 602 und 604 und einen Dreieingang-MUX 606. Die abgeglichenen Befehle werden auf einem mit IN bezeichneten Bus 607 in die Latches und den MUX eingegeben. Das Laden der zwei Latches kann unabhängig auf jeder Taktphase erfolgen. Außerdem hat der MUX 606 drei MUX-Steuerleitungen 608, um den Ausgang von jedem Latch zu wählen oder die IN-Daten direkt an einen mit OUT bezeichneten Ausgang 610 umzuleiten.
  • IAU kann periodisch an einen verschiedenen Befehlsstrom übertragen. Der STACK erlaubt der IAU, zwei Sätze von 8 Bytes von Informationsdaten von dem MUX 322 zu speichern. Dieses Merkmal wird allgemein während der CISC-Befehlsemulation benutzt. Wenn die IAU verzweigen muss, um eine Mikrocode-Routine zur Emulation eines komplexen CISC-Befehls zu verarbeiten, kann der Status der IAU gespeichert und wiederhergestellt werden, sobald die Emulation des CISC-Befehls vollendet ist.
  • Die Omega-Zyklus-Datenverzögerung wird verwendet, um die Sofortdaten und Versetzungsinformation zu verzögern. Die Verzögerung wird in die IAU gelegt, bevor die Schieber die Sofortdaten und Versetzungdaten weiterleiten, um das Schieben während der folgenden Phase vorzunehmen, anstatt die Befehlslänge und das Schieben in dem gleichen Halbzyklus zu bestimmen. Die Operationen können über den Zyklus gespreizt werden, um es so der Timing-Anforderung leichter zu machen, dieser Logik zu entsprechen. Der IDDD-Block 326 steuert den IMM-Schieber 312 und den DISP-Schieber 314, um die Sofortdaten und die Versetzungsdaten aus den Befehlen zu extrahieren. Wenn z. B. die ersten 3 Bytes des Befehls Opcode sind, gefolgt von 4 Bytes von Versetzung und 4 Bytes von Sofortdaten, würde den Schiebern ermöglicht werden, die geeigneten Bytes auszuschieben.
  • Die Schieber 312 und 314 geben immer 32 Bits aus, ob die tatsächliche Datengröße 8, 16 oder 32 Bits ist, wobei die Sofort- und Versetzungsdaten geeignet auf die niederwertigen Bits des 32-Bit Ausgangs abgeglichen sind. Die IDU bestimmt, ob die Sofort- und Versetzungsdaten gültig sind, und wenn ja, wie viele der Daten gültig sind.
  • Das Bestimmen der Länge aller Präfixe, Sofortdaten, Versetzungsdaten und der tatsächlichen Länge der Befehle ist eine Funktion des wirklichen CISC-Befehlssatzes, der abgeglichen und decodiert wird. Diese Information kann von einer in der Technik erfahrenen Person durch Studieren des CISC-Befehlssatzes selbst, der Benutzerhandbücher des Herstellers oder anderem üblichen Verweismaterial erlangt werden. Die Fachleute in der Technik werden ohne weiteres erkennen, wie dies zu erreichen ist und wie die Information in Zufallslogik umzuwandeln ist, um das oben beschriebene IAU-Untersystem, das unten beschriebene IDU-Untersystem zu implementieren, und wie die Steuerlogik und Signale, die zum Steuern des Datenflusses benutzt werden, zu erzeugen sind.
  • Außerdem, sobald solche Zufallslogik erzeugt ist, können käufliche Entwicklungs-Softwareanwendungen (z. B. Verilog, hergestellt von Cadence Design Systems, Inc, San Jose, California) verwendet werden, um die Logik zu verifizieren, und können beim Definieren des Timings und Erzeugen der Steuersignale und zugehöriger Zufallslogik helfen. Andere käufliche Entwicklungs-Softwareanwendungen sind verfügbar, um Gatter- und Zellen-Layouts zu erzeugen, um die Implementierung des Funktionsblöcke und Steuerlogik zu optimieren.
  • Der i486 Befehlssatz unterstützt 11 Präfixe, die eine definierte Reihenfolge haben, wenn sie zusammen in einem Befehl benutzt werden. Das Format definiert, dass bis zu vier Präfixe in einem einzelnen Befehl enthalten sein können. Der Präfix-Detektor 328 der vorliegenden Erfindung umfasst daher vier identische Präfix-Detektorschaltungen. Jede Schaltung sucht nach jedem der 11 Präfix-Codes. Die ersten vier an den Präfix-Detektor geleiteten Bytes werden bewertet, und die Ausgänge der vier Präfix-Detektorschaltungen werden kombiniert, um die Gesamtzahl vorhandener Präfixe zu bestimmen. Das Ergebnis wird als der Schiebebetrag verwendet, der durch den MUX 330 geleitet wird.
  • 7A zeigt ein Blockschaltbild des NID. Die folgende Erörterung des NID ist spezifisch für den Abgleich von i486-Befehlen. Der Abgleich von anderen CISC-Befehlen würde wahrscheinlich eine andere NID-Architektur einsetzen. Die unten erörterten Techniken sollen daher den Fachleuten als ein Führer dienen, sollten aber nicht als den Umfang der vorliegenden Erfindung begrenzend angesehen werden.
  • Nur vier 4 Bytes werden benötigt, um die Länge eines Befehls zu bestimmen. (Wie oben erwähnt, umfassen die 4 Bytes zwei Opcode-Bytes, ein optionales ModR/M-Byte und ein SIB-Byte.)
  • 7A zeigt einen 4-Byte (32 Bit) Bus 701, der die ersten vier Bytes eines von dem MUX 322 empfangenen Befehls darstellt. Die ersten 2 Bytes werden auf einem Bus 703 an den SNID 702 gesendet. Der SNID bestimmt die Länge einer ersten Untermenge von Befehlen, die per Definition basierend auf den ersten 2 Bytes identifizierbar sind. Der SNID kann die Länge dieser Untermenge von Befehlen in einem Halbzyklus bestimmen. Die Länge der Untermengenbefehle wird durch den SNID auf einem Bus 705 ausgegeben. Die Breite des Busses kann der Maximalzahl von durch den SNID erfassten Befehlsbytes entsprechen. Der SNID hat auch eine 1-Bit MODDETect- (MOD_DET) Ausgangsleitung 707, um anzugeben, ob ein ModR/M-Byte in dem Befehl vorhanden ist. Außerdem hat der SNID eine 1-Bit NID_WAIT-Leitung 709, um der Steuerlogik mitzuteilen, dass der Befehl nicht in der Untermenge ist (d. h. stattdessen den Ausgang des RNID verwenden). Die IAU muss daher einen Halbzyklus auf den RNID warten, um den Befehl zu decodieren, wenn NID_WATT wahr ist.
  • Die durch den SNID decodierte Untermenge von Befehlen sind die CISC Befehle, die in einem Halbzyklus mittels eines Minimums an 1-, 2- und 3-Eingangs-Gattern (NANDs, NORs und Inverter) mit einem Maximum von 5 Gatterverzögerungen basierend auf einem 16 × 16 Karnaugh-Plan von 256 Befehlen decodiert werden können. Blöcke des Plans, die die meisten 1-Byte Opcode Befehle enthalten, können in dieser Weise implementiert werden. Die restlichen Befehle werden durch den RNID mittels einer Logik-Anordnung mit einer längeren Gatterverzögerung decodiert.
  • Der RNID 704 empfängt die ersten vier Bytes auf dem Bus 701. Der RNID führt die Längenbestimmungs-Decodierung für die restlichen Befehle durch, die mehr als eine Phase zum Decodieren benötigen. Der RNID besitzt Ausgänge, die den Ausgängen des SNID ähnlich sind.
  • Der RNID erfasst Befehlslängen und gibt das Ergebnis auf einem Bus 711 aus. Ein 1-Bit OVER8-Ausgang 712 zeigt an, dass die Länge des Befehls über 8 Bits beträgt. Der RNID hat auch einen 1-Bit MOD_DET-Ausgang 714, der angibt, ob der Befehl ein ModR/M-Byte enthält.
  • Die durch entweder den SNID oder den RNID decodierte Länge wird durch einen MUX 706 ausgewählt. Eine Steuerleitung 708 für den MUX 706, genannt SELect_DECoder für die gegenwärtige InstRuction (SELDECIR), schaltet den MUX 706 zwischen zwei Decodern um, um die tatsächliche Länge, die 1 bis 11 Bytes beträgt, zu erlangen. Ein 11 Byte langer Befehl würde z. B. den RNID veranlassen, das OVER8-Signal und eine 3 auf dem Bus 711 auszugeben. Die Befehlslänge (In) wird auf einem Bus 716 an den MUX 330 gesendet und wird von dem Abgleich-Schieber 310 und dem Zähler-Schieber 332 benutzt. Die von dem MUX 706 ausgegebenen 8 Bits werden als Schiebesteuerungen (Freigaben) für den Abgleich- und den Zähler-Schieber verwendet.
  • Die ModR/M-Bytes werden auch in einer ähnlichen Weise ausgewählt. Das SELDECIR-Signal 708 steuert einen zweiten MUX 710, um die passende MOD-Leitung zu wählen, um anzugeben, ob ein ModR/M-Byte vorhanden ist. Der MOD-Leitungsausgang 718 wird von dem IDDD benutzt.
  • Das SELDECIR-Signal 708 wird basierend auf dem NID_WAIT-Signal 709 erzeugt. Der Ausgang des SNID wird während der ersten Taktphase ausgewählt, weil diese Ergebnisse vollständig sein werden. Wenn das NID_WAIT-Signal 709 angibt, dass der Befehl nicht decodiert wurde, werden der MUX 706 und der MUX 710 umgeschaltet, um den Ausgang 711 des RNID auszuwählen, der am Beginn der nächsten Taktphase verfügbar werden wird.
  • Der RNID 704 umfasst im Wesentlichen zwei parallele Decoder, einer decodiert die Befehle, als ob es einen 1-Byte Opcode gibt, und der andere decodiert, als ob es einen 2-Byte Opcode gibt. Ein ESCape DETect (ESC_DET) Eingangssignal gibt an, ob der Opcode 1 Byte oder 2 Bytes lang ist. Zum Beispiel hat in dem i486 Befehlssatz das erste Byte in allen 2-Byte Opcodes (genannt das ESCAPE-Byte) einen Wert 0F Hex, der angibt, dass der Befehl einen 2-Byte Opcode hat. Der RNID gibt eine gültige Befehlslänge basierend auf dem ESC_DET-Signal aus. Dieses Signal gibt an, dass das erste Opcode-Byte ein ESCAPE (0F Hex) ist, das einen 2-Byte Opcode angibt, um dadurch die Decodierung des zweiten Bytes zu ermöglichen. Decodierungslogik zum Erzeugen des ESC_DET-Signals sollte für die Fachleute klar ersichtlich sein.
  • 7B zeigt ein Blockschaltbild des RNID. Der RNID umfasst einen RNID_1OP-Decoder 752, der das erste Opcode-Byte decodiert, einen RNID_2OP-Decoder 754, der das zweite Opcode-Byte decodiert, zwei identische RNID MOD-Decoder 756 und 758, die die ModR/M-Bytes in jeder der zwei durch die Zahl vorhandener Opcode-Bytes bestimmten Positionen decodieren, und einen RNID_SUM-Summierer 760. Basierend auf den Ausgängen der vier RNID-Decoder 752758 gibt der RNID_SUM-Summierer 760 die Gesamtlänge des Befehls auf einem Bus 762 aus. Der RNID_SUM-Summierer 760 hat eine zusätzliche Ausgangsleitung 764, bezeichnet OVER8, um anzugeben, dass die Länge des Befehls über 8 Bytes beträgt.
  • Das erste Opcode-Byte des Befehls und 3 Bits (Bits [5:3], genannt Erweiterungsbits) des ModR/M-Bytes werden auf einem Bus 766 in den RNID_1OP 752 eingegeben. Eine weitere Eingangsleitung, genannt DATA_SZ, in den RNID_1OP zeigt an, ob die Operandengröße des Befehls 16 oder 32 Bits beträgt. Die Datengröße wird auf der Basis des verwendeten Speicherschutzschemas und ob Präfixe vorhanden sind, um die Vorgabe-Datengröße aufzuheben bestimmt. Der RNID_1OP nimmt an, dass der Befehl einen 1-Byte Opcode hat, und basierend auf dieser Information und den 3 Erweiterungsbits versucht der RNID_1OP, die Länge des Befehls zu bestimmen.
  • Der RNID_MOD-Decoder 754 decodiert das ModR/M-Byte des auf einem Bus 770 eingegebenen Befehls. Der RNID_MOD-Decoder hat einen zusätzlichen Eingangsbus 772, bezeichnet ADD_SZ, der angibt, ob die Adressengröße 16 oder 32 Bits beträgt. Die Adressengröße ist unabhängig von der Datengröße.
  • Das ESC_DET-Signal 774 wird auch in den Block 760 eingegeben. Wenn das ESC_DET-Signal logisch hoch ist, weiß z. B. der RNID_SUM, dass der Opcode tatsächlich in dem zweiten Byte liegt.
  • Der RNID_2OP-Decoder 754 nimmt an, dass der Opcode 2 Bytes ist und decodiert daher das zweite Byte (s. Bus 776) des Opcodes. Der RNID_2OP-Decoder hat ebenfalls den Eingang 768, der die Datengröße identifiziert.
  • Da die Decoder selbst die Länge des Opcodes nicht kennen, d. h. 1 oder 2 Bytes, und da das ModR/M-Byte immer dem Opcode folgt, wird der zweite RNID_MOD-Decoder 758 verwendet, um das dem 2-Byte Opcode folgende Byte (s. Bus 778) zu decodieren, wieder angenommen, dass es vorhanden ist. Die zwei RNID_MOD-Decoder sind identisch, decodieren aber verschiedene Bytes in dem Befehlsstrom.
  • Basierend wieder auf dem ESC_DET-Signal 774 wählt der RNID_SUM 760 die Ausgänge der geeigneten Opcode- und ModR/M-Byte-Decoder aus und gibt die Länge des Befehls auf dem Bus 762 aus. Der mit OVER8 bezeichnete Ausgang 764 zeigt an, ob der Befehl über 8 Bytes ist. Wenn die Länge des Befehls über 8 Bytes ist, zeigt der IR_NO[7:0] Bus 762 die Zahl von Befehlsbytes über 8 an.
  • Der RNID_1OP-Decoder 752 hat einen Ausgangsbus 780, der 9 Bits breit ist. Eine Leitung gibt an, ob der Befehl 1 Byte lang ist. Die zweite Leitung gibt an, dass der Befehl 1 Byte lang ist und dass ein ModR/M-Byte vorhanden ist, und daher sollte Information von dem ModR/M-Decoder bei der Bestimmung des Länge des Befehls eingeschlossen werden. Desgleichen geben die restlichen Ausgangsleitungen von Bus 780 die folgende Zahl von Bytes an: 2, 2/MOD, 3, 3/MOD, 4, 5 und 5/MOD an. Wenn der Befehl 4 Bytes lang ist, kann es kein ModR/M-Byte geben; dies ist inhärent in dem i486 Befehlssatz. Die vorliegende Erfindung ist jedoch in keiner Weise auf einen spezifischen CISC-Befehlssatz begrenzt. Die Fachleute in der Technik werden in der Lange sein, die Merkmale der vorliegenden Erfindung anzuwenden, um jeden CISC-Befehlssatz abzugleichen und zu decodieren.
  • Der RNID_2OP-Decoder 754 hat einen Ausgangsbus 782, der 6 Bits breit ist. Eine Leitung gibt an, ob der Befehl 1 Byte lang ist. Die zweite Leitung gibt an, dass der Befehl 1 Byte lang ist und ein ModR/M-Byte einschließt, das bei der Bestimmung der Länge des Befehls eingeschlossen werden soll. Desgleichen geben die restlichen Ausgangsleitungen von Bus 782 an, dass 2, 2/Mod, 3 und 5/Mod vorhanden sind. Es gibt keine anderen möglichen Befehlslängen, die der i486 Befehlssatz unterstützt, wenn der Opcode 2 Bytes lang ist.
  • Ausgänge 784 und 786 der zwei RNID_MOD-Decoder 756 und 758 geben dem RNID_SUM 760 die fünf möglichen zusätzlichen Längen an, die durch das ModR/M-Byte spezifiziert werden können. Jeder RNID MOD-Decoder hat einen 5 Bit breiten Ausgangsbus. Die fünf möglichen zusätzlichen Längen sind 1, 2, 3, 5 und 6 Bytes. Das ModR/M-Byte selbst ist in der Gesamtlängenbestimmung enthalten. Alle restlichen Bytes umfassen Sofort- oder Versetzungsdaten.
  • 8 zeigt ein Blockschaltbild des IDDD 326. Der IDDD bestimmt die Schiebebeträge für den IMM-Schieber 312 und den DISP-Schieber 314. Der Schiebebetrag wird durch das ModR/M-Byte des Befehls bestimmt.
  • Der i486 Befehlssatz enthält zwei spezielle Befehle: enter_detect und jump_call_detect. Der IDDD hat daher einen Block, der Immediate Special Detector (ISD) 802 genannt wird, um die Decodierung dieser Befehle zu handhaben. Ein Eingang 803 zu dem ISD ist das erste Byte des Befehls. Zwei Ausgangsleitungen EN_DET und JMP_CL_DET (820 bzw. 822) geben an, ob einer der entsprechenden Befehle erfasst wird.
  • MOD_DEC-Decoder 804 und 806 sind identisch und decodieren Sofort- und Versetzungsdaten. Basierend auf ADD_SZ 722 schaut der Decoder 804 auf das ModR/M-Byte einen 1-Byte Opcode annehmend, und der Decoder 806 schaut auf das ModR/M-Byte einen 2-Byte Opcode annehmend. Das Befehlsbyteeingänge in MOD_DEC 804 und 806 sind 805 bzw. 807. Diese Decoder bestimmen die Versetzungsposition und die Sofortdatenposition in dem Befehlsstrom. Zwei Siebenleitung-Ausgänge 824 und 826 geben an, an welcher Position die Versetzung und die Sofortdaten beginnen. Die Versetzung kann an Position 2 oder Position 3 beginnen, und die Sofortdaten können an Position 2, 3, 4, 6 oder 7 beginnen.
  • Die MOD_DET-Leitungen 707 und 714 werden auch in den Selekt-Block 812 eingegeben. Der Selekt-Block 812 kombiniert die EN_DET- und JMP_CL_DET-Signale, die MOD_DET- und MOD_DEC-Ergebnisse und das ADD_SZ und gibt seine Ergebnisse auf vier Bussen 832838 aus. Eine Versetzung 1 (DISP_1) Bus 832 gibt die Versetzungsschiebeergebnisse in der Annahme eines 1-Byte Opcodes aus. Eine Versetzung 2 (DISP_2) Bus 834 gibt die Versetzungsschiebeergebnisse in der Annahme eines 2-Byte Opcodes aus. IMMediate 1 und 2 (IMM_1 und IMM_2) Busse 836 und 838 geben die Sofortdaten-Schiebeinformation in der Annahme eines 1-Byte bzw. 2-Byte Opcodes aus.
  • Ein letzter Block 814, bezeichnet MOD_SEL/DLY, wählt tatsächlich die geeigneten Schiebebeträge aus und verzögert diese Ergebnisse um einen Halbzyklus. Die von dem MOD_SEL_DLY 814 durchgeführte Halbzyklus-Verzögerung stellt die in 3 gezeigte Verzögerung 316 dar. Das oben beschriebene Signal ESC_DET 774 wird durch den MOD_DEL_DLY-Block benutzt, um die Schiebeauswahl durchzuführen. Die Ergebnisse werden durch die Taktsignale CLK0 und CLK1 nach einer Halbzyklus-Verzögerung aus dem MOD_SEL_DLY 814 ausgetaktet. Das Sofortdaten-Schiebesteuersignal und das Versetzungs-Schiebesteuersignal werden über einen SHIFT_D[3:0] Bus 840 und einen SHIFT_I[7:0] Bus 842 an den DISP-Schieber und den IMM-Schieber gesendet. Die Zahl der möglichen Positionen der Sofort- und Versetzungsdaten in dem CISC-Befehl definiert die Zahl von Bits, die nötig ist, um den Betrag der Verschiebung zu spezifizieren.
  • 9 zeigt ein Blockschaltbild des Präfix-Detektors 328. Der Präfix-Detektor 328 umfasst einen Präfixnummer-Decoder (PRFX_NO) 902, vier Präfixdetektor-Decoder (PRFX_DECs 904910) und einen Präfix-Decoder (PRFX_SEL) 912.
  • Der i486 Befehlssatz umfasst z. B. 11 mögliche Präfixe. Insgesamt vier Präfixe können in einem Befehl enthalten sein, weil es mehrere ungültige Präfix-Kombinationen gibt. Die Reihenfolge der vier Präfixe wird auch durch den Befehlssatz definiert. Antstatt nur die legitimen Präfix-Permutationen zu erfassen, benutzt der Präfix-Detektor jedoch die vier Präfix-Detektoren 904910, um jedes der ersten 4 Bytes des Befehls zu decodieren. Die ersten 4 Bytes des Befehls werden auf einem Bus 901 in den Präfix-Decoder eingegeben. Jeder Detektor 904910 hat einen Ausgangsbus (905, 907, 909 und 911), der 12 Bits breit ist. Die 12 Ausgänge geben an, welche Präfixe vorhanden sind, wenn überhaupt welche tatsächlich dedodiert werden. Das zwölfte Präfix wird UNLOCK genannt, was das funktionale Gegenstück des i486 LOCK-Präfixes ist, und steht nur Mikrocode-Routinen während des Emulationsmodus zur Verfügung.
  • Ein ALIGN_RUN-Steuersignal 920 kann eingeschlossen sein, um den Präfix-Decoder freizugeben bzw. zu sperren, und kann benutzt werden, um alle Präfixe auszumaskieren. Ein HOLD_PRFX-Steuersignal 922 wird benutzt, um die Präfix-Information zu verriegeln und zu halten. Generell muss zum Abgleich eines Befehls, wenn der Präfix-Detektor 328 angibt, dass Präfixe vorhanden sind, die Steuerlogik die Präfix-Information verriegeln. Die Präfix-Information wird von dem Abgleich-Schieber 310 verwendet, um die Präfixe auszuschieben. Im folgenden Zyklus bestimmt die IAU die Länge des Befehls, gleicht ihn ab und übergibt ihn an die IDU.
  • Der PRFX_NO-Decoder 902 gibt an, wo und wie viele Präfixe vorhanden sind, durch Decodieren der ersten 4 Bytes des Opcodes. 10 zeigt ein Logikdiagramm des PRFX_NO-Decoders 902. Der PRFX_NO-Decoder umfasst vier identische Decoder 10021008 und einen Satz von Logikgattern 1010. Die vier Decoder 10021008 schauen je auf eines der ersten 4 Bytes (10101013) und stellen fest, ob ein Präfix vorhanden ist. Da es möglich ist, dass ein Präfix-Byte einem Opcode-Byte folgt, werden die Logikgatter 1010 verwendet, um ein Ergebenis auszugeben, das der Gesamtzahl von Präfixen vor dem ersten Opcode-Byte darstellt, weil Präfixe, die einem Opcode folgen, nur auf den Opcode des nächsten Befehls zutreffen.
  • Die Gesamtzahl von Präfixen ist eins, wenn das erste Byte (Position) ein Präfix ist und es in der zweiten Position kein Präfix gibt. Als werteres Beispiel macht ein Präfix in der vierten Position nichts aus, sofern es keine Präfixe in den ersten drei Positionen gibt. Ein von dem unteren NAND-Gatter 1014 ausgegebenes logisches Hoch (1) gibt an, dass vier Präfixe vorhanden sind; ein von dem zweitletzten NAND-Gatter 1015 ausgebenes Hoch gibt an, dass es drei Präfixe gibt, usw. Die Ausgänge der vier NAND-Gatter werden kombiniert, um einen PREFIX_NO Bus 1018 zu bilden, um die Gesamtzahl von gültigen Präfixen anzugeben, die dem ersten Opcode-Byte vorangehen, d. h. der Schiebebetragsausgang des Präfix-Detektors 328.
  • Der PRFX_NO-DEcoder 902 enthält auch einen Prefix_Present (PRFX_P) Ausgangsbus 1020, der auch 4 Bits breit ist. Vier PRFX_P-Ausgangsleitungen 10201023 geben an, ob es ein Präfix in der gegebenen Position gibt oder nicht, ungeachtet, was die anderen Positionen ausgeben. Die PRFX_P-Ausgänge werden direkt von den vier Decoder- (10021008) Ausgängen abgegriffen.
  • Die PRFX_NO-Decoderergebnisse (in Verbindung mit 10 zu erörtern) und die Information von den PRFX_DEC-Detektoren 904910 werden durch den PRFX_SEL-Decoder 912 kombiniert. Die Präfix-Information wird kombiniert, um einen 13-Bit Ausgangsbus 924 zu bilden, der angibt, ob es Präfix-Signale gibt und welche Präfixe vorhanden sind.
  • 3.0 Übersicht der Decodiereinheit
  • Alle Befehle werden von der IAU an eine Befehlsdecodiereinheit (IDU) übergeben und werden direkt in RISC-Befehle übersetzt. Alle von der IEU auszuführenden Befehle werden durch die IDU verarbeitet. Die IDU stellt fest, ob jeder Befehl ein emulierter Befehl oder ein Grundbefehl ist. Wenn er emuliert ist, wird die Mikrocode-Emulationsroutine, die ganz aus Grundbefehlen besteht, ausgeführt. Wenn es ein Grundbefehl ist, wird er direkt durch Hardware in 1 bis 4 Nanobefehle übersetzt und an die IEU gesendet. Es sind diese Nanobefehle und nicht die ursprünglichen CISC- oder Mikrocode-Befehle, die die IEU tatsächlich ausführt.
  • Die Aufteilung von Befehlen hat zwei wesentliche Vorteile: Die Hardware wird klein gehalten, weil sie nur einfache Operationen unterstützen muss, und Fehler sind weniger mühsam, weil sie wahrscheinlicher in den komplexen Mikrocode-Routinen auftreten, die leicht geändert werden können.
  • Die Mikrocode-Routinen-Unterstützungshardware der IDU in Verbindung mit der vorliegenden Erfindung hat verschiedene Merkmale, die sie einmalig machen. Typischerweise bestehen Mikrocode-Befehle aus Steuerbits für die verschiedenen in einem Prozessor vorhandenen Datenwege, mit wenig oder keiner Codierung. Der Mikrocode der vorliegenden Erfindung ist dagegen eine vergleichbar hochstufige Maschinensprache, die bestimmt ist, einen spezifischen komplexen Befehlssatz zu emulieren. Während typischer Mikrocode direkt zu den Funktionseinheiten eines Prozessors geleitet wird, wird der Mikrocode der vorliegen den Erfindung durch die gleiche Decoderlogik verarbeitet, die für die Ziel-CISC- (z. B. 80 × 86) Befehle benutzt wird. Dies gibt dem Mikrocode der vorliegenden Erfindung eine viel bessere Codedichte als sie mit typischem Mikrocode erreicht werden kann, und macht den Mikrocode infolge seiner Ähnlichkeit mit dem Ziel-CISC-Befehlssatz leichter zu entwickeln. Außerdem stellt die vorliegende Erfindung Hardwareunterstützung für Mikrocode-Revisionen bereit: Ein Teil oder der ganze On-Chip-ROM-basierte Mikrocode kann unter Softwaresteuerung durch externen RAM-basierten Mikrocode ersetzt werden. (siehe gemeinsam besessene, mitanhängige Anmeldung betitelt "A ROM With RAM Cell und Cyclic Redundancy Check Circuit", Seriennummer 07/802, 816, eingereicht 12/6/91, Anwalts-Aktenzeichen Nr. SP024; deren Offenbarung hierin durch Verweis eingeschlossen ist.)
  • Die Mikrocode-Maschinensprache ist bestimmt, ein Satz von Befehlen zu sein, der durch den RISC-Kern ausgeführt werden kann, um die von allen komplexen, emulierten Befehlen verlangten Funktionen durchzuführen, plus die verschiedenen Steuer- und Wartungsfunktionen, die mit der Ausnahme-Behandlung verbunden sind. Obwohl emulierte Befehle typischerweise weniger leistungsempfindlich als nicht emulierte (Grund) Befehle sind, und Ausnahmen (die durch Mikrocode-Routinen behandelt werden) selten vorkommen, ist es noch immer für den Gesamtsystemdurchsatz wichtig, dass beide effizient gehandhabt werden. Dieses Ziel wird durch die Verwendung verschiedener Formen von Hardware-Unterstützung für die Mikrocode-Routinen erreicht. Die vorliegende Erfindung umfasst vier Bereiche von Hardware-Unterstützung für Mikrocode: Dispatch-Logik, Mailboxen, ein Nanobefehlsformat und spezielle Befehle.
  • Die Mikrocode-Dispatch-Logik steuert die effiziente Übertragung der Programmsteuerung von dem Ziel-CISC-Befehlsstrom auf eine Mikrocode-Routine und zurück auf den Ziel-Befehlsstrom. Dies wird mit einer kleinen Menge an Hardware und in einer Weise gehandhabt, die für die Befehlsausführungseinheit (IEU) des RISC-Kerns transparent ist. (Die IEU führt die RISC-Befehle aus. Der vorerwähnte "RISC-Kern" ist synonym mit der IEU. Die Einzelheiten der IEU sind für eine in der Technik erfahrene Person nicht erforderlich, um die vorliegende Erfindung zu praktizieren. Die Merkmale der vorliegenden Erfindung sind auf RISC-Prozessoren im Allgemeinen anwendbar.)
  • Die Mailboxen umfassen ein System von Registern, die benutzt werden, um Information von der Befehlsdecodier-Hardware in einer systematischen Weise auf Mikrocode-Routinen zu übertragen. Dies erlaubt der Hardware, Befehlsoperanden und ähnliche Daten an die Mikrocode-Routinen zu übergeben, was ihnen die Aufgabe erspart, diese Daten aus dem Befehl zu extrahieren.
  • Das Nonobefehlsformat beschreibt die Information, die von der IDU zu der IEU fließt. Dieses Format wurde gewählt, um ihm zu erlauben, effizient aus den Quellen-CISC-Befehlen extrahiert zu werden, aber noch angemessene Information an die IEU zur Abhängigkeitsprüfung und Funktioneinheitssteuerung liefert.
  • Schließlich, die speziellen Befehle sind ein Satz von zusätzlichen Befehlen, der bereitgestellt wird, um eine vollständige Steuerung der RISC-Hardware zu erlauben und bestimmte einmalige Emulationsaufgaben in Hardware zu unterstützen, und sind spezifisch für den CISC-Befehlssatz.
  • 3.1 Mikrocode-Dispatch-Logik
  • Der erste Schritt beim Befördern von Mikrocode ist, die Adresse der Mikrocode-Routine zu bestimmen. Dieser Schritt hat wichtige Anforderungen: Jede Mikrocode-Routine muss eine einmalige Startadresse haben, und diese Adresse muss schnell erzeugt werden. Für Ausnahme-Behandlungsroutinen ist dies recht einfach zu erreichen, da es die kleine Zahl von Fällen, die behandelt werden muss, der Hardware erlaubt, die Adressen als Konstanten zu speichern und lediglich zwischen ihnen auszuwählen. Das Bestimmen der Adressen für emulierte Befehle ist jedoch schwieriger, weil es zu viele gibt, um das Speichern aller Adressen möglich zu machen.
  • Die Mikrocode-Dispatch-Logik erfüllt diese Forderungen, indem sie die Dispatch-Adresse jedes Befehls direkt auf seinen Opcode gründet. Zum Beispiel werden 1-Byte Opcodes direkt in den Adressraum von OH bis 1FFFH abgebildet, was erfordert, dass die oberen 3 Bits der 16-Bit Dispatch-Adresse nullen sind. Diese Mikrocode-Einsprungpunkte sind 64 Bytes voneinander beabstandet, was erfordert, dass die sechs niedrigstwertigen Bits jeder Einsprungpunktadresse nullen sind. Dies lässt 7 Bits unbestimmt, und sie können direkt von sieben der Opcode-Bits genommen werden. Das Erzeugen der Adressen in dieser Weise benötigt sehr wenig Logik, wie die Fachleute erkennen werden. Zum Beispiel kann ein Multiplexer allein benutzt werden, um die richtigen Bits aus dem Opcode auszuwählen.
  • Sobald die Dispatch-Adesse für eine Mikrocode-Routine bestimmt ist, muss der Mikrocode aus dem Speicher geholt werden. Typisch liegt der Mikrocode in einem On-Chip-ROM, aber dies ist nicht unbedingt der Fall. Wie in der oben erwähnten Anmeldung Nr. 07/802,818 angeführt, ist jeder Einsprungpunkt mit einem ROM-Ungültig-Bit verbunden, das angibt, ob die ROM-Routine richtig ist oder nicht. Dieses Bit wird parallel mit dem ROM-Zugriff geholt und funktioniert ähnlich einem herkömmlichen Cache-Bit-Indikator. Wenn dieses Bit angibt, dass der ROM-Eintrag gültig ist, wird das Holen der Mikrocode-Routine aus dem ROM fortgesetzt, und sie wird normal ausgeführt. Wenn das Bit angibt, dass das ROM ungültig ist, wird der Mikrocode aus einem externen Speicher, z. B. einem RAM oder dergleichen, geholt.
  • Die Adressierung von On-Chip-Mikrocode-Routinen wird durch die IDU selbst gehandhabt. Die IDU erzeugt 16-Bit Adressen für Zugriffe auf des Mikrocode-ROM. Wenn das ROM-Ungültig-Bit, das dem grade adressierten ROM-Eintrag entspricht, angibt, dass der Mikrocode ungültig ist, wird die Adresse von externem Mikrocode berechnet, der außerhalb des Chips im Hauptspeicher liegt. Ein U_Base-Register hält die oberen 16 Adressbits (genannt Startadresse) des externen Mikrocodes, der in Hauptspeicher liegt. Die von der IDU decodierte 16-Bit Adresse wird mit den oberen 16 Bits in dem U_Base-Register verkettet, um auf den im Hauptspeicher liegenden externen Mikrocode zuzugreifen. Wenn die Stelle des im Hauptspeicher liegenden externen Mikrocodes geändert wird, kann der Inhalt des U_Base-Registers modifiziert werden, um die neue Hauptspeicherstelle widerzuspiegeln.
  • Dises Merkmal erlaubt es, Mikrocode-Aktualisierungen durch Ersetzen bestimmter Routinen durch Alternative im externen Speicher durchzuführen, ohne den ganzen Mikrocode zu zwingen, unter der reduzierten Leistung von Externspeicherzugriffen zu leiden. Es macht es auch möglich, das ganze ROM aus dem RISC-Chip zu entfernen und den ganzen Mikrocode in ein externes RAM zu legen, um den Flächenbedarf des RISC-Chips zu verringern oder bei der Entwicklung von Mikrocode zu helfen.
  • Die Dispatch-Logik ist auch verantwortlich für das Bereitstellen einer Einrichtung für die Mikrocode-Routine, um zu dem Hauptbefehlsstrom zurückzukehren, wenn ihre Aufgabe beendet ist. Um dies zu handhaben, werden getrennte Programmzähler (PCs) und Befehlspuffer unterhalten. Während des normalen Betriebs bestimmt der Haupt-PC die Adresse jedes CISC-Befehls im externen Speicher. Ein Speicherabschnitt, der diese Befehle enthält, wird von der IFU geholt und in dem MBUF gespeichert.
  • Wenn ein emulierter Befehl oder eine Ausnahme erfasst wird, werden der PC-Wert und die Länge des gegenwärtigen Befehls in einem Zwischenpuffer gespeichert, während die Mikrocode-Dispatch-Adresse wie oben beschrieben berechnet wird und Befehle aus dieser Adresse in den EBUF geholt werden. Der Mikrocode wird aus dem EBUFausgeführt, bis ein Mikrocode-Rückkehr-Befehl erfasst wird, zu welcher Zeit der bewahrte PC-Wert zurückgeladen wird, und die Ausführung geht aus dem EBUF weiter. Da der EBUF und alle anderen betroffenen Register währen der Übergabe der Steuerung an die Mikrocode-Routine bewahrt werden, geschieht die Rückübergabe an das CISC-Programm sehr schnell.
  • Es gibt zwei Rückkehr-Befehle, die von Mikrocode-Routinen benutzt werden, um die Unterschiede zwischen Befehls-Emulationsroutinen und Ausnahme-Behandlungsroutinen zu unterstützen. Wenn die Mikrocode-Routine zum Zweck des Behandelns einer Ausnahme betreten wird, ist es wichtig, dass, nachdem die Routine beendet ist, der Prozessor genau zu dem Zustand zurückkehren soll, in dem er unterbrochen wurde. Wenn die Mikrocode-Routine zum Zweck des Emulierens eines Befehls betreten wird, wird jedoch die Routine zu dem Befehl zurückkehern, der dem emulierten Befehl folgt. Andernfalls wird die Emulationsroutine ein zweites Mal ausgeführt. Diese zwei Funktionen werden durch die Verwendung von zwei Rückkehr-Befehlen gehandhabt: aret und eret. Der Befehl aret bringt den Prozessor in den Zustand zurück, als der Mikrocode betreten wurde, während der Befehl eret bewirkt, dass der PC aktualisiert wird und die Steuerung zu dem nächsten Befehl in dem Zielstrom zurückkehrt.
  • 3.2 Mailboxen
  • Damit Emulationsroutinen die Funktionen eines komplexen CISC-Befehls erfolgreich durchführen, ist es nötig, dass der Mikrocode einen bequemen Zugriff auf die von dem emulierten Befehl benannten Operanden hat. Bei der vorliegenden Erfindung wird dies durch die Verwendung von Mailbox-Registern durchgeführt. Diese Register sind nur in ihrem Gebrauch einmalig. Sie sind als die ersten vier eines Satzes von 16 Zwischenregistern in der Ganzzahl-Registerdatei, die dem Mikrocode zur Verfügung stehen. Jede Emulationsroutine, die Operanden oder andere Information von dem ursprünglichen Befehl benötigt, kann erwarten, diese Werte in einem oder mehr der Mailbox-Register beim Eintreten in die Routine gespeichert zu finden. Wenn die IDU einen emulierten Befehl erfasst, erzeugt sie Befehle, die von der IEU benutzt werden, um die Register mit den Werten zu laden, die der Mikrocode erwartet, bevor die Ausführung der Mikrocode-Routine selbst beginnt.
  • Man betrachte z. B. die Emulation des Befehls 'Load Machine Status Word' (Imsw), der eines der allgemeinen Register als einen Operanden spezifiziert. Angenommen, der zu emulierende spezifische Befehl ist Imsw ax, der ein 16-Bit Statuswort aus dem Register "ax" lädt. Die gleiche Mikrocode-Routine wird ungeachtet des tatsächlich in dem Befehl spezifizierten Registers benutzt, sodass für diesen Befehl Mailbox#0 mit dem Statuswort vor Eintritt in den Mikrocode geladen wird. Wenn die IDU diesen Befehl erfasst, wird sie einen Befehl mov u0, ax für die IEU erzeugen, um das Statuswort aus dem Register "ax" in das Register "u0" zu schieben, das als Mailbox#0 definiert ist. Nachdem dieser mov-Befehl an die IEU gesendet ist, wird die Mikrocode-Routine geholt und gesendet werden. Der Mikrocode kann daher geschrieben werden, als ob der emulierte Befehl Imsw u0 wäre, und er wird alle möglichen O peranden, die in dem ursprünglichen CISC-Befehl spezifiziert sein können, richtig behandeln.
  • 3.3 Nano-Befehlsformat
  • Wie oben erwähnt, werden CISC-Befehle durch die IDU in Nanobefehle decodiert, die durch den RISC-Prozessorkern, als IEU bezeichnet, verarbeitet werden. Nanobefehle werden von der IDU in Gruppen von vier, genannt "Kübel", an die IEU übergeben. 11 zeigt einen einzelnen Kübel. Jeder Kübel besteht aus zwei Paketen plus allgemeiner Information, die zu dem ganzen Kübel gehört. Paket #0 enthält immer drei Nanobefehle, die in Reihenfolge ausgeführt werden: Ein LOAD-Befehl 1102, ein ALU-Typ Befehl 1104 und ein STORE-Befehl 1106. Paket #1 besteht aus einem einzelnen ALU-Typ Befehl 1108.
  • Die IEU kann Kübel von der IDU bei einer Spitzenrate von einem pro Zyklus annehmen. Die IDU verarbeitet Grundbefehle bei einer Spitzenrate von zwei pro Zyklus. Da die meisten Grundbefehle in ein einziges Paket übersetzt werden, können gewöhnlich zwei Grundbefehle in einen Kübel gelegt und zusammen an die IEU übergeben werden. Die Haupteinschränkung dieser Rate besteht darin, dass die Grunbefehle der Anforderungan eines Kübels entsprechen müssen:
  • Nur einer der zwei Grundbefehle kann auf einen Speicheroperanden verweisen (es gibt nur eine Laden/Speichern-Operation pro Kübel), und beide Befehle müssen aus einer einzigen ALU-Typ Operation bestehen (im Gegensatz zu einem Befehl, der zwei ALU-Typ Operationen benötigt).
  • Wenn eine oder beide dieser Einschränkungen verletzt werden, wird der Kübel an die IEU mit Nanobefehlen gesendet, die nur einem der Grundbefehle entsprechen, und der restliche Befehl wird in einem späteren Kübel gesendet. Diese Anforderungen spiegeln nahe die Fähigkeiten der IEU, d. h. eine IEU mit zwei ALUs und einer Laden/Speichern-Einheit, so dass sie in Wirklichkeit keine Einschränkung der Leistung darstellen. Ein Beispiel dieses Typs von IEU wird in gemeinsam besessenen, mitanhängigen Anmeldungen betitelt "High Performance RISC Microprocessor Architecture", Seriennummer 07/817,810, eingereicht 1/8/92, (Aktenzeichen Nr. SP015/1397.0280001) und "Extensible RISC Microprocessor Architecture", Seriennummer 07/817,809, eingereicht 1/8/92, (Aktenzeichen Nr. SP021/1397.0300001) offenbart, deren Offenbarungen hierin durch Verweis eingeschlossen sind.
  • 3.4 Spezielle Befehle
  • Es gibt viele Befehle, die durch Mikrocode-Routinen ausgeführt werden müssen, die mit Uni versalbefehlen schwer oder uneffizient durchzuführen sind. Des Weiteren sind infolge der erweiterten Architektur des vorliegenden RISC-Prozessors verglichen mit herkömmlichen Prozessoren bestimmte Funktionen hilfreich, während solche Funktionen für einen CISC-Prozessor unbedeutend sein würden, und daher mittels irgendeiner Kombination von CISC-Befehlen nicht ausgeführt werden können. Gemeinsam führten diese Gegebenheiten zur Schaffung von "speziellen Befehlen".
  • Ein Beispiel der ersten Kategorie von Spezialbefehlen ist der Befehl extract_desc_base. Dieser Befehl extrahiert verschiedene Bitfelder aus zweien der Mikrocode-Universalregister, verkettet sie und legt das Ergebnis in das dritte Universalregister zur Verwendung durch Mikrocode. Um die gleiche Operation ohne den Nutzen dieses Befehls durchzuführen, müsste der Mikrocode mehrere Maskier- und Schiebeoperationen durchführen und müsste zusätzliche Register verwenden, um Zwischenwerte zu halten. Der Spezialbefehl erlaubt es, die gleiche Funktionalität mit nur einem Befehl während eines einzigen Zyklusses und ohne Verwendung irgendeines Scratch-Registers durchzuführen.
  • Zwei Beispiele der zweiten Kategorie von Spezialbefehlen wurden bereits präsentiert: Die zwei Rückkehr-Befehle aret und erst, die zum Beenden von Mikrocode-Routinen benutzt werden. Diese Befehle sind nur in der Mikrocode-Umgebung von Bedeutung und haben daher keine gleichwertigen Befehle oder Befehlsfolgen in der CISC-Archtektur. In diesem Fall wären Spezialbefehle zur richtigen Funktionalität, nicht nur aus Gründen der Leistung, erforderlich.
  • Da die Spezialbefehle nur den Mikrocode-Routinen zur Verfügung stehen und emulierte Befehle nur in dem Ziel-CISC-Befehlsstrom angetroffen werden können, werden die Opcodes von emulierten Befehlen im Mikrocode-Modus für die Spezialbefehle wiederverwendet. Wenn daher einer dieser Opcodes in dem Ziel-CISC-Befehlsstrom angetroffen wird, gibt er lediglich an, dass die Mikrocode-Emulationsroutine für diesen Befehl ausgeführt werden soll. Wenn aber der gleiche Opcode in dem Mikrocode-Befehlsstrom angetroffen wird, hat er eine vollständig andere Funktion als einer der Spezialbefehle. Um diese Opcode-Wiederverwendung zu unterstützen, verfolgt die IDU den momentanen Prozessorstatus und decodiert die Befehle geeignet. Diese Wiederverwendung von Opcodes ist für die IEU transparent.
  • Die IDU decodiert jeden CISC-Befehl (z. B. des i486 Befehlssatzes) und übersetzt jeden Befehl in mehrere RISC-Prozessor-Nanobefehle. Wie oben beschrieben, wird jeder CISC-Befehl in 0 bis 4 Nanobefehle, abhängig von seiner Komplexität und Funktionalität, übersetzt. Die IDU decodiert und übersetzt bestenfalls zwei CISC-Befehle pro Zyklus. Die Grundfunk tionen der IDU können wie folgt zusammengefasst werden, sie funktioniert um:
    • – Einen CISC-Befehl pro Halbzyklus zu decodieren;
    • – den ersten CISC-Befehl in einer ersten Phase zu decodieren;
    • – die decodierten Ergebnisse des ersten CISC-Befehls durch die zweite Phase als gültig zu halten;
    • – den zweiten CISC-Befehl in der zweiten Phase zu decodieren; die Ausgänge von zwei Befehlen, wenn möglich, in der dritten Phase zu kombinieren, und
    • – einen Kübel auszugeben, der vier Nanobefehle pro Zyklus enthält.
  • 3.5 Blockschaltbilder der Decodiereinheit
  • 12 zeigt ein Blockschaltbild der IDU. Abgeglichene Befehle von der IAU treffen an der IDU auf einem Bus 1201 ein, der 32 Bits breit ([31:0] oder 4 Bytes) ist. Die abgeglichenen Befehle werden durch einen Befehlsdecoder 1202 empfangen. Der IDU 1202 schaut nur auf die ersten 4 Bytes eines abgeglichenen Befehls, um die CISC-RISC-Übersetzung durchzuführen.
  • Der Befehlsdecoder 1202 arbeitet in einer Taktphase (ein Halbzyklus) Der abgeglichene Befehl durchläuft den Decoder, und die decodierte Informtation, die austritt, wird gemultiplext und über einen Bus 1203 in ein Halbzyklus-Verzögerungs-Latch 1204 geführt. Die decodierte Information erfährt daher das Äquivalent zu einer Phasen-Pipeline-Verzögerung.
  • Nach der Halbzyklus-Verzögerung wird die decodierte Information über einen Bus 1205 an einen MUX 1206 gesendet, um die tetsächlich benutzten Registercodes zu bestimmen. In dieser Stufe der Decodierung wird die decodierte Information in dem Nanobefehlsformat angeordnet. Der Nanobefehl wird dann verriegelt. Pro Zyklus werden zwei vollständige Nano-Befehlskübel verriegelt. Das Verriegeln von zwei Nanobefehlskübeln wird schematisch durch den ersten IR-Kübel 1208 und den zweiten IR-Kübel 1210 gezeigt.
  • Die IDU versucht, die Behälter 1208 und 1210 in einen einzigen Kübel 1212 zusammenzusetzen. Dieses Zusammensetzen wird durch einen Satz von Steuergattern 1214 durchgeführt. Die IDU schaut zuerst auf den Typ jedes Nanobefehls und stellt fest, ob die Typen so sind, dass sie kombiniert werden können. Man beachte, dass jede LoaD (LD) Operation der zwei verriegelten Befehle in eine LD-Stelle 1216 des einzelnen Kübels 1212 gelegt werden kann; jede STore (ST) Operation der verriegelten Befehle in eine ST-Stelle 1218 des einzelnen Kübels gelegt werden kann; jede A0-Operation in eine A0-Stelle 1220 gelegt werden kann, und jede A0- oder A1-Operation in eine A1-Stelle 1222 gelegt werden kann.
  • Die IDU behandelt die Befehle als Ganzes. Wenn die IDU die zwei Befehle nicht in einen Kübel packen kann, wird sie einen vollständigen Befehl zurücklassen. Wenn z. B. das erste IR-Latch nur eine A0-Operation enthält und das zweite IR-Latch alle vier Operationen enthält, wird die IFU die A1 nicht aus dem zweiten IR-Latch nehmen und sie mit der A0-Operation verschmelzen. Die A0-Operation wird durch sich selbst gesendet werden, und der Satz von Operationen des zweiten IR-Latchs wird an das erste IR-Latch übertragen und in der nächsten Phase gesendet, während welcher Zeit das zweite IR-Latch neu geladen wird. Mit anderen Worten, die in dem ersten IR-Latch gespeicherten Operationen werden immer gesendet, und die in dem zweiten IR-Latch gespeicherten Operationen werden, wenn möglich, mit den Operationen des ersten IR-Latchs kombiniert. Die vorherigen Pipeline-Stufen der IDU und IAU müssen in dem Fall warten, dass das erste und zweite IR nicht kombiniert werden können. Die folgenden Situationen erlauben der IDU, die Operationen des ersten und zweiten IR-Latchs zu kombinieren:
    • 1. beide verwenden nur A0 oder
    • 2. nur eines verwendet A0 und das andere verwendet nur A0, LD und ST.
  • Kombinationslogik kann von den Fachleuten in der Technik ohne werteres entworfen wer den, um die nötigen Steuersignale für die Steuergatter zu erzeugen, um den Inhalt des ersten und zweiten IR-Latchs zu verschmelzen, basierend auf der oben erörterten Funktionalität und der Grundlogik-Entwurfspraxis.
  • Der Emulationsmodus wird betreten, wenn die IDU einen Befehl identifiziert, der zu der Untermenge von Befehlen gehört, die Emulation erfordern. Ein EMULation MODE Steuersignal (EMUL_MODE) wird an die Decoder der IDU gesendet, sobald der Emulationsmodus betreten ist. Die direkte Decodierung des CISC-Befehls hält an, und die Mikrocode-Routine, die diesem identifizierten Befehl entspricht, wird zur Decodierung an die IDU gesendet. Die IDU-Decoder kehren in den Grundmodus zur Decodierung weiterer CISC-Befehle zurück, wenn die Mikrocode-Routine mit der Emulation des Untermengen-Befehls fertig ist. Grundsätzlich werden CISC-Befehle und Mikrocode-Befehle durch die IDU in der gleichen Weise gehandhabt. Nur die Interpretation der Opcodes ändert sich.
  • Karnaugh-Pläne des Vorgabe- (Grund) Modus für 1-Byte und 2-Byte Opcode-Befehle werden in 13A13C gezeigt. Die Zahlen auf den linken Seite und oben auf den Karnaugh-Plänen stellen die Opcode-Bits dar. Zum Beispiel entspricht ein als Hex 0F codierter Einbyte-Opcode der ersten Reihe und elften Spalte, was der "2 Byte Escape" Befehl ist.
  • Die Befehlskästen, die in dem Karnaugh-Plan von 13A–C grau schattiert sind, stellen Grundbefehle dar, und die weißen Kästen sind die Befehle, die emuliert werden werden müssen.
  • 14 zeigt ein Blockdiagramm des Befehlsdecoders 1202 der IDU. Der Befehlsdecoder 1202 umfasst eine Vielzahl von Decodern, die benutzt werden, um die CISC-Befehle und Mikrocode-Routinen zu decodieren.
  • Ein TYPE GENerator (TYPE_GEN) Decoder 1402 empfängt die ersten voll abgeglichenen Befehle auf dem ALIGN_IR-Bus und decodiert Befehle einen zu einer Zeit, um das TYPE-Feld des Befehls zu identifizieren.
  • Das identifizierte TYPE-Feld entspricht den oben in Verbindung mit der IDU erörterten Nanobefehlen. Der Typ wird durch ein 4-Bit Feld bezeichnet, das jede Operation in einem Kübel (Load, ALU0, Store und ALU1) darstellt. Der TYPE_GEN-Decoder 1402 spezifiziert, welche dieser vier Operationen zum Ausführen des Befehls benötigt werden. Anhängig von dem empfangen Befehl kann jede Zahl von 1 bis 4 der Operationen benötigt werden, um dem CISC-Befehl zu genügen.
  • Zum Beispiel erfordert eine add-Operation, die den Inhalt eines Registers mit dem Inhalt eines anderen Registers summiert, nur eine ALU-Nanobefehls-Operation. Alternativ würde ein Befehl, der die Addition des Inhalts eines Register mit einer Speicherstelle verlangt, eine Load-Operation, eine ALU-Operation und dann eine Store-Operation benötigen, was insgesamt drei Nanobefehls-Operationen ergibt. (Die Daten müssen aus dem Speicher gelesen, zu dem Register addiert und dann in den Speicher zurückgespeichert werden). Kompliziertere CISC-Befehle können alle vier Nanobefehle benötigen.
  • Der TYPE_GEN-Decoder 1402 umfasst drei TYPE-Decoder. Ein erster Decoder TYPE1 nimmt an, dass der Befehl einen 1-Byte Opcode hat, gefolgt von dem ModR/M-Byte, und berechnet den Typ basierend auf dieser Annahme. Ein zweiter Decoder TYPE2 nimmt an, dass der Befehl einen 2-Byte Opcode hat. Wobei das erste Byte das ESCAPE-Byte ist, gefolgt von dem zweiten Byte, das der Opcode ist, und dem dritten Byte, das das ModR/M-Byte ist. Ein dritter Decoder TYPEF nimmt an, dass der Befehl ein Gleitpunkt-Befehl ist, und decodiert den Befehl basierend auf dieser Annahme.
  • Der TYPE_GEN-DEcoder hat drei 4 Bit breite TYPE-Befehlsausgabebusse (TYPE1, TYPE2 und TYPEF). Jedes Bit entspricht einer der vier Nanobefehls-Operation in einem Kübel. Das spezifische TYPE-Feld spezifiziert, welche Nanobefehls-Operation nötig sind, um den CISC-Befehl auszuführen. Wenn z. B. alle 4 Bits logisch hoch sind, benötigt des CISC-Befehl eine Laod-Operation, eine Store-Operation und zwei ALU-Operationen.
  • Die restlichen Decoder in 14, die mit 1, 2 und F bezeichnete Abschnitte umfassen, nehmen einen 1-Byte Opcode, einen 2-Byte Opcode bzw. eine Gleitpunkt-Operation an. Die ungültigen Ergebnisse werden einfach nicht ausgewählt. Ein Multiplexer wählt den Ausgang des richtigen Decoders aus.
  • Die zwei ALU-Operationen (ALU0 und ALU1) haben je ein Opcode-Feld, das 11 Bits lang ist. Die 11 Bits umfassen die 8 Bits des Opcodes und drei Opcode-Erweiterungsbits von dem angrenzenden ModR/M-Byte. Für die meisten von der IDU verarbeiteten CISC-Befehle werden die Opcode-Bits direkt in die Nanobefehls-Operation kopiert. Einige CISC-Befehle können jedoch Substitution erfordern, hier filtert die IDU nicht einfach den CISC-Opcode an die Befehls-Ausführungseinheit (IEU). Dies wird für die Fachleute in der Technik ersichtlich sein, weil der Typ und die Zahl von Funktionseinheiten in der IEU diktieren wird, ob eine Opcode-Ersetzung in der IDU für spezifische CISC-Befehle erforderlich ist oder nicht.
  • Damit die IEU ALU-Operationen verarbeitet, muss sie Information dahin gehend empfangen, welche Funktionseinheit benötigt wird, um die spezifizierte ALU-Operation zu verarbeiten. Die IDU enthält daher einen Functional-Null-UNIT (F_0UNIT) DEcoder 1410, der Decoder F_0UNIT1, F_0UNIT2 unf F_0UNITF umfasst. Die Ausgänge der Decoder sind Mehrbit-Felder, die angeben, welche Funktionseinheit zum Verarbeiten der A0-ALU-Operation benötigt wird. Die Funktionseinheit zum Decodieren der A1-ALU-Operation ist identisch, wird aber von einem getrennten Decoder F_1UNIT 1412 gehandhabt.
  • Viele CISC-Befehle führen Operationen unter Verwendung von Registern aus, die durch den Opcode zu verstehen gegeben werden. Zum Beispiel können viele Befehle zu verstehen geben, dass das AX-Register als ein Akkumulator zu verwenden ist. Ein ConSTant GENerator (CST_GEN) Decoder 1414 ist daher eingeschlossen, um Register-Indizes basierend auf dem Opcode des CISC-Befehls zu erzeugen. Der CST_GEN-Decoder spezifiziert basierend auf dem spezifischen Opcode, welche Register inbegriffen sind. Das Multiplexen zum Erzeugen der richtigen Quellen- und Ziel-Registerindizes für die Nanobefehle wird unten in Verbindung mit 15 erörtert.
  • Ein zusätzliches 2-Bit Steuersignal TempCount (TC) wird in den CST_GEN-Decoder eingegeben. Das TC-Steuersignal ist ein 2-Bit Zähler, der vier Zwischenregister darstellt, die zur Verwendung als Dummy-Register durch die IEU zyklisch durchlaufen werden können. Die Zwischen- (Dummy) Register stellen zusätzlich zu den inbegriffenen Registern einen anderen Wert von Register dar, der durch den CST_GEN-Decoder übergeben werden kann. Der Konstant-Generator-Decoder übergibt vier konstante Felder, weil es 2 ALU-Operationen mit 2 Registern pro Operation gibt. Jeder Konstant-Register-Bus ist 20 Bits breit, wobei jede Konstante insgesamt 5 Bits sind, um dadurch die Auswahl von einem der 32 Register in der IEU zu erlauben.
  • Ein SELect GENerator (SEL_GEN) Decoder, allgemein bei Block 1416 gezeigt, wird nun erörtert. Der SEL_GEN-Decoder umfasst einen FlaG Need Modify (FG_NM) Decoder 1418. Der FG_NM-Decoder decodiert für einen 1-Byte Opcode, einen 2-Byte Opcode und einen Gleitpunkt-Befehl. Im i486 Befehlssatz gibt es z. B. insgesamt 6 Flags. Diese Flags müssen gültig sein, bevor die Ausführung einiger Befehle beginnt, wobei die Flags von einigen Befehlen modifiziert werden können. Der FG_NM-Decoder gibt zwei Signale pro Flag aus, ein Bit gibt an, ob das Flag zur Ausführung dieses Befehls benötigt wird, und das andere gibt an, ob dieser Befehl das Flag wirklich modifiziert oder nicht.
  • Register INValiDation Information betreffend die ALU0- und ALU1-Operationen wird durch einen INVD1- und einen INVD2-Decoder, gezeigt bei 1420 bzw. 1422, decodiert. Die Decoder INVD1 und INVD1 sind auch Teil des SEL_GEN-Decoders 1416. INVD1 und INVD2 erzeugen Steuersignale für die IEU. Diese Signale geben an, ob die ALU-Register benutzt werden sollen oder nicht. Drei mögliche Register-Indizes können durch jede ALU-Operation spezifiziert werden. Einer kann als ein Quellen- und/oder Zielregister verwendet werden, und die restlichen zwei sind auf das Spezifizieren von Quellenregistern beschränkt. Ein 4-Bit Feld wird benutzt, um zu spezifizieren, welches Register von der Operation benötigt wird.
  • Der SEL_GEN-Decoder 1416 umfasst weiter einen FLD_CNT-Decoder 1424, der angibt, welches der Registerfelder für den CISC-Befehl benötigt wird. Der FLD_CNT-Decoder spezifiziert, welches der zwei Felder das Quellenregister und welches das Zielregister ist.
  • Ein Nano-InstRuction GENerator (NIR_GEN) Decoder wird allgemein als Block 1426 gezeigt. Die Datengrößen- (DATA_SZ) und Adressgrößen- (ADDR_SZ) Eingangssteuersignale entsprechen dem Vorgabemodus, in dem das System arbeitet. Um die endgültige Adresse und Operandengröße zu decodieren, muss der Vorgabemodus bekannt sein, und die Anwesenheit irgendwelcher Präfixe (oben in Verbindung mit der IAU erörtert) muss bekannt sein. Das EMUL_MODE-Steuersignal wird auch in den NIR_GEN-Decoder eingegeben, aber es wird auch von den anderen Decodern verwendet.
  • Das ESCape DETect (ESD_DET) Eingangssteuersignal wird in den NIR_GEN-Decoder geführt, um anzugeben, ob der Befehl einen 2-Byte Opcode hat. Außerdem wird ein SELect OPcode EXTension (SEL_OP_EXT) Eingangssteuersignal verwendet, um das Laden der Mailboxen zu erzeugen, wenn ein Emulationsbefehl erfasst wird.
  • Ein Floating Point REGister (FP_REG) Eingangssteuersignal leitet den übersetzten Gleitpunkt-Registerindex an die IDU. Das Gleitpunktformat des i486 hat z. B. 8 Register für Gleitpunkzahlen, aber auf die Register wird wie ein Stack zugegriffen. Das Zugreifen auf diese Register wird mittels eines Stack-Zugriffsschemas durchgeführt: Register 0 ist das höchste Register des Stacks, Register 1 ist das zweithöchste Register usw. Dieser Register-Stack wird unter Verwendung von 8 linearen Registern mit festen Indizes ernuliert. Wenn der Eingangsbefehl Register 0 spezifiziert, übersetzt ein Übersetzungsblock (nicht gezeigt) den relativen Stackregisterindex in den Registerindex für die linearen Register in einer bekannten Weise. Dies erlaubt der IDU, zu verfolgen, welches Register sich oben auf dem Stack befindet.
  • Wenn das System in den Emulationsmodus verzweigt, bewahrt die IDU Information über den Befehl, der emuliert wird. Die IDU bewahrt die Datengröße (EM_DSIZE) und Adressgröße (EM_ASIZE) des Befehls sowie den Registerindex des DESTination (EM_RDEST), die Quelle (EM_RDEST2) und die Basis InDeX Information (EM_BSIDX). Diese bewahrte Information wird von der Mikrocode-Routine verwendet, um den Befehl richtig zu emulieren. Man nehme z. B. die Emulation eines add-Befehls. Die Mikrocode-Routine kann EM_ASIZE prüfen, um die Adressgröße des add-Befehls zu bestimmen, sodass sie weiß, welche Adressgröße zu emulieren ist.
  • Der NIR_GEN-Decoder 1426 enthält einen SIZE-Decoder 1428. Die durch den SIZE-Decoder (d. h. SIZE 1, SIZE 2 und SIZEF) erzeugten Felder geben die Adressgröße, Operandgröße und Sofortdatengröße des Befehls an. Eine Adressgröße von 16 oder 32 Bit, eine Operandgröße von 8, 16 oder 32 Bits und ein Sofortdatenfeldgröße von 18, 16 oder 32 Bits werden für jeden Befehl extrahiert.
  • Ein anderer NIR_GEN-Decoder wird ein LoaD INFormation (LD_INF) Decoder 1430 genannt. Der LD_INF-Decoder decodiert Information, die den Laod- und Store-Operationen entspricht. Die Load-Information wird für effektive Adressrechnung verwendet. Die Laod-Informationsfelder (LD_INF1, LD_INF2 und LD_INFF) können benutzt werden, um zu spezifizieren, welcher Adressierungsmodus durch den CISC-Befehle verwendet wird, da CISC-Befehlssätze gewöhnlich viele verschiedene Adressierungsmodi unterstützen.
  • Der i486 Grundadressierungsmodus enthält ein Segmentfeld und ein Offsetfeld, die zusammenaddiert werden, um die Adresse zu bestimmen. Ein Indexregister kann spezifiziert werden sowie eine Skala für das Indexregister (z. B., wenn die Indexregister Elemente in einem Feld sind). Die Elemente können als 1, 2, 4 oder 8 Bytes in der Länge spezifiziert werden, sodass das Indexregister mit 1, 2, 4 oder 8 skaliert werden kann, um die Adresse zu bestimmen. Die Basis und der Index werden auch durch die LD_INF-Felder spezifiziert.
  • Ein Nano-InstRuction OPCode (NIR_OPC) Decoder 1432 überträgt den Opcode für die A1-Operation (Paket 1). Die decodierten Felder (NIR_OPC1, NIR_OPC2 und NIR_OPCF) umfassen das erste Befehlsbayte (8 Bits) plus drei Erweiterungsbits von dem zweiten Byte.
  • Ein MIScellaneous OPCoder (MISC_OPC) Decoder 1434 gibt an, ob der Befehl ein Gleitpunktbefehl ist und ob ein Load-Befehl tatsächlich vorhanden ist. Das durch den MISC_OPC-Decoder erzeugte Feld wird angeben, ob eine Umwandlung der Gleitpunktdaten er forderlich ist. Multiplexen ist für diesen Decoder nicht nötig, da diese Information ungeachtet des Formats des Befehls leicht extrahiert wird.
  • Der Opcode für die A0-Operation von Paket 0 wird durch einen OP_CODE-Decoder 1436 spezifiziert. Der A0-Opcode wird gewöhnlich direkt aus dem i486 Eingangs-Opcode kopiert, aber für einige Befehle wird der Opcode durch einen alternativen Opcode ersetzt. (Wie oben erwähnt, ist die Funktionalität der durch den NIR_GEN-Decoder erzeugten Signale spezifisch für den CISC-Befehlssatz, der decodiert wird, und sollte daher den Fachleuten bei Durchsicht des CISC-Befehlssatzes und des Nanobefehlsformats der vorliegenden Erfindung ersichtlich sein.)
  • Ein EXT_CODE-Decoder 1440 extrahiert die 3-Bit Opcodeerweiterung aus dem ModR/M-Byte.
  • Ein ORDER-Decoder 1442 decodiert den Befehl, um festzustellen, ob der Befehl "in Reihenfolge" ausgeführt werdem muss. Dies befiehlt der IEU, mit diesem Befehl erst etwas zu tun, wenn alle vorherigen Befehle ausgeführt wurden. Sobald die Ausführung des Befehls vollendet ist, wird die Ausführung von nachfolgenden Befehlen begonnen.
  • Ein Control Flow Jump Size Decoder 1444 gibt die Versetzungsgröße für Sprünge an, die eine Adresse spezifizieren. Dieses Feld, bezeichnet CF_JV_SIZE, spezifiziert die Größe der Adresse für den Sprung. Dies ist spezifisch für den Typ des von dem CISC-Befehlssatz eingesetzten Adressierungsschemas.
  • Ein 1-Bit Decoder, bezeichnet DEC_MDEST 1446, gibt an, ob das Ziel des Befehls eine Speicheradresse ist oder nicht.
  • Schließlich enthält der Befehlsdecoder drei Registercode-Decoder 1438, um die Registercodes (Indizes) auszuwählen. Das i486 Befehlsformat codiert den Index der Registerfelder an verschiedenen Stellen in dem Befehl. Die Indizes dieser Felder werden durch den RC-Decoder extrahiert. Das ModR/M-Byte hat ebenfalls zwei Registerindizes, die als Ziel/Quelel benutzt werden, wie in den Opcode selbst spezifiziert. Der Registercode-Decoder 1438 erzeugt drei RC-Felder RC1, RC2 und RC3. RC1 und RC2 werden aus dem ModR/M-Byte wie folgt extrahiert. Wenn der Prozessor nicht im Emulationsmodus ist und dieser Befehl kein Gleitpunktbefehl ist: RC1 = Bits [2:0] des ModR/M-Bytes; RC2 = Bits [5:3] des ModR/M-Bytes und RC3 = Bits [2:0] des Opcodes. Für Gleitpunktbefehle im Grundmodus (keine Emulation) werden RC1, RC2 und RC3 wie folgt zugewiesen:
    RC1: ST(0) = Spitze des Stacks;
    RC2: ST(1) = zweites Element auf Stack = nächst der Spitze des Stacks, und
    RC3: ST(i) = das i-te Element aus dem Stack, wo i im Opcode spezifiziert wird.
  • Im Emulationsmodus werden RC1, RC2 und RC3 wie folgt zugewiesen:
    RC1: Bits [4:0] von Byte 3;
    RC2: Bits [1:0] von Byte 2 und Bits [5:7] von Byte 3, und
    RC3: Bits [6:1] von Byte 2.
  • 15 zeigt ein repräsentatives Blockschaltbild und Logikgatter-Diagramm für die Decoder CST_GEN, NIR_GEN und SEL_GEN (1414, 1438 bzw. 1424). Man sollte verstehen, dass 15 ein Beispiel ist, wie 1-Byte Opcode, 2-Byte Opcode und Gleitpunkt decodierte Ergebnisse ausgewählt, verzögert und kombiniert werden, um Quellen- und Ziel-Registerindizes für Nanobefehls-Operationen A0 und A1 und den Zielregisterindex für den Load-Befehl zu erzeugen. Die Methodologie des Auswählens, Verzögerns und Multiplexens gilt für alle von dem Befehlsdecoder 1202 erzeugten Signale mit Ausnahme derjenigen Signale, die keine getrennten 1-Byte Opcode-, 2-Byte Opcode- und Gleitpunkt-Ergebnisse erzeugen. Ferner sind die durch dieses Beispiel erzeugten Ergebnisse anwendungsspezifisch, d. h. sie gelten für die Decodierung von i486 Befehlen in das Nanobefehlsformat der vorliegenden Erfindung. Die in diesen Beispielen erörterten Prinzipien sind jedoch grundsätzlich auf jeden CISC-in-RISC-Befehlsabgleich und Decodierung anwendbar.
  • Wie oben erörtert, erzeugt der CST_GEN-Decoder 1414 drei Ausgänge, CST1, CST2 und CSTF, von denen jeder vier 5-Bit Konstanten-Registerfelder (20 Bits total) umfasst. Der SEL_GEN erzeugt Registerfeld-Steuersignale FLD1, FLD2 und FLD3 für das Auswählen der Multiplexer in einem werteren Abschnitt MUX 1512. Die Auswahl der CST1-, CST2- oder CSTF-Ergebnisse und der FLD1-, FLD2- und FLDF-Ergebnisse wird allgemein im Multiplexerblock 1502 gezeigt. Eine 3-Bit MUX-Auswählleitung 1504 wird benutzt, um die Ergebnisse abhängig davon auszuwählen, ob der Befehl einen 1-Byte Opcode, einen 2-Byte Opcode hat oder ein Gleitpunktbefehl ist.
  • Ein Omega-Zyklus-Pipeline-Verzögerungs-Latch 1504 wird benutzt, um die durch den Multiplexer 1502 ausgewählten Ergebnisse und die drei Registersteuertelder RC1, RC2 und RC3 zu verzögern. Jeder Eingang zu der Omega-Pipeline-Verzögerung 1504 wird an ein Paar von entgegengesetzt getakteten Latches 1508 gesendet. Die Inhalte der Latches werden durch einen Multiplexer 1510 ausgewählt. Diese Anordnung ist ähnlich der oben in Verbindung mit der IAU erörterten Omega-Zyklus-Verzögerung 316.
  • Eine wertere Multiplexerstufe wird in Block 1512 gezeigt. Die durch den Multiplexer 1502 ausgewählten Konstanten-Registerfelder werden in den Multiplexer 1512 als vier getrennte Felder regc1 bis regc4 eingegeben, wie allgemein bei 1514 gezeigt. Auch als Eingänge des Blocks 1512 gezeigt sind die Extrakt-Register-Felder RC1, RC2 und RC3 von den Opcode- und den ModR/M-Bytes. Die regc-Felder und RC-Felder werden durch Logik im Block 1512 unter Steuerung eines FLD-Steuersignals 1520 kombiniert, um die Quellen- und Ziel-Registerindizes a0_rd und a0_rs für die Operation A0, die allgemein bei 1516 gezeigt werden, sowie die Quellen- und Ziel-Registerindizes a1_rd und a1_rs für die Operation A1, die allgemein bei 1518 gezeigt werden, zu erzeugen. Ein Index 1d_rd, der der Zielregisterindex für den Laod-Befehl ist, wird auch im Block 1512 ausgewählt.
  • 4.0 FIFO für decodierte Befehle
  • 16A zeigt ein Blockdiagramm eines Decodier-FIFO (DFIFO) in Verbindung mit der vorliegenden Erfindung. Der DFIFO halt vier vollständige Kübel, von denen jeder vier Nanobefehle, zwei Sofortdatenfelder und ein Versetzungsfeld enthält. Jeder Kübel entspricht einer Stufe des Pipeline-Registers im DFIFO. Diese Kübel werden in der IDU erzeugt und während jedes Zyklusses, in dem die IEU einen neuen Kübel anfordert, in den DFIFO geschoben. Die Nanobefehle in einem Kübel werden in zwei Gruppen, genannt Paket0 und Paket1, geteilt. Paket0 besteht aus einer Load-, ALU- und/oder Store-Operation, die ein, zwei oder drei Nanobefehlen entsprechen. Paket1 kann nur eine ALU-Operation sein, die einem Nanobefehl entspricht. Als Folge dieser Teilung kann ein Kübel nur zwei ALU-Operationen enthalten, und nur eine von ihnen kann auf den Speicher verweisen. Wenn nachfolgende Befehle Speicher operanden benötigen, müssen sie in getrennte Kübel gelegt werden.
  • Wie aus 16B zu sehen ist, gibt es nur eine leidliche Menge an allgemeiner Information, die mit jedem Paket und mit dem Kübel als Ganzes verbunden ist. Diese Information wird in einem Allgemein-Informations-FIFO gespeichert. Durch Vorgabe werden die vier Nonobefehle in einem Kübel in der Reihenfolge von NIR0 bis NIR3 ausgeführt. Eines der Allgemein-Informationsbits des Kübles kann gesetzt werden, um anzugeben, dass NIR3 vor NIR0-NIR2 ausgeführt werden soll. Dieses Merkmal macht es viel leichter, nachfolgende Pakete in einen einzigen Kübel zu kombinieren, weil ihre Reihenfolge ihre Fähigkeit, die Kübelanforderungen zu erfüllen, nicht länger beeinflusst.
  • 16C zeigt ein Sofortdaten- und Versetzungs-FIFO für die Kübel 0–4. IMM0 stellt die Sofortdaten dar, die Paket0 entsprechen, und IMM1 stellt die Softdaten dar, die Paket1 entsprechen. DISP stellt die Versetzung dar, die Paket0 entspricht. Paket1 benutzt keine DISP-Information, weil die DISP-Felder nur als ein Teil der Adressrechnung verwendet werden.
  • 17 zeigt ein spezifisches Beispiel der oben beschriebenen drei Arten von Nanobefehlen. Die Feldbeschreibungen und Definitionen werden auch in Anlage A, Seiten 1–10, beschrieben. Diese Tabellen liefern detaillierte Informationen über den Inhalt jedes Kübels.
  • Während verschiedene Ausführungen der vorliegenden Erfindung oben beschrieben wurden, sollte verstanden werden, dass sie als Beispiel und nicht als Einschränkung präsentiert wurden. Die Breite und der Umfang der vorliegenden Erfindung sollen daher nicht durch eine der oben beschriebenen exemplarischen Ausführung begrenzt werden, sondern sollen nur entsprechend den folgenden Ansprüchen und ihren Gleichwertigkeiten definiert werden.

Claims (6)

  1. Superskalarer Mikroprozessor, der umfasst: eine Einrichtung (200), die auszuführende CISC-Befehle abruft, wobei wenigstens einer der CISC-Befehle einen Register-Verweis enthält: eine Einrichtung (1202), die die CISC-Befehle zu RISC-Befehlen mit einer vorgegebenen Sequenz dekodiert; und eine Ausführeinrichtung, die wenigstens zwei RISC-Befehle gleichzeitig und außerhalb der vorgegebenen Sequenz ausführt, wobei erste und zweite CISC-Befehle durch die Dekodiereinrichtung zu einem oder mehreren ersten RISC-Befehlen bzw. einem oder mehreren zweiten RISC-Befehlen pro Taktzyklus dekodiert werden, gekennzeichnet durch eine Einrichtung, die Daten in einer Vielzahl von Registern speichert, die durch Register-Verweise identifiziert werden können, wobei die Vielzahl von Registern ein vorgegebenes Register und ein temporäres Register enthält; wobei die Ausführeinrichtung eine Einrichtung enthält, die das temporäre Register auswählt, und die Ausführung des Befehls den Register-Verweis zum Auswählen des vorgegebenen Registers für die Speicherung von Daten erzeugt, und die Ausführeinrichtung ein erstes sowie ein zweites Register umfasst, die jeweils RISC-Befehlsspeicherstellen umfassen, und die ersten RISC-Befehle sowie die zweiten RISC-Befehle in dem ersten Register gespeichert werden.
  2. Superskalarer Mikroprozessor nach Anspruch 1, wobei das erste und das zweite Register jeweils vier RISC-Befehlsspeicherstellen umfassen.
  3. Superskalarer Mikroprozessor nach Anspruch 1 oder 2, wobei der Mikroprozessor umfasst: eine Abrufschaltung (200), die eine Vielzahl von CISC-Befehlen aus einem Befehlsspeicher abruft, wobei die Vielzahl von CISC-Befehlen in Programmreihenfolge sind.
  4. Superskalarer Mikroprozessor nach einem der Ansprüche 1 bis 3, der eine Abfertigungsschaltung zum gleichzeitigen Abfertigen mehr als eines der Vielzahl durch den Dekodierer dekodierter RISC-Befehle umfasst.
  5. Superskalarer Mikroprozessor nach einem der Ansprüche 1 bis 4, der umfasst: eine Ausführeinheit, die umfasst: eine Vielzahl funktioneller Einheiten, wobei jede der Vielzahl funktioneller Einheiten einen der Vielzahl durch die Abfertigungsschaltung abgefertigter RISC-Befehle außerhalb der vorgegebenen Sequenz ausführt; und eine Register-Datei, die Daten von der Vielzahl funktioneller Einheiten in einer Vielzahl von Registern speichert, und wobei die Register-Datei mit der Vielzahl funktioneller Einheiten über eine Vielzahl von Datenleitwegen kommuniziert, um gleichzeitig Daten mehr als einer der funktionellen Einheiten zur Verfügung zu stellen und somit gleichzeitige Ausführung mehr als eines der Vielzahl von Befehlen durch die Vielzahl funktioneller Einheiten zu ermöglichen.
  6. Verarbeitungsverfahren, das die folgenden Schritte beinhaltet: Abrufen auszuführender CISC-Befehle, wobei wenigstens einer der CISC-Befehle einen Register-Verweis enthält; Dekodieren der CISC-Befehle zu RISC-Befehlen mit einer vorgegebenen Sequenz; und gleichzeitiges Ausführen wenigstens zwei der RISC-Befehle außerhalb der vorgegebenen Sequenz; und Dekodieren erster und zweiter CISC-Befehle zu einem oder mehreren ersten RISC-Befehlen und einem oder mehreren zweiten RISC-Befehlen pro Taktzyklus, Speichern von Daten in einer Vielzahl von Registern, die durch Register-Verweise identifiziert werden können, wobei die Vielzahl von Registern ein vorgegebenes Register und ein temporäres Register enthält; und Auswählen des temporären Registers, wobei die Ausführung des Befehls den Register-Verweis zum Auswählen des vorgegebenen Registers für die Speicherung von Daten erzeugt, Speichern des ersten RISC-Befehls und des zweiten RISC-Befehls in einem ersten Register, das in einer Ausführeinrichtung enthalten ist, die ein erstes und ein zweites Register umfasst, die jeweils RISC-Befehlsspeicherstellen umfassen.
DE69333630T 1992-03-31 1993-03-30 System und Verfahren zur Übersetzung eines fremden Befehlsstroms zur Ausführung in einem Gastgeberprozessor Expired - Lifetime DE69333630T2 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US07/857,599 US5438668A (en) 1992-03-31 1992-03-31 System and method for extraction, alignment and decoding of CISC instructions into a nano-instruction bucket for execution by a RISC computer
US857599 1992-03-31

Publications (2)

Publication Number Publication Date
DE69333630D1 DE69333630D1 (de) 2004-10-21
DE69333630T2 true DE69333630T2 (de) 2005-09-22

Family

ID=25326342

Family Applications (2)

Application Number Title Priority Date Filing Date
DE69333630T Expired - Lifetime DE69333630T2 (de) 1992-03-31 1993-03-30 System und Verfahren zur Übersetzung eines fremden Befehlsstroms zur Ausführung in einem Gastgeberprozessor
DE69329644T Expired - Lifetime DE69329644T2 (de) 1992-03-31 1993-03-30 Übersetzungsausrichtung und decodierung von befehlen von cisc zu risc.

Family Applications After (1)

Application Number Title Priority Date Filing Date
DE69329644T Expired - Lifetime DE69329644T2 (de) 1992-03-31 1993-03-30 Übersetzungsausrichtung und decodierung von befehlen von cisc zu risc.

Country Status (6)

Country Link
US (8) US5438668A (de)
EP (2) EP1028370B1 (de)
JP (3) JP3547052B2 (de)
KR (2) KR100371929B1 (de)
DE (2) DE69333630T2 (de)
WO (1) WO1993020507A2 (de)

Families Citing this family (243)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5768575A (en) * 1989-02-24 1998-06-16 Advanced Micro Devices, Inc. Semi-Autonomous RISC pipelines for overlapped execution of RISC-like instructions within the multiple superscalar execution units of a processor having distributed pipeline control for sepculative and out-of-order execution of complex instructions
US5781753A (en) 1989-02-24 1998-07-14 Advanced Micro Devices, Inc. Semi-autonomous RISC pipelines for overlapped execution of RISC-like instructions within the multiple superscalar execution units of a processor having distributed pipeline control for speculative and out-of-order execution of complex instructions
US5226126A (en) * 1989-02-24 1993-07-06 Nexgen Microsystems Processor having plurality of functional units for orderly retiring outstanding operations based upon its associated tags
US5438668A (en) 1992-03-31 1995-08-01 Seiko Epson Corporation System and method for extraction, alignment and decoding of CISC instructions into a nano-instruction bucket for execution by a RISC computer
US5628021A (en) * 1992-12-31 1997-05-06 Seiko Epson Corporation System and method for assigning tags to control instruction processing in a superscalar processor
US5463748A (en) * 1993-06-30 1995-10-31 Intel Corporation Instruction buffer for aligning instruction sets using boundary detection
JP3248992B2 (ja) * 1993-07-13 2002-01-21 富士通株式会社 マルチプロセッサ
DE69434669T2 (de) * 1993-10-29 2006-10-12 Advanced Micro Devices, Inc., Sunnyvale Spekulative Befehlswarteschlange für Befehle mit variabler Byteslänge
US5630082A (en) * 1993-10-29 1997-05-13 Advanced Micro Devices, Inc. Apparatus and method for instruction queue scanning
EP0651320B1 (de) * 1993-10-29 2001-05-23 Advanced Micro Devices, Inc. Superskalarbefehlsdekoder
EP0651321B1 (de) * 1993-10-29 2001-11-14 Advanced Micro Devices, Inc. Superskalarmikroprozessoren
US5903772A (en) * 1993-10-29 1999-05-11 Advanced Micro Devices, Inc. Plural operand buses of intermediate widths coupling to narrower width integer and wider width floating point superscalar processing core
US5689672A (en) * 1993-10-29 1997-11-18 Advanced Micro Devices, Inc. Pre-decoded instruction cache and method therefor particularly suitable for variable byte-length instructions
JPH07239780A (ja) * 1994-01-06 1995-09-12 Motohiro Kurisu 1クロック可変長命令実行処理型命令読み込み電子計 算機
US5884057A (en) * 1994-01-11 1999-03-16 Exponential Technology, Inc. Temporal re-alignment of a floating point pipeline to an integer pipeline for emulation of a load-operate architecture on a load/store processor
US5600806A (en) * 1994-03-01 1997-02-04 Intel Corporation Method and apparatus for aligning an instruction boundary in variable length macroinstructions with an instruction buffer
JP3212213B2 (ja) * 1994-03-16 2001-09-25 株式会社日立製作所 データ処理装置
US5574927A (en) * 1994-03-25 1996-11-12 International Meta Systems, Inc. RISC architecture computer configured for emulation of the instruction set of a target computer
DE69423206T2 (de) * 1994-04-28 2000-09-07 Hewlett Packard Co Rechnervorrichtung mit Mitteln zum Erzwingen der Ausführung von Befehlen in regelmässiger Folge
US5559975A (en) 1994-06-01 1996-09-24 Advanced Micro Devices, Inc. Program counter update mechanism
JP2982618B2 (ja) * 1994-06-28 1999-11-29 日本電気株式会社 メモリ選択回路
US5598546A (en) * 1994-08-31 1997-01-28 Exponential Technology, Inc. Dual-architecture super-scalar pipeline
US5619663A (en) * 1994-09-16 1997-04-08 Philips Electronics North America Corp. Computer instruction prefetch system
US6496922B1 (en) * 1994-10-31 2002-12-17 Sun Microsystems, Inc. Method and apparatus for multiplatform stateless instruction set architecture (ISA) using ISA tags on-the-fly instruction translation
US5640526A (en) * 1994-12-21 1997-06-17 International Business Machines Corporation Superscaler instruction pipeline having boundary indentification logic for variable length instructions
US5832249A (en) * 1995-01-25 1998-11-03 Advanced Micro Devices, Inc. High performance superscalar alignment unit
US6006324A (en) 1995-01-25 1999-12-21 Advanced Micro Devices, Inc. High performance superscalar alignment unit
US5737550A (en) * 1995-03-28 1998-04-07 Advanced Micro Devices, Inc. Cache memory to processor bus interface and method thereof
US5751982A (en) * 1995-03-31 1998-05-12 Apple Computer, Inc. Software emulation system with dynamic translation of emulated instructions for increased processing speed
US5758114A (en) * 1995-04-12 1998-05-26 Advanced Micro Devices, Inc. High speed instruction alignment unit for aligning variable byte-length instructions according to predecode information in a superscalar microprocessor
US5991869A (en) * 1995-04-12 1999-11-23 Advanced Micro Devices, Inc. Superscalar microprocessor including a high speed instruction alignment unit
US5822558A (en) * 1995-04-12 1998-10-13 Advanced Micro Devices, Inc. Method and apparatus for predecoding variable byte-length instructions within a superscalar microprocessor
US5815736A (en) * 1995-05-26 1998-09-29 National Semiconductor Corporation Area and time efficient extraction circuit
US6237074B1 (en) * 1995-05-26 2001-05-22 National Semiconductor Corp. Tagged prefetch and instruction decoder for variable length instruction set and method of operation
US5768574A (en) * 1995-06-07 1998-06-16 Advanced Micro Devices, Inc. Microprocessor using an instruction field to expand the condition flags and a computer system employing the microprocessor
US5680578A (en) * 1995-06-07 1997-10-21 Advanced Micro Devices, Inc. Microprocessor using an instruction field to specify expanded functionality and a computer system employing same
JP3451595B2 (ja) * 1995-06-07 2003-09-29 インターナショナル・ビジネス・マシーンズ・コーポレーション 二つの別個の命令セット・アーキテクチャへの拡張をサポートすることができるアーキテクチャ・モード制御を備えたマイクロプロセッサ
US5822778A (en) * 1995-06-07 1998-10-13 Advanced Micro Devices, Inc. Microprocessor and method of using a segment override prefix instruction field to expand the register file
US5875315A (en) * 1995-06-07 1999-02-23 Advanced Micro Devices, Inc. Parallel and scalable instruction scanning unit
US5867701A (en) * 1995-06-12 1999-02-02 Intel Corporation System for inserting a supplemental micro-operation flow into a macroinstruction-generated micro-operation flow
WO1997005546A1 (en) * 1995-08-01 1997-02-13 Bull Hn Information Systems Inc. Method for emulating program instructions
US5678032A (en) * 1995-09-06 1997-10-14 Bull Hn Information Systems Inc. Method of optimizing the execution of program instuctions by an emulator using a plurality of execution units
US5781789A (en) * 1995-08-31 1998-07-14 Advanced Micro Devices, Inc. Superscaler microprocessor employing a parallel mask decoder
US5926642A (en) 1995-10-06 1999-07-20 Advanced Micro Devices, Inc. RISC86 instruction set
US5819056A (en) * 1995-10-06 1998-10-06 Advanced Micro Devices, Inc. Instruction buffer organization method and system
US5809273A (en) * 1996-01-26 1998-09-15 Advanced Micro Devices, Inc. Instruction predecode and multiple instruction decode
US5794063A (en) * 1996-01-26 1998-08-11 Advanced Micro Devices, Inc. Instruction decoder including emulation using indirect specifiers
WO1997013192A1 (en) * 1995-10-06 1997-04-10 Advanced Micro Devices, Inc. Instruction predecode and multiple instruction decode
US6093213A (en) * 1995-10-06 2000-07-25 Advanced Micro Devices, Inc. Flexible implementation of a system management mode (SMM) in a processor
US5920713A (en) * 1995-10-06 1999-07-06 Advanced Micro Devices, Inc. Instruction decoder including two-way emulation code branching
US5872947A (en) * 1995-10-24 1999-02-16 Advanced Micro Devices, Inc. Instruction classification circuit configured to classify instructions into a plurality of instruction types prior to decoding said instructions
US5768553A (en) * 1995-10-30 1998-06-16 Advanced Micro Devices, Inc. Microprocessor using an instruction field to define DSP instructions
US5796974A (en) * 1995-11-07 1998-08-18 Advanced Micro Devices, Inc. Microcode patching apparatus and method
US5790825A (en) * 1995-11-08 1998-08-04 Apple Computer, Inc. Method for emulating guest instructions on a host computer through dynamic recompilation of host instructions
US5809272A (en) * 1995-11-29 1998-09-15 Exponential Technology Inc. Early instruction-length pre-decode of variable-length instructions in a superscalar processor
US5740392A (en) * 1995-12-27 1998-04-14 Intel Corporation Method and apparatus for fast decoding of 00H and OFH mapped instructions
US5778246A (en) * 1995-12-27 1998-07-07 Intel Corporation Method and apparatus for efficient propagation of attribute bits in an instruction decode pipeline
US5710914A (en) * 1995-12-29 1998-01-20 Atmel Corporation Digital signal processing method and system implementing pipelined read and write operations
US5819080A (en) * 1996-01-02 1998-10-06 Advanced Micro Devices, Inc. Microprocessor using an instruction field to specify condition flags for use with branch instructions and a computer system employing the microprocessor
US5826089A (en) * 1996-01-04 1998-10-20 Advanced Micro Devices, Inc. Instruction translation unit configured to translate from a first instruction set to a second instruction set
WO1997027537A2 (en) * 1996-01-24 1997-07-31 Sun Microsystems, Inc. A processor for executing instruction sets received from a network or from a local memory
WO1997027539A1 (en) * 1996-01-24 1997-07-31 Sun Microsystems, Inc. Methods and apparatuses for stack caching
US6105124A (en) * 1996-01-26 2000-08-15 Intel Corporation Method and apparatus for merging binary translated basic blocks of instructions
US5790821A (en) * 1996-03-08 1998-08-04 Advanced Micro Devices, Inc. Control bit vector storage for storing control vectors corresponding to instruction operations in a microprocessor
US5867681A (en) * 1996-05-23 1999-02-02 Lsi Logic Corporation Microprocessor having register dependent immediate decompression
US5822560A (en) * 1996-05-23 1998-10-13 Advanced Micro Devices, Inc. Apparatus for efficient instruction execution via variable issue and variable control vectors per issue
US5896519A (en) * 1996-06-10 1999-04-20 Lsi Logic Corporation Apparatus for detecting instructions from a variable-length compressed instruction set having extended and non-extended instructions
US5905893A (en) * 1996-06-10 1999-05-18 Lsi Logic Corporation Microprocessor adapted for executing both a non-compressed fixed length instruction set and a compressed variable length instruction set
WO1998002798A1 (en) * 1996-07-16 1998-01-22 Advanced Micro Devices, Inc. A superscalar microprocesser including a high speed instruction alignment unit
US5958061A (en) * 1996-07-24 1999-09-28 Transmeta Corporation Host microprocessor with apparatus for temporarily holding target processor state
US5867680A (en) * 1996-07-24 1999-02-02 Advanced Micro Devices, Inc. Microprocessor configured to simultaneously dispatch microcode and directly-decoded instructions
US6049863A (en) * 1996-07-24 2000-04-11 Advanced Micro Devices, Inc. Predecoding technique for indicating locations of opcode bytes in variable byte-length instructions within a superscalar microprocessor
US6199152B1 (en) 1996-08-22 2001-03-06 Transmeta Corporation Translated memory protection apparatus for an advanced microprocessor
US5926832A (en) * 1996-09-26 1999-07-20 Transmeta Corporation Method and apparatus for aliasing memory data in an advanced microprocessor
US5890009A (en) * 1996-12-12 1999-03-30 International Business Machines Corporation VLIW architecture and method for expanding a parcel
US5870576A (en) * 1996-12-16 1999-02-09 Hewlett-Packard Company Method and apparatus for storing and expanding variable-length program instructions upon detection of a miss condition within an instruction cache containing pointers to compressed instructions for wide instruction word processor architectures
US5918031A (en) * 1996-12-18 1999-06-29 Intel Corporation Computer utilizing special micro-operations for encoding of multiple variant code flows
US5923862A (en) * 1997-01-28 1999-07-13 Samsung Electronics Co., Ltd. Processor that decodes a multi-cycle instruction into single-cycle micro-instructions and schedules execution of the micro-instructions
US5909567A (en) * 1997-02-28 1999-06-01 Advanced Micro Devices, Inc. Apparatus and method for native mode processing in a RISC-based CISC processor
US5852727A (en) * 1997-03-10 1998-12-22 Advanced Micro Devices, Inc. Instruction scanning unit for locating instructions via parallel scanning of start and end byte information
US6047368A (en) * 1997-03-31 2000-04-04 Sun Microsystems, Inc. Processor architecture including grouping circuit
US5875336A (en) * 1997-03-31 1999-02-23 International Business Machines Corporation Method and system for translating a non-native bytecode to a set of codes native to a processor within a computer system
US5940602A (en) * 1997-06-11 1999-08-17 Advanced Micro Devices, Inc. Method and apparatus for predecoding variable byte length instructions for scanning of a number of RISC operations
US6009511A (en) * 1997-06-11 1999-12-28 Advanced Micro Devices, Inc. Apparatus and method for tagging floating point operands and results for rapid detection of special floating point numbers
US5933626A (en) * 1997-06-12 1999-08-03 Advanced Micro Devices, Inc. Apparatus and method for tracing microprocessor instructions
US5930491A (en) * 1997-06-18 1999-07-27 International Business Machines Corporation Identification of related instructions resulting from external to internal translation by use of common ID field for each group
US5978901A (en) * 1997-08-21 1999-11-02 Advanced Micro Devices, Inc. Floating point and multimedia unit with data type reclassification capability
US6230259B1 (en) 1997-10-31 2001-05-08 Advanced Micro Devices, Inc. Transparent extended state save
US6438679B1 (en) 1997-11-03 2002-08-20 Brecis Communications Multiple ISA support by a processor using primitive operations
US6067601A (en) * 1997-11-03 2000-05-23 Brecis Communications Cache memory based instruction execution
US5940626A (en) * 1997-11-03 1999-08-17 Teragen Corporation Processor having an instruction set architecture implemented with hierarchically organized primitive operations
US6216218B1 (en) 1997-11-03 2001-04-10 Donald L. Sollars Processor having a datapath and control logic constituted with basis execution blocks
US5923894A (en) * 1997-11-03 1999-07-13 Teragen Corporation Adaptable input/output pin control
US6178482B1 (en) 1997-11-03 2001-01-23 Brecis Communications Virtual register sets
US6016539A (en) * 1997-11-03 2000-01-18 Teragen Corporation Datapath control logic for processors having instruction set architectures implemented with hierarchically organized primitive operations
US6157996A (en) * 1997-11-13 2000-12-05 Advanced Micro Devices, Inc. Processor programably configurable to execute enhanced variable byte length instructions including predicated execution, three operand addressing, and increased register space
US6021484A (en) * 1997-11-14 2000-02-01 Samsung Electronics Co., Ltd. Dual instruction set architecture
US6167506A (en) * 1997-11-17 2000-12-26 Advanced Micro Devices, Inc. Replacing displacement in control transfer instruction with encoding indicative of target address, including offset and target cache line location
US6134649A (en) * 1997-11-17 2000-10-17 Advanced Micro Devices, Inc. Control transfer indication in predecode which identifies control transfer instruction and an alternate feature of an instruction
US6134650A (en) * 1997-12-12 2000-10-17 Advanced Micro Devices, Inc. Apparatus and method for predicting a first scanned instruction as microcode instruction prior to scanning predecode data
US6061775A (en) * 1997-12-12 2000-05-09 Advanced Micro Devices, Inc. Apparatus and method for predicting a first microcode instruction of a cache line and using predecode instruction data to identify instruction boundaries and types
US6039765A (en) * 1997-12-15 2000-03-21 Motorola, Inc. Computer instruction which generates multiple results of different data types to improve software emulation
US6012138A (en) * 1997-12-19 2000-01-04 Lsi Logic Corporation Dynamically variable length CPU pipeline for efficiently executing two instruction sets
US6044460A (en) * 1998-01-16 2000-03-28 Lsi Logic Corporation System and method for PC-relative address generation in a microprocessor with a pipeline architecture
US5881260A (en) * 1998-02-09 1999-03-09 Hewlett-Packard Company Method and apparatus for sequencing and decoding variable length instructions with an instruction boundary marker within each instruction
ATE297567T1 (de) * 1998-03-18 2005-06-15 Qualcomm Inc Digitaler signalprozessor zur reduzierung des zugriffswettbewerbs
US6425070B1 (en) * 1998-03-18 2002-07-23 Qualcomm, Inc. Variable length instruction decoder
US6014735A (en) * 1998-03-31 2000-01-11 Intel Corporation Instruction set extension using prefixes
US6061786A (en) * 1998-04-23 2000-05-09 Advanced Micro Devices, Inc. Processor configured to select a next fetch address by partially decoding a byte of a control transfer instruction
US6141745A (en) * 1998-04-30 2000-10-31 Advanced Micro Devices, Inc. Functional bit identifying a prefix byte via a particular state regardless of type of instruction
US6175908B1 (en) 1998-04-30 2001-01-16 Advanced Micro Devices, Inc. Variable byte-length instructions using state of function bit of second byte of plurality of instructions bytes as indicative of whether first byte is a prefix byte
US6253309B1 (en) 1998-09-21 2001-06-26 Advanced Micro Devices, Inc. Forcing regularity into a CISC instruction set by padding instructions
US6275927B2 (en) * 1998-09-21 2001-08-14 Advanced Micro Devices. Compressing variable-length instruction prefix bytes
US6460116B1 (en) 1998-09-21 2002-10-01 Advanced Micro Devices, Inc. Using separate caches for variable and generated fixed-length instructions
US6240506B1 (en) 1998-10-02 2001-05-29 Advanced Micro Devices, Inc. Expanding instructions with variable-length operands to a fixed length
US6339822B1 (en) 1998-10-02 2002-01-15 Advanced Micro Devices, Inc. Using padded instructions in a block-oriented cache
US6260134B1 (en) * 1998-11-02 2001-07-10 Advanced Micro Devices, Inc. Fixed shift amount variable length instruction stream pre-decoding for start byte determination based on prefix indicating length vector presuming potential start byte
US20050149694A1 (en) * 1998-12-08 2005-07-07 Mukesh Patel Java hardware accelerator using microcode engine
US7225436B1 (en) 1998-12-08 2007-05-29 Nazomi Communications Inc. Java hardware accelerator using microcode engine
US6332215B1 (en) * 1998-12-08 2001-12-18 Nazomi Communications, Inc. Java virtual machine hardware for RISC and CISC processors
US6826749B2 (en) 1998-12-08 2004-11-30 Nazomi Communications, Inc. Java hardware accelerator using thread manager
US8127121B2 (en) * 1999-01-28 2012-02-28 Ati Technologies Ulc Apparatus for executing programs for a first computer architechture on a computer of a second architechture
US6954923B1 (en) 1999-01-28 2005-10-11 Ati International Srl Recording classification of instructions executed by a computer
US8065504B2 (en) * 1999-01-28 2011-11-22 Ati International Srl Using on-chip and off-chip look-up tables indexed by instruction address to control instruction execution in a processor
US6978462B1 (en) 1999-01-28 2005-12-20 Ati International Srl Profiling execution of a sequence of events occuring during a profiled execution interval that matches time-independent selection criteria of events to be profiled
US7111290B1 (en) 1999-01-28 2006-09-19 Ati International Srl Profiling program execution to identify frequently-executed portions and to assist binary translation
US6826748B1 (en) 1999-01-28 2004-11-30 Ati International Srl Profiling program execution into registers of a computer
US7065633B1 (en) 1999-01-28 2006-06-20 Ati International Srl System for delivering exception raised in first architecture to operating system coded in second architecture in dual architecture CPU
US7941647B2 (en) 1999-01-28 2011-05-10 Ati Technologies Ulc Computer for executing two instruction sets and adds a macroinstruction end marker for performing iterations after loop termination
US7013456B1 (en) 1999-01-28 2006-03-14 Ati International Srl Profiling execution of computer programs
US7275246B1 (en) 1999-01-28 2007-09-25 Ati International Srl Executing programs for a first computer architecture on a computer of a second architecture
US8074055B1 (en) 1999-01-28 2011-12-06 Ati Technologies Ulc Altering data storage conventions of a processor when execution flows from first architecture code to second architecture code
US6453407B1 (en) * 1999-02-10 2002-09-17 Infineon Technologies Ag Configurable long instruction word architecture and instruction set
US6581154B1 (en) * 1999-02-17 2003-06-17 Intel Corporation Expanding microcode associated with full and partial width macroinstructions
EP1050799A1 (de) 1999-05-03 2000-11-08 STMicroelectronics S.A. Ausführung eines Rechnerprogramms
US6779107B1 (en) 1999-05-28 2004-08-17 Ati International Srl Computer execution by opportunistic adaptation
EP1216287B1 (de) 1999-08-19 2005-11-23 Manufacturing And Technology Conversion International, Inc. Einen dampfreformer und eine brennstoffzelle enthaltendes integriertes system
US6549959B1 (en) 1999-08-30 2003-04-15 Ati International Srl Detecting modification to computer memory by a DMA device
US7213129B1 (en) * 1999-08-30 2007-05-01 Intel Corporation Method and system for a two stage pipelined instruction decode and alignment using previous instruction length
US6405303B1 (en) 1999-08-31 2002-06-11 Advanced Micro Devices, Inc. Massively parallel decoding and execution of variable-length instructions
US6460132B1 (en) 1999-08-31 2002-10-01 Advanced Micro Devices, Inc. Massively parallel instruction predecoding
US6438664B1 (en) 1999-10-27 2002-08-20 Advanced Micro Devices, Inc. Microcode patch device and method for patching microcode using match registers and patch routines
WO2001050251A1 (en) * 1999-12-31 2001-07-12 Intel Corporation External microcode
US6934832B1 (en) 2000-01-18 2005-08-23 Ati International Srl Exception mechanism for a computer
US6654872B1 (en) * 2000-01-27 2003-11-25 Ati International Srl Variable length instruction alignment device and method
US6542862B1 (en) * 2000-02-18 2003-04-01 Hewlett-Packard Development Company, L.P. Determining register dependency in multiple architecture systems
US7584234B2 (en) * 2002-05-23 2009-09-01 Qsigma, Inc. Method and apparatus for narrow to very wide instruction generation for arithmetic circuitry
US6968469B1 (en) 2000-06-16 2005-11-22 Transmeta Corporation System and method for preserving internal processor context when the processor is powered down and restoring the internal processor context when processor is restored
US6981132B2 (en) 2000-08-09 2005-12-27 Advanced Micro Devices, Inc. Uniform register addressing using prefix byte
US6877084B1 (en) 2000-08-09 2005-04-05 Advanced Micro Devices, Inc. Central processing unit (CPU) accessing an extended register set in an extended register mode
US6633969B1 (en) 2000-08-11 2003-10-14 Lsi Logic Corporation Instruction translation system and method achieving single-cycle translation of variable-length MIPS16 instructions
SE0003398D0 (sv) * 2000-09-22 2000-09-22 Ericsson Telefon Ab L M Optimization of a pipelined processor system
EP1197847A3 (de) * 2000-10-10 2003-05-21 Nazomi Communications Inc. Java-Hardwarebeschleuniger mit Mikrokodemaschine
US7149878B1 (en) * 2000-10-30 2006-12-12 Mips Technologies, Inc. Changing instruction set architecture mode by comparison of current instruction execution address with boundary address register values
US6738792B1 (en) 2001-03-09 2004-05-18 Advanced Micro Devices, Inc. Parallel mask generator
JP4542722B2 (ja) * 2001-04-25 2010-09-15 富士通株式会社 命令処理方法
US7107439B2 (en) * 2001-08-10 2006-09-12 Mips Technologies, Inc. System and method of controlling software decompression through exceptions
US8769508B2 (en) 2001-08-24 2014-07-01 Nazomi Communications Inc. Virtual machine hardware for RISC and CISC processors
US7107584B2 (en) * 2001-10-23 2006-09-12 Microsoft Corporation Data alignment between native and non-native shared data structures
US20030093775A1 (en) * 2001-11-14 2003-05-15 Ronald Hilton Processing of self-modifying code under emulation
US7092869B2 (en) * 2001-11-14 2006-08-15 Ronald Hilton Memory address prediction under emulation
US7493470B1 (en) 2001-12-07 2009-02-17 Arc International, Plc Processor apparatus and methods optimized for control applications
US7278137B1 (en) * 2001-12-26 2007-10-02 Arc International Methods and apparatus for compiling instructions for a data processor
EP1470476A4 (de) * 2002-01-31 2007-05-30 Arc Int Konfigurierbarer datenprozessor mit mehrlängen-anweisungssatz architektur
US7785340B2 (en) * 2002-02-04 2010-08-31 Boston Scientific Scimed, Inc. Bonding sleeve for medical device
US6977162B2 (en) * 2002-03-01 2005-12-20 Ravgen, Inc. Rapid analysis of variations in a genome
US6957321B2 (en) 2002-06-19 2005-10-18 Intel Corporation Instruction set extension using operand bearing NOP instructions
EP1387256B1 (de) 2002-07-31 2018-11-21 Texas Instruments Incorporated Programmzähleranpassung basiert auf der Erkennung eines Befehlspräfixes
EP1387252B1 (de) * 2002-07-31 2019-02-13 Texas Instruments Incorporated Präfixcode zum Anzeigen von Systembefehlen
US7349934B2 (en) * 2002-12-20 2008-03-25 Texas Instruments Incorporated Processor system and method with combined data left and right shift operation
US7444471B1 (en) 2002-12-30 2008-10-28 Transmeta Corporation Method and system for using external storage to amortize CPU cycle utilization
EP1447742A1 (de) * 2003-02-11 2004-08-18 STMicroelectronics S.r.l. Verfahren und Vorrichtung zur Übersetzung von Befehlen eines ARM-Prozessors in Befehlen für einen LX-Prozessor
US20040193845A1 (en) * 2003-03-24 2004-09-30 Sun Microsystems, Inc. Stall technique to facilitate atomicity in processor execution of helper set
US7219218B2 (en) * 2003-03-31 2007-05-15 Sun Microsystems, Inc. Vector technique for addressing helper instruction groups associated with complex instructions
US7917734B2 (en) * 2003-06-30 2011-03-29 Intel Corporation Determining length of instruction with multiple byte escape code based on information from other than opcode byte
US7707389B2 (en) * 2003-10-31 2010-04-27 Mips Technologies, Inc. Multi-ISA instruction fetch unit for a processor, and applications thereof
US7404178B2 (en) * 2004-02-18 2008-07-22 Hewlett-Packard Development Company, L.P. ROM-embedded debugging of computer
US7873815B2 (en) * 2004-03-04 2011-01-18 Qualcomm Incorporated Digital signal processors with configurable dual-MAC and dual-ALU
US20070266406A1 (en) * 2004-11-09 2007-11-15 Murali Aravamudan Method and system for performing actions using a non-intrusive television with reduced text input
US7895218B2 (en) 2004-11-09 2011-02-22 Veveo, Inc. Method and system for performing searches for television content using reduced text input
US20060101504A1 (en) * 2004-11-09 2006-05-11 Veveo.Tv, Inc. Method and system for performing searches for television content and channels using a non-intrusive television interface and with reduced text input
US20060155961A1 (en) * 2005-01-06 2006-07-13 International Business Machines Corporation Apparatus and method for reformatting instructions before reaching a dispatch point in a superscalar processor
US7646886B2 (en) * 2005-05-11 2010-01-12 Lockheed Martin Corporation Closely-spaced multiple targets detection using a regional window as a discriminant function
US7543287B2 (en) * 2005-06-30 2009-06-02 Intel Corporation Using a block device interface to invoke device controller functionality
US7788266B2 (en) 2005-08-26 2010-08-31 Veveo, Inc. Method and system for processing ambiguous, multi-term search queries
US7454492B2 (en) * 2005-08-26 2008-11-18 International Business Machines Corporation Method and apparatus for configuring and modeling server information in an enterprise tooling environment
US7779011B2 (en) 2005-08-26 2010-08-17 Veveo, Inc. Method and system for dynamically processing ambiguous, reduced text search queries and highlighting results thereof
US20070074199A1 (en) * 2005-09-27 2007-03-29 Sebastian Schoenberg Method and apparatus for delivering microcode updates through virtual machine operations
US20070083736A1 (en) * 2005-10-06 2007-04-12 Aravindh Baktha Instruction packer for digital signal processor
US7644054B2 (en) * 2005-11-23 2010-01-05 Veveo, Inc. System and method for finding desired results by incremental search using an ambiguous keypad with the input containing orthographic and typographic errors
US7792666B2 (en) * 2006-05-03 2010-09-07 Sony Computer Entertainment Inc. Translation block invalidation prehints in emulation of a target system on a host system
US7835998B2 (en) 2006-03-06 2010-11-16 Veveo, Inc. Methods and systems for selecting and presenting content on a first system based on user preferences learned on a second system
US8073860B2 (en) 2006-03-30 2011-12-06 Veveo, Inc. Method and system for incrementally selecting and providing relevant search engines in response to a user query
WO2007124429A2 (en) 2006-04-20 2007-11-01 Veveo, Inc. User interface methods and systems for selecting and presenting content based on user navigation and selection actions associated with the content
CA3163292A1 (en) * 2006-09-14 2008-03-20 Veveo, Inc. Methods and systems for dynamically rearranging search results into hierarchically organized concept clusters
WO2008045690A2 (en) 2006-10-06 2008-04-17 Veveo, Inc. Linear character selection display interface for ambiguous text input
US8078884B2 (en) 2006-11-13 2011-12-13 Veveo, Inc. Method of and system for selecting and presenting content based on user identification
US9177111B1 (en) 2006-11-14 2015-11-03 Hitachi Global Storage Technologies Netherlands B.V. Systems and methods for protecting software
WO2008148012A1 (en) 2007-05-25 2008-12-04 Veveo, Inc. System and method for text disambiguation and context designation in incremental search
US8060356B2 (en) 2007-12-19 2011-11-15 Sony Computer Entertainment Inc. Processor emulation using fragment level translation
US8281109B2 (en) 2007-12-27 2012-10-02 Intel Corporation Compressed instruction format
US8028153B2 (en) * 2008-08-14 2011-09-27 International Business Machines Corporation Data dependent instruction decode
CN101819517B (zh) * 2009-05-19 2013-05-22 威盛电子股份有限公司 适用于微处理器的装置及方法
CN101853148B (zh) * 2009-05-19 2014-04-23 威盛电子股份有限公司 适用于微处理器的装置及方法
US9166714B2 (en) 2009-09-11 2015-10-20 Veveo, Inc. Method of and system for presenting enriched video viewing analytics
TWI424445B (zh) * 2009-12-29 2014-01-21 Macronix Int Co Ltd 指令解碼電路及其方法
US20110191330A1 (en) 2010-02-04 2011-08-04 Veveo, Inc. Method of and System for Enhanced Content Discovery Based on Network and Device Access Behavior
WO2012103373A2 (en) 2011-01-27 2012-08-02 Soft Machines, Inc. Variable caching structure for managing physical storage
WO2012103367A2 (en) 2011-01-27 2012-08-02 Soft Machines, Inc. Guest to native block address mappings and management of native code storage
WO2012103253A2 (en) 2011-01-27 2012-08-02 Soft Machines, Inc. Multilevel conversion table cache for translating guest instructions to native instructions
WO2012103209A2 (en) 2011-01-27 2012-08-02 Soft Machines, Inc. Guest instruction to native instruction range based mapping using a conversion look aside buffer of a processor
WO2012103359A2 (en) 2011-01-27 2012-08-02 Soft Machines, Inc. Hardware acceleration components for translating guest instructions to native instructions
WO2012103245A2 (en) 2011-01-27 2012-08-02 Soft Machines Inc. Guest instruction block with near branching and far branching sequence construction to native instruction block
US9336180B2 (en) 2011-04-07 2016-05-10 Via Technologies, Inc. Microprocessor that makes 64-bit general purpose registers available in MSR address space while operating in non-64-bit mode
US9244686B2 (en) 2011-04-07 2016-01-26 Via Technologies, Inc. Microprocessor that translates conditional load/store instructions into variable number of microinstructions
US8880851B2 (en) 2011-04-07 2014-11-04 Via Technologies, Inc. Microprocessor that performs X86 ISA and arm ISA machine language program instructions by hardware translation into microinstructions executed by common execution pipeline
US9141389B2 (en) 2011-04-07 2015-09-22 Via Technologies, Inc. Heterogeneous ISA microprocessor with shared hardware ISA registers
US9176733B2 (en) 2011-04-07 2015-11-03 Via Technologies, Inc. Load multiple and store multiple instructions in a microprocessor that emulates banked registers
US8924695B2 (en) 2011-04-07 2014-12-30 Via Technologies, Inc. Conditional ALU instruction condition satisfaction propagation between microinstructions in read-port limited register file microprocessor
US9645822B2 (en) 2011-04-07 2017-05-09 Via Technologies, Inc Conditional store instructions in an out-of-order execution microprocessor
US9032189B2 (en) 2011-04-07 2015-05-12 Via Technologies, Inc. Efficient conditional ALU instruction in read-port limited register file microprocessor
US8880857B2 (en) * 2011-04-07 2014-11-04 Via Technologies, Inc. Conditional ALU instruction pre-shift-generated carry flag propagation between microinstructions in read-port limited register file microprocessor
US9128701B2 (en) * 2011-04-07 2015-09-08 Via Technologies, Inc. Generating constant for microinstructions from modified immediate field during instruction translation
US9317288B2 (en) 2011-04-07 2016-04-19 Via Technologies, Inc. Multi-core microprocessor that performs x86 ISA and ARM ISA machine language program instructions by hardware translation into microinstructions executed by common execution pipeline
US9292470B2 (en) 2011-04-07 2016-03-22 Via Technologies, Inc. Microprocessor that enables ARM ISA program to access 64-bit general purpose registers written by x86 ISA program
US9378019B2 (en) 2011-04-07 2016-06-28 Via Technologies, Inc. Conditional load instructions in an out-of-order execution microprocessor
US9274795B2 (en) 2011-04-07 2016-03-01 Via Technologies, Inc. Conditional non-branch instruction prediction
US9043580B2 (en) 2011-04-07 2015-05-26 Via Technologies, Inc. Accessing model specific registers (MSR) with different sets of distinct microinstructions for instructions of different instruction set architecture (ISA)
US9146742B2 (en) 2011-04-07 2015-09-29 Via Technologies, Inc. Heterogeneous ISA microprocessor that preserves non-ISA-specific configuration state when reset to different ISA
US9898291B2 (en) 2011-04-07 2018-02-20 Via Technologies, Inc. Microprocessor with arm and X86 instruction length decoders
US8806112B2 (en) 2011-07-14 2014-08-12 Lsi Corporation Meta data handling within a flash media controller
US8645618B2 (en) 2011-07-14 2014-02-04 Lsi Corporation Flexible flash commands
JP5932347B2 (ja) * 2012-01-18 2016-06-08 ピーエスフォー ルクスコ エスエイアールエルPS4 Luxco S.a.r.l. 半導体装置
CN103279325B (zh) * 2013-03-11 2015-12-09 浙江大学 加密文本数据时可提高SoC处理器指令运算效率的方法
WO2014151691A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. Method and apparatus for guest return address stack emulation supporting speculation
WO2014151652A1 (en) 2013-03-15 2014-09-25 Soft Machines Inc Method and apparatus to allow early dependency resolution and data forwarding in a microprocessor
US20140281398A1 (en) * 2013-03-16 2014-09-18 William C. Rash Instruction emulation processors, methods, and systems
US9465432B2 (en) 2013-08-28 2016-10-11 Via Technologies, Inc. Multi-core synchronization mechanism
US9792112B2 (en) 2013-08-28 2017-10-17 Via Technologies, Inc. Propagation of microcode patches to multiple cores in multicore microprocessor
US9513687B2 (en) 2013-08-28 2016-12-06 Via Technologies, Inc. Core synchronization mechanism in a multi-die multi-core microprocessor
US10157164B2 (en) * 2016-09-20 2018-12-18 Qualcomm Incorporated Hierarchical synthesis of computer machine instructions
US11204768B2 (en) 2019-11-06 2021-12-21 Onnivation Llc Instruction length based parallel instruction demarcator
FR3106422B1 (fr) 2020-01-20 2021-12-10 Continental Automotive Passerelle de communication de trames de données pour véhicule automobile

Family Cites Families (114)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US510341A (en) * 1893-12-05 Composition and process of producing same for commutator-brushes
US3346851A (en) * 1964-07-08 1967-10-10 Control Data Corp Simultaneous multiprocessing computer system
US3789365A (en) * 1971-06-03 1974-01-29 Bunker Ramo Processor interrupt system
US3771138A (en) * 1971-08-31 1973-11-06 Ibm Apparatus and method for serializing instructions from two independent instruction streams
US3916388A (en) * 1974-05-30 1975-10-28 Ibm Shifting apparatus for automatic data alignment
US4084235A (en) * 1975-04-14 1978-04-11 Honeywell Information Systems Inc. Emulation apparatus
US4034349A (en) * 1976-01-29 1977-07-05 Sperry Rand Corporation Apparatus for processing interrupts in microprocessing systems
AU529675B2 (en) * 1977-12-07 1983-06-16 Honeywell Information Systems Incorp. Cache memory unit
US4315314A (en) * 1977-12-30 1982-02-09 Rca Corporation Priority vectored interrupt having means to supply branch address directly
US4200927A (en) * 1978-01-03 1980-04-29 International Business Machines Corporation Multi-instruction stream branch processing mechanism
US4189772A (en) * 1978-03-16 1980-02-19 International Business Machines Corporation Operand alignment controls for VFL instructions
US4189768A (en) * 1978-03-16 1980-02-19 International Business Machines Corporation Operand fetch control improvement
US4236206A (en) * 1978-10-25 1980-11-25 Digital Equipment Corporation Central processor unit for executing instructions of variable length
US4228495A (en) * 1978-12-19 1980-10-14 Allen-Bradley Company Multiprocessor numerical control system
JPS6041768B2 (ja) * 1979-01-19 1985-09-18 株式会社日立製作所 デ−タ処理装置
US4296470A (en) * 1979-06-21 1981-10-20 International Business Machines Corp. Link register storage and restore system for use in an instruction pre-fetch micro-processor interrupt system
JPS5616248A (en) * 1979-07-17 1981-02-17 Matsushita Electric Ind Co Ltd Processing system for interruption
CA1174370A (en) * 1980-05-19 1984-09-11 Hidekazu Matsumoto Data processing unit with pipelined operands
JPS5743239A (en) * 1980-08-27 1982-03-11 Hitachi Ltd Data processor
JPS6028015B2 (ja) * 1980-08-28 1985-07-02 日本電気株式会社 情報処理装置
US4434461A (en) * 1980-09-15 1984-02-28 Motorola, Inc. Microprocessor with duplicate registers for processing interrupts
JPS5757345A (en) * 1980-09-24 1982-04-06 Toshiba Corp Data controller
US4654781A (en) * 1981-10-02 1987-03-31 Raytheon Company Byte addressable memory for variable length instructions and data
JPS58151655A (ja) * 1982-03-03 1983-09-08 Fujitsu Ltd 情報処理装置
US4514803A (en) * 1982-04-26 1985-04-30 International Business Machines Corporation Methods for partitioning mainframe instruction sets to implement microprocessor based emulation thereof
JPS5932045A (ja) 1982-08-16 1984-02-21 Hitachi Ltd 情報処理装置
WO1984001635A1 (en) * 1982-10-22 1984-04-26 Ibm Accelerated instruction mapping external to source and target instruction streams for near realtime injection into the latter
JPS59154546A (ja) * 1983-02-24 1984-09-03 Toshiba Corp 情報処理装置
US4569016A (en) * 1983-06-30 1986-02-04 International Business Machines Corporation Mechanism for implementing one machine cycle executable mask and rotate instructions in a primitive instruction set computing system
US4800486A (en) * 1983-09-29 1989-01-24 Tandem Computers Incorporated Multiple data patch CPU architecture
US4807115A (en) * 1983-10-07 1989-02-21 Cornell Research Foundation, Inc. Instruction issuing mechanism for processors with multiple functional units
GB8329509D0 (en) * 1983-11-04 1983-12-07 Inmos Ltd Computer
US4629989A (en) * 1983-11-10 1986-12-16 General Electric Company Patient alignment system for NMR studies
US4720779A (en) * 1984-06-28 1988-01-19 Burroughs Corporation Stored logic program scanner for a data processor having internal plural data and instruction streams
US4766564A (en) * 1984-08-13 1988-08-23 International Business Machines Corporation Dual putaway/bypass busses for multiple arithmetic units
CA1242803A (en) * 1984-12-27 1988-10-04 Nobuhisa Watanabe Microprocessor with option area facilitating interfacing with peripheral devices
US4714994A (en) * 1985-04-30 1987-12-22 International Business Machines Corp. Instruction prefetch buffer control
JPH0762823B2 (ja) * 1985-05-22 1995-07-05 株式会社日立製作所 デ−タ処理装置
US4739471A (en) * 1985-06-28 1988-04-19 Hewlett-Packard Company Method and means for moving bytes in a reduced instruction set computer
US4722049A (en) * 1985-10-11 1988-01-26 Unisys Corporation Apparatus for out-of-order program execution
JPS62152043A (ja) * 1985-12-26 1987-07-07 Nec Corp 命令コ−ドアクセス制御方式
JPS62165242A (ja) * 1986-01-17 1987-07-21 Toshiba Corp プロセツサ
EP0239081B1 (de) * 1986-03-26 1995-09-06 Hitachi, Ltd. Datenprozessor in Pipelinestruktur mit der Fähigkeit mehrere Befehle parallel zu dekodieren und auszuführen
US4903196A (en) * 1986-05-02 1990-02-20 International Business Machines Corporation Method and apparatus for guaranteeing the logical integrity of data in the general purpose registers of a complex multi-execution unit uniprocessor
JPS6324428A (ja) * 1986-07-17 1988-02-01 Mitsubishi Electric Corp キヤツシユメモリ
US4766566A (en) * 1986-08-18 1988-08-23 International Business Machines Corp. Performance enhancement scheme for a RISC type VLSI processor using dual execution units for parallel instruction processing
US4841476A (en) * 1986-10-06 1989-06-20 International Business Machines Corporation Extended floating point operations supporting emulation of source instruction execution
US5133072A (en) * 1986-11-13 1992-07-21 Hewlett-Packard Company Method for improved code generation in reduced instruction set computers
JPS63131230A (ja) * 1986-11-21 1988-06-03 Hitachi Ltd 情報処理装置
US4992934A (en) * 1986-12-15 1991-02-12 United Technologies Corporation Reduced instruction set computing apparatus and methods
CA1278382C (en) * 1986-12-15 1990-12-27 Brian J. Sprague Reduced instruction set computing apparatus and methods
US4814976C1 (en) * 1986-12-23 2002-06-04 Mips Tech Inc Risc computer with unaligned reference handling and method for the same
JPS63163930A (ja) * 1986-12-26 1988-07-07 Toshiba Corp アライメント補正方式
US5226170A (en) * 1987-02-24 1993-07-06 Digital Equipment Corporation Interface between processor and special instruction processor in digital data processing system
US4992938A (en) * 1987-07-01 1991-02-12 International Business Machines Corporation Instruction control mechanism for a computing system with register renaming, map table and queues indicating available registers
US4926323A (en) * 1988-03-03 1990-05-15 Advanced Micro Devices, Inc. Streamlined instruction processor
US4992930A (en) * 1988-05-09 1991-02-12 Bull Hn Information Systems Inc. Synchronous cache memory system incorporating tie-breaker apparatus for maintaining cache coherency using a duplicate directory
US5003462A (en) * 1988-05-31 1991-03-26 International Business Machines Corporation Apparatus and method for implementing precise interrupts on a pipelined processor with multiple functional units with separate address translation interrupt means
US4897810A (en) * 1988-06-13 1990-01-30 Advanced Micro Devices, Inc. Asynchronous interrupt status bit circuit
JP3034257B2 (ja) * 1988-06-22 2000-04-17 大日本印刷株式会社 シャドウマスク製版用パターン及び製造方法
US5019967A (en) * 1988-07-20 1991-05-28 Digital Equipment Corporation Pipeline bubble compression in a computer system
US5006980A (en) * 1988-07-20 1991-04-09 Digital Equipment Corporation Pipelined digital CPU with deadlock resolution
JPH0673105B2 (ja) * 1988-08-11 1994-09-14 株式会社東芝 命令パイプライン方式のマイクロプロセッサ
US5101341A (en) * 1988-08-25 1992-03-31 Edgcore Technology, Inc. Pipelined system for reducing instruction access time by accumulating predecoded instruction bits a FIFO
JPH0638676B2 (ja) * 1988-09-19 1994-05-18 松下電工株式会社 ワイヤレス送信制御システム
JP2810068B2 (ja) * 1988-11-11 1998-10-15 株式会社日立製作所 プロセッサシステム、コンピュータシステム及び命令処理方法
GB8828817D0 (en) * 1988-12-09 1989-01-18 Int Computers Ltd Data processing apparatus
US5075840A (en) * 1989-01-13 1991-12-24 International Business Machines Corporation Tightly coupled multiprocessor instruction synchronization
US5127091A (en) * 1989-01-13 1992-06-30 International Business Machines Corporation System for reducing delay in instruction execution by executing branch instructions in separate processor while dispatching subsequent instructions to primary processor
DE69030573D1 (de) * 1989-01-17 1997-05-28 Fujitsu Ltd Ablaufsteuerung zur decodierung von befehlen variabler länge für ein mikroprozessor
US5148528A (en) * 1989-02-03 1992-09-15 Digital Equipment Corporation Method and apparatus for simultaneously decoding three operands in a variable length instruction when one of the operands is also of variable length
US4985825A (en) * 1989-02-03 1991-01-15 Digital Equipment Corporation System for delaying processing of memory access exceptions until the execution stage of an instruction pipeline of a virtual memory system based digital computer
US5113515A (en) * 1989-02-03 1992-05-12 Digital Equipment Corporation Virtual instruction cache system using length responsive decoded instruction shifting and merging with prefetch buffer outputs to fill instruction buffer
US5768575A (en) * 1989-02-24 1998-06-16 Advanced Micro Devices, Inc. Semi-Autonomous RISC pipelines for overlapped execution of RISC-like instructions within the multiple superscalar execution units of a processor having distributed pipeline control for sepculative and out-of-order execution of complex instructions
US5226126A (en) * 1989-02-24 1993-07-06 Nexgen Microsystems Processor having plurality of functional units for orderly retiring outstanding operations based upon its associated tags
GB2230116B (en) * 1989-04-07 1993-02-17 Intel Corp An improvement for pipelined decoding of instructions in a pipelined processor
CA2016068C (en) * 1989-05-24 2000-04-04 Robert W. Horst Multiple instruction issue computer architecture
JPH0314025A (ja) * 1989-06-13 1991-01-22 Nec Corp 命令実行制御方式
DE69031257T2 (de) * 1989-09-21 1998-02-12 Texas Instruments Inc Integrierte Schaltung mit einem eingebetteten digitalen Signalprozessor
US5019937A (en) * 1989-10-30 1991-05-28 A. B. Chance Company Circuit improvement apparatus having combination current limiting fuse and resettable vacuum switch to prevent single-phasing of three-phase loads
JP2835103B2 (ja) * 1989-11-01 1998-12-14 富士通株式会社 命令指定方法及び命令実行方式
US5487156A (en) * 1989-12-15 1996-01-23 Popescu; Valeri Processor architecture having independently fetching issuing and updating operations of instructions which are sequentially assigned and stored in order fetched
US5193206A (en) * 1989-12-27 1993-03-09 Motorola, Inc. Reduce instruction set microprocessor
US5168571A (en) * 1990-01-24 1992-12-01 International Business Machines Corporation System for aligning bytes of variable multi-bytes length operand based on alu byte length and a number of unprocessed byte data
US5230068A (en) * 1990-02-26 1993-07-20 Nexgen Microsystems Cache memory system for dynamically altering single cache memory line as either branch target entry or pre-fetch instruction queue based upon instruction sequence
DE69130588T2 (de) * 1990-05-29 1999-05-27 Nat Semiconductor Corp Cache-Speicher von partiell decodierten Befehlen und Verfahren hierfür
CA2038264C (en) 1990-06-26 1995-06-27 Richard James Eickemeyer In-memory preprocessor for a scalable compound instruction set machine processor
US5430862A (en) * 1990-06-29 1995-07-04 Bull Hn Information Systems Inc. Emulation of CISC instructions by RISC instructions using two pipelined stages for overlapped CISC decoding and RISC execution
US5778423A (en) * 1990-06-29 1998-07-07 Digital Equipment Corporation Prefetch instruction for improving performance in reduced instruction set processor
US5155843A (en) * 1990-06-29 1992-10-13 Digital Equipment Corporation Error transition mode for multi-processor system
US5163139A (en) * 1990-08-29 1992-11-10 Hitachi America, Ltd. Instruction preprocessor for conditionally combining short memory instructions into virtual long instructions
DE69130723T2 (de) * 1990-10-05 1999-07-22 Koninkl Philips Electronics Nv Verarbeitungsgerät mit Speicherschaltung und eine Gruppe von Funktionseinheiten
US5450575A (en) * 1991-03-07 1995-09-12 Digital Equipment Corporation Use of stack depth to identify machine code mistakes
US5507030A (en) * 1991-03-07 1996-04-09 Digitial Equipment Corporation Successive translation, execution and interpretation of computer program having code at unknown locations due to execution transfer instructions having computed destination addresses
US5307504A (en) * 1991-03-07 1994-04-26 Digital Equipment Corporation System and method for preserving instruction granularity when translating program code from a computer having a first architecture to a computer having a second reduced architecture during the occurrence of interrupts due to asynchronous events
US5307492A (en) * 1991-03-07 1994-04-26 Digital Equipment Corporation Mapping assembly language argument list references in translating code for different machine architectures
US5539911A (en) * 1991-07-08 1996-07-23 Seiko Epson Corporation High-performance, superscalar-based computer system with out-of-order instruction execution
ATE291755T1 (de) * 1991-07-08 2005-04-15 Seiko Epson Corp Risc-prozessor mit erweiterbarer architektur
US5438668A (en) * 1992-03-31 1995-08-01 Seiko Epson Corporation System and method for extraction, alignment and decoding of CISC instructions into a nano-instruction bucket for execution by a RISC computer
US5335460A (en) * 1992-04-27 1994-08-09 Smith Jr Joseph H Tilt to clean gutter system
EP0651321B1 (de) * 1993-10-29 2001-11-14 Advanced Micro Devices, Inc. Superskalarmikroprozessoren
US5574927A (en) * 1994-03-25 1996-11-12 International Meta Systems, Inc. RISC architecture computer configured for emulation of the instruction set of a target computer
US5819056A (en) * 1995-10-06 1998-10-06 Advanced Micro Devices, Inc. Instruction buffer organization method and system
US5778210A (en) * 1996-01-11 1998-07-07 Intel Corporation Method and apparatus for recovering the state of a speculatively scheduled operation in a processor which cannot be executed at the speculated time
US6138271A (en) * 1996-06-26 2000-10-24 Rockwell Technologies, Llc Operating system for embedded computers
JP3274608B2 (ja) * 1996-07-12 2002-04-15 日本電気株式会社 携帯端末装置
US5832205A (en) * 1996-08-20 1998-11-03 Transmeta Corporation Memory controller for a microprocessor for detecting a failure of speculation on the physical nature of a component being addressed
US6442570B1 (en) * 1997-10-27 2002-08-27 Microsoft Corporation Object identification and data communication during an object synchronization process
JP4562910B2 (ja) * 1998-03-23 2010-10-13 マイクロソフト コーポレーション オペレーティングシステムのアプリケーション・プログラム・インターフェース
US6253309B1 (en) * 1998-09-21 2001-06-26 Advanced Micro Devices, Inc. Forcing regularity into a CISC instruction set by padding instructions
US6862617B1 (en) * 1998-10-12 2005-03-01 Microsoft Corp. System and method for synchronizing objects between two devices
US7032213B1 (en) * 1999-09-01 2006-04-18 Microsoft Corporation Fixing incompatible applications using a light debugger
US6959330B1 (en) * 2000-05-16 2005-10-25 Palmsource, Inc. Sync-time read only memory image binding for limited resource devices
AU2005240524C1 (en) * 2004-04-22 2009-12-24 Evoqua Water Technologies Llc Filtration apparatus comprising a membrane bioreactor and a treatment vessel for digesting organic materials

Also Published As

Publication number Publication date
DE69329644D1 (de) 2000-12-14
US7664935B2 (en) 2010-02-16
JP2000215051A (ja) 2000-08-04
US5619666A (en) 1997-04-08
US20080162880A1 (en) 2008-07-03
KR100343530B1 (ko) 2002-11-27
EP1028370A2 (de) 2000-08-16
JP2000215050A (ja) 2000-08-04
US20050251653A1 (en) 2005-11-10
JP3547052B2 (ja) 2004-07-28
US6954847B2 (en) 2005-10-11
EP0636257B1 (de) 2000-11-08
EP1028370B1 (de) 2004-09-15
US5438668A (en) 1995-08-01
US6263423B1 (en) 2001-07-17
DE69329644T2 (de) 2001-03-01
US20030084270A1 (en) 2003-05-01
EP1028370A3 (de) 2002-02-20
KR100371929B1 (ko) 2003-02-12
KR950701100A (ko) 1995-02-20
EP0636257A1 (de) 1995-02-01
US5546552A (en) 1996-08-13
WO1993020507A3 (en) 1994-01-06
DE69333630D1 (de) 2004-10-21
US5983334A (en) 1999-11-09
JPH07505968A (ja) 1995-06-29
US7343473B2 (en) 2008-03-11
WO1993020507A2 (en) 1993-10-14

Similar Documents

Publication Publication Date Title
DE69333630T2 (de) System und Verfahren zur Übersetzung eines fremden Befehlsstroms zur Ausführung in einem Gastgeberprozessor
DE69433339T2 (de) Lade-/Speicherfunktionseinheiten und Datencachespeicher für Mikroprozessoren
DE69629383T2 (de) Superskalarer mikroprozessor mit risc86 befehlssatz
DE69434669T2 (de) Spekulative Befehlswarteschlange für Befehle mit variabler Byteslänge
DE69431998T2 (de) Superskalare Rechnerarchitektur mit Softwarescheduling
DE69724771T2 (de) Zentralprozessoreinheit mit x86 und dsp kern und einem dsp funktions-dekoder zum abbilden von x 86-befehlen auf dsp-befehle
DE69736105T2 (de) Hierarchische durchsuchlogik für ungeordnete lade/speicherausführungssteuerung
DE69727773T2 (de) Verbesserte Verzweigungsvorhersage in einem Pipelinemikroprozessor
DE69820027T2 (de) Vorrichtung zur ausführung virtueller maschinenbefehle
DE69838374T2 (de) Prozessor und Verfahren zum Verringern von dessen Energieverbrauch
DE4301417C2 (de) Computersystem mit Einrichtung zur parallelen Befehlsausführung
DE69534148T2 (de) Rechnersystem zur Ausführung von Verzweigungsbefehlen
DE69925410T2 (de) Erweiterung des Befehlssatzes unter Verwendung von Präfixcode
DE4447238B4 (de) Schaltungsanordnung und Verfahren zum Gewinnen von Informationen zur Verzweigungsvorhersage
DE69233493T2 (de) RISC-Prozessor mit erweiterbarer Architektur
DE69916962T2 (de) Datenverarbeitungssystem mit bedingter Ausführung von erweiterten Verbundbefehlen
DE69836902T2 (de) Auf variable instruktionen eingestellter computer
DE19506435C2 (de) Verfahren und Einrichtung zum Vermeiden von Rückschreibkonflikten zwischen einen gemeinsamen Rückschreibpfad verwendenden Ausführungseinheiten
DE4420703A1 (de) Mikrocomputer
DE19634031A1 (de) Prozessor mit Pipelining-Aufbau
DE19681705C2 (de) Verfahren und Einrichtung zum schnellen Decodieren von 00H- und 0FH-abgebildeten Instruktionen
DE69830804T2 (de) Prozessor zur durchführung eines befehls welcher ergebnisse mit verschiedenen datentypen erzeugt
DE2747304C3 (de) Einrichtung zur Mikrobefehlssteuerung
DE69736404T2 (de) Abhängigkeitstabelle zum reduzieren von hardware zur überprüfung von abhängigkeiten
DE4010895C2 (de) Mikroprozessor mit Befehlsdecodiereinrichtung

Legal Events

Date Code Title Description
8364 No opposition during term of opposition