DE69922238T2 - Mechanismus zur blockierung von ladeoperationen auf adressengeneration von speicherbefehlen und universeller abhängigkeitsvektor - Google Patents

Mechanismus zur blockierung von ladeoperationen auf adressengeneration von speicherbefehlen und universeller abhängigkeitsvektor Download PDF

Info

Publication number
DE69922238T2
DE69922238T2 DE69922238T DE69922238T DE69922238T2 DE 69922238 T2 DE69922238 T2 DE 69922238T2 DE 69922238 T DE69922238 T DE 69922238T DE 69922238 T DE69922238 T DE 69922238T DE 69922238 T2 DE69922238 T2 DE 69922238T2
Authority
DE
Germany
Prior art keywords
instruction
dependency
dependency vector
memory address
vector
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
DE69922238T
Other languages
English (en)
Other versions
DE69922238D1 (de
Inventor
B. David WITT
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.)
GlobalFoundries Inc
Original Assignee
Advanced Micro Devices Inc
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
Priority claimed from US09/138,886 external-priority patent/US6212622B1/en
Priority claimed from US09/139,178 external-priority patent/US6212623B1/en
Application filed by Advanced Micro Devices Inc filed Critical Advanced Micro Devices Inc
Publication of DE69922238D1 publication Critical patent/DE69922238D1/de
Application granted granted Critical
Publication of DE69922238T2 publication Critical patent/DE69922238T2/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 or 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3814Implementation provisions of instruction buffers, e.g. prefetch buffer; banks
    • 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • G06F9/3834Maintaining memory consistency
    • 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 or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3838Dependency mechanisms, e.g. register scoreboarding
    • 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 or look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3858Result writeback, i.e. updating the architectural state or memory
    • 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 or look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3858Result writeback, i.e. updating the architectural state or memory
    • G06F9/38585Result writeback, i.e. updating the architectural state or memory with result invalidation, e.g. nullification
    • 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 or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3889Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by multiple instructions, e.g. MIMD, decoupled access or execute

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)
  • Complex Calculations (AREA)

Description

  • 1. Technisches Gebiet
  • Diese Erfindung betrifft das Gebiet von Prozessoren und insbesondere Instruktionsplanungs-Mechanismen bei Prozessoren.
  • 2. Technischer Hintergrund
  • Bei superskalaren Prozessoren wird angestrebt, eine hohe Leistung zu erzielen, indem mehrere Instruktionen pro Taktzyklus ausgegeben und ausgeführt werden und die höchstmögliche mit dem Design zu vereinbarende Taktfrequenz verwendet wird. Eine Methode zur Erhöhung der Anzahl der in jedem Taktzyklus ausgeführten Instruktionen ist die Außer-der-Reihe-Ausführung. Bei der Außer-der-Reihe Ausführung können Instruktionen in einer anderen Reihenfolge als der in der Programmsequenz (oder "Programm-Reihenfolge") angegebenen ausgeführt werden. Gewisse Instruktionen, die in einer Programmsequenz nahe zueinander liegen, können Abhängigkeiten haben, welche ihre gleichzeitige Ausführung verhindern, während nachfolgende Instruktionen in der Programmsequenz möglicherweise keine Abhängigkeiten von den vorhergehenden Instruktionen haben. Entsprechend kann durch die Außer-der-Reihe Ausführung die Leistungsfähigkeit von superskalaren Prozessoren durch die Erhöhung der Anzahl von gleichzeitig (im Mittel) ausgeführten Instruktionen erhöht werden.
  • Leider verursacht die Außer-der-Reihe-Ausführung zusätzliche Komplexitäten der Hardware für den Prozessor. Der Ausdruck "Planung" betrifft generell das Wählen einer Reihenfolge zum Ausführen von Instruktionen. Typischerweise versucht der Prozessor die Instruktionen so schnell wie möglich zu planen, um die mittlere Instruktionsausführungsrate zu maximieren (z.B. durch Ausführen von Instruktionen außer der Reihe zwecks Handhabung der Abhängigkeiten und der Hardware-Verfügbarkeit für verschiedene Instruktions-Typen). Diese Komplexitäten können die Taktfrequenz begrenzen, mit welcher der Prozessor arbeiten kann. Insbesondere müssen von der Planungs-Hardware die Abhängigkeiten zwischen Instruktionen respektiert werden. Generell betrifft der Ausdruck "Abhängigkeit" gemäß der vorliegenden Verwendung ein Verhältnis zwischen einer ersten Instruktion und einer nachfolgenden zweiten Instruktion in der Programm-Reihenfolge, das die Ausführung der ersten Instruktion vor der Ausführung der zweiten Instruktion verlangt. Es können verschiedene Abhängigkeiten definiert werden. Beispielsweise tritt eine Operanden-Abhängigkeit auf, falls ein Ursprungs-Operand der zweiten Instruktion der Ziel-Operand der ersten Instruktion ist.
  • Im Allgemeinen können Instruktionen einen oder mehrere Ursprungs-Operanden und einen oder mehrere Bestimmungs-Operanden aufweisen. Die Ursprungs-Operanden sind Eingabewerte, die entsprechend der Definition der Instruktion zur Erzeugung eines oder mehrerer Ergebnisse (welche die Bestimmungs-Operanden sind) manipuliert werden. Die Ursprungs- und Bestimmungs-Operanden können Speicher-Operanden sein, die in einer Speicherstelle außerhalb des Prozessors gespeichert sind, oder können in einem Register, das in dem Prozessor enthalten ist, gespeicherte Register-Operanden sein. Die von dem Prozessor verwendete Instruktions-Satz-Architektur definiert eine Anzahl von architekturellen Registern. Die Existenz dieser Register wird von der Instruktions-Satz-Architektur definiert, und Instruktionen können zur Benutzung der architekturellen Register als Ursprungs- und Bestimmungs-Operanden kodiert sein. Eine Instruktion gibt ein bestimmtes Register als einen Ursprungs- oder Bestimmungs-Operanden über eine Register-Nummer (oder eine Registeradresse) in einem Operandenfeld einer Instruktion an. Die Register-Nummer bestimmt das ausgewählte Register eindeutig unter den architekturellen Registern. Ein Ursprungs-Operand wird durch eine Ursprungs-Register-Nummer und ein Bestimmungs-Operand durch eine Bestimmung-Register-Nummer identifiziert.
  • Die U.S.-Patentveröffentlichtung 5,710,902 von G.S. Sheaffer et al. beschreibt einen superskalaren Prozessor, in dem eine Einheit enthalten ist, mit der ein Abhängigkeitsvektor entsprechend einer Instruktions-Operation erzeugt wird.
  • Zusätzlich zu den Operanden-Abhängigkeiten können ein oder mehrere Typen von Reihenfolgebildungs-Abhängigkeiten durch einen Prozessor erzwungen werden. Reihenfolgebildungs-Abhängigkeiten können z.B. verwendet werden, um die verwendete Hardware zu vereinfachen oder um eine korrekte Programm-Ausführung zu generieren. Indem das Ausführen bestimmter Instruktionen in einer Reihenfolge relativ zu anderen Instruktionen erzwungen wird, kann die Hardware zum Handhaben der Konsequenzen der Außer-der-Reihe-Ausführung entfallen. Falls z.B. Speicher-Lade-Operationen außerhalb der Reihenfolge relativ zu Speicher-Speicherungs-Operationen durchgeführt werden dürfen, kann Hardware erforderlich sein, um eine vorherige Speicher-Speicherungs-Operation zu detektieren, welche die gleiche Speicherstelle aktualisiert, auf die durch eine nachfolgende Speicher-Lade-Operation zugegriffen wird (die möglicherweise außer der Reihe ausgeführt worden ist). Generell können Reihenfolgebildungs-Abhängkeiten von der Mikroarchitektur zur Makroarchitektur variieren.
  • Das Durchführen der Planung wird bei hoher Frequenz zunehmend schwierig, da zugelassen wird, dass sich größere Anzahlen von Instruktionen "in der Höhe" befinden (d.h. in dem Prozessor hervorstehen). Die Abhängigkeiten zwischen Instruktionen können aufgrund der größeren Anzahl von Instruktionen, die noch abgeschlossen werden müssen, häufiger sein. Ferner kann das Detektieren von Abhängigkeiten unter der großen Anzahl von Instruktionen schwieriger sein, was auch für das Detektieren gilt, wenn die Abhängigkeiten erfüllt sind (d.h. wenn der Fortlauf der ersten Instruktion bis zu dem Punkt vorgerückt ist, an dem die Abhängigkeit die Planung der zweiten Instruktionen nicht zu verhindern braucht. Somit wird ein Planungsmechanismus gewünscht, der an eine Hochfrequenz-Operation anpassbar ist.
  • Somit wird ein Planungsmechanismus gewünscht, der die große Vielfalt von Reihenfolgebildungs-Abhängigkeiten, die der Mikroarchitektur auferlegt werden können, handhaben kann. Die Reihenfolgebildungs-Abhängigkeiten können zusätzlich zu den Operanden-Abhängigkeiten darin resultieren, dass eine bestimmte Instruktion von einer relativ großen Anzahl früherer Instruktionen abhängig ist. Somit ist ein flexibler Planungsmechanismus erwünscht, der eine große Anzahl von Abhängigkeiten erlaubt.
  • OFFENBARUNG DER ERFINDUNG
  • Die oben umrissenen Probleme werden größtenteils durch einen Prozessor gelöst, bei dem Reihenfolgebildungs-Abhängigkeiten für Lade-Instruktions-Operationen bei Adress-Speicher-Instruktions-Operationen verwendet werden. Der Prozessor teilt Speicherungs-Operationen in Adress-Speicherungs-Instruktions-Operationen und Daten-Speicherungs-Instruktions-Operationen. Die Adress-Speicherungs-Instruktions-Operationen generieren die Adresse der Speicherung, und die Daten-Speicherungs-Instruktions-Operationen leiten die entsprechenden Daten in die Lade-/Speicher-Einheit. Der Prozessor hält einen Speicheradress-Abhängigkeitsvektor bei, der jede der ausstehenden Speicheradressen angibt, und zeichnet bei den Adress-Speicherungs-Instruktions-Operationen für jede Lade-Instruktions-Operation Reihenfolgebildungs-Abhängigkeiten auf. Somit wird die Lade-Instruktions-Operation nicht eingeplant, bis jede vorherige Adress-Speicherungs-Instruktions-Operation eingeplant worden ist. Vorteilhafterweise stehen Speicheradressen für das Abhängigkeits-Prüfen gegen die Ladeadresse beim Ausführen der Lade-Instruktions-Operation zur Verfügung. Falls eine Speicher-Abhängigkeit existiert, kann sie beim Ausführen der Lade-Instruktions-Operation detektiert werden.
  • Allgemein ausgedrückt ist gemäß der vorliegenden Erfindung ein Prozessor vorgesehen, der ein Adress-Speicher-Register und eine mit diesem verbun dene Abhängigkeitsvektor-Erzeugungseinheit aufweist. Das Adress-Speicher-Register ist konfiguriert zum Speichern eines Speicheradress-Abhängigkeitsvektors, der die in dem. Prozessor ausstehenden Adress-Instruktions-Operanden identifiziert. Die Abhängigkeitsvektor-Erzeugungseinheit ist konfiguriert zum Erzeugen eines Abhängigkeitsvektors für eine Instruktions-Operation. Für Lade-Instruktions-Operationen ist die Abhängigkeitsvektor-Erzeugungseinheit dahingehend konfiguriert, dass sie den Speicheradress-Abhängigkeitsvektor in dem Abhängigkeitsvektor enthält.
  • Die Erfindung betrifft ferner ein Verfahren zum Durchführen einer Lade-Instruktions-Operation in einem Prozessor. Ein Speicheradress-Abhängigkeitsvektor, der jede in dem Prozessor ausstehende Speicheradress-Instruktions-Operation anzeigt, wird aufrechterhalten. Es wird ein Abhängigkeitsvektor für die Lade-Instruktions-Operation erzeugt, der den Speicheradress-Abhängigkeitsvektor enthält. Die Planung der Lade-Instruktions-Operation wird verhindert, bis jede in dem Abhängigkeitsvektor angegebene Instruktions-Operation abgeschlossen ist.
  • Ferner wird ein Prozessor offenbart, in dem die Instruktions-Warteschlange und die Abhängigkeitsvektoren verwendet werden, die eine flexible Abhängigkeitsaufzeichnungs-Struktur ermöglichen. Der Abhängigkeitsvektor enthält für jeden Instruktionswarteschlangen-Eintrag einen Abhängigkeits-Hinweis, wodurch vorteilhafterweise einen universeller Mechanismus zum Planen von Instruktions-Operationen geschaffen wird. Für eine gegebene Instruktions-Operation kann eine beliebige Anzahl von Abhängigkeiten aufgezeichnet werden. Da der Abhängigkeitsvektor zum Aufzeichnen einer beliebigen Anzahl von Abhängigkeiten konfiguriert ist, kann eine gegebene Instruktions-Operation relativ zu jeder anderen Instruktions-Operation in eine Reihenfolge eingebracht werden. Folglich können für die gleichzeitige Ausführung oder für die Reihenfolge bestimmter Instruktions-Operationen bei der Ausführung beliebige architektische Restriktionen oder mikroarchitektonischen Restriktionen auferlegt werden. Falls es während der Entwicklung einer Mikroprozessor-Implantierung wünschenswert wird, zusätzliche Aus führungs-Reihenfolgen-Instruktionen aufzuerlegen (z.B. um die Implementierung zu vereinfachen), können die zusätzlichen Restriktionen aufgenommen werden, indem die Ordnungsbildungs-Abhängigkeiten in dem Abhängigkeitsvektor abgezeigt werden. Die Instruktions-Warteschlagen evaluieren die Abhängigkeitsvektoren und verlangen die Planung für jede Instruktions-Operation, für welche die aufgezeichneten Abhängigkeiten erfüllt worden sind. Die verbesserte Flexibilität kann die Eignung der Instruktions-Warteschlangen für verschiedene Prozessor-Implementierungen verbessern.
  • Somit betrifft die vorliegende Erfindung einen Prozessor mit einer Abhängigkeitsvektor-Erzeugungseinheit und einer Instruktions-Warteschlange. Die Abhängigkeitsvektor-Erzeugungseinheit ist konfiguriert zum Erzeugen eines Abhängigkeitsvektors entsprechend einer Instruktions-Operation. Indem sie zum Empfang des Abhängigkeitsvektors und der Instruktions-Operation geschaltet ist, ist die Instruktions-Warteschlange konfiguriert zum Verhindern des Planens der Instruktions-Operation, bis jede in dem Abhängigkeitsvektor angezeigte Abhängigkeit erfüllt ist. Der Abhängigkeitsvektor ist in der Lage, Abhängigkeiten von einer beliebigen Anzahl von weiteren Instruktions-Operationen in der gleichen Instruktions-Warteschlange anzuzeigen.
  • Die vorliegende Erfindung betrifft ferner ein Verfahren zum Einplanen von Instruktions-Operationen in einem Prozessor. Es wird für jede Instruktion ein entsprechender Abhängigkeitsvektor erzeugt. Der Abhängigkeitsvektor gibt eine beliebige Anzahl von Abhängigkeiten von anderen Instruktions-Operationen in einer Instruktions-Warteschlange an. Der Abhängigkeitsvektor und eine entsprechende Instruktions-Operation werden in der gleichen Instruktions-Warteschlange gespeichert. Es wird jede Abhängigkeit der beliebigen Anzahl der vom Abhängigkeitsvektor angezeigten Abhängigkeiten erfüllt, und anschließend wird die entsprechende Instruktions-Operation geplant (auf das Erfüllen der Abhängigkeiten hin).
  • KURZBESCHREIBUNG DER ZEICHNUNGEN
  • Weitere Aufgaben und Vorteile der Erfindung werden in Kenntnis der folgenden detaillierten Beschreibung und im Zusammenhang mit den beigefügten Zeichnungen ersichtlich, in denen folgendes gezeigt ist:
  • 1 zeigt ein Blockschaltbild einer Ausführungsform eines Prozessors.
  • 2 zeigt ein Blockschaltbild einer Ausführungsform einer Instruktions-Warteschlange gemäß 1.
  • 3 zeigt ein Blockschaltbild einer Ausführungsform eines Abhängigkeitsvektors.
  • 4 zeigt ein Blockschaltbild einer Ausführungsform eines Paars von Abhängigkeitsvektor-Warteschlangen.
  • 5 zeigt ein Schaltbild eines Teils einer Ausführungsform einer Abhängigkeitsvektor-Warteschlange.
  • 6 zeigt ein Schatbild eines weiteren Teils einer Ausführungsform einer Abhängigkeitsvektor-Warteschlange.
  • 7 zeigt ein Blockschaltbild einer Ausführungsform einer Abbildungseinheit gemäß 1 und einer Ausführungsform einer Speicher-/Lade-Vorwärts-Detektionseinheit.
  • 8 zeigt ein Flussdiagramm zur Veranschaulichung der Arbeitsweise einer Ausführungsform einer Abhängigkeitsvektor-Erzeugungseinheit gemäß 7.
  • 9 zeigt ein Flussdiagramm zur Veranschaulichung einer Ausgestaltung eines Schritts gemäß 8.
  • 10 zeigt ein Zeitsteuerungsdiagramm zur Veranschaulichung der Arbeitsweise eines Paars von Instruktions-Warteschlangen gemäß 1.
  • 11 zeigt ein Blockschaltbild einer Ausführungsform eines Computersystems mit dem Prozessor gemäß 1.
  • Obwohl die Erfindung in Form verschiedener Modifikationen und alternativer Ausführungsformen ausgebildet sein kann, werden als Beispiel besondere Ausführungsbeispiele der Erfindung in den Zeichnungen gezeigt und hier detailliert beschrieben. Es versteht sich jedoch, dass die Zeichnungen und die dazugehörende detaillierte Beschreibung nicht dazu vorgesehen sind, die Erfindung auf die bestimmte offenbarte Form zu beschränken, sondern dass die Erfindung sämtliche Modifikationen, Äquivalente und Alternativen umfasst, die unter den Geist und den Umfang der vorliegenden Erfindung fallen, wie sie in den beigefügten Ansprüchen definiert ist.
  • ART(EN) DER AUSFÜHRUNG DER ERFINDUNG
  • Die nun zu erläuternde 1 zeigt ein Blockdiagramm eines Ausführungsbeispiels eines Prozessors 10. Weitere Ausführungsbeispiele sind möglich und vorgesehen. Bei dem Ausführungsbeispiel gemäß 1 enthält der Prozessor 10 eine Zeilenvorhersagevorrichtung 12, einen Instruktions-Cache (I-Cache) 14, eine Zuweisungseinheit 16, eine Verzweigungs-Geschichte-Tabelle 18, einen indirekten Adress-Cache 20, einen Rückkehr-Stapel 22, eine Dekodiereinheit 24, eine Fehlvorhersage-Dekodiereinheit 26, eine Mikrocode-Einheit 28, eine Abbildungseinheit 30, einen Abbildungssilo 32, einen architekturellen Neubenennungs-Block 34, ein Paar von Instruktions-Warteschlangen 36A-36B, ein Paar von Register-Dateien 38A-38B, ein Paar von Ausführungs-Kernen 40A-40B, eine Lade-/Speicher-Einheit 42, einen Daten-Cache (D-Cache) 44, eine externe Interface-Einheit 46, eine PC-Silo-und- Umleitungs-Einheit 48 und einen Instruktions-TLB (ITB) 50. Die Zeilenvorhersagevorrichtung 12 ist angeschlossen an den ITB 50, die Fehlvorhersage-Dekodiereinheit 26, die Verzweigungs-Geschichte-Tabelle 18, den indirekten Adress-Cache 20, den Rückkehr-Stapel 22, den PC-Silo-und-Umleitungs-Block 48, die Zuweisungseinheit 16 und den I-Cache 14. Der I-Cache 14 ist mit der Zuweisungseinheit 16 verbunden. Die Zuweisungseinheit 16 ist ferner mit der Fehlvorhersage-Dekodiereinheit 26 und der Dekodiereinheit 24 verbunden. Die Dekodiereinheit 24 ist ferner mit der Mikrocode-Einheit 28 und der Abbildungseinheit 30 verbunden. Die Abbildungseinheit 30 ist angeschlossen an den Abbildungssilo 32, den architekturellen Neubenennungs-Block 34, die Instruktions-Warteschlangen 36A-36B, die Lade-/Speicher-Einheit 42, die Ausführungs-Kerne 40A-40B und den PC-Silo-und-Umleitungs-Block 48. Die Instruktions-Warteschlangen 36A-36B sind aneinander angeschlossen und an die entsprechenden Ausführungs-Kerne 40A-40B und Register-Dateien 38A-38B. Die Register-Dateien 38A-38B sind aneinander angeschlossen und an die entsprechenden Ausführungs-Kerne 40A-40E. Die Ausführungs-Kerne 40A-40B sind ferner verbunden mit der Lade-/Speicher-Einheit 42, dem Daten-Cache 44 und der PC-Silo-und-Umleitungs-Einheit 48. Die Lade-/Speicher-Einheit 42 ist mit der PC-Silo-und-Umleitungs-Einheit 48, dem D-Cache 44 und der externen Interface-Einheit 46 verbunden. Der D-Cache 44 ist mit der Register-Datei 38 verbunden und die externe Interface-Einheit 46 ist mit einem externen Interface 52 verbunden. Elemente, welche hier mit einem von einem Buchstaben gefolgten Bezugszeichen bezeichnet sind, werden kollektiv nur mit dem Bezugszeichen allein bezeichnet. Zum Beispiel werden die Instruktions-Warteschlangen 36A-36B gemeinsam als Instruktions-Warteschlangen 36 bezeichnet.
  • In dem Ausführungsbeispiel von 1 verwendet der Prozessor 10 eine komplexe Instruktions-Satz-Berechnungs (CISC) Instruktions-Satz-Architektur mit variabler Bitlänge. Zum Beispiel kann der Prozessor 10 die x86 Instruktions-Satz-Architektur (auch als IA-32 bezeichnet) verwenden. Andere Ausführungsbeispiele können andere Instruktions-Satz-Architekturen verwenden, einschließlich Instruktions-Satz-Architekturen mit fester Länge und reduzierte Instruktions-Satz-Berechnungs- (RISC-) Instruktions-Satz-Architekturen. Gewisse in 1 gezeigte Merkmale können in derartigen Architekturen ausgelassen werden.
  • Die Zeilenvorhersagevorrichtung 12 ist konfiguriert zum Erzeugen von Abruf-Adressen für den I-Cache 14 und ist zusätzlich zum Bereitstellen von Information hinsichtlich einer Zeile von Instruktions-Operationen an die Ausrichtungseinheit 16 konfiguriert. Im Allgemeinen speichert die Zeilenvorhersagevorrichtung 12 Zeilen von Instruktions-Operationen, die zuvor spekulativ von dem Prozessor 10 abgerufen wurden, und eine oder mehrere nächste Abruf-Adressen, die jeder nach dem Abrufen der Zeile auszuwählenden Zeile entsprechen. In einem Ausführungsbeispiel ist die Zeilenvorhersagevorrichtung 12 zum Speichern von Einträgen mit 1K konfiguriert, wobei jeder eine Zeile von Instruktions-Operationen definiert. Die Zeilenvorhersagevorrichtung 12 kann in mehrere Bänke unterteilt sein, zum Beispiel vier Bänke mit jeweils 256 Einträgen, um gleichzeitiges Lesen und Aktualisieren ohne doppelte Anschlüsse zu ermöglichen, falls gewünscht.
  • Die Zeilenvorhersagevorrichtung 12 stellt dem I-Cache 14 die nächste Abruf-Adresse zum Abrufen der entsprechenden Instruktions-Bytes bereit. Der I-Cache 14 ist ein Hochgeschwindigkeits-Cachespeicher zum Speichern von Instruktions-Bytes. Gemäß einem Ausführungsbeispiel kann der I-Cache 14 beispielsweise eine 256 Kbyte große vierfach satz-assoziative Organisation unter Verwendung von 64 Byte Cache-Zeilen aufweisen. Jedoch kann jede Struktur des I-Cache geeignet sein. Zusätzlich wird die nächste Abruf-Adresse an die Zeilenvorhersagevorrichtung 12 als eine Eingabe zur Abruf-Information betreffend die entsprechende Zeile von Instruktions-Operationen zurückgeliefert. Die nächste Abruf-Adresse kann als Reaktion auf von der PC-Silo-und-Umleitungs-Einheit 48 gemeldete Ausnahme-Zustände von einer durch den ITB 50 bereitgestellten Adresse ersetzt werden.
  • Die von der Zeilenvorhersagevorrichtung gelieferte nächste Abruf-Adresse kann die Adresse sein, die der letzten Instruktion innerhalb der Zeile folgt (falls die Zeile mit einer nicht verzweigenden Instruktion endet). Alternativ kann die nächste Abruf-Adresse eine Ziel-Adresse einer die Zeile beendenden Verzweigungs-Instruktion sein. Gemäß einer weiteren Alternative kann die Zeile durch eine Rückkehr-Instruktion beendet sein, in welchem Fall die nächste Abruf-Adresse von dem Rückkehr-Stapel 22 gezogen wird.
  • Als Antwort auf eine Abruf-Adresse gibt die Zeilenvorhersagevorrichtung 12 Information hinsichtlich einer Zeile von Instruktions-Operationen, die an der Abruf-Adresse beginnt, an die Zuweisungseinheit 16 aus. Die Zuweisungseinheit 16 empfängt die der Abruf-Adresse entsprechenden Instruktions-Bytes von dem I-Cache 14 und unterteilt die Instruktions-Bytes entsprechend der bereitgestellten Information zu der Instruktions-Operation in einen Satz von Ausgabepositionen. Genauer gesagt stellt die Zeilenvorhersagevorrichtung 12 für jede Instruktion innerhalb der Instruktions-Operationen der Zeile einen Verschiebungsbetrag und eine Abbildung der Instruktionen für den Satz der Instruktions-Operationen, welche die Zeile enthalten, bereit. Eine Instruktion kann Mehrfach-Instruktions-Operationen entsprechen und daher kann der dieser Instruktion entsprechende Verschiebungsbetrag zur Auswahl von Instruktions-Bytes in mehrere Ausgabepositionen benutzt werden. Eine Ausgabeposition wird für jede mögliche Instruktions-Operation innerhalb der Zeile bereitgestellt. In einem Ausführungsbeispiel kann eine Zeile von Instruktions-Operationen bis zu 8 Instruktions-Operationen entsprechend bis zu 6 Instruktionen enthalten. Im Allgemeinen bezeichnet eine Zeile von Instruktions-Operationen, wie hier verwendet, eine Gruppe von Instruktions-Operationen, die gemeinsam an die Dekodiereinheit 24 ausgegeben wird. Die Zeile von Instruktions-Operationen rückt als eine Einheit durch die Pipeline des Mikroprozessors 10 zu den Instruktions-Warteschlangen 36 vor. Auf die Speicherung in den Instruktions-Warteschlangen 36 können die einzelnen Instruktions-Operationen in beliebiger Reihenfolge ausgeführt werden.
  • Die Ausgabepositionen innerhalb der Dekodiereinheit 24 (und die darauffolgenden Stufen der Pipeline bis zu den Instruktions-Warteschlangen 36) definieren die Programm-Reihenfolge der Instruktions-Operationen innerhalb der Zeile für die Hardware innerhalb dieser Stufen der Pipeline. Eine von der Zuweisungseinheit 16 einer Ausgabeposition zugewiesene Instruktions-Operation verbleibt in dieser Ausgabeposition bis sie innerhalb einer Instruktions-Warteschlange 36A-36B gespeichert ist. Entsprechend kann eine erste Ausgabeposition als vor einer zweiten Ausgabeposition seiend bezeichnet werden, wenn eine Instruktions-Operation innerhalb der ersten Ausgabeposition vor einer Instruktions-Operation ist, die gleichzeitig in der zweiten Ausgabeposition in der Programm-Reihenfolge ist. Ähnlich kann eine erste Ausgabeposition als nachfolgend auf eine zweite Ausgabeposition bezeichnet werden, wenn eine Instruktions-Operation innerhalb der ersten Ausgabeposition nachfolgend auf eine Instruktions-Operation ist, die gleichzeitig in der zweiten Ausgabeposition in der Programm-Reihenfolge ist. Instruktions-Operationen innerhalb der Ausgabepositionen können auch als vor oder nachfolgend zu einer anderen Instruktion innerhalb der Zeile bezeichnet werden.
  • Eine Instruktions-Operation (oder ROP) ist gemäß der hier vorliegenden Verwendung des Ausdrucks eine Operation, wobei eine Ausführungseinheit innerhalb der Ausführungs-Kerne 40A-40B zur Ausführung dieser als eine einzelne Einheit konfiguriert ist. Einfache Instruktionen können einer Einfach-Instruktions-Operation entsprechen, während komplexere Instruktionen Mehrfach-Instruktions-Operationen entsprechen können. Gewisse dieser komplexeren Instruktionen können in der Mikrocode-Einheit 28 als Mikrocode-Routinen implementiert sein. Ferner können nicht-CISC Instruktions-Sätze verwendende Ausführungsbeispiele eine Einfach-Instruktions-Operation für jede Instruktion verwenden (d.h. Instruktion und Instruktions-Operation können in derartigen Ausführungsbeispielen ein Synonym sein). In einem bestimmten Ausführungsbeispiel kann eine Zeile bis zu acht Instruktions-Operationen entsprechend bis zu 6 Instruktionen aufweisen. Zusätzlich kann das bestimmten Ausführungsbeispiel Zeilen bei weniger als 6 Instruktion und/oder 8 Instruktions-Operationen beenden, wenn eine Verzweigungsinstruktion entdeckt wurde. Zusätzliche Einschränkungen hinsichtlich der Instruktions-Operationen der Zeile können wie gewünscht verwendet werden.
  • Die von der Zeilenvorhersagevorrichtung 12 erzeugte nächste Abruf-Adresse wird an die Verzweigungs-Geschichte-Tabelle 18, den indirekten Adress-Cache 20 und den Rückkehr-Stapel 22 weitergeführt. Die Verzweigungs-Geschichte-Tabelle 18 stellt eine Geschichte der Verzweigung für eine bedingte Verzweigungsinstruktion bereit, welche die von der nächsten Abruf-Adresse identifizierte Zeile beenden könnte. Die Zeilenvorhersagevorrichtung 12 kann die von der Verzweigungs-Geschichte-Tabelle 18 gelieferte Vorhersage benutzen, um festzustellen, ob eine die Zeile beendende bedingte Verzweigungsinstruktion vorhergesagt genommen oder nicht genommen werden sollte. In einem Ausführungsbeispiel kann die Zeilenvorhersagevorrichtung 12 eine Verzweigungsinstruktion, die zur Auswahl genommen oder nicht genommen benutzt wird, speichern und wird die Verzweigungs-Geschichte-Tabelle 18 zur Bereitstellung einer präziseren Vorhersage benutzt, welche die Vorhersage der Zeilenvorhersagevorrichtung streichen kann und veranlassen kann, dass eine andere nächste Abruf-Adresse ausgewählt wird. Der indirekte Adress-Cache 20 wird zur Vorhersage von indirekten Verzweigungs-Ziel-Adressen, welche häufig wechseln, benutzt. Die Zeilenvorhersagevorrichtung 12 kann eine zuvor erzeugte indirekte Ziel-Adresse als eine nächste Abruf-Adresse speichern. Der indirekte Adress-Cache 20 kann die von der Zeilenvorhersagevorrichtung 12 gelieferte nächste Abruf-Adresse überstimmen, wenn die entsprechende Zeile von einer indirekten Verzweigungsinstruktion beendet wird. Ferner kann die auf die letzte Instruktion innerhalb einer Zeile von Instruktions-Operationen folgende Adresse auf den Rückkehr-Stapel 22 geschoben werden, wenn die Zeile von einer Instruktion zum Aufruf einer Unterroutine beendet wird. Der Rückkehr-Stapel 22 gibt die an seinem oberen Ende gespeicherte Adresse an die Zeilenvorhersagevorrichtung 12 als eine potentielle nächste Abruf-Adresse für Zeilen aus, die von einer Rückkehr-Instruktion beendet werden.
  • Zusätzlich zum Liefern von Informationen zu der nächsten Abruf-Adresse und zu den Instruktions-Operationen an die oben erwähnten Blöcke ist die Zeilenvorhersagevorrichtung 12 konfiguriert zur Bereitstellung von Informationen zu der nächsten Abruf-Adresse und zu den Instruktions-Operationen an die PC-Silo-und-Umleitungs-Einheit 48. Die PC-Silo-und-Umleitungs-Einheit 48 speichert die Informationen zu der Abruf-Adresse und der Zeile und ist verantwortlich sowohl für die Umleitung des Abrufens der Instruktion auf Ausnahmen hin als auch für das ordnungsgemäße Zurückziehen von Instruktionen. Die PC-Silo-und-Umleitungs-Einheit 48 kann einen Ringpuffer zum Speichern von Informationen zu der Abruf-Adresse und zu den Instruktions-Operationen enthalten, die mehreren Zeilen von Instruktions-Operationen entsprechen, welche innerhalb des Prozessors 10 ausstehen können. Nach dem Zurückziehen einer Zeile von Instruktionen kann die PC-Silo-und-Umleitungs-Einheit 48 die Verzweigungs-Geschichte-Tabelle 18 und den indirekten Adress-Cache 20 entsprechend der Ausführung einer bedingten Verzweigung bzw. einer indirekten Verzweigung aktualisieren. Nach dem Verarbeiten einer Ausnahme kann die PC-Silo-und-Umleitungs-Einheit 48 Einträge aus dem Rückkehr-Stapel 22 entfernen, welche der die Ausnahme verursachenden Instruktion folgen. Zusätzlich leitet die PC-Silo-und-Umleitungs-Einheit 48 einen Hinweis der die Ausnahme verursachenden Instruktion an die Abbildungseinheit 30, die Instruktions-Warteschlangen 36 und die Lade-/Speicher-Einheit 42 weiter, so dass diese Einheiten Instruktionen streichen können, welche nachfolgend zu der die Ausnahme verursachenden Instruktion sind, und entsprechend einen spekulativen Zustand wiederherstellen können.
  • Gemäß einem Ausführungsbeispiel weist die PC-Silo-und-Umleitungs-Einheit 48 jeder Instruktions-Operation eine Sequenz-Nummer(R#) zur Identifizierung der Reihenfolge der innerhalb des Prozessors 10 ausstehenden Instruktions-Operationen zu. Die PC-Silo-und-Umleitungs-Einheit 48 kann jeder möglichen Instruktions-Operation innerhalb einer Zeile R#s zuweisen. Falls eine Zeile weniger als die maximale Anzahl an Instruktions- Operationen enthält, werden einige der zugewiesenen R#s für diese Zeile nicht benutzt. Jedoch kann die PC-Silo-und-Umleitungs-Einheit 48 konfiguriert sein zur Zuweisung des nächsten Satzes von R#s an die nächste Zeile von Instruktions-Operationen und daher verbleiben die zugewiesenen aber nicht benutzten R#s unbenutzt bis die entsprechende Zeile der Instruktions-Operationen zurückgezogen wird. Auf diese Weise kann ein Teil der einer bestimmten Zeile zugewiesenen R#s zur Identifizierung der Zeile innerhalb des Prozessors 10 benutzt werden. In einem Ausführungsbeispiel kann ein Maximum von 8 ROPs einer Zeile zugeteilt werden. Entsprechend kann dem ersten ROP innerhalb jeder Zeile ein R# zugewiesen werden, das ein Vielfaches von 8 ist. Unbenutzte R#s werden entsprechend automatisch übersprungen.
  • In der vorstehenden Erläuterung wurde die Zeilenvorhersagevorrichtung 12 dahingehend beschrieben, dass sie nächste Adressen vorhersagt und Information über Instruktions-Operationen für Zeilen von Instruktions-Operationen bereitstellt. Diese Operation erfolgt so lange, wie jede Abruf-Adresse in der Zeilenvorhersagevorrichtung 12 trifft. Auf das Feststellen eines Fehltreffers in der Zeilenvorhersagevorrichtung 12 leitet die Zuweisungseinheit 16 die entsprechenden Instruktions-Bytes von dem I-Cache 14 an die Vorhersage-Fehltreffer-Dekodiereinheit 26 weiter. Die Vorhersage-Fehltreffer-Dekodiereinheit 26 dekodiert die an dem Versatz, der von der fehlgetroffenen Abruf-Adresse angegeben wird, beginnenden Instruktionen und erzeugt eine Zeile von Information zu der Instruktions-Operation und eine nächste Abruf-Adresse. Die Vorhersage-Fehltreffer-Dekodiereinheit 26 erzwingt jegliche Begrenzungen auf eine Zeile von Instruktions-Operationen für die der Prozessor 10 entworfen ist (zum Beispiel maximale Anzahl von Instruktions-Operationen, maximale Anzahl von Instruktionen, Abbruch bei Verzweigungsinstruktionen usw.). Nach Beendigung des Dekodierens einer Zeile, stellt die Vorhersage-Fehltreffer-Dekodiereinheit 26 die Information der Zeilenvorhersagevorrichtung 12 zum Speichern bereit. Es wird festgestellt, dass die Vorhersage-Fehltreffer-Dekodiereinheit 26 zur Ausgabe von Instruktionen konfiguriert sein kann während sie dekodiert werden. Alternativ kann die Vorhersage-Fehltreffer-Dekodiereinheit 26 die Information der Zeile der Instruktion dekodieren und der Zeilenvorhersagevorrichtung 12 zum Speichern bereitzustellen. Nachfolgend kann die fehlgetroffene Abruf-Adresse nochmals in der Zeilenvorhersagevorrichtung 12 versucht werden und ein Treffer kann festgestellt werden. Ferner kann ein Treffer in der Zeilenvorhersagevorrichtung 12 festgestellt werden und ein Fehltreffer kann in dem I-Cache auftreten. Die entsprechenden Instruktions-Bytes können durch die externe Interface-Einheit 46 abgerufen und in dem I-Cache 14 gespeichert werden.
  • Gemäß einem Ausführungsbeispiel verwenden die Zeilenvorhersagevorrichtung 12 und der I-Cache 14 eine physische Adressierung. Jedoch wird der PC-Silo-und-Umleitungs-Einheit 48 auf das Feststellen einer Ausnahme eine logische (oder virtuelle) Adresse zugeführt. Entsprechend werden die umgeleiteten Adressen von dem ITB 50 zur Überreichung an die Zeilenvorhersagevorrichtung 12 übersetzt. Zusätzlich behält die PC-Silo-und-Umleitungs-Einheit 48 einen virtuellen Vorausschau-PC-Wert für die Benutzung von PC relativen Berechnungen bei, wie beispielsweise relative Verzweigungs-Ziel-Adressen. Der jeder Zeile entsprechende virtuelle Vorausschau-PC wird von dem ITB 50 übersetzt, um sicherzustellen, dass die entsprechende physische Adresse mit der von der Zeilenvorhersagevorrichtung 12 erzeugten physischen Abruf-Adresse übereinstimmt. Falls eine Fehlübereinstimmung auftritt wird die Zeilenvorhersagevorrichtung 12 mit der korrekten physischen Adresse aktualisiert und die korrekten Instruktionen werden abgerufen. Die PC-Silo-und-Umleitungs-Einheit 48 handhabt ferner mit dem Abrufen jenseits von Schutzgrenzen usw. zusammenhängende Ausnahmen. Die PC-Silo-und-Umleitungs-Einheit 48 behält auch einen Zurückziehungs-PC-Wert bei, der die Adresse der zuletzt zurückgezogenen Instruktion anzeigt.
  • Die Dekodiereinheit 24 ist zum Empfangen von Instruktions-Operationen von der Zuweisungseinheit 16 in einer Vielzahl von Ausgabepositionen, wie oben beschrieben, konfiguriert. Die Dekodiereinheit 24 dekodiert die jeder Ausgabeposition zugewiesenen Instruktions-Bytes parallel (zusammen mit einem Hinweis, welche der den Instruktions-Bytes entsprechende Instruktions-Operation in einer bestimmten Ausgabeposition zu erzeugen ist). Die Dekodiereinheit 24 identifiziert Ursprungs- und Bestimmungs-Operanden für jede Instruktions-Operation und erzeugt die von den Instruktions-Kernen 40A-40B verwendete Instruktions-Operations-Kodierung. Die Dekodiereinheit 24 ist auch zum Abrufen von Mikrocode-Routinen von der Mikrocode-Einheit 28 für Instruktionen, welche in einem Mikrocode implementiert sind, konfiguriert.
  • Gemäß einem bestimmten Ausführungsbeispiel werden die folgenden Instruktions-Operationen von dem Prozessor 10 unterstützt: Ganzzahl, Gleitkomma-Addition (umfassend Multimedia), Gleitkomma-Multiplikation (umfassend Multimedia), Verzweigung, Laden, Erzeugung von Speicher-Adressen und Speichern von Daten. Jede Instruktions-Operation kann bis zu 2 Ursprungs-Register-Operanden und einen Bestimmungs-Register-Operanden verwenden. Gemäß einem bestimmten Ausführungsbeispiel kann ein einzelner Bestimmungs-Register-Operand Ganzzahl-ROPs zugewiesen werden, um sowohl das Ganzzahl-Ergebnis als auch eine Aktualisierung eines Zustandskodes (oder Flaggen) zu speichern. Die entsprechenden logischen Register werden beide die entsprechende PR# nach dem Zurückziehen der Ganzzahl-Operation empfangen. Gewisse Instruktionen können zwei Instruktions-Operationen desselben Typs erzeugen, um zwei Bestimmungs-Register zu aktualisieren (zum Beispiel POP, welches die ESP und das angegebene Bestimmungs-Register aktualisiert).
  • Die dekodierten Instruktions-Operationen und die Ursprungs- und Bestimmungs-Register-Nummern werden der Abbildungseinheit 30 bereitgestellt. Die Abbildungseinheit 30 ist zur Durchführung der Register-Neubenennung durch das Zuweisen von physischen Register-Nummern (PR#s) an jeden Bestimmungs-Register-Operanden und Ursprungs-Register-Operanden jeder Instruktions-Operation konfiguriert. Die physische Register-Nummer identifiziert Register innerhalb der Register-Dateien 38A-38B. Zusätzlich weist die Abbildungseinheit 30 jeder Instruktions-Operation eine Warteschlangen-Nummer (IQ#) zu, welche die Stelle innerhalb der Instruktions-Warteschlangen 36A-36B identifiziert, die zum Speichern der Instruktions-Operation zugewiesen ist. Die Abbildungseinheit 30 stellt ferner einen Hinweis auf die Abhängigkeiten für jede Instruktions-Operation bereit, indem Warteschlangen-Nummern für die Instruktionen vergeben werden, die jede einem Ursprungs-Operanden einer Instruktions-Operation zugewiesene physische Register-Nummer aktualisieren. Die Abbildungseinheit 30 aktualisiert den Abbildungssilo 32 mit den physischen Register-Nummern und der Instruktion für die Nummern, welche jeder Instruktions-Operation zugewiesen sind (genauso wie die entsprechenden logischen Register-Nummern). Ferner kann der Abbildungssilo 32 konfiguriert sein, einen Vorausschau-Zustand, der den logischen Registern vor der Zeile von Instruktionen entspricht, und einen R#, der die Zeile von Instruktionen im Hinblick auf den PC-Silo identifiziert, zu speichern. Ähnlich zu dem oben beschriebenen PC-Silo kann der Abbildungssilo 32 einen zirkularen Puffer von Einträgen aufweisen. Jeder Eintrag kann zum Speichern der einer Zeile von Instruktions-Operationen entsprechenden Information konfiguriert sein.
  • Die Abbildungseinheit 30 und der Abbildungssilo 32 sind ferner zum Empfangen eines Rückzugs-Hinweises von dem PC-Silo 48 konfiguriert. Auf das Zurückziehen einer Zeile von Instruktions-Operationen leitet der Abbildungssilo 32 die der Zeile zugewiesenen Bestimmungs-Physisch-Register-Nummern und die entsprechenden Logisch-Register-Nummern zum Speichern an den architekturellen Neubenennungs-Block 34 weiter. Der architekturelle Neubenennungs-Block 34 speichert eine jedem logischen Register entsprechende physische Register-Nummer, welche den übergebenden Zustand des Registers für jedes logische Register darstellt. Die von dem architekturellen Neubenennungs-Block 34 auf die Aktualisierung der entsprechenden logischen Register mit einer neuen physischen Register-Nummer hin ersetzten physischen Register-Nummern werden an die Frei-Liste der physischen Register-Nummern zur Zuweisung an nachfolgende Instruktionen zurückgegeben. Gemäß einem Ausführungsbeispiel werden, vor dem Zurückgeben einer physischen Register-Nummer an die Frei-Liste, die physischen Register-Nummern mit den verbleibenden physischen Register-Nummern innerhalb des architekturellen Neubenennungs-Blocks 34 verglichen. Falls eine physische Register-Nummer nach der Ersetzung immer noch innerhalb des architekturellen Neubenennungs-Blocks 34 vorhanden ist, wird die physische Register-Nummer nicht zu der Frei-Liste hinzugefügt. Ein derartiges Ausführungsbeispiel kann in Fällen verwendet werden, in denen die gleiche physische Register-Nummer zum Speichern von mehr als einem Ergebnis einer Instruktion benutzt wird. Beispielsweise kann ein die x86 Instruktions-Satz-Architektur verwendendes Ausführungsbeispiel physische Register bereitstellen, die groß genug zum Speichern von Gleitkomma-Operanden sind. Auf diese Weise kann jedes physische Register zum Speichern jeglicher Art von Operanden verwendet werden. Jedoch nutzen Ganzzahl-Operanden und Bedingungscode-Operanden den Platz innerhalb eines gegebenen physischen Registers nicht voll aus. In einem derartigen Ausführungsbeispiel kann der Prozessor 10 ein einzelnes physisches Register anweisen, sowohl das Ganzzahl-Ergebnis als auch ein Bedingungscode-Ergebnis einer Instruktion zu speichern. Ein darauffolgendes Zurückziehen einer Instruktion, welche das einem physischen Register entsprechende Bedingungscode-Ergebnis überschreibt, vermag nicht, das gleiche Ganzzahl-Register zu aktualisieren, und daher kann das physische Register auf die Übergabe eines neuen Bedingungscode-Ergebnisses nicht freigemacht werden. Ähnlich vermag ein nachfolgendes Zurückziehen einer Instruktion, welche das einem physischen Register entsprechende Ganzzahl-Register aktualisiert, nicht, das Bedingungscode-Register zu aktualisieren, und daher kann das physische Register auf die Übergabe eines neuen Ganzzahl-Ergebnisses nicht freigemacht werden.
  • Darüber hinaus sind die Abbildungseinheit 30 und der Abbildungssilo 32 ferner zum Empfangen von Ausnahme-Hinweisen von dem PC-Silo 48 konfiguriert. Zeilen von Instruktions-Operationen, die der die Ausnahme verursachenden Instruktions-Operation enthaltenden Zeile folgen, werden innerhalb des Abbildungssilos 32 als ungültig markiert. Die den darauffolgenden Zei len von Instruktions-Operationen entsprechenden physischen Register-Nummern werden auf die Auswahl der entsprechenden Zeilen für das Zurückziehen freigemacht (und der architekturelle Neubenennungs-Block 34 wird nicht mit den ungültig gemachten Bestimmungsregistern aktualisiert). Zusätzlich wird der Zustand des Vorausschau-Registers, der von der Abbildungseinheit 30 aufrechterhalten wurde, zu dem der die Ausnahme verursachenden Instruktion entsprechenden Zustand des Vorausschau-Registers wiederhergestellt.
  • Die Zeile von Instruktions-Operationen, die Ursprungs-Physisch-Register-Nummern, die Ursprungs-Warteschlangen-Nummern und die Bestimmungs-Physisch-Register-Nummern werden in den Instruktions-Warteschlangen 36A-36B entsprechend den von der Abbildungseinheit 30 zugewiesenen Warteschlangen-Nummern gespeichert. Gemäß einem Ausführungsbeispiel sind die Instruktions-Warteschlangen 36A-36B symmetrisch und können jegliche Instruktionen speichern. Ferner können Abhängigkeiten für eine bestimmte Instruktions-Operation auftreten im Hinblick auf andere Instruktions-Operationen, welche in einer von beiden Instruktions-Warteschlangen gespeichert sind. Die Abbildungseinheit 30 kann beispielsweise eine Zeile von Instruktions-Operationen in eine der Instruktions-Warteschlangen 36A-36B speichern und eine darauffolgende Zeile von Instruktions-Operationen in die andere der Instruktions-Warteschlangen 36A-36B speichern. Eine Instruktions-Operation verbleibt in der Instruktions-Warteschlange 36A-36B zumindest bis die vorherigen Instruktions-Operationen, von denen die Instruktions-Operation abhängig ist, ausgeführt werden und läßt die Instruktions-Warteschlangen 36A-36B aktualisieren (und die Instruktions-Operation wird für die Ausführung eingetragen). In einem Ausführungsbeispiel verbleiben die Instruktions-Operationen bis zur Zurückziehung in den Instruktions-Warteschlangen 36A-36B.
  • Die Instruktions-Warteschlangen 36A-36B bestimmen, auf das Einplanen einer bestimmten Instruktions-Operation zur Ausführung hin, mit welcher Taktfrequenz diese bestimmte Instruktions-Operation die Register-Dateien 38A-38B aktualisieren wird. Verschiedene Ausführungs-Einheiten innerhalb der Ausführungs-Kerne 40A-40B können unterschiedliche Anzahlen von Stufen der Pipeline (und damit unterschiedliche Latenzzeiten) verwenden. Ferner können gewisse Instruktionen innerhalb einer Pipeline höhere Latenzzeiten als andere erfahren. Entsprechend wird ein Countdown erzeugt, der die Latenzzeit für die bestimmte Instruktions-Operation mißt (in Vielfachen von Taktzyklen). Die Instruktions-Warteschlangen 36A-36B warten die angegebene Anzahl von Taktzyklen ab, bis die Aktualisierung stattfindet und zeigen dann an, dass die Instruktions-Operationen, die von der bestimmten Instruktions-Operation abhängen, vorbereitet werden können. Jede Instruktions-Warteschlange 36A-36B behält die Countdowns für Instruktions-Operationen innerhalb dieser Instruktions-Warteschlange bei und erlaubt es intern abhängigen Instruktions-Operationen vorbereitet zu werden, wenn der Countdown abgelaufen ist. Zusätzlich stellt die Instruktions-Warteschlange auf das Ablaufen des Countdowns Hinweise an die andere Instruktions-Warteschlange bereit. Nachfolgend kann die andere Instruktions-Warteschlange abhängige Instruktions-Operationen vorbereiten. Diese verzögerte Übertragung von Abschlüssen von Instruktions-Operationen an die andere Instruktions-Warteschlange erlaubt es den Register-Dateien 38A-38B von einem der Ausführungs-Kerne 40A-40B bereitgestellte Ergebnisse an die andere Register-Datei weiter zu leiten. Jede der Register-Dateien 38A-38B implementiert den von dem Prozessor 10 verwendeten Satz von physischen Registern und wird von einem der Ausführungs-Kerne 40A-40B aktualisiert. Die Aktualisierungen werden dann an die andere Register-Datei weiter geleitet. Es ist festzustellen, dass die Instruktions-Warteschlangen 36A-36B eine Instruktion vorbereiten können, sobald ihre Abhängigkeiten befriedigt worden sind (d.h. außer-der-Reihe im Hinblick auf die Reihenfolge innerhalb der Warteschlange).
  • Von der Instruktions-Warteschlange 36A ausgegebene Instruktions-Operationen lesen Ursprungs-Operanden entsprechend den Ursprungs-Physisch-Register-Nummern aus der Register-Datei 38A ein und werden zur Ausführung an den Ausführungs-Kern 40A weiter geleitet. Der Ausführungs-Kern 40A führt die Instruktions-Operation aus und aktualisiert das dem Ziel innerhalb der Register-Datei 38A zugewiesene physische Register. Einige Instruktions-Operationen haben keine Bestimmungs-Register und der Ausführungs-Kern 40A aktualisiert in diesem Fall kein Ursprungs-Physisch-Register. Entsprechend meldet der Ausführungs-Kern 40A die R# der Instruktions-Operation Ausnahme-Information bezüglich der Instruktions-Operation (wenn überhaupt vorhanden) an die PC-Silo und-Umleitungs-Einheit 48. Die Instruktions-Warteschlange 36B, die Register-Datei 38B und der Ausführungs-Kern 40B können in ähnlicher Weise arbeiten.
  • Gemäß einem Ausführungsbeispiel sind der Ausführungs-Kern 40A und der Ausführungs-Kern 40B symmetrisch. Jeder Ausführungs-Kern 40 kann beispielsweise eine Gleitkomma-Additions-Einheit, eine Gleitkomma-Multiplikations-Einheit, zwei Ganzzahl-Einheiten, eine Verzweigungs-Einheit, eine Lade-Adressen-Erzeugungs-Einheit, eine Speicher-Adressen-Erzeugungs-Einheit und eine Speicher-Daten-Einheit umfassen. Andere Konfigurationen von Ausführungseinheiten sind möglich.
  • Unter den Instruktions-Operationen, welche keine Bestimmungs-Register haben, sind Speicher-Adressen-Erzeugungen, Speicher-Daten-Operationen und Verzweigungs-Operationen. Die Speicher-Adressen/Speicher-Daten-Operationen stellen der Lade-/Speicher-Einheit 42 Ergebnisse bereit. Die Lade-/Speicher-Einheit 42 stellt eine Schnittstelle zu dem D-Cache 44 zur Durchführung von Speicher-Daten-Operationen bereit. Die Ausführungs-Kerne 40A-40B führen Lade-ROPs und Speicher-Adressen-ROPs zur Erzeugung von Lade- beziehungsweise Speicher-Adressen aus, in Abhängigkeit von den Adress-Operanden der Instruktionen. Genauer gesagt können die Lade-Adressen und die Speicher-Adressen dem D-Cache 44 auf die Erzeugung dieser durch die Ausführungs-Kerne 40A-40B übergeben werden (direkt über die Verbindungen zwischen den Ausführungs-Kernen 40A-40B und dem D-Cache 44). Lade-Adressen, welche den D-Cache 44 treffen, resultieren in von dem D-Cache 44 zu den Register-Dateien 38 übertragenen Daten. Auf der anderen Seite werden Speicher-Adressen, welche treffen, ei nem Eintrag einer Speicher-Warteschlange zugeordnet. Nachfolgend wird das Speicher-Datum von einer Speicher-Daten-Instruktions-Operation bereitgestellt (welche benutzt wird, um das Speicher-Datum von den Register-Dateien 38A-38B zu der Lade-/Speicher-Einheit 42 zu leiten). Auf das Zurückziehen der Speicher-Instruktion wird das Datum in dem D-Cache 44 gespeichert. Zusätzlich kann die Lade-/Speicher-Einheit 42 einen Lade-/Speicher-Puffer zum Speichern von Lade-/Speicher-Adressen, welche den D-Cache 44 für nachfolgende Cache-Auffüllungen (über das externe Interface 46) fehltreffen, und zum erneuten Versuchen der fehlgetroffenen Lade-/Speicher-Operation haben. Die Lade-/Speicher-Einheit 42 ist ferner zum Handhaben von Lade-/Speicher-Speicherabhängigkeiten konfiguriert.
  • Die nun zu erläuternde 2 zeigt ein Blockschaltbild einer Ausführungsform der Instruktions-Warteschlange 36A. Die Instruktions-Warteschlange 36B kann ähnlich konfiguriert sein. Weitere Ausführungsformen sind möglich und vorgesehen. Bei der Ausführungsform gemäß 2 weist die Instruktions-Warteschlange 36A eine Abhängigkeitsvektor-Warteschlange 60A, eine Warteschlangen-Steuereinheit 62A, eine Opcode-/Konstanten-Speichervorrichtung 64A und eine Auswahl-Logik 66A auf. Die Abhängigkeitsvektor-Warteschlange 60A ist mit einem Abhängigkeitsvektor-Bus 68 aus der Abbildungseinheit 30 sowie einer Warteschlangen-Steuereinheit 62A, einer Auswahl-Logik 66A und einer Instruktions-Warteschlange 36B verbunden. Die Warteschlangen-Steuereinheit 62A ist mit einem Tail-Pointer-Steuerbus 70 aus der Abbildungseinheit 30, einem IQ#s-Bus 72A aus der Abbildungseinheit 30, und einer Opcode-/Konstanten-Speichervorrichtung 64A verbunden. Die Opcode-/Konstanten-Speichervorrichtung 64A ist mit der Auswahl-Logik 66A, einem Ausgangs-/Bestimmungs-PR's-Bus 72B aus der Abbildungseinheit 30, einer Opcode-/R#s-Unmittelbar-Feld-Bus 74 aus der Abbildungseinheit 30 und einem PC-Silo 48 verbunden. Die Opcode-/Konstanten-Speichervorrichtung 64A ist ferner mit einem Bus 76 verbunden, auf dem gewählte opcodes, Unmittelbar-Daten, PR#s, R#s und IQ#s an die Register-Datei 38A und den Ausführungs-Kern 40A übermittelt werden können. Die Auswahl-Logik 66A ist mit einem Speicher-Adress-IQ#-Bus 78A verbunden.
  • Generell wird einem ROP ein Eintrag in einer Abhängigkeitsvektor-Warteschlange 66A und einer Opcode-/Konstanten-Speichervorrichtung 64A zugewiesen, der der IQ# entspricht, die diesem ROP von der Abbildungseinheit 30 zugewiesen worden ist. Anders ausgedrückt identifiziert die IQ# den Eintrag in der Abhängigkeitsvektor-Warteschlange 60A und die Opcode-/Konstanten-Speichervorrichtung 64A, in der die dem ROP entsprechende Information gespeichert wird. Die zugewiesenen IQ#s werden der Instruktions-Warteschlange 36A auf dem IQ#s-Bus 72A zugeführt. Die Warteschlangen-Steuereinheit 62A empfängt die zugewiesenen IQ#s und aktiviert entsprechende Schreibaktivierungssignale, um die Abhängigkeitsvektor-Warteschlange 60A und die Opcode-/Konstanten-Speichervorrichtung 64A zu veranlassen, die empfangene Information an der zugewiesenen Eintragsstelle zu speichern.
  • Die Abhängigkeitsvektor-Warteschlange 60A speichert für jedes in der Instruktions-Warteschlange 36A identifizierte ROP einen Abhängigkeitsvektor. Generell zeichnet ein "Abhängigkeitsvektor" jede Abhängigkeit auf, die für das entsprechende ROP vermerkt ist. Die Abhängigkeiten können Operanden-Abhängigkeiten oder Reihenfolgebildungs-Abhängigkeiten sein. Im folgenden wird eine Ausführungsform eines Abhängigkeitsvektors erläutert, obwohl bei anderen Ausführungsformen auch andere Abhängigkeitsvektoren verwendet werden können. Ein ROP ist zur Einplanung nicht wählbar, bis sämtliche Abhängigkeiten, die in dem entsprechenden Abhängigkeitsvektor aufgezeichnet sind, erfüllt sind. Nachdem jede der Abhängigkeiten erfüllt ist, wird von der Abhängigkeitsvektor-Warteschlange 60A ein Planungs-Request-Signal auf einer Planungs-Request-Leitung, die dem Eintrag entspricht, aktiviert, um die Logik 66A auszuwählen, die die ROPs in der Instruktions-Warteschlange 36A zur Ausführung einplant. Die Abhängigkeitsvektoren, die einer Reihe seitens der Instruktions-Warteschlange 36A emp fangener ROPs entsprechen, werden auf dem Abhängigkeitsvektor-Bus 68 der Abhängigkeitsvektor-Warteschlange 60A zugeführt.
  • Die Opcode-/Konstanten-Speichervorrichtung 64A speichert Instruktions-Information, bei der es sich nicht um die zum Einplanen der ROPs verwendete Abhängigkeits-Information handelt. Beispielsweise werden der Opcode und sämtliche unmittelbaren Daten, die von dem ROP identifiziert werden, in der Opcode-/Konstanten-Speichervorrichtung 64A gespeichert. Zusätzlich wird die R#, die von dem PC-Silo 48 dem ROP zugewiesen wurde, in der Opcode-/Konstanten-Speichervorrichtung 64A gespeichert. Die Opcodes, die unmittelbaren Daten und die R#s, die einer Reihe von ROPs entsprechen, werden auf dem OPcodes-/R#-/Unmittelbar-Felder-Bus 74 aus der Abbildungseinheit 30 empfangen. Ferner werden Ausgangs- und Ziel-PR#s, die der ROP von der Abbildungseinheit 30 zugewiesen worden sind, in der Opcode-/Konstanten-Speichervorrichtung 64A gespeichert. Die Ausgangs- und Ziel-PR#s, die einer Reihe von ROPs entsprechen, werden auf dem Ausgangs-/Ziel-Bus-PR#s-Bus 72B aus der Abbildungseinheit 30 empfangen. Die Opcode-/Konstanten-Speichervorrichtung 64A kann z.B. einen Direktzugriffsspeicher (RAM) aufweisen. Alternativ können verschiedene andere Speichervorrichtungen verwendet werden (z.B. ein Set von Registern oder andere getaktete Speichervorrichtungen).
  • Die Auswahl-Logik 66A übermittelt die IQ#s der zur Ausführung eingeplanten ROPs zur Ausführung an die Opcode-/Konstanten-Speichervorrichtung 64A. Die Opcode-/Konstanten-Speichervorrichtung 64A liest die von den gewählten IQ#s spezifizierten Einträge und gibt die Opcodes, die unmittelbaren Daten, die PR#s, die R#s und die IQ#s der entsprechenden ROPs auf dem Bus 76 an den Ausführungs-Kern 40A und die Registerdatei 38A aus. Die Registerdatei 38A empfängt die Ausgangs-PR#s zum Lesen der Ausgangs-Operanden. Der Ausführungs-Kern 40A empfängt die verbleibende Information zum Ausführen des ROP. Die Auswahl-Logik 66A ist konfiguriert zum Einplanen bis zu einer Instruktions-Operation pro Taktzyklus für jede Ausführungseinheit in dem Ausführungs-Kern 40A.
  • Gemäß einer Ausführungsform weist die Abbildungseinheit 30 die Ausführungseinheit in dem Ausführungs-Kern 40A zu, in dem eine gegebene Instruktion ausgeführt werden soll. Bestimmte ROPs können nur von einer der Ausführungseinheiten ausgeführt werden und werden somit dieser Ausführungseinheit zugewiesen. Andere ROPs können von mehreren Ausführungseinheiten ausgeführt werden und können so gleichmäßig wie möglich zwischen den mehreren Ausführungseinheiten aufgeteilt werden. Beispielsweise sind gemäß einer Ausführungsform zwei Ganzzahl-Ausführungseinheiten in dem Ausführungs-Kern 40A enthalten. Die Abbildungseinheit 30 kann Ganzzahl-ROPs in einer Reihe von ROPs alternierend den beiden Ausführungseinheiten zuweisen. Die Auswahl-Logik 66A plant jedes ROP für die zugewiesene Ausführungseinheit ein, nachdem die Abhängigkeiten dieser ROP erfüllt worden sind. Gemäß einer bestimmten Ausführungsform empfängt die Auswahl-Logik 66A die zugewiesenen Ausführungseinheiten für eine Reihe von ROPs gleichzeitig mit der Reihe von ROPs, die seitens der Abhängigkeitsvektor-Warteschlange 60A und der Opcode-/Konstanten-Speichervorrichtung 64A empfangen worden sind. Alternativ kann die zugewiesene Ausführungseinheit in der Abhängigkeitsvektor-Warteschlange 60A oder der Opcode-/Konstanten-Speichervorrichtung 64A gespeichert werden, um zur Planung verwendet zu werden.
  • Die Auswahl-Logik 66A kann zusätzlich die bereits erwähnte Abwärtszähl-Schaltung enthalten, um den Taktzyklus zu bestimmen, bei dem ein eingeplantes ROP als erfüllt in Bezug auf die abhängigen ROPs in den Instruktions-Warteschlange 36A-36B zu gelten hat. Bei der vorliegenden Ausführungsform wird eine Abhängigkeit etwas vor dem Abschluss des ROPs erfüllt, bei dem die Abhängigkeit vermerkt worden ist. Insbesondere können eine oder mehrere Pipeline-Stufen zwischen dem Einplanen eines ROP aus Instruktions-Warteschlangen 36A-36B und dem Punkt existieren, am dem dieses ROP Register-Dateien 36A-36B liest (z.B. 2 Stufen gemäß einer bestimmten Ausführungsform). Andere Ausführungsformen weisen zwei oder weniger Stufen auf, einschließlich keiner Stufe (d.h. das Abwärtszählen läuft beim Aktualisieren der Register-Dateien 36A-36B aus). Beim Auslaufen einer Abwärtszählung wird von der Auswahl-Logik 66A ein Schreib-Gültig-Signal auf einer Schreib-Gültig-Leitung aktiviert, das dem Eintrag in der Instruktions-Warteschlange 36A entspricht, die für den Abschluss des ROP zugewiesen worden ist. Das Schreib-Gültig-Signal bleibt aktiviert, bis ein entsprechender Warteschlangen-Eintrag einem anderen ROP zugewiesen worden ist. Das Schreib-Gültig-Signal wird von der Abhängigkeitsvektor-Warteschlange 60A verwendet, um zu erkennen, dass eine entsprechende Abhängigkeit erfüllt worden ist. Anders ausgedrückt kann jedes ROP, für das eine Abhängigkeit für das abgeschlossene ROP aufgezeichnet worden ist, diese Abhängigkeit als erfüllt erkennen. Falls jede andere aufgezeichnete Abhängigkeit erfüllt ist, kann die Abhängigkeits-Warteschlange 60A das Planungs-Requets-Signal auf der diesem ROP entsprechenden Planungs-Request-Leitung für die Auswahl-Logik 66A aktivieren, um das Planen anzufordern.
  • Bei jedem Taktzyklus evaluiert jeder Eintrag in der Abhängigkeitsvektor-Warteschlange 60A den gespeicherten Abhängigkeitsvektor, um festzustellen, ob die Abhängigkeiten erfüllt sind. Falls die aufgezeichneten Abhängigkeiten erfüllt sind, wird das entsprechende Planungs-Request-Signal auf der entsprechenden Planungs-Request-Leitung aktiviert. Gemäß der hier vorliegenden Verwendung bezeichnet das "Evaluieren" eines Abhängigkeitsvektors das Prüfen der in dem Abhängigkeitsvektor aufgezeichneten Abhängigkeiten, und zwar in Verbindung mit den Schreib-Gültig-Signalen, die angeben, welche ROPs abgeschlossen worden sind, um zu bestimmen, welche Abhängigkeitsvektoren nur erfüllte Abhängigkeiten aufzeichnen. Die ROPs, welche den Abhängigkeitsvektoren entsprechen, die nur erfüllte Abhängigkeiten aufzeichnen, sind zur Ausführung wählbar und aktivieren ein Planungs-Request-Signal für die Auswahl-Logik 66A.
  • Gemäß der vorliegenden Ausführungsform können die ROPs bis zu zwei Ausgangs-Operanden haben und können somit bis zu zwei Ausgangs-Operanden-Abhängigkeiten haben, die in dem entsprechenden Abhängigkeits vektor vermerkt sind. Ferner sind gemäß der vorliegenden Ausführungsform mehrere Reihenfolgebildungs-Abhängigkeiten zum Laden von ROPs definiert. Erstens sind Lade-ROPs reihenfolge-abhängig von jedem vorherigen Speicher-Adress-ROP. Diese Abhängigkeit wird auferlegt, um die von der Lade-/Speicher-Einheit 42 verwendete Abhängigkeits-Prüf-Logik zu vereinfachen. Falls Adressen vorheriger Speicherungen beim Ausführen eines Lade-ROP nicht verfügbar sind, dann muss die Logik zum Detektieren, dass eine Abhängigkeit von einer der vorherigen Speicherungen (bestimmt durch das Vergleichen der Adresse der Speicherung mit der Adresse des Ladens) in irgendeiner Weise in der Lage sein, die Abhängigkeit zu einem späteren Zeitpunkt zu erkennen und die Abhängigkeit korrekt zu handhaben. Andererseits sind durch Erzwingen einer Reihenfolgebildungs-Abhängigkeit für jedes vorherige Speicher-Adress-ROP die Speicher-Adressen verfügbar, und die Abhängigkeits-Prüfung kann beim Ausführen des Lade-ROP abgeschlossen werden. Zusätzlich können Lade-ROPs Reihenfolgebildungs-Abhängigkeiten von früheren Speicher-Daten-ROPs erfahren, falls eine Abhängigkeit von einer bestimmten Speicherung über einen weiter unten beschriebenen Speicher-/Lade-Vorwärts-Mechanismus vorhergesagt wird. Weitere Typen von Reihenfolgebildungs-Abhängigkeiten können wie gewünscht verwendet werden. Beispielsweise handelt es sich bei bestimmten Instruktionen um Synchronisier-Instruktionen (d.h. jede Instruktion vor der Synchronisier-Instruktion wird vor dem Ausführen der Synchronisier-Instruktion abgeschlossen, und jede Instruktion nach der Synchronisier-Instruktion wird nicht vor dem Ausführen der Synchronisier-Instruktion ausgeführt). Synchronisier-Instruktionen können erzielt werden, indem für die Synchronisier-Instruktion eine Reihenfolgebildungs-Abhängigkeit von jedem vorherigen ROP vermerkt wird und für jedes nachfolgende ROP eine Reihenfolgebildungs-Abhängigkeit von der Synchronisations-Instruktion vermerkt wird.
  • Zum Aufzeichnen der Speicher-Adress-ROP-Reihenfolgebildungs-Abhängigkeiten zum Laden der ROPs hält die Abbildungseinheit 30 einen (noch zu beschreibenden) Speicher-Adress-Abhängigkeitsvektor aufrecht. Der Speicher-Adress-Abhängigkeitsvektor zeichnet jedes ausstehende Speicher- Adress-ROP zur Aufnahme in den Abhängigkeitsvektor für nachfolgende Lade-ROPs auf. Somit sendet, wenn festgestellt wird, dass ein Speicher-Adress-ROP erfolgreich abgeschlossen worden ist, die Auswahl-Logik 66A die IQ# des Speicher-Adress-ROP auf dem Speicher-Adress-IQ#-Bus 78A an die Abbildungseinheit 30.
  • Gemäß 2 ist die vorliegende Ausführungsform der Abhängigkeitsvektor-Warteschlange 60A mit einer Instruktions-Warteschlange 36B verbunden (und insbesondere mit einer ähnlichen Abhängigkeitsvektor-Warteschlange, wie sie unten in 4 gezeigt ist). Die Abhängigkeitsvektor-Warteschlange 60A lenkt die von der Auswahl-Logik 66A ausgegebenen Schreib-Gültig-Reihen zu der Abhängigkeitsvektor-Warteschlange in der Instruktions-Warteschlange 36B und empfängt Schreib-Gültig-Reihen, die ROPs entsprechen, welche in der Instruktions-Warteschlange 36B gespeichert sind. Logischerweise können die Instruktions-Warteschlangen 36A-36B als eine einzige Instruktions-Warteschlange betrachtet werden, die eine Anzahl von Einträgen aufweist, welche der Summe der Einträge in der Instruktions-Warteschlange 36A und der Einträge in der Instruktions-Warteschlange 36B gleicht. Eine Hälfte der IQ#s identifiziert Einträge in der Instruktions-Warteschlange 36A, und die andere Hälfte der IQ#s identifiziert Einträge in der Instruktions-Warteschlange 36B. Beispielsweise kann das signifikanteste Bit der IQ# einen Eintrag dahingehend identifizieren, dass er sich in der Instruktions-Warteschlange 36A oder der Instruktions-Warteschlange 36A befindet.
  • Es kann eine Abhängigkeit zwischen einem ROP in einer der Instruktions-Warteschlangen 36A-36B und einem ROP in der anderen Instruktions-Warteschlange existieren. Somit können die Abhängigkeitsvektoren Abhängigkeiten aufzeichnen, die ROPs von der anderen Instruktions-Warteschlange entsprechen. Die der anderen Instruktions-Warteschlange entsprechenden Schreib-Gültig-Leitungen werden jeder Abhängigkeitsvektor-Warteschlange zugeleitet, um beim Evaluieren der darin gespeicherten Abhängigkeitsvektoren verwendet zu werden.
  • Die Warteschlangen Steuereinheit 62A kommuniziert über den Tail-Pointer-Steuerbus 70 mit der Abbildungseinheit 30. Generell ist die Warteschlangen Steuereinheit 62A konfiguriert zum Halten von Head- und Tail-Pointern, welche die erste gültige Instruktion in der Instruktions-Warteschlange 36A (in Programm-Reihenfolge) bzw. die letzte gültige Instruktion in der Instruktions-Warteschlange 36B (in Programm-Reihenfolge) angeben. Die Warteschlangen Steuereinheit 62A übermittelt den aktuellen Tail-Pointer über den Tail-Pointer-Steuerbus 70 an die Abbildungseinheit 30. Falls die Abbildungseinheit 30 Einträge in der Instruktions-Warteschlange 36A zuweist, gibt die Abbildungseinheit 30 die Anzahl der über den Tail-Pointer-Steuerbus 70 übermittelten Warteschlangen-Einträge derart zurück, dass die Warteschlangen Steuereinheit 36A den Tail-Pointer aktualisieren kann. Die Warteschlangen Steuereinheit 62A kann ferner ein Warteschlangen-Voll-Signal ausgeben, falls bei einer Reihe von ROPs unzureichender Platz zwischen dem Tail-Pointer und dem Head-Pointer besteht. Es ist anzumerken, dass bei der vorliegenden Ausführungsform den ROPs eine IQ# mehrere Pipeline-Stufen vor dem Speichern der ROPs in der Instruktions-Warteschlange 36A zugewiesen werden kann. Somit können die zugewiesenen IQ#s mit den ROPs zu der Instruktions-Warteschlange 36A gepipelinet werden. Nach dem Zuweisen der IQ#s in der Abbildungseinheit 30 und dem Aktualisieren des Tail-Pointers reservieren die Abbildungseinheit 30 und die Instruktions-Warteschlange 36A effektiv Reserve-Warteschlangen-Einträge für ROPs in der Pipeline.
  • Der PC-Silo 48 ist konfiguriert zum Übermitteln einer R# eines ROP, das eine Ausnahme hinsichtlich verschiedener Pipeline-Stufen in dem Prozessor 10 zwecks Streichung nachfolgender Instruktionen erfährt. Somit kann die Opcode-/Konstanten-Speichervorrichtung 64A die Ausnahme R# aus dem PC-Silo 48 empfangen. Die Opcode-/Konstanten-Speichervorrichtung 64A vergleicht die Ausnahme-R# mit den darin gespeicherten R#s. Die Opcode-/Konstanten-Speichervorrichtung 64A kann die Warteschlangen Steuereinheit 62A angeben, an deren Eintragsstellen R#s gespeichert sind, die anzei gen, dass das entsprechende ROP auf das die Ausnahme erfahrende ROP folgt. Die angegebenen Einträge können dann invalidiert werden, und der Tail-Pointer kann rückgesetzt werden, um die angegebenen Einträge aus der Warteschlange zu löschen.
  • In der nun zu erläuternden 3 ist ein Blockschaltbild einer Ausführungsform eines Abhängigkeitsvektors 80 gezeigt. Andere Ausführungsformen sind möglich und vorgesehen. Gemäß 3 enthält der Abhängigkeitsvektor 80 für jede IQ# (0 bis N-1, wobei die Gesamtzahl von Einträgen in den Instruktions-Warteschlangen 36A-36B gleich N ist) einen Hinweis. Gemäß einer bestimmten Ausführungsform kann N gleich 128 sein, obwohl auch eine andere geeignete Zahl verwendet werden kann. Der jede IQ# entsprechende Hinweise zeichnet auf, ob für das dem Abhängigkeitsvektor 80 entsprechende ROP eine Abhängigkeit von dem ROP besteht, dem die entsprechende IQ# zugewiesen ist, oder ob dies nicht der Fall ist. Somit kann der Abhängigkeitsvektor 80 eine beliebige Anzahl von Abhängigkeiten für das entsprechende ROP aufzeichnen (bis hin zu einer Abhängigkeit von jedem weiteren ausstehenden ROP). Gemäß einer bestimmten Ausführungsform weist jeder Hinweis ein Bit auf, das, wenn es gesetzt ist, eine Abhängigkeit von dem ROP anzeigt, dem die entsprechende IQ# zugewiesen ist, und das, wenn es frei ist, das Nichtvorhandensein einer Abhängigkeit von dem ROP anzeigt, dem die entsprechende IQ# zugewiesen ist.
  • Der Abhängigkeitsvektor 80 kann vorteilhafterweise einen universellen Mechanismus zum Planen von ROPs bilden. Da der Abhängigkeitsvektor 80 zum Aufzeichnen einer beliebigen Anzahl von Abhängigkeiten konfiguriert ist, kann ein gegebenes ROP in Bezug auf jedes andere ROP in eine Reihenfolge gebracht werden. Somit können sämtliche architekturellen oder mikroarchitekturellen Restriktionen, die einer gleichzeitigen Ausführung oder der Reihenfolge bestimmter ROPs bei der Ausführung auferlegt sind, erzwungen werden. Falls es während der Entwicklung einer Prozessor-Implementierung wünschenswert wird, zusätzliche Ausführungsreihenfolge-Instruktionen hinzuzufügen (z.B. um die Implementierung zu vereinfachen), können die zu sätzlichen Instruktionen aufgenommen werden, indem die Reihenfolgebildungs-Abhängigkeiten in dem Abhängigkeitsvektor 80 angezeigt werden. Die verbesserte Flexibilität kann die Eignung der Instruktions-Warteschlangen 36A-36B für verschiedene Prozessor-Impementierungen verbessern.
  • Die als nächstes zu erläuternde 4 zeigt ein Blockschaltbild einer Ausführungsform einer Abhängigkeitsvektor-Warteschlange 60A und einer Abhängigkeitsvektor-Warteschlange 60B aus der Instruktions-Warteschlange 36B. Weitere Ausführungsformen sind möglich und vorgesehen. Bei der Ausführungsform gemäß 4 enthält die Abhängigkeitsvektor-Warteschlange 60A eine erste Speichervorrichtung 90A und eine zweite Speichervorrichtung 90B sowie eine PH2-Halteschaltung 92A und eine PH1-Halteschaltung 94A. In ähnlicher Weise enthält die Abhängigkeitsvektor-Warteschlange 60B eine erste Speichervorrichtung 90C und eine zweite Speichervorrichtung 90D sowie eine PN2-Halteschaltung 92B und eine PH1-Halteschaltung 94B. Die erste Speichervorrichtung 90A ist mit der PN2-Halteschaltung 92A verbunden, die ferner mit der zweiten Speichervorrichtung 90B verbunden ist. Die zweiten Speichervorrichtung 90B wiederum ist mit der PH1-Halteschaltung 94A, die mit der (in 2 gezeigten) Auswahl-Logik 66A verbunden ist. In ähnlicher Weise ist die zweite Speichervorrichtung 90D mit der PH1-Halteschaltung 94B verbunden, die ferner mit der ersten Speichervorrichtung 90C verbunden ist. Die erste Speichervorrichtung 90C ist wiederum mit der PH2-Halteschaltung 92B verbunden.
  • Insbesondere ist die PN1-Halteschaltung 94A mit einem Set von Planungs-Request-Leitungen 96A und einem Set von Schreib-Gültig-Leitungen 98A verbunden. Die Planungs-Request-Leitungen 96A werden aus der zweiten Speichervorrichtung 90B durch die PH1-Halteschaltung 94A geführt, während die Schreib-Gültig-Leitungen 98A durch die PH1-Halteschaltung 94A zu der zweiten Speichervorrichtung 90B und der zweiten Speichervorrichtung 90D geführt werden. Ein Set von Zwischen-Planungs-Request-Leitungen 100A wird durch die PH2-Halteschaltung 92A von einer ersten Speichervorrichtung 90A zu einer zweiten Speichervorrichtung 90B geführt. Ein Set von Planungs-Request-Leitungen 96B und ein Set von Schreib-Gültig-Leitungen 98B wird in ähnlicher Weise durch die PH2-Halteschaltung 92B zu der Auswahl-Logik 66B bzw. der ersten Speichervorrichtung 90C geführt. Schreib-Gültig-Leitungen 98B werden in ähnlicher Weise durch die erste Speichervorrichtung 90A geführt. Ein Set von Zwischen-Planungs-Request-Signalen auf den Ein Set von Zwischen-Planungs-Request-Leitungen 100B wird durch die zweite Speichervorrichtung 90D erzeugt und durch die PH1-Halteschaltung 94B an die erste Speichervorrichtung 90C übermittelt. Jede PH2-Halteschaltung 92A-92B empfängt ein PH2-Takt-Eingangssignal, während jede PH1-Halteschaltung 94A-94B ein PH1-Takt-Eingangssignal empfängt. Die Abhängigkeitsvektor-Warteschlangen 60A und 60B sind mit einem Rotator 102 verbunden, der ferner mit Abhängigkeitsvektor-Bussen 68 aus der Abbildungseinheit 30 verbunden ist (z.B. gibt der Abhängigkeitsvektor-Bus 68A den Abhängigkeitsvektor für die Gegenstands-Position 0 aus, der Abhängigkeitsvektor-Bus 68B gibt den Abhängigkeitsvektor für die Gegenstands-Position 1 aus, etc.) Der Rotator 102 ist derart angeordnet, dass er ein Rotations-Steuersignal von einem Multiplexer (mux) 104 empfängt, das ein Eingangssignal aus den Warteschlangen-Steuereinheiten 62 empfängt. Ferner empfängt die Abhängigkeitsvektor-Warteschlange 60A ein Set von Schreib-Aktivierungssignalen 106 aus der Warteschlangen-Steuereinheit 62A, und die Abhängigkeitsvektor-Warteschlange 60B empfängt in ähnlicher Weise ein Set von Schreib-Aktivierungssignalen 108 aus der Warteschlangen-Steuereinheit 62B.
  • Die Abhängigkeitsvektor-Warteschlangen 60A und 60B verwenden mehrere Merkmale, welche die Taktfrequenz erhöhen können, mit der die Instruktions-Warteschlangen 36A 36B arbeiten können. Aufgrund der relativ großen Anzahl von Instruktions-Warteschlangen-Einträgen, die gestützt werden können (z.B. 128 gemäß einer Ausführungsform) wird die Abhängigkeitsvektor-Evaluation in Abschnitte unterteilt und während aufeinanderfolgender Takt-Phasen durchgeführt. Der erste Abschnitt des Abhängigkeitsvektors wird während der ersten Phase ausgewertet, so dass die Zwischen-Planungs-Request-Signale z.B. auf den Zwischen-Planungs-Request-Leitun gen 100A in der Abhängigkeitsvektor-Warteschlange 60A erzeugt werden. Während der nachfolgenden Takt-Phase wird der zweite Abschnitt des Abhängigkeitsvektors (zusammen mit den Zwischen-Planungs-Request-Signalen) ausgewertet, um die Planungs-Request-Signale für die Auswahl-Logik 66A zu erzeugen. Beispielsweise werden gemäß einer Ausführungsform die Zwischen-Planungs-Request-Leitungen und die Planungs-Request-Leitungen Draht-OR-Leitungen, die auf einen High-Zustand vorgeladen sind (was angibt, dass keine Abhängigkeit existiert), und sie werden entladen, falls eine oder mehr Abhängigkeiten in dem entsprechenden Abschnitt des Abhängigkeitsvektors unerfüllt bleiben. Somit wird, indem die Evaluation in Abschnitten durchgeführt wird, die auf die Draht-OR-Leitungen einwirkende Last reduziert, und somit kann das Entladen der Draht-OR-Leitungen auf eine Abhängigkeit hin schneller erfolgen. Vorteilhafterweise kann die Gesamt-Taktfrequenz erhöht werden. Ein weiteres Merkmal, das die Betriebsfrequenz verbessern kann, ist die Teilung einer einzelnen logischen Instruktions-Warteschlange in Instruktions-Warteschlangen 36A-36B. Die Auswahl-Logik für jede Warteschlange kann weniger komplex sein und dadurch schneller zum Planen von Instruktionen arbeiten, da die Auswahl-Logik nur einen Teil der Instruktionen in Betracht zieht, die sich tatsächlich in der Instruktions-Warteschlange befinden. Ferner können die Instruktions-Warteschlangen Instruktionen während unterschiedlicher Takt-Phasen einplanen, so dass die Erfüllung einer Abhängigkeit von einem ROP in der zu der Instruktions-Warteschlange gegenläufigen Instruktions-Warteschlange in 1/2 Taktzyklus (im Gegensatz zu einem vollen Taktzyklus) ausbreiten kann. Dieser 1/2 Taktzyklus der Übermittlung kann auch dazu verwendet werden, Daten aus dem zu der Register-Datei, die der planenden Instruktions-Warteschlange entspricht, entgegengesetzten Register zu bewegen.
  • Gemäß der hier vorliegenden Verwendung wird mit der "Phase" eines Taktsignals ein Teil der Periode des Taktsignals bezeichnet. Jede Phase ist durch den Anstieg und den Abfall des Taktsignals begrenz, das dieser Phase entspricht. Generell erfasst eine getaktete Speichervorrichtung (wie z.B. ein Latch-Speicher, ein Register, ein Flip-flop etc.) einen Wert am Ende einer der Phasen. Ferner überlappen die Phasen einander typischerweise nicht. Bei der Ausführungsform gemäß 4 ist die Taktperiode in zwei Phasen unterteilt (PH1 und PH2), von denen jede durch ein Taktsignal repräsentiert ist. PH1 hält 94A-94B-Erfassungswerte am Ende der PH1-Phase, während PH2 am Ende der PH2-Phase 92A-92B-Erfassungswerte hält.
  • Generell speichert die erste Speichervorrichtung 90A für jeden Abhängigkeitsvektor, der einer ROP in der Instruktions-Warteschlange 36A entspricht, den Teil des Abhängigkeitsvektors, der IQ#s N-1 abwärts bis N/2 entspricht. In ähnlicher Weise speichert die erste Speichervorrichtung 90C für jeden Abhängigkeitsvektor, der einer ROP in der Instruktions-Warteschlange 36B entspricht, den Teil des Abhängigkeitsvektors, der IQ#s N-1 abwärts bis N/2 entspricht. Die zweite Speichervorrichtung 90B speichert für jeden Abhängigkeitsvektor, der einer ROP in der Instruktions-Warteschlange 36A entspricht, den Teil des Abhängigkeitsvektors, der IQ#s N/2 – 1 abwärts bis 0 entspricht. Somit speichern die erste Speichervorrichtung 90A und die erste Speichervorrichtung 90C die Teile jedes Abhängigkeitsvektors, die den Einträgen in der Instruktions-Warteschlange 36B entsprechen, während die zweite Speichervorrichtung 90B und die zweite Speichervorrichtung 90C die Teile jedes Abhängigkeitsvektors speichern, die den Einträgen in der Instruktions-Warteschlange 36A entsprechen.
  • Im folgenden wird die Arbeitsweise der Abhängigkeitsvektor-Warteschlange 60A gemäß 4 beschrieben. Während der PN2-Phase wertet die erste Speichervorrichtung 90A den Teil jedes darin gespeicherten Abhängigkeitsvektors aus (den "ersten Teil"), wobei die Zwischen-Planungs-Request-Signale auf Zwischen-Planungs-Request-Leitungen 100A erzeugt werden. Für jeden Eintrag in der Abhängigkeitsvektor-Warteschlange 60A ist eine Zwischen-Planungs-Request-Leitung vorgesehen. Das Zwischen-Planungs-Request-Signal wird aktiviert, falls jede in dem ersten Teil aufgezeichnete Abhängigkeit erfüllt ist, und es wird deaktiviert, falls mindestens eine in dem ersten Teil aufgezeichnete Abhängigkeit erfüllt ist. Gemäß einer Ausführungsform werden, wie bereits erwähnt, Zwischen-Planungs-Request- Leitungen 100A in OR-Weise verdrahtet. Die Zwischen-Planungs-Request-Leitungen werden auf einen aktivierten Zustand vorgeladen (während der PH1-Phase für die erste Speichervorrichtung 90A) und dann auf den deaktivierten Zustand entladen (während der PH2-Phase für die erste Speichervorrichtung 90A), falls eine oder mehrere Abhängigkeiten unerfüllt bleiben. Die PH1-Halteschaltung 92A erfasst das Set von Zwischen-Planungs-Request-Signalen auf den Zwischen-Planungs-Request-Leitungen 100A und übermittelt sie während der PH1-Phase der zweiten Speichervorrichtung 90B.
  • Die zweite Speicervorrichtung 90B wertet ähnlich wie die erste Speichervorrichtung 90A den zweiten Teil des Abhängigkeitsvektors aus, wobei ein Set von Planungs-Request-Signalen auf den Planungs-Request-Leitungen 96A erzeugt wird. Zusätzlich zum Evaluieren der Abhängigkeiten in dem zweiten Teil des Abhängigkeitsvektors zwecks Erzeugens des Sets von Abhängigkeits-Request-Signalen werden die entsprechenden Zwischen-Abhängigkeits-Request-Signale in die Evaluation einbezogen. Falls das entsprechende Zwischen-Abhängigkeits-Request-Signal aktiviert ist und jede der in dem zweiten Teil des Abhängigkeitsvektors aufgezeichneten Abhängigkeiten erfüllt ist, wird das Abhängigkeits-Request-Signal aktiviert. Falls das entsprechende Zwischen-Abhängigkeits-Request-Signal deaktiviert wird oder eine oder mehrere der in dem zweiten Teil des Abhängigkeitsvektors aufgezeichneten Abhängigkeiten nicht erfüllt sind, wird das Planungs-Request-Signal deaktiviert. Die PN1-Halteschaltung 94A erfasst die Abhängigkeits-Request-Signale und übermittelt die Zwischen-Abhängigkeits-Request-Signale an die Auswahl-Logik 66A.
  • Die Auswahl-Logik 66A gibt Schreib-Gültig-Signale an die PH1-Halteschaltung 94A aus. Für jeden Warteschlangen-Eintrag in der Instruktions-Warteschlange 36A wird ein Schreib-Gültig-Signal ausgegeben, das angibt, dass die Abhängigkeit von dem entsprechenden ROP erfüllt ist. Anders ausgedrückt handelt es sich bei einem aktivierten Schreib-Gültig-Signal um einen Hinweise, dass eine Abhängigkeit von dem entsprechenden ROP erfüllt wor den ist. Somit werden die Schreib-Gültig-Signale aus der Auswahl-Logik 66A an die zweite Speichervorrichtung 90B und die zweite Speichervorrichtung 90D übermit telt. In ähnlicher Weise werden Schreib-Gültig-Signale aus der Auswahl-Logik 66A zu der ersten Speichervorrichtung 90A und die erste Speichervorrichtung 90C geleitet.
  • Due Abhängigkeitsvektor-Warteschlange 60B wertet die Vektoren in ähnlicher Weise aus wie die Abhängigkeitsvektor-Warteschlange 60A. Die zweite Speichervorrichtung 90D jedoch wertet den zweiten Teil des Abhängigkeitsvektors aus, um während der PH1-Phase Zwischen-Abhängigkeits-Request-Signale zu erzeugen, gefolgt von einer in der ersten Speichervorrichtung 90C erfolgenden Evaluation des ersten Teils des Abhängigkeitsvektors und der Zwischen-Planungs-Request-Signale, um während der PH2-Phase Abhängigkeits-Request-Signale zu erzeugen.
  • Um die Anzahl der Transistoren zu reduzieren, welche die Abhängigkeitsvektor-Warteschlangen 36A-36B bilden, kann es wünschenswert sein, für jeden Eintrag eine Schreib-Leitung vorzusehen (d.h. eine Leitung zum Transportieren von Daten in den Eintrag). Generell kann die erste von der Abbildungseinheit 30 gelieferte ROP (an der Gegenstands-Position 0, mit dem entsprechenden Abhängigkeitsvektor auf dem Abhängigkeitsvektor-Bus 68A) jedem beliebigen Warteschlangen-Eintrag zugewiesen werden, basierend auf dem Tail-Pointer der Warteschlange zum Zeitzpunkt der Zuweisung. Nachfolgende ROPs werden den nächstfolgenden Warteschlangen zugewiesen, bis zu dem letzten vorgesehenen ROP (die weniger sein können als die maximale Anzahl von acht). Folglich ist ein Rotator 102 vorgesehen. Jedes Ausgangssignal des Rotators ist mit einem Eintrag eines Sets von Einträgen verbunden, wobei jeder Eintrag in dem Set von den benachbarten Einträgen in dem Set um eine Anzahl von Einträgen beabstandet ist, die der Anzahl von Gegenständen gleich ist. Beispielsweise kann bei der vorliegenden Ausführungsform, bei der acht Gegenstands-Positionen verwendet werden, das erste Ausgangssignal mit den Einträgen 0,8,16 etc. verbunden werden. Das zweite Ausgangssignal kann mit den Einträgen 1,9,17 etc. ver bunden werden. Damit die Abhängigkeitsvektoren auf den Schreib-Eingangs-Leitungen dem zugewiesenen Warteschlangen-Eintrag zugeführt werden kann, rotiert der Rotator 102 die auf dem Abhängigkeitsvektor-Bus 68 geführten Abhängigkeitsvektoren entsprechend den Bits niedriger Ordnung der IQ#, die der Gegenstands-Position null zugeteilt ist. Bei der vorliegenden Ausführungsform, bei der acht Gegenstands-Positionen verwendet werden, übermitteln die dem Low-Niveau zugehörigen drei Bits den Dreh-Betrag. Falls beispielsweise IQ# 0, 8 oder 16 der Gegenstands-Position 0 zugewiesen wird, wir 1 eine Drehung von 0 Positionen durchgeführt, und der der Gegenstands-Position 0 entsprechende Abhängigkeitsvektor wird an den ersten Ausgangs des Rotators angelegt. Falls andererseits IQ# 1, 9 oder 17 vorgelegt wird, wird eine Drehung um eine Gegenstands-Position durchgeführt, und der der Gegenstands-Position null entsprechende Abhängigkeitsvektor wird an den zweiten Ausgang des Rotators angelegt. Da der zweite Ausgang mit den Einträgen 1, 9, 17 etc. verbunden ist, wird der der Gegenstands-Position null entsprechende Abhängigkeitsvektor auf die Schreib-Leitungen gelegt, die dem zugewiesenen Warteschlangen-Eintrag zugewiesen sind. Die verbleibenden Abhängigkeitsvektoren werden entsprechend auf die Schreib-Leitungen gegeben, die mit den zugewiesenen Warteschlangen-Einträgen verbunden sind.
  • Der Rotator 102 ist derart angeordnet, dass er den Dreh-Betrag von einer der Warteschlangen Steuereinheiten 62 empfängt, je nachdem, welche der Instruktions-Warteschlangen 36A-36B in dem aktuellen Taktzyklus ROPs empfängt. Der Mux 104 wählt alternierend das Drehbetrag-Eingangssignal (entsprechend der IQ#, die dem ROP on der Gegenstands-Position null zugewiesen ist) aus der Warteschlangen-Steuereinheit 82A in der Instruktions-Warteschlange 36A, und die Steuereinheit 62B führt dies in der Instruktions-Warteschlange 36B durch. Zusätzlich gibt die Warteschlangen-Steuereinheit 82A oder 82B (je nachdem, welche Instruktions-Warteschlange ROPs empfängt) Schreib-Aktivierungs-Signale aus, die den zugewiesenen IQ#s entsprechen, so dass die zugewiesenen Warteschlangen-Einträge die vorgelegten Abhängigkeitsvektor speichern.
  • Die nun zu erläuternde 5 zeigt ein Schaltbild einer Ausführungsform eines Abhängigkeitsvektor-Warteschlangen-Eintrags (Eintrag-Nummer M) in der Instruktions-Warteschlange 60A. Weitere Ausführungsformen sind möglich und vorgesehen Der gezeigte Teil entspricht einem Abhängigkeits-Hinweis in dem Abhängigkeitsvektor, der in dem Eintrag M gespeichert ist (z.B. einen Hinweis auf die Abhängigkeiten von IQ#N).
  • Der Abhängigkeits-Hinweis für IQ#N wird auf der Schreib-Leitung 110 aus dem Rotator 102 zugeführt. Falls das Schreib-Aktivierungs-Signal auf der Schreib-Aktivierungs-Leitung 112 von der Warteschlangen-Steuereinheit 62A aktiviert wird, wird der Abhängigkeits-Hinweis in der Speicherzelle gespeichert, die durch die über Kreuz verbundenen Invertierer 114A-114B repräsentiert ist. Der auf der Schreiben-Leitung 110 empfangene Abhängigkeits-Hinweis ist die Invertierung des tatsächlichen Abhängigkeits-Hinweises, so dass ein logisches High-Signal an dem Knotenpunkt 116 anzeigt, dass für das ROP in IQ#N eine Abhängigkeit existiert.
  • Die Planungs-Request-Leitung 96AA (eine der in 4 gezeigten Planungs-Request-Leitungen) ist ebenfalls in 5 gezeigt. Ein (nicht gezeigter) Vorlade-Transistor lädt die Draht-OR-Leitung 96AA auf einen aktivierten Zustand vor. Ein Entlade-Transistor 118 ist zwischen die Planungs-Request-Leitung 96AA und Masse geschaltet. Falls das Ausgangssignal eines mit dem Entlade-Transistor 118 verbundenen Gatters 120 eine logische Eins ist, entlädt der Entlade-Transistor 118 die Planungs-Request-Leitung 96AA, und das in IQ#M gespeicherte ROP wird nicht eingeplant. Falls andererseits das Ausgangssignal eines Gatters 120 eine logische Null ist, führt der Entlade-Transistor 118 keine Entladung der Planungs-Request-Leitung 96AA durch. Falls keine anderen, ähnlichen Entlade-Transistoren, die anderen Abhängigkeits-Hinweisen in dem Abhängigkeitsvektor entsprechen, die Planungs-Request-Leitung 96AA entladen, kann das in IQ#M gespeicherte ROP eingeplant werden.
  • Bei dem Gatter 120 handelt es sich gemäß 5 um ein NOR-Gatter. Folglich ist, falls keine Abhängigkeit in der durch die Invertierer 114-114B repräsentierten Speicherzelle angezeigt wird, das Eingangssignal aus der Speicherzelle, das dem Gatter 120 zugeführt wird, eine logische Eins, und das Ausgangssignal des Gatters 120 ist eine logische Null, wodurch verhindert wird, dass der Entlade-Transistor 118 die Planungs-Request-Leitung 96AA auf einen deaktivierten Zustand entlädt. Auf diese Weise wird durch ein Nichtvorhandensein einer Abhängigkeit bei einer gegebenen IQ# das Einplanen des ROP in IQ#M nicht verhindert, unabhängig davon, ob das ROP in RQ#M abgeschlossen ist oder nicht. Falls andererseits eine Abhängigkeit in der Speicher-Zelle angezeigt wird, ist das Eingangssignal von der Speicher-Zelle eine loigische Null, und das Eingangssignal des Gatters 120 ist eine logische Eins, bis die Schreib-Gültig-Leitung 98AA (eine der in 4 gezeigten Schreib-Gültig-Leitungen 98A) auf low aktiviert wird. Bei der Ausführungsform gemäß 5 wird eine Abhängigkeit durch ein logisches low auf einer Schreib-Gültig-Leitung als erfüllt angezeigt. Nachdem die Schreib-Gültig-Leitung aktiviert worden ist, schaltet der Ausgang des Gatters 120 auf eine logische Null, und der Entlade-Transistor 118 wird nicht aktiviert.
  • Die nun zu erläuternde 6 zeigt ein Schaltbild einer Ausgestaltung der Weitergabe eines Zwischen-Planungs-Request-Signals auf der Zwischen-Planungs-Request-Leitung 100BA (eine der in 4 gezeigten Zwischen-Planungs-Request-Leitungen 100B) aus der zweiten Speichervorrichtung 90D auf eine entsprechende Planungs-Request-Leitung 96BA (eine der in 4 gezeigten Planungs-Request-Leitungen 96B). Andere Ausführungsforemen sind möglich und vorgesehen.
  • Bei der Ausführungsform gemäß 6 wird das Zwischen-Planungs-Request-Signal auf des Zwischen-Planungs-Request-Leitung 100BA) in einer Speicherzelle erfasst, die durch über Kreuz verbundene Invertierer 122A-122B repräsentiert ist. Eine invertierte Version des Zwischen-Planungs-Request-Signals wird entsprechend der PH1-Phase durch einen Durchlass-Transistor 126 zu einem Transistor 124 geleitet. Am Ende der PH1-Phase ist die Inversion des Zwischen-Planungs-Request-Signals an dem Gate des Transistors 124 präsent und ist durch den Transistor 126 von der Speicher-Zelle isoliert. Beim Start der PN2-Phase wird der Transistor 128 aktiviert. Falls das Gate des Transistor 124 eine logische Eins führt (d.h. das Zwischen-Planungs-Request-Signal wurde beim Erfassen am Ende der PH1-Phase deaktiviert), wird die Planungs-Request-Leitung 96BA durch die Transistoren 124 und 128 auf einen deaktivierten Zustand entladen. Falls andererseits das Gate des Transistors 124 eine logische Eins führt (d.h. die Zwischen-Request-Leitung wurde beim Erfassen am Ende der PH1-Phase aktiviert), wird die Planungs-Request-Leitung 96BA nicht durch die Transistoren 124 und 128 entladen. Die Planungs-Request-Leitung 96BA kann entsprechend der Evaluatior des ersten Teils des Abhängigkeitsvektors deaktiviert werden, oder sie kann aktiviert bleiben, um anzuzeigen, dass das ROP in dem Eintrag P eingeplant werden kann.
  • Es ist anzumerken, dass die Invertierer 122A-122B und die Transistoren 124, 126 und 128 einen Teil der PH1-Latch-Schaltung 94B aufweisen können. Ferner ist anzumerken, dass die obige Erläuterung Signale betrifft, die aktiviert und deaktiviert werden. Ein Signal kann als aktiviert definiert werden, wenn es sich in einem Zustand mit logischer Eins befindet, und als deaktiviert, wenn es sich in einem Zustand mit logischer Null befindet, oder umgekehrt, je nachdem, wie es praktikabel ist. Beispielsweise sind in 4 und 5 die Planungs-Request-Leitungen im Zustand mit logischer Eins aktiviert, während die Schreib-Leitungen im Zustand mit logischer Null aktiviert sind. Bei anderen Ausführungsformen kann die Ausrichtung jedes Signals wie gewünscht umgekehrt werden.
  • Die nun zu erläuternde 7 zeigt ein Blockschaltbild einer Ausführungsform einer Abbildungseinheit 30 und einer Speicher-/Lade-Vorwärts-Detektionseinheit 148. Andere Ausführungsformen sind möglich und vorgesehen. Bei der Ausführungsform gemäß 7 weist die Abbildungseinheit 30 eine Register-Abtasteinheit 130, eine IQ#PR#-Steuereinheit 132, eine Virtuell-/Physisch-Register-Abbildungseinheit 136, eine Abhängigkeitsvektor-Erzeu gungseinheit 134 und ein Speicher-Adress-Register 138 auf. Die Register-Abtasteinheit 130 ist geschaltet zum Empfang von Ausgangs- und Ziel-Register-Nummern (und eines Gültig-Hinweises für jede) aus der Dekodiereinheit 24 auf dem Wege über den Bus 140. Die Register-Abtasteinheit 130 ist zum Durchlassen der Ziel-Register-Nummern und Ausgangs-Virtuell-Register-Nummern an die Virtuell-/Physisch-Register-Abbildungseinheit 136 konfiguriert. Die IQ#PR#-Steuereinheit 132 ist mit einem Bus 142 verbunden, um Ziel-Register-Nummern und den Ziel-Register-Nummern entsprechende Gültig-Hinweise zu empfangen. Die Instruktions-Warteschlange 36A-36B geben Tail-Pointer auf dem Tail-Pointer-Bus 70A aus (ein Teil eines Tail-Pointer-Steuerbusses 70 ist in 2 gezeigt), die angeben, welcher Eintrag in jeder Warteschlange derzeit das Ende der Warteschlange ist. Die IQ#PR#-Steuereinheit 132 ist ferner mit einem ROP-Zuweisungsbus 70B verbunden (einem Teil des Tail-Pointer-Steuerbusses 70 gemäß 2). Ferner ist die IQ#PR#-Steuereinheit 132 mit einem Ziel-PR#IQ#-Bus 144 verbunden. Die Virtuell-/Physisch-Register-Abbildungseinheit 136 ist mit einem Abbildungs-Silo 32 verbunden und ausgelegt zum Ausgeben von Ausgangs-PR#s, Ausgangs-IQ#s, Ziel-PR#s und eines IQ# für jedes ROP in der Reihe auf einem Ausgangs-/Ziel-PR#- und IQ#-Bus 72 an die Instruktions-Warteschlange 36A-36B. Eine (nicht gezeigte) Frei-Listen-Steuereinheit ist mit der IQ#PR#-Steuereinheit 132 über einen Nächst-Frei-PR#-Bus 146 verbunden. Die Abhängigkeitsvektor-Erzeugungseinheit 134 ist mit der Virtuell-/Physisch-Register-Abbildungseinheit 136 verbunden, um die Ausgangs-/Ziel-IQ#s zu empfangen, und ist ferner mit dem Speicher-Adress-Register 138 und der Speicher-/Lade-Vorwärts-Detektionseinheit 148 verbunden. Die Abhängigkeitsvektor-Erzeugungseinheit 134 ist angeordnet zum Empfangen eines Hinweises auf die ROP-Typen in einer Reihe von ROPs auf dem ROP-Typen-Bis 150, und ist verbunden mit einem Speicher-Adress-IQ#s-Bus 78 (einschießlich des Speicher-Adress-IQ#-Busses 78A von der Instruktions-Warteschlange 36A). Ferner ist die Abhängigkeitsvektor-Erzeugungseinheit 134 mit einem Abhängigkeits-Vektoren-Bus 68 verbunden. Die Speicher-/Lade-Vorwärts-Detektionseinheit 148 ist verbunden mit einem Lade-Treffer-Speicher-Daten-Bus 152 aus dem PC-Silo 48, einem Speicher- Daten-IQ#-Bus 154 aus der IQ#PR#-Steuereinheit 132, und einem ROP-Typen- und PCs-Bus 156 von der Dekodiereinheit 24.
  • Generell ist die Abhängigkeitsvektor-Erzeugungseinheit 134 konfiguriert zum Erzeugen eines Abhängigkeitsvektors für jede RPO, dass auf den Instruktions-Warteschlangen 36A-36B ausgegeben wird (d.h. jede Gegenstands-Position in der Leitung), und zum Übermitteln dieses Abhängigkeitsvektors auf dem Abhängigkeitsvektor-Bus 68 an die Instruktions-Warteschlangen 36A-36B. Die Abhängigkeitsvektor-Erzeugungseinheit 134 empfängt für jedes ROP einen Hinweis auf den ROP-Typ auf einer Leitung von der Dekodiereinheit 24. Die Abhängigkeitsvektor-Erzeugungseinheit 134 ist derart konfiguriert, dass sie für jeden beliebigen ROP-Typ Operanden-Abhängigkeiten in dem Abhängigkeitsvektor für jeden Ausgangs-Operanden aufzeichnet. Die Abhängigkeitsvektor-Erzeugungseinheit 134 empfängt die jedem Ausgangs-Operanden entsprechenden IQ#s aus der Virtuell-/Physisch-Register-Abbildungseinheit 136 und dekodiert die Ausgangs-IQ#s, um einen entsprechenden Abhängigkeits-Hinweises in dem Abhängigkeitsvektor zu setzen.
  • Wie oben erwähnt handelt es sich bei dem Abhängigkeitsvektor um einen flexiblen Abhängigkeits-Mechanismus, der das Anzeigen einer beliebigen Anzahl von Abhängigkeiten für ein bestimmtes ROP erlaubt. Bei der vorliegenden Ausführungsform beispielsweise werden Lade-ROPs als reihenfolgeabhängig von früheren Speicher-Adress-ROPs definiert. Somit hält die Abhängigkeitsvektor-Erzeugungseinheit 134 einen Speicheradress-Abhängigkeits-Vektor in der Speicher-Adress-Register 138. Der Speicheradress-Abhängigkeits-Vektor zeichnet Hinweise auf jede ausstehende Speicher-Adresse auf (z.B. durch IQ# bei der vorliegenden Ausführungsform). Die Abhängigkeitsvektor-Erzeugungseinheit 134 aktualisiert den Speicher-Adress-Abhängigkeitvektor mit einem Hinweis auf die IQ#s, die jedem Speicher-Adress-ROP in der Leitung zugewiesen ist (identifiziert durch die aus der Dekodiereinheit 24 empfangenen ROP-Typen). Die Ziel-IQ#s werden aus der Virtuell-/Physisch-Register-Abbildungseinheit 136 empfangen.
  • Jedes Speicher-Adress-ROP steht aus, bis die entsprechende IQ# von den Instruktions-Warteschlangen 36A-36B auf dem Speicher-Adress-IQ#-Bus 78 (auf dem die Abhängigkeitsvektor-Erzeugungseinheit 134 den Speicher-Adress-Abhängigkeitsvektor aktualisiert, um die entsprechende IQ# zu löschen) ausgibt.
  • Für jedes Lade-ROP, das auf dem ROP-Typen-Bus 150 angezeigt wird, enthält die Abhängigkeitsvektor-Erzeugungseinheit 134 den Speicher-Adress-Abhängigkeitsvektor in dem für dieses ROP erzeugten Abhängigkeitsvektor. Insbesondere weiser bei einer Ausführungsform die Abhängigkeitsvektoren für jede IQ# ein Bit auf. Falls das Bit gesetzt ist, wird eine Abhängigkeit auf dem ROP aufgezeichnet, dem die entsprechende IQ# zugewiesen ist. Bei einer derartigen Ausführungsform kann der Speicher-Adress-Abhängigkeitsvektor mit den Abhängigkeitsvektoren, die den Ausgangs-Operanden entsprechen, einem OR Vorgang unterzogen werden. Zusätzlich zum Speichern des in dem Speicher-Adress-Register 138 gespeicherten Speicher-Adress-Abhängigkeitsvektors kann die Abhängigkeitsvektor-Erzeugungseinheit 134 Speicher-Adress-ROPs in der Reihe von ROPs mit einem bestimmten Lade-ROP und vor diesem bestimmten Lade-ROP in der Leitung detektieren. Es werden auch Abhängigkeiten von den detektierten Speicher-Adress-ROPs in dem Abhängigkeitsvektor für das bestimmte Lade-ROP aufgezeichnet.
  • Ein bestimmtes Lade-ROP kann ferner als abhängig von einem Speicher-Daten-ROP aufgezeichnet werden, falls die Abhängigkeitsvektor-Erzeugungseinheit 134 vorhersagt, dass das bestimmte Lade-ROP eine Lade-Treffer-Speicher-Daten-Situation erfahren wird. Wie oben beschrieben werden Lade-ROPs in Abhängigkeit von vorherigen Speicher-Adress-ROPs in Reihenfolge gebracht. Indem diese Reihenfolgebildung erzwungen wird, können Abhängigkeiten zwischen Lade-ROPs und vorherigen Speicher-ROPs, die auf die gleiche Speicherstelle zugreifen, bestimmt werden. Da jedoch (im allgemeinen) keine Reihenfolge von Lade-ROPs bei vorherigen Speicher-ROPs besteht, kann möglicherweise eine Detektion einer Abhängigkeit durch die Lade-Speicher-Einheit 42 nicht unmittelbar zur Übermittlung der Spei cher-Daten führen (d h. falls das Speicher-Daten-ROP noch nicht ausgeführt ist, dann sind die Daten noch nicht verfügbar). Falls die Speicher-Daten noch nicht übermittelt werden können, wird das Lade-ROP gelöscht und in einem nachfolgenden Taktzyklus neu eingeplant. Nachteiligerweise werden ROPs, die von dem gelöschten Lade-ROP abhängig sind, ebenfalls gelöscht. Aus Gründen der Einfachheit können Instruktions-Warteschlangen 36A36B sämtliche ROPs löschen, die im Anschluss an das gelöschte Lade-ROP eingeplant sind. Um die Löschungen von ROPs zu verhindern, ohne Lade-ROPs für Speicher-Daten-ROPs übermäßig zu verzögern, wird die Speicher-/Lade-Vorwärts-Detektionseinheit 148 verwendet, um die Lade-Treffer-Speicher-Daten- (bei unverfügbaren Speicher-Daten) Situation vorherzusagen und bei Bedarf auf diese Vorhersage hin eine Abhängigkeit aufzuzeichnen. Falls eine Lade-Treffer-Speicher-Daten-Situation vorhergesagt wird, wird die IQ# des Speicher-Daten-ROP von der Speicher-/Lade-Vorwärts-Detektionseinheit 148 an die Abhängigkeitsvektor-Erzeugungseinheit 134 ausgegeben. Die Abhängigkeitsvektor-Erzeugungseinheit 134 zeichnet eine Reihenfolgebildungs-Abhängigkeit von dem Speicher-Daten-ROP in dem Abhängigkeitsvektor des entsprechenden Lade-ROP auf.
  • Die Speicher-/Lade-Vorwärts-Detektionseinheit 148 kann gemäß der vorliegenden Ausführungsform ein Paar von Tabellen aufrechterhalten. Die erste Tabelle ist durch die Lade-PC-Adresse indiziert und speichert eine Speicher-Daten-PC-Adresse, bei der zuvor eine Lade-Treffer-Speicher-Daten-Situation detektiert wurde. Die zweite Tabelle ist durch die Speicher-Daten-PC-Adresse indiziert und speichert die dem Speicher-Daten-ROP zugewiesene IQ#. Somit indiziert die Speicher-/Lade-Vorwärts-Detektionseinheit 148 die erste Tabelle mit den PCs jedes Lade-ROP, das von der Abbildungseinheit 30 abgebildet wird (angezeigt auf dem Bus 156 von der Dekodiereinheit 24). Falls der indizierte Eintrag anzeigt, dass eine Lade-Treffer-Speicher-Daten-Situation vorhergesagt wird, dann wird die in dem indizierten Eintrag gespeicherte Speicher-PC-Adresse zum Indizieren der zweiten Tabelle verwendet. Die IQ# in der zweiten Tabelle an dem indizierten Eintrag wird von der Speicher-/Lade-Vorwärts-Detektionseinheit 148 an die Abhängigkeits vektor-Erzeugungseinheit 134 übermittelt, um in den Abhängigkeiten des entsprechenden Lade-ROP einbezogen zu werden.
  • Beim Detektieren einer Lade-Treffer-Speicher-Daten-Situation während des Ausführens eines Lade-ROPs teilt die Lade-/Speicher-Einheit 42 die R# des Lade-ROP und die R# des Speicher-Daten-ROP, bei dem Abhängigkeit detektiert wird, dem PC-Silo 48 mit. Der PC-Silo 48 gibt die entsprechenden physischen PC-Adressen des Lade-ROP und des Speicher-Daten-ROP auf dem Lade-Treffer-Speicher-Daten-Bus 152 aus. Die Speicher-/Lade-Vorwärts-Detektionseinheit 148 aktualisiert die erste Tabelle an dem durch die Lade-PC-Adresse induzierten Eintrag mit der Speicher-Daten-PC-Adresse des Speicher-Daten-ROP bei dem die Lade-Treffer-Speicher-Daten-Situation detektiert wurde (und setzt einen Hinweis darauf, dass die Lade-Treffer-Speicher-Daten-Situation detektiert wurde). Gemäß einer Ausführungsform handelt es sich bei der ersten Tabelle um eine mit 2-KByte bemessene, 2-Wege-set-assoziative Tabelle, in der jeder Eintrag sechs Bits der Speicher-PC-Adresse und den entsprechenden Lade-Treffer-Daten-Hinweis speichert.
  • Die Speicher-/Lade-Vorwärts-Detektionseinheit 148 empfängt die IQ#s- und PC-Adressen der Spicher-Daten-ROPs, die von der IQ#PR#-Steuereinheit 132 auf dem Bus 154 ausgegeben werden und zeichnet die IQ#s in den Einträgen der zweiten Tabelle gemäß der Indizierung durch die entsprechenden Speicher-Daten-PC-Adressen auf.
  • Bei der Ausführungsform gemäß 7 führt die Abbildungseinheit 30 eine Register-Neubenennung unter Verwendung eines Zwei-Stufen-Pipeline-Designs aus. Bei weiteren Ausführungsformen kann das Register-Neubenennen in einer einzige Pipeline-Stufe oder zusätzlichen Stufen ausgeführt werden, je nach Wunsch. In der ersten Stufe weist die Register-Abtasteinheit 130 jedem Ausgangs-Register virtuelle Register-Nummern zu. Parallel dazu weist die IQ#PR#-Steuereinheit 132 sämtlichen ROPs und RR#s von den ROPs, die ein Ziel-Register haben, IQ#s zu (basierend auf den von den Instruktions-Warteschlange 36A-36B gelieferten Tail-Pointern).
  • In der zweiten Stufe bildet die Speicher-/Lade-Vorwärts-Detektionseinheit 148 die virtuellen Register-Nummern auf physische Register-Nummern ab (basierend auf dem aktuellen Voraussage-Zustand und den zugewiesenen PR#s) und leitet die von der IQ#PR#-Steuereinheit 132 zugewiesenen Physisch-Register-Nummern an die Ausgabe-Position des entspechenden ROP.
  • Die von der Register-Abtasteinheit 130 zugewiesenen Virtuell-Register-Nummern identifizieren eine Quelle für die Physisch-Register-Nummern. Beispielsweise können bei der vorherigen Ausführungsform die den Ausgangs-Registern entsprechenden Physisch-Register-Nummern aus einem Lookahead-Register-Zustand gezogen werden (das die Updates reflektiert, die den zuvor von der Abbildungseinheit 30 verarbeiteten Reihen von ROPs entspricht und das von der Virtuell-/Physisch-Register-Abbildungseinheit 136 aufrechterhalten wird), oder von einer vorherigen Gegenstands-Position in der Reihe von ROPs (falls der Ziel-Operand des vorherigen ROP der gleiche ist wie der Ausgangs-Operand, d.h. eine Intraline-Abhängigkeit existiert). Mit anderen Worten ist die Physisch-Register-Nummer, die einer Ausgangs-Register-Nummer entspricht, die Physisch-Register-Nummer in dem Lookahead-Register-Zustand, falls keine Intraline-Abhängigkeit detektiert wird. Die Register-Abtasteinheit 130 führt effektiv eine Intraline-Abhängigkeits-Prüfung durch. Bei anderen Ausführungsformen können andere Quellen von Quell-Operanden vorgesehen sein, falls gewünscht.
  • Die IQ#PR#-Steuereinheit 132 weist Instruktions-Warteschlangen-Nummern beginnend mit dem Tail-Pointer einer der Instruktions-Warteschlangen 36A-36B zu. Anders ausgedrückt empfängt das erste ROP in der Reihe den Tail-Pointer der gewählten Instruktions-Warteschlange als IQ#, und weitere ROPs empfangen IQ#s in ansteigender Reihenfolge von dem Tail-Pointer. Die Steuereinheit 132 weist jedes der ROPs in der Reihe der gleichen Instruktions-Warteschlange 36A-36B zu und weist die nächste Reihe von ROPs der anderen Instruktions-Warteschlange 36A-36B zu. Die Steuereinheit 132 übermittelt einen Hinweis auf die Anzahl von ROP, die der Instruktions-Warteschlange 36A-36B zugewiesen worden sind, über den ROP-Zu weisungs-Bus 70B (einen Teil des Tail-Pointer-Steuerbusses 70 gemäß 2). Die Empfangs-Instruktions-Warteschlange kann dadurch ihren Tail-Pointer derart aktualisieren, dass er die Zuweisung der ROPs zu dieser Warteschlange reflektiert.
  • Die Steuereinheit 132 empfängt auf dem nächsten freien PR#-Bus 146 ein Set freier PR#s aus der Frei-Listen-Steuereinheit. Das Set freier PR#s wird den Ziel-Registern in der Reihe von Instruktions-Operationen zugewiesen. Gemäß einer Ausführungsform begrenzt der Prozessor 10 die Anzahl von Logik-Regsister-Updates in einer Reihe auf vier (d.h. falls die Vorhersage-Fehlgänger-Dekodiereinheit 26 ein fünftes Logik-Register-Update erhält, wird die Reihe bei der vorherigen Instruktion beendet). Somit wählt die Frei-Listen-Steuereinheit vier PR#s aus der Frei-Liste und übermittelt die gewählten Register auf dem nächstem freien PR-Bus 146 an die Steuereinheit 132. Bei weiteren Ausführungsformen können andere Grenzwerte von Updates in einer Reihe verwendet werden, einschließlich keines Grenzwerts (d.h. jedes ROP kann aktualisieren).
  • Die Frei-Listen-Steuereinheit handhabt das Befreien der physischen Register und wählt Register zur Zuweisung an nachfolgende Instruktionen aus. Die Frei-Listen-Steuereinheit empfängt die vorherigen Physisch-Register-Nummern, die aus dem architekturellen Neubenennungs-Block 34 heraus präsentiert werden, der auch die vorherigen Physisch-Register-Nummern gegen das aktualisierte Set von architekturellen Neubenennungen kämmt. Jede vorherige PR#, für die eine entsprechende Kämmungs-Anpassung nicht detektiert wird, wird der freien Liste hinzugefügt.
  • Die Virtuell-Physisch-Register-Abbildungseinheit 136 übermittelt die PR# und IQ# des entsprechenden Logik-Registers gemäß der Anzeige durch den Lookahead-Register-Zustand für jedes Quell-Register, das eine Virtuell-Register-Nummer hat, die anzeigt, dass der Ausgangspunkt der PR# der Lookahead-Register-Zustand ist. Quell-Register, für die die Virtuell-Register-Nummer eine vorherige Gegenstands-Nummer anzeigt, werden mit der entsprechenden PR# und IQ# zugeführt, die von der Steuereinheit 132 zugewiesen werden. Ferner aktualisiert die Virtuell-Physisch-Register-Abbildungseinheit 136 den Lookahead-Register-Zustand entsprechend den logischen Ziel-Registern, die von der Reihe von ROPs spezifiziert werden, und die von der Steuereinheit 132 zugewiesenen PR#sIQ#s.
  • Die Virtuell-Physisch-Register-Abbildungseinheit 136 ist ferner konfiguriert zum Empfangen eines Rückgewinnungs-Lookahead-Register-Zustands, der von dem Abbildungs-Silo 32 auf einen Ausnahmezustand hin vorgelegt wird. Die Virtuell-Physisch-Register-Abbildungseinheit 136 kann den nächsten Lookahead-Register-Zustand, der gemäß den Eingangssignalen aus der Register-Abtasteinheit 136 und der IQ#PR#-Steuereinheit 132 generiert wird, durch Priorität seitens des vom Abbildungs-Silo 32 gelieferten Rückgewinnungs-Lookahead-Zustand unwirksam machen.
  • Anzumerken ist, dass bei der vorliegenden Ausführungsform IQ#s für jeden Quell-Operanden erzeugt werden, um anzuzeigen, von welchen Instruktions-Warteschlangen-Einträge das entsprechende ROP abhängig ist. Die Instruktions-Warteschlangen 36A-36B warten auf den Abschluss der ROPs in den entsprechenden Instruktions-Warteschlangen-Einträgen, bevor sie das abhängige ROP zur Ausführung einplanen.
  • Die nun zu erläuternde 8 zeigt ein Flussdiagramm zur Veranschaulichung der Arbeitsweise einer Ausführungsform einer Abhängigkeitsvektor-Erzeugungseinheit 134. Weitere Ausführungsformen sind möglich und vorgesehen. Obwohl in 8 die Schritte zur Erleichterung des Verständnisses in einer bestimmten Reihenfolge gezeigt sind, kann jede beliebige Reihenfolge geeignet sein. Ferner können in der kombinatorischen Logik innerhalb der Abhängigkeitsvektor-Erzeugungseinheit 134 verschiedene Schritte parallel ausgeführt werden.
  • Die Abhängigkeitsvektor-Erzeugungseinheit 134 bestimmt, ob eine oder mehrere Speicher-Adress-IQ#s aus den Instruktions-Warteschlangen 36A- 36B empfangen werden (Entscheidungs-Block 160). Falls eine Speicher-Adress-IQ# empfangen wird, löscht die Abhängigkeitsvektor-Erzeugungseinheit 134 den entsprechenden Abhängigkeits-Hinweis in dem Speicheradress-Abhängigkeitsvektor (Schritt 162). Beispielsweise wird bei einer Ausführungsform, bei welcher der Abhängigkeitsvektor für jede IQ# ein Bit aufweist, das eine Abhängigkeit angibt, wenn es gesetzt ist, das der empfangenen IQ# entsprechende Bit rückgesetzt (oder gelöscht).
  • Die Abhängigkeitsvektor-Erzeugungseinheit 134 erstellt einen Intraline-Speicheradress-Abhängigkeitsvektor (Schritt 164). Der Intraline-Speicheradress-Abhängigkeitsvektor zeichnet Abhängigkeits-Hinweise für jedes Speicher-Adress-ROP in der Reihe von ROPs auf, die von der Abhängigkeitsvektor-Erzeugungseinheit 134 verarbeitet werden. Die Abhängigkeitsvektor-Erzeugungseinheit 134 erstellt für jedes ROP in der Reihe von ROPs einen Abhängigkeitsvektor (d.h. einen entsprechenden Abhängigkeitsvektor für jede Gegenstands-Position mit gültigem ROP). Das Erstellen eines Abhängigkeitsvektors für eine bestimmte Gegenstands-Position entsprechend einer Ausführungsform der Abhängigkeitsvektor-Erzeugungseinheit 134 ist in der folgenden 9 gezeigt. Schließlich fügt die Abhängigkeitsvektor-Erzeugungseinheit 134 den im Speicheradress-Register 138 gespeicherten Speicheradress-Abhängigkeitsvektor mit dem Intraline-Speicheradress-Abhängigkeitsvektor zusammen und aktualisiert das Speicheradress-Register 138 mit dem Resultat (Schritt 168).
  • In der nun zu erläuternden 9 ist ein Flussdiagramm zur Veranschaulichung des Erstellens eines Abhängigkeitsvektors für ein ROP gemäß einer Ausführungsform der Abhängigkeitsvektor-Erzeugungseinheit 134 gezeigt (d.h. für den Schritt 166 gemäß 8). Die in 9 gezeigten Schritte können für jedes ROP in der Reihe durchgeführt werden. Weitere Ausführungsformen sind möglich und vorgesehen. Obwohl die Schritte in 8 um des leichteren Verständnisses willen in einer bestimmten Reihenfolge gezeigt sind, kann jede beliebige Reihenfolge geeignet sein. Ferner können in der kombinatorischen Logik innerhalb der Abhängigkeitsvektor-Erzeugungseinheit 134 verschiedene Schritte parallel ausgeführt werden.
  • Die Abhängigkeitsvektor-Erzeugungseinheit 134 bestimmt, ob das ROP, für das der Abhängigkeitsvektor gerade erstellt wird, ein Lade-ROP ist (Entscheidungs-Block 170). Wie bereits erwähnt wird der Typ jedes ROP in der Reihe von der Dekodiereinheit 24 an die Abhängigkeitsvektor-Erzeugungseinheit 134 übermittelt, woraus die Abhängigkeitsvektor-Erzeugungseinheit 134 bestimmen kann, welche ROPs Lade-ROPs sind. Falls das ROP ein Lade-ROP ist, maskiert die Abhängigkeitsvektor-Erzeugungseinheit 134 den Intraline-Speicheradress-Abhängigkeitsvektor zu den Gegenstands-Positionen vor dem Lade-ROP und zeichnet die maskierten Hinweise in dem Abhängigkeitsvektor auf (Schritt 172). Anders ausgedrückt werden die Abhängigkeits-Hinweise, die Speicher-Adress-ROPs vor dem Lade-ROP in der Leitung entsprechen, in den Abhängigkeitsvektor einbezogen, wobei die Abhängigkeits-Hinweise, die Speicher-Adress-ROPs nach dem Lade-ROP entsprechen, nicht einbezogen werden. Die Abhängigkeits-Hinweise, die Speicher-Adress-ROPs nach dem Lade-ROP entsprechen, werden wegmaskiert, da keine Abhängigkeit von den nachfolgenden Speicher-Adress-ROPs für das Lade-ROP vermerkt werden soll.
  • Ferner wird der in dem Speicher-Adress-Register 138 gespeicherte Speicheradress-Abhängigkeitsvektor in dem Abhängigkeitsvektor aufgezeichnet, falls das ROP eine Lade-ROP ist (Schritt 174). Weiterhin wird, falls eine Lade-Treffer-Speicher-Daten-Situation von der Speicher-/Lade-Vorwärts-Detektionseinheit 148 vorausgesagt wird, eine Abhängigkeit von dem vorhergesagten Speicher-Daten-ROP aufgezeichnet (Schritt 176).
  • Für jedes ROP werden Abhängigkeiten von den durch die Virtuell-/Physisch-Register-Abbildungseinheit 136 erstellten Ausgangs-IQ#s aufgezeichnet (Schritt 178). Anzumerken ist, dass bei dieser Ausführungsform jeder Abhängigkeitsvektor für jede IQ# ein Bit aufweist, das, wenn es gesetzt ist, eine Abhängigkeit von dem dieser IQ# zugewiesenen ROP anzeigt und, wenn es frei ist, ein Nichtvorhandensein einer Abhängigkeit von dieser IQ# anzeigt. Folglich kann das Aufzeichnen von Abhängigkeiten von verschiedenen Quellen eine OR-Behandlung der Abhängigkeitsvektor von den verschiedenen Quellen umfassen. Alternativ kann jede Quelle einer Abhängigkeit anzeigen, welche Bits in dem Abhängigkeitsvektor gesetzt werden sollen.
  • Die nun zu erläuternde 10 zeigt ein Zeitsteuerungsdiagramm zur Veranschaulichung der Arbeitsweise der Instruktions-Warteschlangen 36A-36B. Phasen der Taktzyklen sind durch vertikale unterbrochene Linien abgetrennt. Jede Phase und jeder Taktzyklus sind durch Angaben an der Oberseite des begrenzten Bereichs bezeichnet. Das Zeitsteuerungsdiagramm gemäß 10 stellt die Zeitsteuerung eines als abgeschlossen bezeichneten ROP (derart, dass abhängige ROPs geplant werden können) über die Aktivierung der Schreib-Gültig-Leitung und das Planen eines abhängigen ROP in jeder Instruktions-Warteschlange dar.
  • Während der PN2-Phase des Taktsignals 0 aktiviert die Auswahl-Logik in der Instruktions-Warteschlange 36A ein Schreib-Gültig-Signal für ein ROP (Bezugszeichen 180). Währen der PN1-Phase des Taktsignals 1 wird ein Planungs-Request-Signal für ein erstes abhängiges ROP in der zweiten Speichervorrichtung 90B ausgewertet und aktiviert (unter der Annahme, dass keine anderen Abhängigkeiten noch aktiv sind – Bezugszeichen 182). Ferner wird ein Zwischen-Planungs-Request-Signal für ein zweites abhängiges ROP in der zweiten Speichervorrichtung 90D ausgewertet und aktiviert (wiederum unter der Annahme, dass keine anderen Abhängigkeiten mehr aktiv sind). Die PH1-Halteschaltung 94B hält das aktivierte Zwischen-Planungs-Request-Signal (Bezugszeichen 184).
  • Während der Phase PH2 des Taktsignals 1 plant die Auswahl-Logik in der Instruktions-Warteschlange 36A das erste abhängige ROP aus der Instruktions-Warteschlange 36A zur Ausführung ein (Bezugszeichen 186). Ferner wird das zweite abhängige ROP in der ersten Speichervorrichtung 90C der Instruktions-Warteschlange 36B ausgewertet, und das entsprechende Request-Signal wird aktiviert (unter der Annahme, dass keine anderen Abhängigkeiten aktiv sind – Bezugszeichen 188).
  • Während der PH1-Phase des Taktsignals 2 initiiert die Register-Datei 38A ein Register-Datei-Lesesignal für die Quell-Operanden des ersten abhängigen ROP. Das Register-Lesesignal wird in der PN2-Phase des Taktsignals 2 abgeschlossen (Bezugszeichen 190). Ferner plant während der PH1-Phase des Taktsignals 2 die Auswahl-Logik in der Instruktions-Warteschlange 36B das zweite abhängige ROP zur Ausführung ein (Bezugszeichen 192). Die Register-Datei 38B initiiert ein Registerdatei-Lesesignal für die Quell-Operanden des zweiten abhängigen ROP während der PH2-Phase des Taktsignals 2, wobei das Registerdatei-Lesesignal während der PH1-Phase des Taktsignals 3 abgeschlossen wird (Bezugszeichen 194). Der Ausführungs-Kern 40A initiiert das Ausführen des ersten abhängigen ROP während der PH1-Phase des Taktsignals 3, wobei die Ausführung während der PH2-Phase des Taktsignals 3 abgeschlossen wird (Bezugszeichen 196). In ähnlicher Weise initiiert der Ausführungs-Kern 40B die Ausführung des abhängigen ROP während der PH2-Phase des Taktsignals 3 und schließt die Ausführung während der PH1-Phase des Taktsignals 4 ab (Bezugszeichen 198).
  • Durch Evaluieren der Abhängigkeitsvektoren in Teilabschnitten (wie in 4 und 10 gezeigt) ist eine höhere Betriebsfrequenz erzielbar als wenn der gesamte Abhängigkeitsvektor gleichzeitig ausgewertet würde. Während einer der Abschnitte ausgewertet wird, kann der andere Abschnitt vorgeladen werden. Die Leistung des Prozessors 10 kann als Ergebnis der höheren Frequenz gesteigert werden. Indem die Instruktions-Warteschlange 36A um 1/2 Taktzyklus gegenüber der Instruktions-Warteschlange 36B versetzt betätigt wird (und in ähnlicher Weise die Register-Datei 38A um 1/2 Taktzyklus gegenüber der Register-Datei 38B versetzt betätigt wird, und der Ausführungs-Kern 40A um 1/2 Taktzyklus gegenüber dem Ausführungs-Kern 40B versetzt betätigt wird), kann die höhere Frequenz unter Verwendung nur von 1/2 Taktzyklus zum Weiterleiten des Abschlusses eines ROP zu ei nem in der gegenüberliegenden Warteschlange gespeicherten abhängigen ROP realisiert werden. Ferner kann der 1/2-Zeit-Taktzyklus verwendet werden, um das Ergebnis des ROP an die Register-Datei zu übermitteln, welche das abhängige ROP zum Zugriff auf die Ergebnisse liest. Der Gesamt-Instruktions-Durchsatz kann im Vergleich mit einer Ausführungsform, bei der ei voller Taktzyklus zur Übermittlung zwischen Warteschlangen verwendet wird, vergrößert werden.
  • Anzumerken ist, dass, obwohl bei der vorliegenden Ausführungsform die Instruktions-Warteschlange physisch in Instruktions-Warteschlangen 36A-36B unterteilt ist, gemäß weiteren Ausführungsformen die Instruktions-Warteschlange in noch größere Anzahlen physischer Warteschlangen unterteilt ist, die unabhängig arbeiten können. Beispielsweise kann eine Ausführungsform vorgesehen sein, bei der vier Instruktions-Warteschlangen verwendet werden (mit vier Register-Dateien und vier Ausführungs-Kernen). Bei der Anzahl von Instruktions-Warteschlangen kann es sich um jede beliebige Anzahl handeln. Ferner können die Auswertungs-Abhängigkeits-Vektoren bei Bedarf in mehr als zwei Abschnitte unterteilt sein, die in aufeinanderfolgenden Phasen ausgewertet werden.
  • Die nun zu erläuternde 11 zeigt ein Blockschaltbild einer Ausführungsform eines Computersystems 200 mit einem Prozessor 10, der über eine Bus-Brücke mit verschiedenen System-Komponenten verbunden ist. Weitere Ausführungsformen sind möglich und vorgesehen. Bei dem gezeigten System ist ein Haupt-Speicher 204 durch einen Speicher-Bus 206 mit der Bus-Brücke 202 verbunden, und ein Graphik-Controller 208 ist durch einen AGP-Bus 210 mit der Bus-Brücke 202 verbunden. Schließlich sind mehrere PCI-Vorrichtungen 212A-212B durch einen PCI-Bus 214 mit der Bus-Brücke 202 verbunden. Ferner kann eine zweite Bus-Brücke 216 vorgesehen sein, um ein elektrisches Interface mit einer oder mehreren EISA- oder ISA-Vorrichtungen 218 durch einen EISA-/ISA-Bus 220 aufzunehmen. Der Prozessor 10 ist durch das externe Interface 52 mit der Bus-Brücke 202 verbunden.
  • Die Bus-Brücke 202 bildet ein Interface zwischen dem Prozessor 10, dem Haupt-Speicher 204, dem Graphik-Controller 208 und mit dem PCI-Bus 214 verbundenen Vorrichtungen. Wenn eine Operation aus einer der mit der Bus-Brücke 202 verbundenen Vorrichtungen empfangen wird, identifiziert die Bus-Brücke 202 das Target der Operation (d.h. eine bestimmte Vorrichtung oder, im Fall des PCI-Busses 214, dass sich das Target an dem PCI-Bus 214 befindet). Die Bus-Brücke 202 leitet die Operation zu der als Target vorgesehenen Vorrichtung. Die Bus-Brücke 202 übersetzt generell eine Operation eine Operation von dem von der Ausgangs-Vorrichtung oder dem Bus verwendeten Protokoll in das von der Target-Vorrichtung oder dem Bus verwendeten Protokoll.
  • Zusätzlich dazu, dass sie ein Interface mit einem ISA-/EISA-Bus für den PCI-Bus 214 bildet, kann die zweite Bus-Brücke 216 zudem bei Bedarf weitere Funktionen enthalten. In dem Computersystem 200 kann zudem ein (nicht gezeigter) Eingangs-/Ausgangs-Controller, der entweder extern von der zweiten Bus-Brücke 216 ausgebildet oder in diese integriert ist, enthalten sein, um eine Betriebs-Stützung für eine Tastatur mit Maus 222 und für verschiedene serielle und parallele Ports zu leisten, falls dies gewünscht ist. Ferner kann bei weiteren Ausführungsformen eine (nicht gezeigte) externe Cache-Einheit mit dem externen Interface 52 zwischen dem Prozessor 10 und der Bus-Brücke 202 angeordnet sein. Alternativ kann der externe Cache mit der Bus-Brücke 202 verbunden sein, und die Cache-Steuer-Logik für den externen Cache kann in die Bus-Brücke 202 integriert sein.
  • Bei dem Haupt-Speicher 204 handelt es sich um einen Speicher, in dem Anwenderprogramme gespeichert sind und aus dem heraus der Prozessor 10 in erster Linie seine Vorgänge ausführt. Ein geeigneter Haupt-Speicher 204 weist einen DRAM (einen dynamischen Direktzugriffsspeicher) und vorzugsweise mehrere Gruppen von SDRAMs (synchrone DRAMs) auf.
  • Die PCI-Vorrichtungen 212A-212B dienen als Beispiele für verschiedene Peripherieeinrichtungen wie z.B. Netzwerk-Interface-Karten, Video-Beschleuniger, Audio-Karten, Hard- oder Floppy-Diskettenlaufwerke oder Laufwerk-Controller, SCSI- (Small Computer Systems Interface-) Adapter und Telephon-Karten. Ähnlich dient die ISA-Vorrichtung 218 als Beispiel für verschiedene Typen von Peripherieeinrichtungen, wie z.B. Modems, eine Sound-Karte und verschiedene Datenerfassungskarten wie z.B. GPIB- oder Feld-Bus-Interface-Karten.
  • Der Graphik-Controller 208 ist zum Steuern der Wiedergabe von Text und Bildern auf dem Display 226 vorgesehen. Bei dem Graphik-Controller 208 kann es sich um einen typischen auf dem Gebiet bekannten Graphik-Beschleuniger zur Wiedergabe dreidimensionaler Datenstrukturen handeln, der effektiv in den und aus dem Haupt-Speicher 204 geschaltet werden kann. Somit kann der Graphik-Controller 208 ein Master eines AGP-Busses 210 sein, indem er einen Zugriff auf ein Target-Interface in der Bus-Brücke 202 anfordern und erhalten kann, um dadurch Zugriff auf den Haupt-Speicher 204 zu erlangen. Ein speziell vorgesehener Graphik-Bus nimmt ein schnelles Aufrufen von Daten aus dem Haupt-Speicher 204 auf. Für bestimmte Operationen kann der Graphik-Controller 208 ferner zum Erzeugen von PCI-Protokoll-Transaktionen auf dem AGP-Bus 210 konfiguriert sein. Das AGP-Interface der Bus-Brücke 202 kann somit ein Funktion zum Stützen sowohl von AGP-Protokoll-Transaktionen als auch von PCI-Protokoll-Target- und Initiator-Transaktionen aufweisen. Bei dem Display 226 handelt es sich um ein elektronisches Display, auf dem Bilder oder Texte angezeigt werden können. Ein geeignetes Display 226 weist eine Kathodenstrahlröhre ("CRT"), eine Flüssigkristallanzeige ("LCD") etc. auf.
  • Es ist anzumerken, dass, obwohl bei der obigen Beschreibung die AGP-, PCI- und ISA- oder EISA-Busse als Beispiele verwendet wurden, jede der Bus-Architekturen wie gewünscht ersetzt werden kann. Ferner ist anzumerken, dass das Computersystem 200 ein Mehrfachverarbeitungs-Computersystem mit zusätzlichen Prozessoren sein kann (z.B. dem Prozessor 10, der als optionale Komponente des Computersystems 200 gezeigt ist). Der Prozessor 10a kann dem Prozessor 10 ähnlich sein. Insbesondere kann der Prozessor 10a eine exakte Kopie des Prozessors 10 sein. Der Prozessor 10a kann (gemäß 11) das externe Interface 52 gemeinsam mit dem Prozessor 10 benutzen, oder er kann über einen unabhängigen Bus mit der Bus-Brücke 202 verbunden sein.

Claims (10)

  1. Prozessor (10) mit: einer Abhängigkeitsvektor-Erzeugungsvorrichtung (134), die zum Erzeugen eines Abhängigkeitsvektors (80) für eine Instruktionsoperation konfiguriert ist; gekennzeichnet durch ein Speicheradressen-Register (138), das konfiguriert ist zum Speichern eines Speicheradressen-Abhängigkeitsvektors, der in dem Prozessor (10) ausstehende Speicheradressen-Instruktionsoperationen identifiziert; und wobei die Abhängigkeitsvektor-Erzeugungseinheit (134) mit dem Speicheradressen-Register (138) verbunden ist und konfiguriert ist zum Einbeziehen des Speicheradressen-Abhängigkeitsvektors in den Abhängigkeitsvektor, falls die Instruktionsoperation eine Lade-Instruktionsoperation ist.
  2. Prozessor nach Anspruch 1, bei dem die Abhängigkeitsvektor-Erzeugungseinheit (134) konfiguriert ist zum Aktualisieren des Speicheradressen-Abhängigkeitsvektors dahingehend, dass ein die Instruktionsoperation identifizierender Hinweis einbezogen wird, falls die Instruktionsoperation eine Speicheradressen-Instruktionsoperation ist.
  3. Prozessor nach Anspruch 1, bei dem die Abhängigkeitsvektor-Erzeugungseinheit (134) dazu vorgesehen ist, dass sie einen Hinweis darauf empfängt, dass eine bestimmte Speicheradressen-Instruktionsoperation abgeschlossen wird, und bei dem die Abhängigkeitsvektor-Erzeugungseinheit (134) ferner konfiguriert ist zum Aktualisieren des Spei cheradressen-Abhängigkeitsvektors dahingehend, dass ein Hinweis, der dieser bestimmten Speicheradressen-Instruktionsoperation entspricht, gelöscht wird.
  4. Prozessor nach Anspruch 1, ferner mit einer Instruktions-Warteschlange (36A), die mit der Abhängigkeitsvektor-Erzeugungseinheit (134) verbunden ist, wobei die Instruktions-Warteschlange (36A) zum Empfangen der Instruktionsoperation und des Abhängigkeitsvektors konfiguriert ist, und wobei die Instruktions-Warteschlange (36A) konfiguriert ist zum Verhindern des Vorsehens der Bearbeitung der Instruktionsoperation, bis jede Abhängigkeit innerhalb des Abhängigkeitsvektors erfüllt ist.
  5. Prozessor nach Anspruch 1, bei dem der Abhängigkeitsvektor ferner Hinweise auf Instruktionsoperationen enthält, von denen die Instruktionsoperation Operanden-abhängig ist.
  6. Prozessor nach Anspruch 1, bei dem die Abhängigkeitsvektor-Erzeugungsvorrichtung (134) ferner konfiguriert ist zum Ausschließen des Speicheradressen-Abhängigkeitsvektors, falls die Instruktionsoperation keine Lade-Instruktionsoperation ist.
  7. Verfahren zum Durchführen einer Ladeinstruktions-Operation in einem Prozessor (10), mit folgenden Schritten: Nachhalten eines Speicheradressen-Abhängigkeitsvektors, der jede in dem Prozessor (10) ausstehende Speicheradressen-Instruktionsoperationen angibt; Erzeugen eines Abhängigkeitsvektors (80) für die Ladeinstruktions-Operation, wobei der Abhängigkeitsvektor den Speicheradressen-Abhängigkeitsvektor enthält; und Verhindern des Vorsehens der Bearbeitung der Lade-Instruktionsoperation, bis jede in dem Abhängigkeitsvektor (80) angegebene Instruktionsoperation abgeschlossen ist.
  8. Verfahren nach Anspruch 7, ferner mit folgenden Schritten: Erzeugen eines zweiten Abhängigkeitsvektors (80) für eine weitere Ladeinstruktions-Operation, und Ausschließen des Speicheradressen-Abhängigkeitsvektors aus dem zweiten Abhängigkeitsvektor (80), falls die weitere Instruktionsoperation keine Lade-Instruktionsoperation ist.
  9. Verfahren nach Anspruch 7, ferner mit dem Aktualisieren des Speicheradressen-Abhängigkeitsvektors beim Durchführen einer weiteren Speicheradressen-Instruktionsoperation, um die weitere Speicheradressen-Instruktionsoperation anzuzeigen.
  10. Verfahren nach Anspruch 7, ferner mit dem Aktualisieren des Speicheradressen-Abhängigkeitsvektors beim Abschließen einer Speicheradressen-Instruktionsoperation, um einen Hinweis auf die Speicheradressen-Instruktionsoperation zu löschen.
DE69922238T 1998-08-24 1999-03-24 Mechanismus zur blockierung von ladeoperationen auf adressengeneration von speicherbefehlen und universeller abhängigkeitsvektor Expired - Lifetime DE69922238T2 (de)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US139178 1998-08-24
US09/138,886 US6212622B1 (en) 1998-08-24 1998-08-24 Mechanism for load block on store address generation
US09/139,178 US6212623B1 (en) 1998-08-24 1998-08-24 Universal dependency vector/queue entry
US138886 1998-08-24
PCT/US1999/006427 WO2000011548A1 (en) 1998-08-24 1999-03-24 Mechanism for load block on store address generation and universal dependency vector

Publications (2)

Publication Number Publication Date
DE69922238D1 DE69922238D1 (de) 2004-12-30
DE69922238T2 true DE69922238T2 (de) 2005-11-03

Family

ID=26836653

Family Applications (1)

Application Number Title Priority Date Filing Date
DE69922238T Expired - Lifetime DE69922238T2 (de) 1998-08-24 1999-03-24 Mechanismus zur blockierung von ladeoperationen auf adressengeneration von speicherbefehlen und universeller abhängigkeitsvektor

Country Status (5)

Country Link
EP (2) EP1122639A3 (de)
JP (2) JP3866921B2 (de)
KR (2) KR100608389B1 (de)
DE (1) DE69922238T2 (de)
WO (1) WO2000011548A1 (de)

Families Citing this family (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6122727A (en) 1998-08-24 2000-09-19 Advanced Micro Devices, Inc. Symmetrical instructions queue for high clock frequency scheduling
US6212623B1 (en) 1998-08-24 2001-04-03 Advanced Micro Devices, Inc. Universal dependency vector/queue entry
US6622235B1 (en) 2000-01-03 2003-09-16 Advanced Micro Devices, Inc. Scheduler which retries load/store hit situations
US6542984B1 (en) 2000-01-03 2003-04-01 Advanced Micro Devices, Inc. Scheduler capable of issuing and reissuing dependency chains
US6564315B1 (en) 2000-01-03 2003-05-13 Advanced Micro Devices, Inc. Scheduler which discovers non-speculative nature of an instruction after issuing and reissues the instruction
JP2003519833A (ja) * 2000-01-03 2003-06-24 アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド 依存性連鎖の発行および再発行が可能なスケジューラ
GB0023698D0 (en) * 2000-09-27 2000-11-08 Univ Bristol Instruction issue in a processor
US6862676B1 (en) * 2001-01-16 2005-03-01 Sun Microsystems, Inc. Superscalar processor having content addressable memory structures for determining dependencies
GB0302602D0 (en) * 2003-02-04 2003-03-12 Young Arthur P Equipment and methods for real time application
EP1462934A1 (de) * 2003-03-29 2004-09-29 Deutsche Thomson-Brandt Gmbh Verfahren und Vorrichtung zur Beförderung von Ergebnissen
US7321964B2 (en) 2003-07-08 2008-01-22 Advanced Micro Devices, Inc. Store-to-load forwarding buffer using indexed lookup
US7506132B2 (en) * 2005-12-22 2009-03-17 International Business Machines Corporation Validity of address ranges used in semi-synchronous memory copy operations
US7380104B2 (en) * 2006-04-25 2008-05-27 International Business Machines Corporation Method and apparatus for back to back issue of dependent instructions in an out of order issue queue
US8639889B2 (en) 2011-01-31 2014-01-28 International Business Machines Corporation Address-based hazard resolution for managing read/write operations in a memory cache
US9116686B2 (en) * 2012-04-02 2015-08-25 Apple Inc. Selective suppression of branch prediction in vector partitioning loops until dependency vector is available for predicate generating instruction
US9424041B2 (en) * 2013-03-15 2016-08-23 Samsung Electronics Co., Ltd. Efficient way to cancel speculative ‘source ready’ in scheduler for direct and nested dependent instructions
CN111694675B (zh) 2019-03-15 2022-03-08 上海商汤智能科技有限公司 任务调度方法及装置、存储介质

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5201057A (en) * 1987-01-22 1993-04-06 Uht Augustus K System for extracting low level concurrency from serial instruction streams
US5655096A (en) * 1990-10-12 1997-08-05 Branigin; Michael H. Method and apparatus for dynamic scheduling of instructions to ensure sequentially coherent data in a processor employing out-of-order execution
JPH0820949B2 (ja) * 1991-11-26 1996-03-04 松下電器産業株式会社 情報処理装置
US5465336A (en) * 1994-06-30 1995-11-07 International Business Machines Corporation Fetch and store buffer that enables out-of-order execution of memory instructions in a data processing system
US5710902A (en) * 1995-09-06 1998-01-20 Intel Corporation Instruction dependency chain indentifier
US5835747A (en) * 1996-01-26 1998-11-10 Advanced Micro Devices, Inc. Hierarchical scan logic for out-of-order load/store execution control

Also Published As

Publication number Publication date
WO2000011548A1 (en) 2000-03-02
KR20060070576A (ko) 2006-06-23
JP3866921B2 (ja) 2007-01-10
JP2006228241A (ja) 2006-08-31
EP1122639A2 (de) 2001-08-08
DE69922238D1 (de) 2004-12-30
JP2002527798A (ja) 2002-08-27
JP3919802B2 (ja) 2007-05-30
KR100611341B1 (ko) 2006-08-14
EP1122639A3 (de) 2002-02-13
KR20010085584A (ko) 2001-09-07
EP1121635A1 (de) 2001-08-08
EP1121635B1 (de) 2004-11-24
KR100608389B1 (ko) 2006-08-09

Similar Documents

Publication Publication Date Title
DE69922238T2 (de) Mechanismus zur blockierung von ladeoperationen auf adressengeneration von speicherbefehlen und universeller abhängigkeitsvektor
DE69433339T2 (de) Lade-/Speicherfunktionseinheiten und Datencachespeicher für Mikroprozessoren
DE60205363T2 (de) Mikroprozessor mit einem performance-drosselmechanismus für das energiemanagement
DE69311330T2 (de) Befehlsablauffolgeplanung von einem risc-superskalarprozessor
DE69308548T2 (de) Vorrichtung und verfahren zum befehlsabschluss in einem superskalaren prozessor.
DE69434669T2 (de) Spekulative Befehlswarteschlange für Befehle mit variabler Byteslänge
DE60005860T2 (de) Ablaufsteuerung zum ausgeben und wiederausgeben von ketten abhängiger befehle
DE60010907T2 (de) Sram-steuerungvorrichtung für parallele prozessorarchitektur mit adressen- und befehlswarteschlange und arbiter
DE3587439T2 (de) Gemeinsam benutzter Mehrprozessor-Pipeline-Cachespeicher.
DE60011797T2 (de) Ausführung von mehreren fäden in einem parallelprozessor
DE112004002848B4 (de) Mikroprozessor und Verfahren zum Verifizieren einer Speicherdatei in einem derartigen Mikroprozessor
DE2855106C2 (de) Einrichtung zur Durchführung von bedingten Verzweigungen
DE69929936T2 (de) Verfahren und Vorrichtung zum Abrufen von nicht-angrenzenden Befehlen in einem Datenverarbeitungssystem
DE3486085T2 (de) Zentrale Verarbeitungseinheit für einen Digitalrechner.
DE69636861T2 (de) Mikroprozessor mit Lade-/Speicheroperation zu/von mehreren Registern
DE69721961T2 (de) Mikroprozessor mit einem Nachschreibcachespeicher
DE69629495T2 (de) Vereinheitlichter multifunktions-operationsverteiler für die ungeordnete befehlsexekution in einem superskalaren prozessor
DE3851746T2 (de) Sprungvorhersage.
DE69737423T2 (de) Verfahren und gerät zum replizieren von datenspeicherung in einem fortgeschrittenen mikroprozessor
DE60009151T2 (de) Vorhersage von datenbeförderung von speicher- zum ladebefehl mit untrainierung
DE60102017T2 (de) Räumungsfilter für adressenübersetzungspuffer
DE60308201T2 (de) Datenverarbeitungssystem mit externen und internen anweisungssätzen
DE69305366T2 (de) System und verfahren zum kennzeichnen von befehlen zur steuerung der befehlsausführung
DE69736105T2 (de) Hierarchische durchsuchlogik für ungeordnete lade/speicherausführungssteuerung
DE68928727T2 (de) Cachespeicheranlage zum Versorgen eines Festworts eines Befehlscodes mit variabler Länge und Befehlsabrufanlage

Legal Events

Date Code Title Description
8364 No opposition during term of opposition
8327 Change in the person/name/address of the patent owner

Owner name: GLOBALFOUNDRIES INC. MAPLES CORPORATE SERVICES, KY