[go: up one dir, main page]

DE60005860T2 - Ablaufsteuerung zum ausgeben und wiederausgeben von ketten abhängiger befehle - Google Patents

Ablaufsteuerung zum ausgeben und wiederausgeben von ketten abhängiger befehle Download PDF

Info

Publication number
DE60005860T2
DE60005860T2 DE60005860T DE60005860T DE60005860T2 DE 60005860 T2 DE60005860 T2 DE 60005860T2 DE 60005860 T DE60005860 T DE 60005860T DE 60005860 T DE60005860 T DE 60005860T DE 60005860 T2 DE60005860 T2 DE 60005860T2
Authority
DE
Germany
Prior art keywords
store
command
instruction
buffer
memory
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
DE60005860T
Other languages
English (en)
Other versions
DE60005860D1 (de
Inventor
B. James KELLER
W. Ramsey HADDAD
G. Stephan MEIER
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/476,322 external-priority patent/US6564315B1/en
Priority claimed from US09/476,204 external-priority patent/US6622235B1/en
Priority claimed from US09/476,578 external-priority patent/US6542984B1/en
Application filed by Advanced Micro Devices Inc filed Critical Advanced Micro Devices Inc
Publication of DE60005860D1 publication Critical patent/DE60005860D1/de
Application granted granted Critical
Publication of DE60005860T2 publication Critical patent/DE60005860T2/de
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING OR CALCULATING; 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/3842Speculative instruction execution
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; 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 OR CALCULATING; 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
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; 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 OR CALCULATING; 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
    • G06F9/384Register renaming
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; 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
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; 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 OR CALCULATING; 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 OR CALCULATING; 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/3861Recovery, e.g. branch miss-prediction, exception handling

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)

Description

  • Hintergrund der Erfindung
  • 1. Technisches Gebiet
  • Diese Erfindung betrifft das Gebiet von Prozessoren und insbesondere Mechanismen zur Ablaufplanung von Befehlen innerhalb Prozessoren.
  • 2. Stand der Technik
  • Superskalare Prozessoren versuchen eine hohe Leistungsfähigkeit zu erreichen, indem sie mehrere Befehle pro Taktzyklus ausgeben und ausführen und indem sie die höchst mögliche Taktfrequenz verwenden, die mit dem Design vereinbar ist. Ein Verfahren zum Steigern der Anzahl der pro Taktzyklus ausgeführten Befehle ist die unregelmäßige Ausführung. Bei der unregelmäßigen Ausführung können Befehle in einer anderen Reihenfolge ausgeführt werden als in der Programmsequenz (oder "Reihenfolge des Programms") angegeben ist. Gewisse Befehle, die in einer Programmsequenz nahe bei einander sind, können Abhängigkeiten haben, welche ihre gleichzeitige Ausführung verhindern, während nachfolgende Befehle in der Programmsequenz keine Abhängigkeiten von den vorherigen Befehlen haben müssen. Entsprechend kann eine außer der Reihe Ausführung die Leistungsfähigkeit des superskalaren Prozessors durch eine Steigerung der Anzahl der gleichzeitig ausgeführten Befehle (im Mittel) erhöhen. Ein weiteres Verfahren, das sich auf die ungeordnete Ausführung bezieht, ist die spekulative Ausführung, bei der Befehle ausgeführt werden, die auf andere Befehle folgen, welche die Ausführung des Programms veranlassen können, einem anderen Pfad zu folgen als dem Pfad, der die spekulativen Befehle enthält. Zum Beispiel können Befehle spekulativ sein, falls die Befehle auf einen bestimmten Befehl folgen, der eine Ausnahme verursachen könnte. Befehle sind auch spekulativ, wenn die Befehle einem vorher gesagten, bedingten Verzweigungsbefehl folgen, der noch nicht ausge führt worden ist. Auf ähnliche Weise können Befehle ungeordnet oder spekulativ im Ablauf geplant, ausgegeben usw. werden.
  • Bedauerlicherweise führt die Ablaufplanung von Befehlen für die ungeordnete oder spekulative Ausführung zu zusätzlicher Komplexität bei der Hardware in dem Prozessor. Der Ausdruck „Ablaufplanung" bezieht sich im Allgemeinen auf die Auswahl eines Befehls für die Ausführung. Typischerweise versucht der Prozessor Befehle so schnell wie möglich für den Ablauf zu planen, um die durchschnittliche Rate der Befehlsausführung zu maximieren (zum Beispiel durch Ausführen von Befehlen außer der Reihe, um Abhängigkeiten und die Verfügbarkeit von Hardware für verschiedene Typen von Befehlen zu behandeln). Diese Komplexitäten können die Taktfrequenz begrenzen, bei denen der Prozessor arbeiten kann. Insbesondere müssen die Abhängigkeiten zwischen den Befehlen von der Hardware der Ablaufplanung berücksichtigt werden. Im Allgemeinen bezieht sich, wie hier verwendet, der Ausdruck „Abhängigkeit" auf eine Beziehung eines ersten Befehls und eines nachfolgenden zweiten Befehls in der Reihenfolge des Programms, welche die Ausführung des ersten Befehls vor der Ausführung des zweiten Befehls erfordert. Eine Vielzahl von Abhängigkeiten kann definiert werden. Zum Beispiel tritt eine Abhängigkeit vom Quelloperanden auf, wenn ein Quelloperand des zweiten Befehls ein Zieloperand des ersten Befehls ist.
  • Im Allgemeinen haben Befehle einen oder mehrere Quelloperanden und einen oder mehrere Zieloperanden. Die Quelloperanden sind Eingangswerte, die in Übereinstimmung mit der Definition des Befehls zu manipulieren sind, um ein oder mehrere Ergebnisse zu erzeugen (welche die Zieloperanden sind). Quellund Zieloperanden können Speicheroperanden sein, die in einer Speicherstelle außerhalb des Prozessors gespeichert werden, oder können Registeroperanden sein, die in in dem Prozessor enthaltenen Registerspeicherstellen gespeichert werden. Die von dem Prozessor verwendete Befehlssatzarchitektur definiert eine Anzahl von architekturisierten Registern. Diese Register sind von der Befehlssatzarchitektur zu existieren definiert und Befehle können kodiert werden unter Verwendung der architekturisierten Register als Quell- und Zieloperanden. Ein Befehl gibt ein bestimmtes Register als einen Quell- oder Zieloperanden über eine Registernummer (oder Registeradresse) in einem Operandenfeld eines Befehls an. Die Registernummer identifiziert das ausgewählte Register einzigartig unter den architekturisierten Registern. Ein Quelloperand wird von einer Quellregisternummer identifiziert und ein Zieloperand wird von einer Zielregisternummer identifiziert.
  • Zusätzlich zu den Abhängigkeiten der Operanden, können von dem Prozessor ein oder mehrere Typen von Ordnungsabhängigkeiten durchgesetzt werden. Ordnungsabhängigkeiten können zum Beispiel verwendet werden, um die verwendete Hardware zu vereinfachen oder um eine korrekte Ausführung des Programms zu erzeugen. Durch das Zwingen von gewissen Befehlen, in einer Reihenfolge im Hinblick auf gewisse andere Befehle ausgeführt zu werden, kann die Hardware zum Behandeln von Konsequenzen der außer der Reihe Ausführung der Befehle unterdrückt werden. Zum Beispiel können Befehle, die speziellen Register, welche einen allgemeinen Betriebszustand des Prozessors enthalten, aktualisieren, die Ausführung einer Vielzahl von nachfolgenden Befehlen beeinflussen, die nicht explizit auf die speziellen Register zugreifen. Im Allgemeinen können Ordnungsabhängigkeiten von Mikroarchitektur zu Mikroarchitektur variieren.
  • Während der Mechanismus für die Ablaufplanung Abhängigkeiten respektiert, ist es wünschenswert, bei der ungeordneten und/oder spekulativen Ablaufplanung so aggressiv wie möglich zu sein, in einem Versuch, den realisierten Gewinn der Leistungsfähigkeit zu maximieren. Jedoch wird, je aggressiver der Mechanismus für die Ablaufplanung ist (das heißt je weniger Bedingungen, welche einen bestimmten Befehl daran hindern, für den Ablauf geplant zu werden), desto wahrscheinlicher wird das Auftreten eines nicht korrekt ausgeführten Befehls. Der Mechanismus zur Wiederherstellung von nicht korrekt ausgeführten Befehlen war im Allgemeinen, den nicht korrekt ausgeführten Befehl und alle nachfolgenden Befehle aus der Pipeline des Prozessors zu ent fernen und den nicht korrekt ausgeführten Befehl (und nachfolgende Befehle) erneut abzurufen. Oft wird die Entfernung und das erneute Abrufen von der Entdeckung einer nicht korrekten Ausführung aus Gründen der Einfachheit der Hardware verzögert (zum Beispiel bis der nicht korrekt ausgeführte Befehl der älteste Befehl in der Bearbeitung ist). Die durchschnittliche Anzahl von tatsächlich pro Taktzyklus ausgeführten Befehlen sinkt wegen der nicht korrekten Ausführung und den nachfolgenden Ereignissen zur Entfernung. Für aggressive Mechanismen für die Ablaufplanung, welche häufiger auf nicht korrekte Ausführung treffen, kann die Verschlechterung der Leistungsfähigkeit, welche diesen Mechanismen zur Wiederherstellung zuzurechnen ist, erheblich sein. Entsprechend ist ein Mechanismus zur Wiederherstellung von einer nicht korrekten, spekulativen Ausführung gewünscht, der die Gewinne der Leistungsfähigkeit, die durch eine aggressive spekulative oder ungeordnete Ablaufplanung möglich gemacht werden, sichert.
  • Das US Patent mit der Nummer 5,987,594 beschreibt einen Prozessor, der kodierte Befehle unter Verwendung einer Ablaufplanungseinheit ausführt, welche kodierte Befehle empfängt und sie für die Ausführung ausgibt. Der Prozessor gibt Speicheroperationen, welche in einem Cachespeicher nicht treffen, wenn Daten an den Cachespeicher zurück gegeben werden, und Befehle, die von den genannten Speicheroperationen abhängen, erneut aus. Des weiteren kann der Prozessor eine ungeordnete Ausführung von Speicheroperationen durchführen durch Detektierung von „Lesen nach Schreiben" Gefahren und Weiterleitung der Schreibdaten an den Lese Befehl.
  • Offenbarung der Erfindung
  • Die oben ausgeführten Probleme werden zu einem großen Teil von einem Ablaufplaner, wie hier beschrieben, gelöst. Der Ablaufplaner gibt Befehlsoperationen für die Ausführung aus, hält aber auch die Befehlsoperationen zurück. Falls eine bestimmte Befehlsoperation nachfolgend als nicht korrekt ausgeführt befunden wird, kann die bestimmte Befehlsoperation von dem Ablauf planer erneut ausgegeben werden. Vorteilhafterweise kann die Strafe für das nicht korrekte Planen des Ablaufs von Befehlsoperationen im Vergleich zum Entfernen der bestimmten Befehlsoperation und jüngeren Befehlsoperationen aus der Pipeline und zum erneuten Abrufen der bestimmten Befehlsoperation reduziert werden. Die Leistungsfähigkeit kann wegen der reduzierten Strafe für eine nicht korrekte Ausführung reduziert werden. Des weiteren kann der Ablaufplaner einen aggressiveren Mechanismus für die Ablaufplanung verwenden, da die Strafe für eine nicht korrekte Ausführung verringert ist.
  • Des weiteren kann der Ablaufplaner die Angaben für Abhängigkeiten für jede Befehlsoperation, die ausgegeben worden ist, beibehalten. Falls die bestimmte Befehlsoperation erneut ausgegeben wird, können die Befehlsoperationen, die von der bestimmten Befehlsoperation abhängig sind (direkt oder indirekt) über die Angaben zur Abhängigkeit identifiziert werden. Der Ablaufplaner gibt auch die abhängigen Befehlsoperationen erneut aus. Befehlsoperationen, die in der Reihenfolge des Programms einer bestimmten Befehlsoperation nachfolgen, aber die nicht von der bestimmten Befehlsoperation abhängig sind, werden nicht erneut ausgegeben. Entsprechend kann die Strafe für die nicht korrekte Ablaufplanung von Befehlsoperationen im Hinblick auf das Entfernen der bestimmten Befehlsoperation und aller jüngeren Befehlsoperationen und das erneute Abrufen der bestimmten Befehlsoperation weiter reduziert werden. Die Leistungsfähigkeit kann somit weiter gesteigert werden.
  • Allgemein betrachtet, wird ein Ablaufplaner betrachtet. Der Ablaufplaner weist einen Befehlspuffer zum Speichern einer ersten Befehlsoperation, eine mit dem Befehlspuffer verbundene Ausgabeauswahlschaltung und eine Steuerschaltung auf. Die Ausgabeauswahlschaltung ist zum Auswählen einer ersten Befehlsoperation zur Ausgabe aus dem Befehlspuffer konfiguriert. An die Ausgabeauswahlschaltung angeschlossen ist die Steuerschaltung konfiguriert, um einen ersten Ausführungszustand der ersten Befehlsoperation zu halten. Die Steuerschaltung ist konfiguriert, um den ersten Ausführungszustand in einen Ausführungszustand zu ändern in Reaktion auf die Ausgabeauswahlschaltung, welche die erste Befehlsoperation für die Ausgabe auswählt. Des weiteren ist die Steuerschaltung konfiguriert, um den ersten Ausführungszustand in einen nicht ausgeführten Zustand in Reaktion auf ein erstes Signal zu ändern, das anzeigt, dass die erste Befehlsoperation nicht korrekt ausgeführt ist.
  • Des weiteren wird ein Prozessor betrachtet, der einen Ablaufplaner und eine Ausführungseinheit aufweist. Der Ablaufplaner ist konfiguriert zum Speichern einer ersten Befehlsoperation und zum Ausgeben der Befehlsoperation für die Ausführung. Der Ablaufplaner ist konfiguriert zum Halten eines ersten Ausführungszustandes entsprechend der ersten Befehlsoperation und ist konfiguriert zum Ändern des ersten Ausführungszustandes in einen Ausführungszustand in Reaktion auf das Ausgeben der ersten Befehlsoperation. An den Ablaufplaner angeschlossen zum Empfangen der ersten Befehlsoperation in Reaktion auf eine Ausgabe davon durch den Ablaufplaner, ist die Ausführungseinheit konfiguriert, die erste Befehlsoperation auszuführen. Die Steuerschaltung ist konfiguriert, um den ersten Ausführungszustand in einen nicht ausgeführten Zustand zu ändern in Reaktion auf ein erstes Signal, das anzeigt, dass die erste Befehlsoperation nicht korrekt ausgeführt ist. Darüber hinaus wird ein Computersystem betrachtet, das einen Prozessor und ein Eingangs/Ausgangs (I/O) Gerät, das konfiguriert ist, zwischen dem Computersystem und weiteren Computersystemen, an die das I/O Gerät angeschlossen werden kann, zu kommunizieren, umfasst.
  • Des weiteren wird ein Verfahren betrachtet. Eine erste Befehlsoperation wird von einem Ablaufplaner an eine Ausführungseinheit ausgegeben. Die erste Befehlsoperation wird nach der Ausgabe in dem Ablaufplaner zurück gehalten. Ein erstes Signal wird empfangen, dass die erste Befehlsoperation nicht korrekt ausführt. Die erste Befehlsoperation wird in Reaktion auf den Empfang des ersten Signals erneut ausgegeben.
  • Darüber hinaus wird ein Prozessor betrachtet. Der Prozessor weist einen Ablaufplaner und eine Ausführungseinheit auf. Der Ablaufplaner ist konfiguriert, um eine erste Befehlsoperation zu speichern und um die erste Befehlsoperation für die Ausführung auszugeben. Der Ablaufplaner ist konfiguriert, um die erste Befehlsoperation nach der Ausgabe zurück zu halten, und ist angeschlossen, um ein erstes Signal zu empfangen, das anzeigt, dass die erste Befehlsoperation nicht korrekt ausgeführt wurde. In Reaktion auf das erste Signal ist der Ablaufplaner konfiguriert, die Befehlsoperation in Reaktion auf das erste Signal erneut auszugeben. An den Ablaufplaner angeschlossen, um die erste Befehlsoperation in Reaktion auf die Ausgabe davon durch den Ablaufplaner zu empfangen, wobei die Ausführungseinheit konfiguriert ist, die erste Befehlsoperation auszuführen.
  • Kurze Beschreibung der Zeichnungen
  • Weitere Aufgaben und Vorteile der Erfindung werden bei dem Studium der folgenden detaillierten Beschreibung und der Bezugnahme auf die begleitenden Zeichnungen offenbar, in denen:
  • 1 ein Blockdiagramm eines Ausführungsbeispiels eines Prozessors ist.
  • 2 ein beispielhaftes Pipelinediagramm ist, welches von einem in 1 gezeigten Ausführungsbeispiel des Prozessors verwendet werden kann.
  • 3 ein Blockdiagramm ist, das ein Ausführungsbeispiel der in 1 gezeigten Abbildungseinheit, des Ablaufplaners, des Ganzzahl Ausführungskerns und der Lade/Speicher-Einheit detaillierter darstellt.
  • 4 ein Blockdiagramm eines Ausführungsbeispiels des in den 1 und 3 gezeigten Ablaufplaners ist.
  • 5 ein Blockdiagramm eines Ausführungsbeispiels eines Abhängigkeitsvektors ist.
  • 6 ein Blockdiagramm eines Ausführungsbeispiels eines Abhängigkeitspuffers ist.
  • 7 ein Blockdiagramm eines Ausführungsbeispiels eines Bereichs des in 6 detaillierter gezeigten Abhängigkeitspuffers ist.
  • 8 ein Zustandsmaschinendiagramm im Hinblick auf eine Befehlsoperation innerhalb eines Ausführungsbeispiels des Ablaufplaners ist.
  • 9 ein Blockdiagramm ist, das Zustandinformation darstellt, die für jede Befehlsoperation in einem Ausführungsbeispiel des Ablaufplaners gespeichert ist.
  • 10 ein Zeitablaufdiagramm ist, welches das Auflösen einer Abhängigkeitskette darstellt.
  • 11 ein Zeitablaufdiagramm ist, welches die Ausgabe und die erneute Ausgabe von Befehlsoperationen von einem Ausführungsbeispiel des Ablaufplaners darstellt.
  • 12 ein Zeitablaufdiagramm ist, welches die Ausgabe und die nicht spekulative erneute Ausgabe von Befehlsoperationen von einem Ausführungsbeispiel des Ablaufplaners darstellt.
  • 13 ein Diagramm eines beispielhaften Eintrags in einem Ausführungsbeispiel des in 4 gezeigten physikalischen Adresspuffers zusammen mit einer beispielhaften Logik zum Arbeiten auf diesem Eintrag ist.
  • 14 ein Diagramm eines beispielhaften Eintrags in einem Ausführungsbeispiel des in 4 gezeigten Speicheridentifiziererpuffers zusam men mit einer beispielhaften Logik zum Arbeiten auf diesem Eintrag ist.
  • 15 ein Zeitablaufdiagramm eines Ausführungsbeispiels des erneuten Versuchens eines Ladevorgangs in Reaktion auf eine Speicheradresse, welche die Ladeadresse trifft, und des nachfolgenden Auflösens der abhängigen Operationen ist.
  • 16 ein Blockdiagramm eines ersten Ausführungsbeispiels eines Computersystems einschließlich des in 1 gezeigten Prozessors ist.
  • 17 ein Blockdiagramm eines zweiten Ausführungsbeispiels eines Computersystems einschließlich des in 1 gezeigten Prozessors ist.
  • Während die Erfindung zahlreichen Modifikationen und alternativen Ausbildungen unterworten werden kann, sind bestimmte Ausführungsbeispiele davon als Beispiel in den Zeichnungen gezeigt und werden hier detailliert beschrieben werden. Es sollte jedoch verstanden werden, dass die Zeichnungen und die dazu gehörige detaillierte Beschreibung nicht beabsichtigt sind, die Erfindung auf die bestimmte offenbarte Form zu begrenzen, sondern dass die Erfindung vielmehr alle Modifikationen, Äquivalente und Alternativen umfassen soll, die in den Geist und den Umfang der vorliegenden Erfindung fallen, wie sie in den angefügten Ansprüchen definiert ist.
  • Weg(e) zum Ausführen der Erfindunq
  • Übersicht über den Prozessor
  • Es wird nun auf 1 Bezug genommen, in der ein Ausführungsbeispiel eines Prozessors 10 gezeigt ist. Weitere Ausführungsbeispiele sind möglich und werden betrachtet. In dem Ausführungsbeispiel aus 1 enthält der Prozessor 10 eine Zeilenvorhersage 12, einen Befehls-Cachespeicher (B-Cache speicher) 14, eine Ausrichtungseinheit 16, eine Verzweigungsvorhersage/Abruf PC Erzeugungseinheit 18, eine Vielzahl von Dekodiereinheiten 24A24D, eine Vorhersagefehltreffer-Dekodiereinheit 26, eine Mikrocode-Einheit 28, eine Abbildungseinheit 30, eine Rückzugswarteschlange 32, eine architekturisierte Umbenennungsdatei 34, eine zukünftige Datei 20, einen Ablaufplaner 36, eine Ganzzahl-Registerdatei 38A, eine Gleitkomma-Registerdatei 38B, einen Ganzzahl-Ausführungskern 40A, einen Gleitkomma-Ausführungskern 40B, eine Lade/Speichereinheit 42, einen Daten-Cachespeicher (D-Cachespeicher) 44, eine externe Interfaceeinheit 46 und einen PC Silo 48. Die Zeilenvorhersage 12 ist verbunden mit der Vorhersagefehltreffer-Dekodiereinheit 26, der Verzweigungsvorhersage/Abruf PC Erzeugungseinheit 18, dem PC Silo 48 und der Ausrichtungseinheit 16. Der B-Cachespeicher 14 ist verbunden mit der Ausrichtungseinheit 16 und der Verzweigungsvorhersage/Abruf PC Erzeugungseinheit 18, welche ferner mit dem PC Silo 48 verbunden ist. Die Ausrichtungseinheit 16 ist des weiteren mit der Vorhersagefehltreffer-Dekodiereinheit 26 und den Dekodiereinheiten 24A24D verbunden. Die Dekodiereinheiten 24A24D sind ferner mit der Abbildungseinheit 30 verbunden, und die Dekodiereinheit 24D ist mit der Mikrocode-Einheit 28 verbunden. Die Abbildungseinheit 30 ist verbunden mit der Rückzugswarteschlange 32 (die mit der architekturisierten Umbenennungsdatei 34 verbunden ist), der zukünftigen Datei 20, dem Ablaufplaner 36 und dem PC Silo 48. Die architekturisierte Umbenennungsdatei 34 ist mit der zukünftigen Datei 20 verbunden. Der Ablaufplaner 36 ist mit den Registerdateien 38A38B verbunden, welche des weiteren miteinander und mit den entsprechenden Ausführungskernen 40A40B verbunden sind. Die Ausführungskerne 40A40B sind ferner mit der Lade/Speichereinheit 42 und dem Ablaufplaner 36 verbunden. Der Ausführungskern 40A ist darüber hinaus mit dem D-Cachespeicher 44 verbunden. Die Lade/Speichereinheit 42 ist verbunden mit dem Ablaufplaner 36, dem D-Cachespeicher 44 und der externen Interfaceeinheit 46. Der D-Cachespeicher 44 ist mit den Registerdateien 38 verbunden. Die externe Interfaceeinheit 46 ist mit einer externen Schnittstelle 52 und dem B-Cachespeicher 14 verbunden. Elemente, die hier durch eine Bezugsnummer gefolgt von einem Buch staben bezeichnet werden, werden gemeinsam durch die Bezugszahl allein bezeichnet. Zum Beispiel werden die Dekodiereinheiten 24A24D gemeinsam als Dekodiereinheiten 24 bezeichnet.
  • In dem Ausführungsbeispiel aus 1 verwendet der Prozessor 10 eine komplexe Befehlssatzberechnungs- (CISC) Befehlssatzarchitektur mit variabler Bitlänge. Zum Beispiel kann der Prozessor 10 die x86 Befehlssatzarchitektur (auch als IA-32 bezeichnet) verwenden. Weitere Ausführungsbeispiele können andere Befehlssatzarchitekturen verwenden, einschließlich Befehlssatzarchitekturen mit fester Länge und reduzierten Befehlssatzberechnungs- (RISC) Befehlssatzarchitekturen. Gewisse in 1 gezeigte Merkmale können in solchen Architekturen unterdrückt werden. Des weiteren kann, falls gewünscht, jedes der obigen Ausführungsbeispiele eine 64 Bit Architektur verwenden.
  • Die Verzweigungsvorhersage/Abruf PC Erzeugungseinheit 18 ist konfiguriert, um dem B-Cachespeicher 14, der Zeilenvorhersage 12 und dem PC Silo 48 eine Abrufadresse (Abruf PC) zur Verfügung zu stellen. Die Verzweigungsvorhersage/Abruf PC Erzeugungseinheit 18 kann einen geeigneten Mechanismus zur Vorhersage von Verzweigungen enthalten, der als Hilfe bei der Erzeugung von Abrufadressen verwendet wird. In Reaktion auf die Abrufadresse stellt die Zeilenvorhersage 12 Ausrichtungsinformation, die einer Vielzahl von Befehlen entspricht, der Ausrichtungseinheit 16 zur Verfügung und kann eine nächste Abrufadresse zum Abholen von Befehlen zur Verfügung stellen, die dem von der bereit gestellten Befehlsinformation identifizierten Befehl nach folgen. Die nächste Abrufadresse kann, wie gewünscht, der Verzweigungsvorhersage/Abruf PC Erzeugungseinheit 18 zur Verfügung gestellt werden oder kann dem B-Cachespeicher 14 direkt zur Verfügung gestellt werden. Die Verzweigungsvorhersage/Abruf PC Erzeugungseinheit 18 kann eine Fangadresse von dem PC Silo 48 empfangen (falls ein Fang detektiert ist) und die Fangadresse kann den Abruf PC aufweisen, der von der Verzweigungsvorhersage/Abruf PC Erzeugungseinheit 18 erzeugt wurde. Anderenfalls kann der Abruf PC unter Verwendung der Information zu der Verzweigungsvorhersage und der Infor mation von der Zeilenvorhersage 12 erzeugt werden. Im Allgemeinen speichert die Zeilenvorhersage 12 Information entsprechend zu Befehlen, die zuvor spekulativ von dem Prozessor 10 abgerufen wurden. In einem Ausführungsbeispiel enthält die Zeilenvorhersage 12 2K Einträge, wobei jeder Eintrag eine Gruppe von einem oder mehreren Befehlen angibt, die hier als eine „Zeile" von Befehlen bezeichnet werden. Die Zeile der Befehle kann nebeneinander von der Befehle verarbeitenden Pipeline des Prozessors 10 verarbeitet werden durch die Platzierung in dem Ablaufplaner 36.
  • Der B-Cachespeicher 14 ist ein Cachespeicher hoher Geschwindigkeit zum Speichern von Befehlsbytes. In Übereinstimmung mit einem Ausführungsbeispiel kann der B-Cachespeicher 14 zum Beispiel eine 128 KByte, vier Wege Satz assoziative Organisation aufweisen, die Cachezeilen mit 64 Byte verwendet. Jedoch kann jede B-Cachespeicher Struktur geeignet sein (einschließlich direkt abgebildeter Strukturen).
  • Die Ausrichtungseinheit 16 empfängt die Information zur Ausrichtung von Befehlen von der Zeilenvorhersage 12 und Befehlsbytes, die der Abrufadresse entsprechen, von dem B-Cachespeicher 14. Die Ausrichtungseinheit 16 wählt Befehlsbytes in jeder der Dekodiereinheiten 24A24D in Übereinstimmung mit der zur Verfügung gestellten Information zur Ausrichtung von Befehlen aus. Genauer gesagt stellt die Zeilenvorhersage 12 einen Befehlszeiger zur Verfügung, der jeder Dekodiereinheit 24A24D entspricht. Der Befehlszeiger ortet einen Befehl innerhalb der abgerufenen Befehlsbytes zur Beförderung an die entsprechende Dekodiereinheit 24A24D. In einem Ausführungsbeispiel können bestimmte Befehle zu mehr als einer Dekodiereinheit 24A24D befördert werden. Entsprechen kann in dem gezeigten Ausführungsbeispiel eine Zeile von Befehlen von der Zeilenvorhersage 12 bis zu 4 Befehle enthalten, obwohl andere Ausführungsbeispiele mehr oder weniger Dekodiereinheiten 24 enthalten können, um für mehr oder weniger Befehle in einer Zeile zu sorgen.
  • Die Dekodiereinheiten 24A24D dekodieren die ihnen zur Vertügung gestellten Befehle und jede Dekodiereinheit 24A24D erzeugt Informationen, die eine oder mehrere den Befehlen entsprechende Befehlsoperationen (oder ROPs) identifizieren. In einem Ausführungsbeispiel kann jede Dekodiereinheit 24A24D bis zu zwei Befehlsoperationen pro Befehl erzeugen. Wie hier verwendet ist eine Befehlsoperation (oder ROP) eine Operation, für die eine Ausführungseinheit innerhalb der Ausführungskerne 40A40B konfiguriert ist, sie als ein einzelnes Gebilde auszuführen. Einfache Befehle können einer einzelnen Befehlsoperation entsprechen, während komplexere Befehle mehrfachen Befehlsoperationen entsprechen können. Gewisse der komplexeren Befehle können innerhalb der Mikrocode-Einheit 28 als Mikrocode Routinen implementiert sein (abgerufen von einem Nur-Lese-Speicher darin über die Dekodiereinheit 24D in diesem Ausführungsbeispiel). Des weiteren können andere Ausführungsbeispiele eine einzelne Befehlsoperation für jeden Befehl verwenden (das heißt Befehl und Befehlsoperation können in derartigen Ausführungsbeispielen gleichbedeutend sein).
  • Der PC Silo 48 speichert die abgerufenen Adressen und Befehlsinformationen für jede Befehlsabrufung und ist verantwortlich für die Umleitung des Abrufens von Befehlen bei Ausnahmen (wie Befehlsfängen, wie sie von der von dem Prozessor 10 verwendeten Befehlssatzarchitektur definiert sind, falschen Vorhersagen für Verzweigungen und weiteren mikroarchitektonisch definierten Fängen). Der PC Silo 48 kann einen Ringpuffer zum Speichern der Abrufadresse und Befehlsinformation, die den mehrfachen Zeilen von Befehlen entspricht, welche innerhalb des Prozessors 10 unerledigt sind, umfassen. In Reaktion auf die Zurückziehung einer Zeile von Befehlen kann der PC Silo 48 den entsprechenden Eintrag verwerfen. In Reaktion auf eine Ausnahme kann der PC Silo 48 der Verzweigungsvorhersage/Abruf PC Erzeugungseinheit 18 eine Fangadresse zur Vertügung stellen. Die Rückzugs- und Ausnahmeinformation kann von dem Ablaufplaner 36 zur Verfügung gestellt werden. In einem Ausführungsbeispiel weist die Abbildungseinheit 30 jedem Befehl eine Sequenznummer (R#) zu, um die Reihenfolge der innerhalb des Prozessors 10 unerle digten Befehle zu identifizieren. Der Ablaufplaner 36 kann die R#s zu dem PC Silo 48 zurück geben, um die Befehlsoperationen zu identifizieren, die Ausnahmen erfahren oder Befehlsoperationen zurück ziehen.
  • Auf die Detektierung eines Fehltreffers in der Zeilenvorhersage 12 dirigiert die Ausrichtungseinheit 16 die entsprechenden Befehlsbytes von dem B-Cachespeicher 14 an die Vorhersagefehltreffer-Dekodiereinheit 26. Die Vorhersagefehltreffer-Dekodiereinheit 26 dekodiert den Befehl, wobei einer Zeile von Befehlen jegliche Beschränkungen aufgezwungen werden, für die der Prozessor 10 entworfen ist (zum Beispiel maximale Anzahl von Befehlsoperationen, maximale Anzahl von Befehlen, Beenden bei Verzweigungsbefehlen usw.) sobald eine Zeile beendet ist, stellt die Vorhersagefehltreffer-Dekodiereinheit 26 die Information der Zeilenvorhersage 12 zum Speichern zur Verfügung. Es ist zu bemerken, dass die Vorhersagefehltreffer-Dekodiereinheit 26 konfiguriert sein kann, um Befehle abzusenden, wenn sie dekodiert werden. Alternativ kann die Vorhersagefehltreffer-Dekodiereinheit 26 die Zeile von Befehlsinformationen dekodieren und sie der Zeilenvorhersage 12 zum Speichern zur Verfügung stellen. Nachfolgend kann die fehltreffende Abrufadresse erneut in der Zeilenvorhersage 12 versucht werden und ein Treffer könnte detektiert werden.
  • Zusätzlich zu dem Dekodieren von Befehlen nach einem Fehltreffer in der Zeilenvorhersage 12 kann die Vorhersagefehltreffer-Dekodiereinheit 26 konfiguriert sein, um Befehle zu dekodieren, wenn die von der Zeilenvorhersage 12 zur Verfügung gestellte Befehlsinformation ungültig ist. In einem Ausführungsbeispiel versucht der Prozessor 10 nicht, Information in der Zeilenvorhersage 12 mit den Befehlen in dem B-Cachespeicher 14 kohärent zu halten (zum Beispiel wenn Befehle in dem B-Cachespeicher 14 ersetzt oder ungültig gemacht werden, kann die Befehlsinformation nicht aktiv ungültig gemacht werden). Die Dekodiereinheiten 24A24D können die zur Verfügung gestellte Befehlsinformation verifizieren und können der Vorhersagefehltreffer-Dekodiereinheit 26 signalisieren, wenn ungültige Befehlsinformation detektiert ist. In Übereinstimmung mit einem bestimmten Ausführungsbeispiel werden die folgenden Befehlsoperationen von dem Prozessor 10 unterstützt: Ganzzahl (einschließlich arithmetischen, logischen, Schiebe/Rotations- und Verzweigungsoperationen), Gleitkomma (einschließlich Multimediaoperationen und Lade/Speicher.
  • Die dekodierten Befehlsoperationen und Quell- und Zielregisternummern werden der Abbildungseinheit 30 zur Verfügung gestellt. Die Abbildungseinheit 30 ist konfiguriert, um eine Umbenennung der Register durchzuführen durch eine Zuweisung physikalischer Registernummern (PR#s) für jeden Zielregisteroperanden und jeden Quellregisteroperanden für jede Befehlsoperation. Die physikalische Registernummer identifiziert Register innerhalb der Registerdateien 38A–38B. Die Abbildungseinheit 30 stellt des weiteren einen Hinweis auf die Abhängigkeiten für jede Befehlsoperation zur Verfügung, durch zur Verfügung stellen von R#s der Befehlsoperationen, die jede physikalische Registernummer aktualisieren, die einem Quelloperanden der Befehlsoperation zugewiesen ist. Die Abbildungseinheit 30 aktualisiert die zukünftige Datei 20 mit den physikalischen Registernummern, die jedem Zielregister zugewiesen sind (und dem R# der entsprechenden Befehlsoperation) basierend auf der entsprechenden logischen Registernummer. Des weiteren speichert die Abbildungseinheit 30 die logischen Registernummern der Zielregisters, die zugewiesenen physikalischen Registernummern und die zuvor zugewiesenen physikalischen Registernummern in der Rückzugswarteschlange 32. Wenn Befehle zurück gezogen werden (der Abbildungseinheit 30 von dem Ablaufplaner 36 angezeigt), aktualisiert die Rückzugswarteschlange 32 die architekturisierte Umbenennungsdatei 34 und macht jegliche Register frei, die nicht länger in Benutzung sind. Entsprechend identifizieren die physikalischen Registernummern in der architekturisierten Umbenennungsdatei 34 die physikalischen Register, welche den übergebenen architekturalen Zustand des Prozessors 10 speichern, während die zukünftige Datei 20 den spekulativen Zustand des Prozessors 10 repräsentiert. In anderen Worten speichert die architekturisierte Umbenennungsdatei 34 eine physikalische Registernummer, die jedem lo gischen Register entspricht, darstellend den übergebenen Registerzustand für jedes logische Register. Die zukünftige Datei 20 speichert eine physikalische Registernummer, die jedem logischen Register entspricht, darstellend den spekulativen Registerzustand für jedes logische Register.
  • Die Zeile von Befehlsoperationen, die physikalischen Registernummern für die Quelle und die physikalischen Registernummern für das Ziel werden in dem Ablaufplaner 36 in Übereinstimmung mit den von dem PC Silo 48 zugewiesenen R#s gespeichert. Des weiteren können Abhängigkeiten für eine bestimmte Befehlsoperation als Abhängigkeiten von anderen Befehlsoperationen, die in dem Ablaufplaner gespeichert sind, notiert werden. In einem Ausführungsbeispiel verbleiben die Befehlsoperationen in der Vorhersagefehltreffer-Dekodiereinheit 26 bis sie zurück gezogen werden.
  • Der Ablaufplaner 36 speichert jede Befehlsoperation bis die für diese Befehlsoperation notierten Abhängigkeiten zufrieden gestellt sind. In Reaktion auf die zeitliche Planung einer bestimmten Befehlsoperation zur Ausführung kann der Ablaufplaner 36 bestimmen, zu welchem Taktzyklus diese bestimmte Befehlsoperation die Registerdateien 38A38B aktualisieren wird. Verschiedene Ausführungseinheiten in den Ausführungskernen 40A40B können verschiedene Anzahlen von Stufen der Pipeline verwenden (und damit unterschiedliche Latenzzeiten). Des weiteren können gewisse Befehle innerhalb einer Pipeline mehr Latenz als andere erfahren. Entsprechend wird ein Countdown erzeugt, der die Latenzzeit für diese bestimmte Befehlsoperation misst (in Nummern von Taktzyklen). Der Ablaufplaner 36 erwartet die angegebene Nummer von Taktzyklen (bis die Aktualisierung geschieht vor oder zusammenfallend mit den abhängigen die Registerdatei lesenden Befehlsoperationen) und zeigt dann an, dass die Befehlsoperationen zeitlich geplant werden können, die von dieser bestimmten Befehlsoperation abhängig sind. Es ist zu bemerken, dass der Ablaufplaner 36 einen Befehl zeitlich planen kann, sobald seine Abhängigkeiten zufrieden gestellt worden sind (das heißt außer der Reihe, was seine Reihenfolge innerhalb der Warteschlange des Ablaufplaners betrifft).
  • Ganzzahl und Lade/Speicher Befehlsoperationen lesen Quelloperanden in Übereinstimmung mit den physikalischen Registernummern für die Quelle aus der Registerdatei 38A und werden für die Ausführung zu dem Ausführungskern 40A befördert. Der Ausführungskern 40A führt die Befehlsoperation aus und aktualisiert die dem Ziel innerhalb der Registerdatei 38A zugewiesenen physikalischen Register. Des weiteren meldet der Ausführungskern 40A die R# der Befehlsoperation und Ausnahmeinformation hinsichtlich der Befehlsoperation (falls vorhanden) dem Ablaufplaner 36. Die Registerdatei 38B und der Ausführungskern 40B können auf ähnliche Weise im Hinblick auf Gleitkomma Befehlsoperationen arbeiten (und können der Lade/Speichereinheit 42 Speicherdaten für Gleitkomma Speichervorgänge zur Verfügung stellen). Es ist zu bemerken, dass Operanden für abhängige Operationen direkt zu den abhängigen Operationen umgeleitet werden können, falls die Operationen, von denen sie abhängig sind, gleichzeitig abschließen.
  • In einem Ausführungsbeispiel kann der Ausführungskern 40A zum Beispiel zwei Ganzzahleinheiten, eine Verzweigungseinheit und zwei Adresserzeugungseinheiten (mit entsprechenden Übersetzungsseitenblickpuffern oder TLBs) enthalten. Der Ausführungskern 40B kann einen Gleitkomma/Multimedia-Multiplizierer, einen Gleitkomma/Multimedia-Addieren und eine Speicherdateneinheit zum Liefern von Speicherdaten an die Lade/Speichereinheit 42 enthalten. Weitere Konfigurationen von Ausführungseinheiten sind möglich, einschließlich einem kombinierten Gleitkomma/Ganzzahl Ausführungskern.
  • Die Lade/Speichereinheit 42 stellt eine Schnittstelle zu dem D-Cachespeicher 44 zur Verfügung, um Speicheroperationen durchzuführen und um Fülloperationen für Speicheroperationen, die den D-Cachespeicher 44 nicht treffen, zeitlich zu planen. Lade-Speicheroperationen können von dem Ausführungskern 40A beendet werden durch Ausführen einer Adresserzeugung und Weiterleiten von Daten an die Registerdateien 38A38B (von dem D-Cachespeicher 44 oder der Speicherwarteschlange innerhalb der Lade/Speicherein heit 42). Speicheradressen können dem D-Cachespeicher 44 präsentiert werden, sobald sie von dem Ausführungskern 40A erzeugt sind (direkt über Verbindungen zwischen dem Ausführungskern 40A und dem D-Cachespeicher 44). Die Speicheradressen werden einem Eintrag in der Speicherwarteschlange zugeordnet. Die Speicherdaten können neben einander zur Verfügung gestellt werden, oder nach einander zur Verfügung gestellt werden, in Übereinstimmung mit der Wahl des Entwicklers. Auf das Zurückziehen der Befehlsoperation werden die Daten in dem D-Cachespeicher 44 gespeichert (obwohl einige Verzögerung zwischen dem Zurückziehen und der Aktualisierung des D-Cachespeichers 44 sein kann). Des weiteren kann die Lade/Speichereinheit 42 einen Lade/Speicher Puffer enthalten zum Speichern von Lade/Speicher Adressen, die den D-Cachespeicher 44 nicht treffen, für nachfolgende Füllvorgänge des Cachespeichers (über die externe Interfaceeinheit 46) und zum erneuten Versuchen der nicht treffenden Lade/Speicher Operationen. Die Lade/Speichereinheit 42 ist ferner konfiguriert, um Abhängigkeiten von Lade/Speicher Operationen zu behandeln.
  • Der D-Cachespeicher 44 ist ein Cachespeicher mit hoher Geschwindigkeit zum Speichern von Daten, auf die von dem Prozessor 10 zugegriffen werden. Während der D-Cachespeicher 44 jede geeignete Struktur aufweisen kann (einschließlich direkt abbildender oder Satz assoziativer Strukturen), kann ein Ausführungsbeispiel des D-Cachespeichers 44 einen 128 KByte, vier Wege Satz assoziativen Cachespeicher aufweisen, der Cachezeilen mit 64 Byte hat.
  • Die externe Interfaceeinheit 46 ist zur Kommunikation mit anderen Geräten über die externe Schnittstelle 52 konfiguriert. Jede geeignete externe Schnittstelle 52 kann verwendet werden, einschließlich Schnittstellen zu L2 Cachespeichern und einem externen Bus oder Bussen zum Anschließen des Prozessors 10 an andere Geräte. Die externe Interfaceeinheit 46 ruft Füllvorgänge für den B-Cachespeicher 14 und den D-Cachespeicher 44 ab, ebenso wie sie verworfene aktualisierte Cachezeilen von dem D-Cachespeicher 44 an die externe Schnittstelle schreibt. Des weiteren kann die externe Interfaceeinheit 46 auch von dem Prozessor 10 erzeugte Lesevorgänge und Schreibvorgänge ausführen, die nicht zwischen gespeichert werden können.
  • Es wird nun auf 2 Bezug genommen, in der ein beispielhaftes Pipelinediagramm gezeigt ist, das einen beispielhaften Satz von Stufen einer Pipeline zeigt, die von einem Ausführungsbeispiel des Prozessors 10 verwendet werden können. Weitere Ausführungsbeispiele können verschiedene Pipelines verwenden, Pipelines, die mehr oder weniger Stufen der Pipeline verwenden als die in 2 gezeigte Pipeline. Die in 2 gezeigten Stufen sind von senkrechten, gestrichelten Linien unterteilt. Jede Stufe ist ein Taktzyklus eines Taktsignals, das zur Taktung von Speicherelementen (zum Beispiel Registern, Auffangregistern, Flops usw.) innerhalb des Prozessors 10 verwendet wird.
  • Wie in 2 dargestellt enthält die beispielhafte Pipeline eine Stufe CAM0, eine Stufe CAM1, eine Stufe Zeilenvorhersage (LP), eine Stufe Befehls-Cachespeicher (IC), eine Stufe Ausrichtung (AL), eine Stufe Dekodierung (DEC), eine Stufe Abbildung1 (M1), eine Stufe Abbildung2 (M2), eine Stufe Ablaufplanung Schreiben (WR SC), eine Stufe Ablaufplanung Lesen (RD SC), eine Stufe Registerdatei Lesen (RF RD), eine Stufe Ausführung (EX), eine Stufe Registerdatei Schreiben (RF WR) und eine Stufe Zurückziehen (RET). Einige Befehle benutzen mehrfache Taktzyklen in der Stufe Ausführung. Zum Beispiel sind Speicheroperationen, Gleitkomma Operationen und Ganzzahl Multiplikationsoperationen in auseinander gezogener Darstellung in 2 gezeigt. Speicheroperationen können eine Stufe Adresserzeugung (AGU), eine Stufe Übersetzung (TLB), eine Stufe Daten-Cachespeicher 1 (DC1) und eine Stufe Daten-Cachespeicher 2 (DC2) enthalten. Auf ähnliche Weise können Gleitkomma Operationen bis zu vier Stufen Ausführung Gleitkomma (FEX1–FEX4) enthalten und Ganzzahl Multiplikationen bis zu vier (IM1–IM4) Stufen enthalten.
  • Während der Stufen CAM0 und CAM1 vergleicht die Zeilenvorhersage 12 die von der Verzweigungsvorhersage/Abruf PC Erzeugungseinheit 18 zur Verfü gung gestellte Abrufadresse mit den Adressen der darin gespeicherten Zeilen. Des weiteren wird die Abrufadresse von einer virtuellen Adresse (zum Beispiel einer linearen Adresse in der x86 Architektur) zu einer physikalischen Adresse während der Stufen CAM0 und CAM1 übersetzt. In Reaktion auf die Detektierung eines Trefers während der Stufen CAM0 und CAM1 wird die entsprechende Information der Zeile von der Zeilenvorhersage während der Stufe Zeilenvorhersage gelesen. Der Lesevorgang endet während der Stufe Befehls-Cachespeicher.
  • Es ist zu bemerken, dass, während die in 2 dargestellte Pipeline zwei Taktzyklen zur Detektierung eines Treffers in der Zeilenvorhersage 12 für eine Abrufadresse verwendet, andere Ausführungsbeispiele einen einzelnen Taktzyklus (und Stufe) zur Durchführung dieser Operation verwenden können. Darüber hinaus stellt in einem Ausführungsbeispiel die Zeilenvorhersage 12 eine nächste Abrufadresse für den B-Cachespeicher 14 und einen nächsten Eintrag in der Zeilenvorhersage 12 für einen Treffer zur Vertügung und daher können die Stufen CAM0 und CAM1 übersprungen werden für Abrufvorgänge, die von einem vorherigen Treffer in der Zeilenvorhersage 12 stammen.
  • Die von dem B-Cachespeicher 14 zur Verfügung gestellten Befehlsbytes werden von der Ausrichtungseinheit 16 für die Dekodiereinheiten 24A24D ausgerichtet während der Stufe Ausrichtung in Reaktion auf die entsprechende Zeileninformation von der Zeilenvorhersage 12. Es ist zu bemerken, dass einige Befehle auf mehr als eine Dekodiereinheit 24A24D ausgerichtet sein können. Die Dekodiereinheiten 24A24D dekodieren während der Stufe Dekodierung die zur Verfügung gestellten Befehle, die sowohl den Befehlen entsprechende ROPs als auch Operandeninformation identifizieren. Die Abbildungseinheit 30 erzeugt während der Stufe Abbildung1 ROPs von den zur Verfügung gestellten Informationen und führt eine Umbenennung der Register durch (Aktualisierung der zukünftigen Datei 20). Während der Stufe Abbildung2 werden die ROPs und zugewiesenen Umbenennungen in der Rückzugswarteschlange 32 aufgezeichnet. Des weiteren werden die ROPs bestimmt, von denen jede ROP abhängig ist. Jede ROP kann registerabhängig von früheren ROPs sein, wie in der zukünftigen Datei ausgezeichnet ist, und kann auch andere Typen aufweisen (zum Beispiel Abhängigkeiten von einem vorherigen Serialisierungsbefehl usw.).
  • Die erzeugten ROPs werden während der Stufe Ablaufplanung in den Ablaufplaner 36 geschrieben. Bis zu dieser Stufe fließen die ROPs, die von einer bestimmten Zeile an Information geortet sind, als eine Einheit durch die Pipeline. Es ist zu bemerken, dass ROPs, die eine Mikrocode Routine aufweisen, eine Ausnahme zu der zuvor erwähnten. Aussage sein können, weil sie von dem Mikrocode ROM über mehrere Taktzyklen gelesen werden könnten. Jedoch können die ROPs, nachdem sie in den Ablaufplaner 36 geschrieben sind, zu verschiedenen Zeiten unabhängig durch die verbleibenden Stufen fließen. Im Allgemeinen verbleibt eine bestimmte ROP in dieser Stufe, bis sie von dem Ablaufplaner 36 zur Ausführung ausgewählt wird (zum Beispiel nachdem die ROPs, von denen die bestimmte ROP abhängig ist, wie oben beschrieben zur Ausführung ausgewählt worden sind). Entsprechend kann eine bestimmte ROP zwischen der Stufe Ablaufplanung Schreiben und der Stufe Ablaufplanung Lesen einen oder mehrere Taktzyklen an Verzögerung erfahren. Während der Stufe Ablaufplanung Lesen nimmt die bestimmte ROP an der Auswahllogik innerhalb des Ablaufplaners 36 teil, wird zur Ausführung ausgewählt und von dem Ablaufplaner 36 gelesen. Die bestimmte ROP schreitet dann in der Stufe Registerdatei Lesen fort zu den Lese Register Operationen von einer der Registerdateien 38A38B (abhängig von dem Typ der ROP).
  • Die bestimmte ROP und die Operanden werden dem entsprechenden Ausführungskern 40A oder 40B zur Verfügung gestellt und die Befehlsoperation wird während der Stufe Ausführung auf den Operanden ausgeführt. Zum Beispiel werden Speicher Befehlsoperationen (zum Beispiel Ladevorgänge und Speichervorgänge) ausgeführt durch eine Stufe Adresserzeugung (in der die Datenadressen der Speicherstelle, auf die von der Speicher Befehlsoperation zugegriffen wird, erzeugt wird), eine Stufe Übersetzung (in der die von der Stufe Adresserzeugung zur Verfügung gestellte virtuelle Datenadresse übersetzt wird) und ein Paar von Stufen Daten-Cachespeicher, in denen auf den D-Cachespeicher 44 zugegriffen wird. Gleitkomma Operationen können bis zu vier Taktzyklen an Ausführung verwenden und Ganzzahl Multiplikationen verwenden ähnlich bis zu vier Taktzyklen an Ausführung.
  • Nach Abschluss der Stufe oder der Stufen Ausführung aktualisiert die bestimmte ROP während der Stufe Registerdatei Schreiben ihre zugewiesenen physikalischen Register. Schließlich wird die bestimmte ROP zurück gezogen, nachdem jede vorherige ROP zurück gezogen ist (in der Stufe Zurückziehung). Wieder können einer oder mehrere Taktzyklen für eine bestimmte ROP zwischen der Stufe Registerdatei Schreiben und der Stufe Zurückziehung ablaufen. Des weiteren kann eine bestimmte ROP an jeder Stufe der Pipeline angehalten werden aufgrund von Bedingungen zum Anhalten der Pipeline, wie im Stand der Technik gut bekannt sind.
  • Ablaufplaner
  • Es wird nun auf 3 Bezug genommen, wo ein Blockdiagramm gezeigt ist, das ein Ausführungsbeispiel einer Abbildungseinheit 30, einer zukünftigen Datei 20, eines Ablaufplaners 36, eines Ganzzahl Ausführungskerns 40A und einer Lade/Speicher-Einheit 42 darstellt. Eine gewisse beispielhafte Verbindung ist in der 3 dargestellt, als auch gewisse interne Details eines Ausführungsbeispiels der Einheiten außer dem Ablaufplaner 36. Weitere Ausführungsbeispiele sind möglich und werden betrachtet. In dem Ausführungsbeispiel von 3 ist die Abbildungseinheit 30 mit den Dekodiereinheiten 24A24D, der zukünftigen Datei 20 und dem Ablaufplaner 36 verbunden. Der Ablaufplaner 36 ist des weiteren mit der externen Interfaceeinheit 46, dem Ganzzahl Ausführungskern 40A und der Lade/Speicher-Einheit 42 verbunden. In dem Ausführungsbeispiel von 3 enthält die Abbildungseinheit 30 eine Zielumbenennungsschaltung 60, eine Inline Abhängigkeitsüberprüfungsschaltung 62, eine Abhängigkeitsordnungsschaltung 64, einen Satz von Abhängig keitsordnungsregistern 66A66N und einen Mux 68. Die Zielumbenennungsschaltung 60, die Inline Abhängigkeitsüberprüfungsschaltung 62 und die Abhängigkeitsordnungsschaltung 64 sind angeschlossen, um von den Dekodiereinheiten 24A24N Befehlsoperationen zu empfangen. Die Zielumbenennungsschaltung 60 ist mit dem Mux 68 und dem Ablaufplaner 36 verbunden. Die Inline Abhängigkeitsüberprüfungsschaltung 62 ist mit dem Mux 68 verbunden, der darüber hinaus mit der zukünftigen Datei 20 verbunden ist. Die zukünftige Datei 20 ist angeschlossen, um Identifizieren für Quelloperanden zu empfangen, die den von der Abbildungseinheit 30 empfangenen Befehlsoperationen entsprechen. Die Abhängigkeitsordnungsschaltung 64 ist mit den Abhängigkeitsordnungsregistern 66A66N und mit dem Ablaufplaner 36 verbunden. Die Lade/Speicher-Einheit 42 umfasst eine Speicherwarteschlange 70, die angeschlossen ist, um eine physikalische Adresse von dem Ganzzahl Ausführungskern 40A zu empfangen. Der Ganzzahl Ausführungskern 40A enthält eine Adresserzeugungseinheit 40AA, die mit einem Übersetzungsseitenblickpuffer (TLB) 40AB verbunden ist.
  • Im Allgemeinen empfängt die Abbildungseinheit 30 Befehlsoperationen von den Dekodiereinheiten 24A24D. Die Abbildungseinheit 30 führt für jede Befehlsoperation eine Umbenennung der Register durch und bestimmt die Abhängigkeiten für jede Befehlsoperation von älteren Operationen, die in dem Ablaufplaner 36 in Verarbeitung sind (oder gleichzeitig an den Ablaufplaner 36 abgeschickt werden). Die Abbildungseinheit 30 stellt die Befehlsoperationen und die Umbenennungen der Register dem Ablaufplaner 36 zum Speichern zur Verfügung (und spätere Ausgabe zur Ausführung). Des weiteren stellt die Abbildungseinheit 30 eine Angabe der Abhängigkeiten jeder Befehlsoperation zur Verfügung (dargestellt als die Quelloperanden-Abhängigkeiten und die Ordnungsabhängigkeiten in 3). Genauer gesagt identifiziert die Abbildungseinheit 30 die ältesten Befehlsoperationen durch R# (die Nummer, welche die Befehlsoperation in dem Ablaufplaner 36 identifiziert). Die PR#s der den Operanden zugeordneten physikalischen Register werden dem Ablaufplaner 36 zur Verfügung gestellt zur Ausgabe mit der Befehlsoperation, aber werden nicht bei der Bestimmung der Abhängigkeiten verwendet. Der Ablaufplaner 36 speichert die Befehlsoperationen und die entsprechenden Abhängigkeiten und plant den Ablauf der Befehlsoperationen in Reaktion auf die entsprechenden Abhängigkeiten, die befriedigt werden. Die für den Ablauf geplanten Befehlsoperationen werden an die Ausführungskerne 40A40B ausgegeben, die Ressourcen zur Ausführung haben, die konfiguriert sind zur Ausführung dieser Befehlsoperation.
  • Gewisse Befehlsoperationen könnten die Ausführung nicht abschließen, wenn sie ausgegeben werden. Zum Beispiel könnte in dem gezeigten Ausführungsbeispiel Speicheroperationen die Ausführung nicht abschließen. Falls ein Befehl die Ausführung nicht abschließt, wird er von einer Einheit, die in die Ausführung der Befehlsoperation einbezogen ist, „erneut versucht". Das erneute Versuchen einer Befehlsoperation umfasst das Signalisieren an den Ablaufplaner 36, dass die Befehlsoperation zurück gezogen wird. Der Ablaufplaner 36 hält die ausgegebenen Befehlsoperationen zurück und, falls die ausgegebenen Befehlsoperationen zurück gezogen werden, gibt der Ablaufplaner 36 dann die Befehlsoperationen erneut aus. Insbesondere in einem Ausführungsbeispiel hält der Ablaufplaner 36 einen Ausführungszustand für jede Befehlsoperation aufrecht. In Reaktion auf ein erneutes Versuchen einer zuvor ausgegebenen Befehlsoperation setzt der Ablaufplaner 36 den Ausführungszustand der Befehlsoperation auf einen „nicht ausgeführt" Zustand zurück. Nachfolgend kann die Befehlsoperation erneut ausgegeben werden. Des weiteren behält der Ablaufplaner 36 die Abhängigkeiten von jeder ausgegebenen Befehlsoperation. Alle Befehlsoperationen, die direkt oder indirekt von der zurück gezogenen Befehlsoperation abhängig sind, werden ebenfalls in den nicht ausgeführten Zustand zurück gebracht. Es ist zu bemerken, dass eine Gruppe von Befehlsoperationen, in der die erste aus der Gruppe der Befehlsoperationen von einer bestimmten Befehlsoperation abhängig ist und in der jede andere Befehlsoperation innerhalb der Gruppe von den anderen Befehlsoperationen abhängig ist und durch die andere Befehlsoperation indirekt von der bestimmten Befehlsoperation abhängig ist, hier als eine „Abhängigkeitskette" bezeichnet wird.
  • Das Zurücksetzen des Ausführungszustands auf nicht ausgeführt in Reaktion auf einen erneuten Versuch der Befehlsoperation oder einer anderen Befehlsoperation, von der die Befehlsoperation direkt oder indirekt abhängig ist, wird hier als „rückgängig machen" dieser Befehlsoperation bezeichnet.
  • Indem Befehlsoperationen erlaubt wird, zurück gezogen zu werden (und in Reaktion auf ein erneutes Versuchen erneut ausgegeben zu werden), kann der Ablaufplaner 36 Befehlsoperationen aggressiv für die Ausführung im Ablauf planen und kann sich von einer nicht korrekten Ablaufplanung erholen durch die erneute Ausgabe der nicht korrekt im Ablauf geplanten Befehlsoperationen zu einem späteren Zeitpunkt. Die Strafe für eine nicht korrekte Ablaufplanung kann erheblich geringer sein als das Entfernen der nicht korrekt im Ablauf geplanten Befehlsoperation und aller jüngeren Befehlsoperationen und das erneute Abrufen beginnend an der nicht korrekt im Ablauf geplanten Befehlsoperation.
  • Die Abbildungseinheit 30 verwendet die Zielumbenennungsschaltung 60, die Inline Abhängigkeitsüberprüfungsschaltung 62, die zukünftige Datei 20 und die Abhängigkeitsordnungsschaltung 64, um die Abhängigkeiten für jede Befehlsoperation zu bestimmen. Die Zielumbenennungsschaltung 60 empfängt eine Angabe für jede Befehlsoperation, ob diese Befehlsoperation einen Register-Zieloperanden hat oder nicht, und die Nummer des Zielregisters, falls die Befehlsoperation einen Register-Zieloperanden hat. Falls die Befehlsoperation einen Register-Zieloperanden hat, weist die Zielumbenennungsschaltung 60 der Befehlsoperation eine freie physikalische Registernummer zu. Die zugewiesenen PR#s werden dem Ablaufplaner 36 mit den Befehlsoperationen zur Verfügung gestellt. Des weiteren stellt die Zielumbenennungsschaltung 60 die R#s und die PR#s von jedem Befehlsoperand dem Mux 68 zur Verfügung.
  • Die zukünftige Datei 20 stellt für jede Registernummer des Quelloperanden die PR# und die R# der Befehlsoperation zur Verfügung, die zuletzt das entsprechende architekturisierte Register als einen Zieloperanden hatte. Insbe sondere kann die zukünftige Datei 20 eine Tabelle aufweisen mit Einträgen für jedes architekturisierte Register (und in Mikrocode verwendenden Ausführungsbeispielen, jedes temporäre Mikrocoderegister). Die Registernummern der Quelloperanden werden verwendet, um die Einträge der Register auszuwählen, die als Quelloperanden für die Befehlsoperationen angegeben sind. Jeder Eintrag speichert die R# der ältesten Befehlsoperation (vor der aktuellen Zeile von Befehlsoperationen), um dieses Register zu aktualisieren, und die PR# des physikalischen Registers, das dem Ziel dieser ältesten Befehlsoperation zugewiesen ist. Des weiteren enthält die zukünftige Datei 20 ein Gültig Bit (V) in jedem Eintrag. Das Gültig Bit zeigt an, ob die für dieses Register aufgezeichnete R# gültig ist oder nicht (das heißt ob die entsprechende Befehlsoperation in dem Ablaufplaner 36 immer noch gültig ist oder nicht). Das Gültig Bit wird gesetzt auf die Versendung der der R# entsprechenden Befehlsoperation in den Ablaufplaner 36 und wird zurück gesetzt, wenn die Befehlsoperation zurück gezogen wird. Das Gültig Bit wird dem Ablaufplaner 36 zur Verfügung gestellt, wenn der Eintrag als die Abhängigkeit des Quelloperanden ausgewählt wird. Der Ablaufplaner 36 zeichnet für diesen Quelloperanden keine Abhängigkeit auf, falls das Gültig Bit nicht gesetzt ist, und zeichnet eine Abhängigkeit auf, falls das Gültig Bit gesetzt ist.
  • Die Inline Abhängigkeitsüberprüfungsschaltung 62 empfängt die Nummern der Quell- und Zielregister von jeder Befehlsoperation und führt eine Überprüfung der Abhängigkeit innerhalb der Zeile der von der Abbildungseinheit 30 empfangenen Befehlsoperationen durch. Die Inline Abhängigkeitsüberprüfungsschaltung 62 vergleicht die Nummern der Zielregister mit von jeder älteren Befehlsoperation in der Zeile mit den Nummern der Zielregister einer bestimmten Befehlsoperation innerhalb der Zeile. Falls eine Übereinstimmung für einen der Quelloperanden gefunden wurde, übersteuert die Inline Abhängigkeitsüberprüfungsschaltung 62 die R#s und die PR#s von der zukünftigen Datei 20, die dem Quelloperanden entsprechen, mit den entsprechenden von der Zielumbenennungsschaltung 60 zur Verfügung gestellten R# und PR#. Falls keine Übereinstimmung gefunden wurde, stellen die R# und die PR# von der zukünftigen Datei 20 die korrekte Registerumbenennungs- und Abhängigkeits- R# für diesen Quelloperanden zur Verfügung. Die Inline Abhängigkeitsüberprüfungsschaltung 62 erzeugt Multiplexerauswahlleitungen für den Mux 68, um den geeigneten R# und PR# für jeden Quelloperanden von jeder Befehlsoperation auszuwählen. Es ist zu bemerken, dass der Mux 68 jede geeignete Auswahlschaltung zum Auswählen der Abhängigkeiten des Quelloperanden darstellen kann. Zum Beispiel kann der Mux 68 separate Multiplexer für jeden möglichen Quelloperanden von jeder möglichen Befehlsoperation innerhalb der Zeile darstellen.
  • Die Inline Abhängigkeitsüberprüfungsschaltung kann des weiteren die Nummern der Zielregister für jede Befehlsoperation innerhalb der Zeile vergleichen, um die älteste Befehlsoperation innerhalb der Zeile zu bestimmen, um jedes architekturisierte Register zu aktualisieren, das ein Zieloperand für eine oder mehrere Befehlsoperationen innerhalb der Zeile ist. Die zukünftige Datei 20 kann dann in den Einträgen, die den Zieloperanden der Zeile entsprechen, mit den R#s und den PR#s aktualisiert werden, die von der Zielumbenennungsschaltung 60 zugewiesen wurden. Der Pfad der Aktualisierung ist wegen der Übersichtlichkeit der Zeichnung in der 3 nicht gezeigt.
  • Die Abhängigkeitsordnungsschaltung 64 verfolgt Abhängigkeiten von der Reihenfolge, die im Hinblick auf gewisse Befehlsoperationen aufgezeichnet werden können. Zum Beispiel sind in einem Ausführungsbeispiel, das die x86 Befehlssatzarchitektur verwendet, Abhängigkeiten von der Reihenfolge definiert für: (i) Segmentladevorgänge, welche eine Abhängigkeit von der Reihenfolge für jede nachfolgende Speicheroperation verursachen, (ii) Aktualisierungen von Steuerworten für Gleitkomma, welche eine Abhängigkeit von der Reihenfolge für jede nachfolgende Gleitkomma Befehlsoperation verursachen. Im Allgemeinen führt jede Befehlsoperation, die eine Serialisierungssperre für nachfolgende Befehlsoperationen erzeugt, zu einer Abhängigkeit von der Reihenfolge von den serialisierenden Befehlsoperationen zu den nachfolgenden betroffenen Befehlsoperationen. Eine "Serialisierungssperre" ist eine Sperre in der Programmsequenz, um die eine ungeordnete oder spekulative Ausführung verboten ist. Einige Befehlssatzarchitekturen haben Befehle, deren alleinige Funktion es ist, die Serialisierungssperre zur Verfügung zu stellen.
  • Die oben erwähnten Abhängigkeiten von der Reihenfolge können nach verfolgt werden unter Verwendung der Abhängigkeitsordnungsregister 66A66N. Die Abhängigkeitsordnungsschaltung 64 speichert in Reaktion auf eine Befehlsoperation, welche eine Abhängigkeit von der Reihenfolge erzeugt, die R# der Befehlsoperation in einem der Abhängigkeitsordnungsregister 66A66N. Ein Abhängigkeitsordnungsregister 66A66N kann für jede von dem Prozessor 10 detektierte Abhängigkeit von der Reihenfolge zur Verfügung gestellt werden. Zusätzlich kann ein Gültig Bit enthalten sein und kann in Reaktion auf das Aufzeichnen einer R# gesetzt werden und zurück gesetzt werden auf das zurück ziehen der entsprechenden Befehlsoperation (ähnlich wie bei dem Gültig Bit in der zukünftigen Datei 20). In Reaktion auf eine Befehlsoperation, die über eine bestimmte Abhängigkeit von der Reihenfolge als von der Reihenfolge abhängig definiert ist, stellt die Abhängigkeitsordnungsschaltung 64 die entsprechende R# als eine der Abhängigkeiten von der Reihenfolge für diese Befehlsoperation zur Verfügung.
  • Zusätzlich zu den obigen besonderen Situationen kann die Abhängigkeitsordnungsschaltung 64 eine Tabelle verwenden, um vorherige Ereignisse von Lade-Speicheroperationen zu verfolgen, welche vor den älteren Speicher-Speicheroperationen im Ablauf geplant waren und nachfolgend als abhängig von dieser älteren Speicher-Speicheroperation befunden wurde (für den Speicheroperanden, auf den von dem Ladevorgang zugegriffen wurde). Die Tabelle kann eine erste Tabelle aufweisen, die mit der Abrufadresse der Lade-Speicheroperation indiziert wird und mit der Abrufadresse der älteren Speicher-Speicheroperation trainiert wird, wenn die Abhängigkeit während der Ausführung detektiert wird. Die zweite Tabelle wird mit der Abrufadresse der Speicher-Speicheroperation indiziert und wird auf das Versenden der Speicher-Speicheroperationen mit der R# der Speicher-Speicheroperation aktuali siert. Falls die Lade-Speicheroperation ein Treffer in der Tabelle ist, wird die entsprechende R# als eine Abhängigkeit von der Reihenfolge für die Lade-Speicheroperation zur Verfügung gestellt.
  • Wie oben erwähnt plant der Ablaufplaner 36 den Ablauf und gibt eine Befehlsoperation in Reaktion auf die Detektierung, dass jede Abhängigkeit von dieser Befehlsoperation befriedigt ist, an einen geeigneten Ausführungskern aus. Genauer gesagt werden Speicheroperationen an eine Adresserzeugungseinheit 40AA innerhalb des Ausführungskerns 40A ausgegeben. Die Adresserzeugungseinheit 40AA empfängt die Registeroperanden von der Ganzzahl Registerdatei 38A und erzeugt die Adresse des der Speicheroperation entsprechenden Speicheroperanden. Die Adresse ist die virtuelle Adresse, welche mittels eines Schemas zur Adressübersetzung, das von der von dem Prozessor 10 verwendeten Befehlssatzarchitektur angegeben ist, in eine physikalische Adresse zum Zugreifen auf den Speicher (und den D-Cachespeicher 44) übersetzt wird. Der TLB 40AB ist ein Cachespeicher für die Ergebnisse von vorherigen Übersetzungen, was eine schnelle Übersetzung der virtuellen Adressen, welche darin treffen, in entsprechende physikalische Adressen und was eine schnelle Bestimmung der verschiedenen Attribute erlaubt, die den entsprechenden Speicherstellen über den Mechanismus zur Übersetzung zugewiesen wurden. Die Kombination von AGU 40AA und TLB 40AB stellt der Lade/Speicher-Einheit 42 (und parallel dazu dem D-Cachespeicher 44 und dem Ablaufplaner 36) eine physikalische Adresse zur Verfügung.
  • Die Lade/Speicher-Einheit 42 bestimmt, ob die Speicheroperation die Ausführung erfolgreich abschließt oder ob sie zurück zu ziehen ist. Falls eine Situation zum Rückzug detektiert wird, legt die Lade/Speicher-Einheit 42 das erneutes Versuchen Signal an dem Ablaufplaner 36 an und stellt den Grund für den erneuten Versuch über die erneuter Versuchstyp Signale zur Verfügung. In einem Ausführungsbeispiel können Speicheroperationen aus den folgenden Gründen zurückgezogen werden:
    • (i) die Speicheroperation ist eine Lade-Speicheroperation, welche den D-Cachespeicher 44 nicht trifft;
    • (ii) die Speicheroperation erfordert einen Puffer in der Lade/Speicher-Einheit 42, der voll ist (zum Beispiel ein Fehltreffer-Puffer zum Speichern von Fehltrefferadressen, die von der externen Interfaceeinheit 46 aus dem Hauptspeicher abgerufen werden);
    • (iii) die Speicheroperation erfährt einen Bankkonflikt innerhalb des D-Cachespeichers 44 mit einer anderen Speicheroperation, die gleichzeitig auf den D-Cachespeicher 44 zugreift;
    • (iv) die Speicheroperation ist eine Speicher-Speicheroperation und erfordert eine Überprüfung auf selbst modifizierenden Code (SMC);
    • (v) die Speicheroperation ist eine Lade-Speicheroperation, die eine oder mehrere Speicheroperationen in der Speicherwarteschlange 70 trifft (das heißt die eine oder die mehreren Speicheroperationen unterstützen zumindest ein Byte des Speicheroperanden des Speicheroperanden, auf dem von der Lade-Speicheroperation zugegriffen wird) und die Speicherwarteschlange 70 ist nicht fähig, die entsprechenden Daten weiterzuleiten;
    • (vi) die Speicheroperation ist nicht spekulativ auszuführen.
  • Der Grund (i) ist als getrennter erneuter Versuchstyp kodiert, für den der Ablaufplaner 36 eine übereinstimmende Fülladresse erwartet, die von der externen Interfaceeinheit 46 vor der Ablaufplanung und dem erneuten Ausgeben der Lade-Speicheroperation zur Verfügung gestellt wird. Die externe Interfaceeinheit 46 stellt die Fülladresse zur Verfügung, um anzuzeigen, dass die Daten von der Fülladresse an den D-Cachespeicher 44 zum Speichern zur Verfügung gestellt werden (und damit, dass entsprechende Lade-Speicheroperationen Treffer in dem D-Cachespeicher 44 sein könnten). Der Ablaufplaner 36 zeichnet die physikalische Adresse der Lade-Speicheroperation auf (zur Verfügung gestellt von dem Ausführungskern 40A) zum Vergleich mit der Fülladresse. Die Gründe (ii), (iii) und (v) können als ein einzelner erneuter Versuchstyp kodiert sein, auf den der Ablaufplaner 36 ant worten kann durch erneutes Planen des Ablaufs der entsprechenden Speicheroperation ohne jegliche besondere Warteerfordernisse. Der Grund (iv) ist als ein erneuter Versuchstyp kodiert und der Ablaufplaner 36 kann die entsprechende Speicher-Speicheroperation nachdem die SMC Überprüfung abgeschlossen worden ist für die erneute Ausgabe im Ablauf planen. Der Grund (vi) ist als ein erneuter Versuchstyp kodiert und der Ablaufplaner 36 plant den Ablauf der Speicheroperation zur erneuten Ausgabe nachdem die entsprechende Speicheroperation nicht spekulativ wird. In Übereinstimmung mit einem bestimmten Ausführungsbeispiel ist eine Speicheroperation als nicht spekulativ auszuführen, wenn die Speicheroperation auf einen Speicheroperanden zugreift, der eine Seitengrenze überquert (das heißt zumindest ein Byte des Speicheroperanden ist in einer zweiten Seite gespeichert, die von einer zweiten Adressübersetzung übersetzt wurde, die anders ist als die erste Adressübersetzung), die Übersetzung zeigt an, dass der Typ des Speichers des Speicheroperanden nicht spekulativ ist oder die Speicheroperation trifft fehl in dem TLB. Der erste und der letzte Grund für das nicht spekulative Ausführen sind beim Entwurf gewählt, um die Hardware zu vereinfachen, und der mittlere Grund wird von der von dem Prozessor 10 verwendeten Befehlssatzarchitektur gefordert.
  • Es ist zu bemerken, dass, während die obige Beschreibung sich auf die erneute, nicht spekulative Ausgabe gewisser Speicheroperationen bezieht, andere Befehlsoperationen ebenfalls nicht spekulativ erneut ausgegeben werden können. Zum Beispiel kann jede Befehlsoperation, die eine Ausnahme erfährt (zum Beispiel eine Falle oder einen von der Architektur angegebenen Fehler oder eine für die von dem Prozessor 10 implementierte Mikroarchitektur definierte mikroarchitekturale Ausnahme), nicht spekulativ erneut ausgegeben werden. Auf diese Weise kann Information, die auf die Ausnahme bezogen ist, während der nicht spekulativen Ausführung aufgezeichnet werden. Daher kann der Aufwand an Hardware, der zum Speichern und Verfolgen von Ausnahmeinformation verwendet wird, minimiert werden.
  • Die Speicherwarteschlange 70 stellt über die Treffer und Speicher R# Signale zusätzliche Information hinsichtlich der Lade-Speicheroperationen zur Verfügung, welche Speicher-Speicheroperationen innerhalb der Speicherwarteschlange treffen. Die Treffer und Speicher R# werden unabhängig davon zur Verfügung gestellt, ob ein erneuter Versuch der Lade-Speicheroperation auftritt oder nicht. Das Treffer Signal zeigt an, dass ein Treffer in der Speicherwarteschlange detektiert wurde, und die Speicher R# ist die R# des Speichervorgangs, der von dem Ladevorgang getroffen wurde. Diese Information kann verwendet werden, um einen erneuten Versuch der Lade-Speicheroperation zu veranlassen, falls der Speichervorgang, der von dem Ladevorgang getroffen wurde nachfolgend erneut ausgeführt wird (und eine andere Adresse empfängt). Die Verwendung der Speicher R# wird detaillierter unten beschrieben. Es ist zu bemerken, dass, während die Speicher R# in diesem Beispiel verwendet wird, jeglicher Identifizieren, der den Speichervorgang identifiziert, verwendet werden kann. Zum Beispiel kann die Nummer der Speicherwarteschlange zur Verfügung gestellt werden, welche den Eintrag der Speicherwarteschlange innerhalb der Speicherwarteschlange 70 identifiziert, der von dem Ladevorgang getroffen wird. Derartige Ausführungsbeispiele werden betrachtet.
  • Wie oben bemerkt, könnte die Speicherwarteschlange 70 nicht fähig sein, in allen Fällen, wenn eine Lade-Speicheroperation eine Speicher-Speicheroperation in der Speicherwarteschlange 70 trifft, die Daten weiter zu leiten. Zum Beispiel können zahlreiche Bytes des Lade-Speicheroperanden von verschiedenen Speichervorgängen in der Speicherwarteschlange 70 zur Verfügung gestellt werden. Jedoch kann die Speicherwarteschlange 70 die Anzahl der separaten Speichervorgänge begrenzen, von denen Bytes eines bestimmten Lade-Speicheroperanden weiter geleitet werden könnten. Falls zum Beispiel die Speicherwarteschlange 70 fähig ist, die Daten von bis zu zwei Speicher-Speicheroperationen weiter zu leiten, verhindert ein Treffen auf zwei oder mehr Speicher-Speicheroperationen für verschiedene Bytes von diesem bestimmten Lade-Speicheroperanden die Weiterleitung von allen Bytes des bestimmten Lade-Speicheroperanden. Des weiteren können einige Ausführungsbeispiele der Speicherwarteschlange 70 die Adresse des Lade-Speicheroperanden vor dem Empfangen der Speicherdaten empfangen. Falls die Speicherdaten nicht zur Verfügung stehen, ist die Speicherwarteschlange 70 nicht fähig, die Speicherdaten weiter zu leiten, sogar wenn ein Treffer detektiert würde.
  • Es ist zu bemerken, dass Befehlsoperationen hier als "älter" oder "jünger" als andere Befehlsoperationen seiend bezeichnet werden. Eine erste Befehlsoperation ist "älter" als eine zweite Befehlsoperation, wenn die erste Befehlsoperation in der Reihenfolge des Programms vor der zweiten Befehlsoperationen ist. Andererseits ist eine erste Befehlsoperation "jünger" als eine zweite Befehlsoperation, wenn die erste Befehlsoperation in der Reihenfolge des Programms der zweiten Befehlsoperation nachfolgend ist. Wie hier verwendet bezieht sich der Ausdruck "erneute Ausgabe" auf die Ausgabe einer Befehlsoperation, die zuvor ausgegeben wurde (und als nicht korrekt ausgeführt befunden wurde, entweder direkt über einen erneuten Versuch oder indirekt über die von dem Ablaufplaner 36 für diese Befehlsoperation aufgezeichneten Abhängigkeiten). Des weiteren bezieht sich der Ausdruck "Speicheroperation" wie er hier verwendet wird auf eine Befehlsoperation, die eine Speicheroperation hat. Lade-Speicheroperationen haben einen Speicher-Quelloperanden als einen Quelloperanden (und einen Register-Zieloperanden) und geben den Transfer von Daten von dem Speicher-Quelloperanden zu dem Register-Zieloperanden an. Speicher-Speicheroperationen haben einen Register-Quelloperanden und einen Speicher-Zieloperanden und geben den Transfer von Daten von dem Register-Quelloperanden zu dem Speicher-Zieloperanden an. Es ist zu bemerken, dass, obwohl 3 eine Adresserzeugungseinheit 40AA und einen entsprechenden TLB 40AB darstellt, verschiedene Ausführungsbeispiele eine beliebige Anzahl von Adresserzeugungseinheiten und TLBs enthalten können. Die Lade/Speicher-Einheit 42 kann separate erneutes Versuchen Signale, erneuter Versuchstyp Signale, Treffer Signale und Speicher R#s für Speicheroperationen, die jeder AGU entsprechen, zur Verfügung stellen.
  • Nun Bezug nehmend auf 4 ist ein Blockdiagramm eines Ablaufplaners 36 gezeigt. Weitere Ausführungsbeispiele sind möglich und werden betrachtet. Wie in 4 gezeigt umfasst der Ablaufplaner 36 einen Befehlsoperation (ROP) Puffer 80, eine Ausgabeauswahlschaltung 82, eine Rückzugsgrenzschaltung 84, eine ROP Steuerschaltung 86, einen Abhängigkeitspuffer 88, einen Puffer für physikalische Adressen 90, einen Speichern R# Puffer 92, eine Rückzugsschaltung 94 und eine Abhängigkeitsdekodiererschaltung 96. Der ROP Puffer 80 ist angeschlossen zum Empfangen von Befehlsoperationen (einschließlich solcher Information wie unmittelbare oder Versetzungsdaten, usw.) und von zugewiesenen PR#s von der Abbildungseinheit 30 und ist verbunden, um ausgegebene Befehlsoperationen und PR#s den Registerdateien 38A38B und den Ausführungskernen 40A40B zur Verfügung zu stellen. Der ROP Puffer 80 ist des weiteren an die Ausgabeauswahlschaltung 82 angeschlossen, welche an die ROP Steuerschaltung 86 angeschlossen ist. Die Rückzugsgrenzschaltung 84 ist mit der Rückzugsschaltung 94 und der ROP Steuerschaltung 86 verbunden, welche angeschlossen ist an die Rückzugsschaltung 94, den Abhängigkeitspuffer 88, den Puffer für physikalische Adressen 90 und den Speichern R# Puffer 92. Die ROP Steuerschaltung 86 ist des weiteren angeschlossen, um die erneutes Versuchen und erneuter Versuchstyp Signale von der Lade/Speicher-Einheit 42 zu empfangen. Die Abhängigkeitsdekodiererschaltung 96 ist angeschlossen zum Empfangen von der Quellabhängigkeits R#s und der Ordnungsabhängigkeits R#s von der Abbildungseinheit 30 und ist mit dem Abhängigkeitspuffer 88 verbunden. Der Puffer für physikalische Adressen 90 ist angeschlossen zum Empfang einer Fülladresse von der externen Interfaceeinheit 46 und einer oder mehrerer physikalischer Adressen von dem Ausführungskern 40A. Der Speichern R# Puffer 92 ist angeschlossen zum Empfang eines oder mehrerer Treffersignale und einer oder mehrerer Speicher R#s von der Lade/Speicher-Einheit 42.
  • Die Abhängigkeitsdekodiererschaltung 96 empfängt die R#s, welche Befehlsoperationen identifizieren, von denen jede in den Ablaufplaner 36 geschriebene Befehlsoperation abhängig ist, und dekodiert die R#s in Abhängigkeitsangaben für die entsprechende Befehlsoperation. Wie oben bemerkt wird, falls ein R# als ungültig angezeigt wird (zum Beispiel von der zukünftigen Datei 20), dann eine auf dieser R# basierende Abhängigkeit nicht angezeigt. Im Gegensatz zu der Belieferung der Abhängigkeitsdekodiererschaltung 96 kann die Abbildungseinheit 30 die Angaben über die Abhängigkeit für jede Befehlsoperation direkt erzeugen (zum Beispiel durch Bereitstellung eines Abhängigkeitsvektors für jede Befehlsoperation wie den in 5 gezeigten). Im Allgemeinen wird eine Angabe zur Abhängigkeit einer ersten Befehlsoperation und einer zweiten Befehlsoperation zugewiesen und identifiziert eine Abhängigkeit (oder ein Fehlen davon) der erstem Befehlsoperation von der zweiten Befehlsoperation. Zum Beispiel kann jede Befehlsoperation ein Bit aufweisen, das, wenn gesetzt, eine Abhängigkeit der ersten Befehlsoperation von der zweiten Befehlsoperation anzeigt, und wenn nicht gesetzt ein Fehlen einer Abhängigkeit der ersten Befehlsoperation von der zweiten Befehlsoperation anzeigt. Die gesetzten und nicht gesetzten Bedeutungen des Bits können in einem Ausführungsbeispiel umgekehrt werden und weitere Kodierungen der Angaben zur Abhängigkeit sind möglich.
  • Die Abhängigkeitsdekodiererschaltung 96 stellt die Angaben über die Abhängigkeit dem Abhängigkeitspuffer 88 zum Speichern zur Verfügung. Der Abhängigkeitspuffer 88 weist mehrere Abhängigkeitseinträge auf, von denen jedem zwei Einträge in dem ROP Puffer 80 zugewiesen sind. Der Abhängigkeitseintrag speichert die Angabe über die Abhängigkeit, welche die Abhängigkeit oder das Fehlen derselben einer ersten Befehlsoperation, die in einem der zwei Einträge in dem ROP Puffer 80 gespeichert ist, von einer zweiten Befehlsoperation, die in dem anderen der zwei Einträge gespeichert ist, identifiziert. Falls die Angabe über die Abhängigkeit eine Abhängigkeit anzeigt, dann ist die erste Befehlsoperation nicht für die Ablaufplanung auswählbar bis die zweite Befehlsoperation die Abhängigkeit befriedigt.
  • Die ROP Steuerschaltung 86 überwacht die Angaben über die Abhängigkeit innerhalb des Abhängigkeitspuffers 88 und die Befriedigung von diesen Abhängigkeiten und identifiziert diejenigen Befehlsoperationen, welche für die Ablaufplanung auswählbar sind. Die ROP Steuerschaltung 86 identifiziert die auswählbaren Befehlsoperationen für die Ausgabeauswahlschaltung 82, welche die auswählbaren Befehlsoperationen abtastet, um Befehlsoperationen für die Ausgabe an die Ausführungskerne 40A40B auswählt. Ausgewählte Befehlsoperationen werden in Reaktion auf die Ausgabeauswahlschaltung 82 von dem ROP Puffer 80 gelesen und den Registerdateien 38A38B und den Ausführungskernen 40A40B für die Ausführung zur Verfügung gestellt. Im Allgemeinen ist die Ausgabeauswahlschaltung 82 konfiguriert, um eine Befehlsoperation für jede Ausführungseinheit in jedem der Ausführungskerne 40A40B auszuwählen (falls eine Befehlsoperation von jenem Typ ist, der für die Ablaufplanung auswählbar ist). Die ausgewählte Befehlsoperation ist die älteste Befehlsoperation von diesem Typ, die für die Ablaufplanung auswählbar ist. In einem Ausführungsbeispiel tastet die Ausgabeauswahlschaltung 82 die auswählbaren Befehlsoperationen zweimal pro Taktzyklus ab, um die Auswahl von zwei Befehlsoperationen von einem gegebenen Typen zu ermöglichen. Die zweite Abtastung wählt eine zweite Befehlsoperation zur Ausgabe an eine zweite Ausführungseinheit eines bestimmten Typs aus (zum Beispiel zwei Adresserzeugungseinheiten und zwei ALUs werden in einem Ausführungsbeispiel des Ausführungskerns 40A zur Verfügung gestellt). In der zweiten Abtastung wird die während der ersten Abtastung ausgewählte Befehlsoperation maskiert (das heißt erscheint nicht auswählbar), so dass die zweitälteste Befehlsoperation des entsprechenden Typs ausgewählt werden kann.
  • In einer bestimmten Ausführung kann die Ausgabeauswahlschaltung 82 unabhängige Auswahlschaltungen für jeden Typ von Befehlen haben. Jede Auswahlschaltung kann parallel zu dem Betrieb der anderen Auswahlschaltungen nach Befehlsoperationen von dem entsprechenden abtasten. Jeder Befehlstyp kann verschiedene Ressourcen zur Ausführung (zum Beispiel Ausführungsein heiten) von den anderen Befehlstypen verwenden, was eine unabhängige Operation der Auswahlschaltungen erlaubt.
  • Die Ausgabeauswahlschaltung 82 meldet (der ROP Steuerschaltung 86) welche Befehlsoperationen für die Ausgabe ausgewählt worden sind. Die ausgewählten Befehlsoperationen werden als im Ablauf geplant bezeichnet und die Befehlsoperationen werden ausgegeben (oder erneut ausgegeben) sobald sie von dem ROP Puffer 80 gelesen worden sind. Die ROP Steuerschaltung 86 unterhält einen Ausführungszustand für jede Befehlsoperation. Der Ausführungszustand kann im weitesten Sinn definiert sein, um einen "nicht ausgeführten" Zustand, einen "ausführend" Zustand und einen "erledigt" Zustand zu umfassen. Jeder dieser Zustände kann mehrere Zustände aufweisen, wie in der beispielhaften Zustandsmaschine dargestellt, die in 8 gezeigt ist, je nach Wahl des Entwicklers. Eine Befehlsoperation wird als nicht ausgeführt angesehen bei der Speicherung in den Ablaufplaner 36, bis die Befehlsoperation ausgegeben ist. Der Ausführungszustand der Befehlsoperation wird in ausführend geändert in Reaktion auf das Ausgegeben werden und wechselt nachfolgend in den erledigt Zustand auf die Erledigung der Ausführung. Der Ausführungszustand der Befehlsoperation kann zu jedem Zeitpunkt in den nicht ausgeführten Zustand geändert werden (oder kann "rückgängig gemacht" sein), wenn die Befehlsoperation erneut versucht wird (zum Beispiel über die erneutes Versuchen Signale von der Lade/Speicher-Einheit 42) oder wenn eine andere Befehlsoperation von der diese Befehlsoperation abhängt (direkt oder indirekt) rückgängig gemacht wird. Die ROP Steuerschaltung 86 kann im Allgemeinen eine bestimmte Befehlsoperation als für die Ablaufplanung auswählbar identifizieren, falls die bestimmte Befehlsoperation einen Ausführungszustand von nicht ausgeführt hat und falls jede Abhängigkeit der bestimmten Befehlsoperation befriedigt worden ist.
  • Da der Ausführungszustand einer Befehlsoperation in nicht ausgeführt geändert wird in Reaktion auf ein erneutes Versuchen für diese Befehlsoperation, kann die Befehlsoperation auswählbar werden für eine erneute Ablaufplanung und für eine erneute Ausgabe in Reaktion auf das erneute Versuchen. Jedoch können gewisse Typen von erneuten Versuchen angeben, dass die Befehlsoperation nicht erneut im Ablauf zu planen ist bis zu dem Auftreten eines nachfolgenden Ereignisses (zum Beispiel wird eine Fülladresse in dem Fall einer Lade-Speicheroperation zur Verfügung gestellt, die nicht trifft, oder die Befehlsoperation wird nicht spekulativ). In derartigen Fällen kann die ROP Steuerschaltung 86 den Ausführungszustand der zurück gezogenen ROP in nicht ausgeführt ändern, aber kann nicht signalisieren, dass die Befehlsoperation für die Ablaufplanung auswählbar ist bis das nachfolgende Ereignis auftritt.
  • Da die Angaben über die Abhängigkeit nicht aus dem Abhängigkeitspuffer 88 in Reaktion auf die Ausgabe der entsprechenden Befehlsoperationen gelöscht werden, können Befehlsoperationen innerhalb einer Kette von Abhängigkeiten spekulativ ausgegeben werden, wenn die Abhängigkeiten befriedigt werden. Die Abhängigkeiten anderer Befehlsoperationen von einer bestimmten Befehlsoperation werden als nicht befriedigt erneut kategorisiert, wenn die bestimmte Befehlsoperation rückgängig gemacht wird, und daher werden diese anderen Befehlsoperationen ebenfalls rückgängig gemacht. Auf diese Weise wird eine spekulativ ausgegebene Kette von Abhängigkeiten rückgängig gemacht und in Reaktion auf ein erneutes Versuchen der ersten Befehlsoperation in der Kette erneut ausgegeben.
  • Zusätzlich zu den während der Ausführung einer Lade-Speicheroperation gemeldeten erneuten Versuchen können Lade-Speicheroperationen auch aufgrund älterer Speicher-Speicheroperationen erneut versucht werden, die nachfolgend zu der Lade-Speicheroperation ausgeben. Der Puffer für physikalische Adressen 90 wird zur Verfügung gestellt für die Detektierung dieser Szenarien für das erneute Versuchen. Im Allgemeinen werden Lade-Speicheroperationen nicht angezeigt (über die Angaben zur Abhängigkeit innerhalb des Abhängigkeitspuffers 88) als abhängig seiend von älteren Speicher-Speicheroperationen. Stattdessen werden Lade-Speicheroperationen im Ablauf geplant ohne Berücksichtigung von älteren Speicher-Speicheroperationen (mit der Ausnahme, in einem Ausführungsbeispiel, des oben beschriebenen Mechanismus der Ordnungsabhängigkeit). Es ist jedoch möglich, dass eine Lade-Speicheroperation von einer älteren Lade-Speicheroperation abhängig sein kann, falls die ältere Lade-Speicheroperation wenigstens ein Byte der Speicheroperanden aktualisiert, auf das von der Lade-Speicheroperation zugegriffen wird. Um diese Szenarien zu detektieren, speichert der Puffer für physikalische Adressen 90 die physikalischen Adressen, auf die von dem Ladevorgang zugegriffen wird (empfangen von dem Ausführungskern 40A). der Puffer für physikalische Adressen 90 enthält die gleiche Anzahl von Einträgen wie der ROP Puffer 80, wobei jeder Eintrag fähig ist, Informationen über physikalischen Adressen für eine Lade-Speicheroperation und zugewiesen zu einem entsprechenden Eintrag in dem ROP Puffer 80 zu speichern. Der einer ausführenden Lade-Speicheroperation entsprechende Eintrag wird mit der physikalischen Adresse der Lade-Speicheroperation aktualisiert.
  • Während der Ausführung von Speicher-Speicheroperationen wird die physikalische Adresse, die von der Speicher-Speicheroperation aktualisiert wurde, von dem Ausführungskern 40A zur Verfügung gestellt. Der Puffer für physikalische Adressen 90 vergleicht die Speicheradresse mit den physikalischen Adressen in dem Puffer für physikalische Adressen 90, welche jüngeren Lade-Speicheroperationen entsprechen. Anders ausgedrückt ist der Vergleich der Adressen maskiert auf diejenigen Einträge in dem Puffer für physikalische Adressen 90, welche den Befehlsoperationen entsprechen, die jünger sind als die ausführende Speicher-Speicheroperation. Falls ein Treffer der Speicheradresse auf einer Ladeadresse detektiert wird, wird die entsprechende Lade-Speicheroperation rückgängig gemacht (der Puffer für physikalische Adressen 90 signalisiert der ROP Steuerschaltung 86, dass die entsprechende Lade-Speicheroperation getroffen worden ist, und die ROP Steuerschaltung 86 ändert den Ausführungszustand der entsprechenden Lade-Speicheroperation auf nicht ausgeführt). Die entsprechende Lade-Speicheroperation wird später er neut ausgegeben. Während der Ausführung nach dem erneuten Ausgeben wird die Lade-Speicheroperation entweder die ältere Speicher-Speicheroperation in der Speicher-Warteschlange 70 treffen (und die Speicherdaten werden weiter geleitet oder die Lade-Speicheroperation wird zurück gezogen) oder die ältere Lade-Speicheroperation wird den Cachespeicher oder den Hauptspeicher aktualisieren lassen. In jeden Fall empfängt die Lade-Speicheroperation den korrekten Speicheroperanden nach dem erneuten Ausgeben und erfolgreich abgeschlossener Ausführung. Es ist zu bemerken, dass in einem Ausführungsbeispiel, falls eine Lade-Speicheroperation wegen eines älteren Speichervorgangs, der die entsprechende physikalische Adresse in dem Puffer für physikalische Adressen 90 trifft, rückgängig gemacht wird, die Lade-Speicheroperation in die Tabelle in der Schaltung für Ordnungsabhängigkeiten 64 trainiert werden kann.
  • Während der Puffer für physikalische Adressen 90 einen Mechanismus zum Erholen von nicht korrekter Ablaufplanung einer Lade-Speicheroperation vor einer älteren Speicher-Speicheroperation, von der die Lade-Speicheroperation abhängig ist, zur Verfügung stellt, kann ein weiteres Problem existieren, welches die Lade-Speicheroperation veranlasst, rückgängig gemacht zu werden. Sogar wenn die Lade-Speicheroperation nach der Speicher-Speicheroperation, von der sie abhängt, im Ablauf geplant wird und die Speicherdaten von der Speicherwarteschlange in der Lade/Speicher-Einheit 42 weiter geleitet werden, kann die Speicher-Speicheroperation selbst rückgängig gemacht werden. Die Adressoperanden der Speicher-Speicheroperation (verwendet, um die Adresse des Speicheroperanden der Speicher-Speicheroperation zu bilden) können während der erneuten Ausgabe anders sein (das heißt das Empfangen eines nicht korrekten Adressoperanden kann der Grund für die erneute Ausgabe sein) und daher könnte die Speicheradresse nicht den Puffer für physikalische Adressen 90 während der Ausführung der erneuten Ausgabe treffen und die Lade-Speicheroperation veranlassen, ungültig gemacht zu werden. Der Ablaufplaner 36 ist mit dem Speichern R# Puffer 92 ausgestattet, um diese Möglichkeit zu behandeln.
  • In Antwort auf die Detektierung eines Treffers einer Lade-Speicheroperation auf einen Speichervorgang in der Speicher-Warteschlange 70 stellt die Lade/Speicher-Einheit 42 dem Ablaufplaner 36 ein Treffer Signal und die Speicher R# der Speicher-Speicheroperation, die von der Lade-Speicheroperation getroffen wird, zur Verfügung. Ähnlich wie der Puffer für physikalische Adressen 90 enthält der Speichern R# Puffer 92 die gleiche Anzahl von Einträgen wie der ROP Puffer 80. Jeder der Einträge ist einem entsprechenden Eintrag in dem ROP Puffer 80 zugeordnet. Falls das Treffer Signal für eine ausführende Lade-Speicheroperation ausgegeben ist, speichert der Speichern R# Puffer 92 die Speicher R#, die von der Lade/Speicher-Einheit 42 zur Verfügung gestellt wird.
  • Die Lade/Speicher-Einheit 42 stellt ebenfalls die R# eines ausführenden Speichervorgangs an den Speichern R# Puffer 92 zur Verfügung. Die Speicher R# wird mit den in dem Speichern R# Puffer 92 gespeicherten R#s verglichen. Falls eine Übereinstimmung detektiert wird, signalisiert der Speichern R# Puffer 92 der ROP Steuerschaltung 86, dass die entsprechende Lade-Speicheroperation rückgängig zu machen ist. Die ROP Steuerschaltung 86 ändert den Ausführungszustand der entsprechenden Lade-Speicheroperation auf nicht ausgeführt in Antwort auf das Signal. Nachfolgend wird die Lade-Speicheroperation erneut im Ablauf geplant und erneut ausgegeben. Es ist zu bemerken, dass die Speicher R# während der Ausführung der Speicher-Speicheroperation durch den Ausführungskern 40A zur Verfügung gestellt werden kann, falls dies gewünscht ist.
  • Zusätzlich zu der Detektierung der Abhängigkeiten von Speichervorgängen zu Ladevorgängen, wie oben beschrieben, kann der Puffer für physikalische Adressen 90 für weitere Zwecke verwendet werden. Zum Beispiel kann der Puffer für physikalische Adressen 90 verwendet werden, um festzustellen, wann eine Lade-Speicheroperation erneut auszugeben ist, die im D-Cachespeicher 44 fehl getroffen hat. Die Lade-Speicheroperation wird nachfolgend zu den entsprechenden Daten erneut ausgegeben, die von der externen Interfaceeinheit 46 zur Verfügung gestellt werden. Entsprechend stellt die externe Interfaceeinheit 46 eine Fülladresse zur Verfügung, die Fülldaten identifiziert, welche dem D-Cachespeicher 44 zur Verfügung gestellt werden. Der Puffer für physikalische Adressen 90 vergleicht die Fülladresse mit den darin gespeicherten Adressen und signalisiert der ROP Steuerschaltung 86 jegliche Übereinstimmungen. In Antwort zeichnet die ROP Steuerschaltung 86 auf, dass die Daten für die Lade-Speicheroperation zur Verfügung gestellt worden sind und dass die Lade-Speicheroperation erneut im Ablauf geplant werden kann (angenommen dass weitere Abhängigkeiten. der Lade-Speicheroperation befriedigt sind).
  • Die externe Interfaceeinheit 46 kann des weiteren Sondierungsadressen zur Vertügung stellen, die den auf dem externen Interface empfangenen Sondierungen entsprechen. Im Allgemeinen werden Sondierungen verwendet, um die Kohärenz des Speichers in Computersystemen aufrecht zu erhalten und geben einen Block im Cachespeicher, der von einem anderen Gerät angenommen wird, und den richtigen Zustand des Cachespeichers für den Block des Cachespeichers an, falls der Prozessor 10 eine Kopie des Block des Cachespeichers hat. Falls die Sondierungsadresse eine Lade physikalische Adresse in dem Puffer für physikalische Adressen 90 trifft könnte der entsprechende Ladevorgang erfordern, erneut im Ablauf geplant zu werden, um die Kohärenz und die Regeln der Speicherordnung, die von der von dem Prozessor 10 verwendeten Befehlssatzarchitektur beizubehalten. Zum Beispiel gibt die x86 Befehlssatzarchitektur eine strenge Speicherordnung an. Daher könnte ein spekulativer Ladevorgang, der von einer Sondierung getroffen wird, erneut im Ablauf geplant werden müssen, falls vorherige Speicheroperationen in dem Ablaufplaner 36 existieren und nicht ausgeführt worden sind.
  • Wie zuvor erwähnt speichert der ROP Puffer 80 die Befehlsoperationen und gibt die Befehlsoperationen an die Registerdateien 38A38B und die Ausführungskerne 40A40B in Antwort auf die Ausgabeauswahlschaltung 82 aus.
  • Der ROP Puffer 80 weist eine Vielzahl von Einträgen auf, von denen jeder zum Speichern einer Befehlsoperation fähig ist. Der einer bestimmten Befehlsoperation zugewiesene Eintrag wird durch die R# der Befehlsoperation identifiziert. Entsprechend hat jeder Eintrag in dem ROP Puffer 80: (i) einen entsprechenden ersten zugewiesenen Satz von Abhängigkeitseinträgen in dem Abhängigkeitspuffer 88, welche Angaben über die Abhängigkeit der Befehlsoperation in diesem Eintrag von anderen Befehlsoperationen in dem Ablaufplaner 36 speichert; (ii) einen entsprechenden zweiten zugewiesenen Satz von Abhängigkeitseinträgen, welche die Angaben über die Abhängigkeit von anderen Befehlsoperationen in dem Ablaufplaner 36 von der Befehlsoperation in diesem Eintrag speichert; (iii) einen entsprechenden Eintrag in dem Puffer für physikalische Adressen und (iv) einen entsprechenden Eintrag in dem Speichern R# Puffer. Gemeinsam werden die Einträge in den verschiedenen Puffern des Ablaufplaners 36, die einer gegebenen R# entsprechen, hier als ein "Eintrag im Ablaufplaner" bezeichnet.
  • Die Rückzugsgrenzauswahlschaltung 84 und die Rückzugsschaltung 94 arbeiten zusammen, um Befehlsoperationen aus dem Ablaufplaner 36 zurück zu ziehen. Die ROP Steuerschaltung 86 zeigt der Rückzugsgrenzauswahlschaltung an, welche Befehlsoperationen einen Ausführungszustand von abgeschlossen haben. Die Rückzugsgrenzauswahlschaltung 84 tastet die Angaben von dem Anfang des Ablaufplaners 36 ab (das heißt der ältesten Befehlsoperation in dem Ablaufplaner 36) auf entweder die erste Befehlsoperation mit einem Ausführungszustand, der nicht abgeschlossen ist, oder eine vorbestimmte maximale Anzahl von Befehlsoperationen ist abgetastet worden und alte sind in einem abgeschlossenen Zustand. Die Rückzugsgrenzauswahlschaltung 84 bestimmt daher die jüngste Befehlsoperation, welche zurück gezogen sein könnte und die Rückzugsschaltung 94 bestimmt, wie viele Befehlsoperationen tatsächlich zurück gezogen sind. Die Rückzugsschaltung 94 sendet die R# der letzten Befehlsoperation, die zurück gezogen wird, und kommuniziert zu der ROP Steuerschaltung 86, welche Befehlsoperationen zurück gezogen werden. Für jede zurück gezogene Befehlsoperation macht die ROP Steuer- schaltung 86 den entsprechenden Eintrag in dem ROP Puffer 80, dem Puffer für physikalische Adressen 90 und dem Speichern R# Puffer 92 ungültig. Des weiteren setzt die ROP Steuerschaltung 86 für jede zurück gezogene Befehlsoperation jeden Abhängigkeitseintrag in dem Abhängigkeitspuffer 88, der eine Abhängigkeit einer Befehlsoperation von einer zurück gezogenen Befehlsoperation anzeigt.
  • Wie hier verwendet bezieht sich der Ausdruck "Puffer" auf einen Speicher, der konfiguriert ist, um Gegenstände an Information zu speichern. Der Puffer kann einen oder mehrere Einträge enthalten, von denen jeder eine Speicherstelle in dem Speicher ist, die ausreichend Speicherplatz hat, um einen, der Gegenstände an Information zu speichern, für den der Puffer entworfen ist.
  • Es ist zu bemerken, dass, während der Puffer für physikalische Adressen 90 und der Speichern R# Puffer 92 beschrieben sind als die gleiche Anzahl von Einträgen wie der ROP Puffer 80 zu haben sein, andere Ausführungsbeispiele Puffer mit weniger Einträgen einsetzen können. Jeder Eintrag in dem Puffer 90 oder 92 kann zum Beispiel eine Markierung enthalten, welche den Eintrag in dem ROP Puffer 80 identifiziert, der die entsprechende Lade-Speicheroperation speichert. Es ist ferner zu bemerken, dass wie zuvor erwähnt die Nummer der Speicher-Warteschlange statt der Speicher R# verwendet werden kann, um die erneute Ausgabe der Speicher-Speicheroperationen zu detektieren, welche als von einer Lade-Speicheroperation getroffen detektiert wurden.
  • Es wird nun auf 5 Bezug genommen, in der ein Blockdiagramm eines Ausführungsbeispiels eines Abhängigkeitsvektors 100 gezeigt ist. Der Abhängigkeitsvektor 100 enthält eine Vielzahl von Abhängigkeitsangaben 102A102N. Jede Abhängigkeitsangabe 102A102N zeigt die Abhängigkeit (oder das Fehlen davon) einer Befehlsoperation an, die dem Abhängigkeitsvektor 100 auf eine andere Befehlsoperation in dem Ablaufplaner 36 entspricht. Die Befehlsoperation kann daher von einer zufälligen Anzahl von anderen Befehlsoperationen abhängig sein. Des weiteren können, da die Abhängigkeiten in Überein- stimmung mit der Befehlsoperation und nicht mit dem Typ der Abhängigkeit aufgezeichnet werden, die Abhängigkeiten aus willkürlichen Gründen erzeugt werden (zum Beispiel um den Entwurf des Prozessors 10 zu vereinfachen). Wie zuvor erwähnt kann der Abhängigkeitsvektor 100 durch die Dekodierung von Abhängigkeits R#s, die von der Abbildungseinheit 30 zur Verfügung gestellt werden, und das Setzen der verbleibenden Abhängigkeitsangaben, um keine Abhängigkeit anzuzeigen, erzeugt werden. Alternativ kann die Abbildungseinheit 30 dem Ablaufplaner 36 Abhängigkeitsvektoren in der in 5 gezeigten Form zum Speichern zur Verfügung stellen.
  • Es wird nun auf 6 Bezug genommen, in der ein Blockdiagramm eines Ausführungsbeispiels des Abhängigkeitspuffers 88 gezeigt ist. Weitere Ausführungsbeispiele sind möglich und werden betrachtet. In dem Ausführungsbeispiel von 6 umfasst der Abhängigkeitspuffer 88 eine Vielzahl von Abhängigkeitseinträgen einschließlich der Abhängigkeitseinträge 104A104L. Die Abhängigkeitseinträge, welche Abhängigkeiten einer bestimmten Befehlsoperation identifizieren, die in einem bestimmten Eintrag des Ablaufplaners 36 gespeichert ist (das heißt ein Eintrag in dem ROP Puffer 80 und entsprechende Einträge in dem Puffer für physikalische Adressen 90 und in dem Speichern R# Puffer 92), werden als Zeilen und Spalten von Abhängigkeitseinträgen angeordnet. Jede Zeile von Abhängigkeitseinträgen speichert die Abhängigkeitsangaben, welche die Abhängigkeiten einer bestimmten Befehlsoperation in einem bestimmten Eintrag des Ablaufplaners angeben. Zum Beispiel werden die Abhängigkeitseinträge, welche die Abhängigkeiten der Befehlsoperation in dem Eintrag 0 des Ablaufplaners identifizieren, in den Abhängigkeitseinträgen 104A104G gespeichert (und den dazwischen liegenden Einträgen dieser Zeile, nicht gezeigt). Die in den Abhängigkeitseinträgen 104A104G gezeigten beispielhaften Abhängigkeitsangaben stellen die Abhängigkeit der Befehlsoperation in dem Eintrag 0 des Ablaufplaners von der Befehlsoperation in dem Eintrag N–2 (Abhängigkeitseintrag 104F) des Ablaufplaners dar. Des weiteren gibt jede Spalte von Abhängigkeitseinträgen die Abhängigkeiten jeder anderen Befehlsoperation von einer bestimmten Befehlsoperation an. Zum Beispiel werden die Abhängigkeiten jeder anderen Befehlsoperation von der Befehlsoperation in dem Eintrag 0 des Ablaufplaners in den Abhängigkeitseinträge 104H104L aufgezeichnet. Die gezeigten beispielhaften Abhängigkeitsangaben stellen eine Abhängigkeit der Befehlsoperation in dem Eintrag 2 des Ablaufplaners von der Befehlsoperation in dem Eintrag 0 (Abhängigkeitseinträge 104I) des Ablaufplaners dar.
  • Der Abhängigkeitspuffer 88 ist angeschlossen zum Empfangen eines Satzes von Eingangssignalen (Block(0) bis Block(N-1)). Jedes Blocksignal entspricht einem der Einträge des Ablaufplaners. Das Blocksignal zeigt, wenn angelegt, an, dass die in dem entsprechenden Eintrag des Ablaufplaners gespeicherte Befehlsoperation nicht befriedigte Abhängigkeiten auf diese Befehlsoperation hat. Wenn nicht angelegt, zeigt das Blocksignal an, dass die Abhängigkeiten von dieser Befehlsoperation befriedigt worden sind. Im Allgemeinen wird das Blocksignal angelegt auf das Schreiben der entsprechenden Befehlsoperation in den Ablaufplaner 36 und wird zurückgenommen während der Ausführung der entsprechenden Befehlsoperation. Falls die Befehlsoperation zurück gezogen oder anders rückgängig gemacht wird, wird das Blocksignal zurückgenommen bis die entsprechende Befehlsoperation erneut ausgeführt wird. Die Blocksignale werden von der ROP Steuerschaltung 86 angelegt und zurückgenommen in Übereinstimmung mit dem Ausführungszustand der entsprechenden Befehlsoperation. Jedes Blocksignal wird zu den Abhängigkeitseinträgen weiter geleitet, welche Abhängigkeiten anderer Befehlsoperationen von der entsprechenden Befehlsoperation aufzeichnen. Zum Beispiel wird Block(0) zu den Abhängigkeitseinträgen 104N104L weiter geleitet. Wenn das Blocksignal zurück genommen wird, werden die entsprechenden Abhängigkeiten als befriedigt angesehen. Wenn zum Beispiel Block (0) zurück genommen wird, ist die Abhängigkeit der Befehlsoperation in dem Eintrag 2 des Ablaufplaners von der Befehlsoperation in dem Eintrag 0 des Ablaufplaners befriedigt.
  • Der Abhängigkeitspuffer 88 stellt des weiteren eine Vielzahl von Ausgangssignalen (Not_Blocked(0) bis Not_Blocked(N-1)) zur Verfügung. Jedes Not_Blocked Signal entspricht einem der Einträge des Ablaufplaners. Das Not_Blocked Signal zeigt, wenn angelegt, an, dass die Abhängigkeiten der in dem entsprechenden Eintrag des Ablaufplaners gespeicherten Befehlsoperation befriedigt worden sind. Wenn zurück genommen zeigt das Not_Blocked Signal an, dass die Abhängigkeiten der in dem entsprechenden Eintrag des Ablaufplaners gespeicherten Befehlsoperation nicht befriedigt worden sind. Im Allgemeinen ist das Not_Blocked Signal nicht angelegt bis das letzte Blocksignal, das einer Abhängigkeit der entsprechenden Befehlsoperation entspricht, zurück genommen ist, und dann wird das Not_Blocked Signal angelegt. Befehlsoperationen, für welche das Not_Blocked Signal angelegt ist, sind für die Ablaufplanung auswählbar, zumindest im Hinblick auf die Abhängigkeiten von dieser Befehlsoperation (das heißt andere Bedingungen, wie der erneute Versuchstyp, der das Warten auf ein nachfolgendes Ereignis angibt, können die Ablaufplanung verhindern). Jedes Not_Blocked Signal wird zu den Abhängigkeitseinträgen weiter geleitet, welche Abhängigkeiten der entsprechenden Befehlsoperation aufzeichnen. Zum Beispiel wird Not_Blocked(0) zu den Abhängigkeitseinträgen 104A104G weiter geleitet. Die Not_Blocked Signale können jeweils eine verdrahtete ODER Leitung sein, welche auf angelegt vorgeladen wird und dann von einem oder mehreren Abhängigkeitseinträgen zurück genommen wird, für welche das entsprechende Blocksignal angelegt ist und die Abhängigkeitsangabe eine Abhängigkeit anzeigt.
  • Durch das Aufzeichnen von Abhängigkeiten basierend auf der Position der Befehlsoperationen innerhalb des Ablaufplaners (zum Beispiel durch R#) im Gegensatz zu einer Basierung auf einer Ressource oder eines Abhängigkeitsgrunds, kann der Abhängigkeitspuffer 88 leichter zu implementieren sein und mit höheren Frequenzen betreibbar sein. Die Verdrahtung innerhalb des Abhängigkeitspuffers 88 kann höchst üblich sein (das heißt kein Bereich des Abhängigkeitspuffers ist überladen im Hinblick auf die Verdrahtung und es wenig Überlappung der Leiter). Die Normalität erleichtert die Implementierung und kann zu einem Betrieb mit höheren Frequenzen beitragen (zum Beispiel durch erlauben einer dichteren Implementierung des Abhängigkeitspuffers 88).
  • Es ist zu bemerken, dass die Abhängigkeitseinträge auf der Diagonalen von der oberen linken zu der unteren Rechten, wie in der 6 gezeigt, eine Abhängigkeit der Befehlsoperation von sich selbst anzeigen würden. Diese Abhängigkeitseinträge könnten nicht implementiert sein (wie durch die punktierten Kästen, welche diese Einträge repräsentieren, dargestellt).
  • Wie hier verwendet, bezieht sich der Ausdruck "angelegt" auf die Bereitstellung eines logisch wahren Werts für ein Signal oder ein Bit. Ein Signal oder Bit kann angelegt werden, wenn es einen Wert transportiert, der ein Fehlen einer bestimmten Bedingung anzeigt. Ein Signal oder Bit kann als angelegt definiert sein, wenn es einen logischen Wert von Null befördert, oder umgekehrt, wenn es einen logischen Wert von Eins befördert, und das Signal oder Bit kann als nicht angelegt definiert sein, wenn der gegenteilige logische Wert befördert wird.
  • Es wird nun auf 7 Bezug genommen, in der ein Blockdiagramm detaillierter gezeigt ist, das einen Bereich eines Ausführungsbeispiels des Abhängigkeitspuffers 88 und der ROP Steuerschaltung 86 darstellt. Weitere Ausführungsbeispiele sind möglich und werden betrachtet. In Übereinstimmung mit der 7 weist die ROP Steuerschaltung 86 eine Vielzahl von unabhängigen Schaltungen auf, von denen jede einem Eintrag in dem Ablaufplaner 36 entspricht. Zum Beispiel wird der Eintrag (i) in dem Ablaufplaner in der 7 dargestellt. Eine ROP Steuerschaltung(i) 86A ist dargestellt zum Nachverfolgen der Zustands der Ausführung der in dem Eintrag (i) gespeicherten Befehlsoperation. Des weiteren sind einige Abhängigkeitseinträge 104M104N gezeigt, welche Abhängigkeiten der in dem Eintrag (i) gespeicherten Befehlsoperation speichern. Insbesondere sind die Abhängigkeitseinträge gezeigt, welche eine Abhängigkeit der in dem Eintrag (i) gespeicherten Befehlsoperation von der in dem Eintrag (j) (Abhängigkeitseintrag 104M) gespeicherten Befehlsoperation und von der in dem Eintrag (j + 1) (Abhängigkeitseintrag 104N) gespeicherten Befehlsoperation anzeigen. Die Block(i) und die Not_Blocked(i) Signale sind gezeigt, ebenso wie die Block(j) und die Block(j + 1) Signale. Die ROP Steuerschaltung(i) 86A ist angeschlossen zur Bereitstellung des Block(i) Signals und ist angeschlossen zum Empfangen des Not_Blocked(i) Signals. Des weiteren ist die ROP Steuerschaltung(i) 86A angeschlossen zum Empfangen eines retry_PA(i) Signals und eines fill_hit(i) Signals von dem Speichern R# Puffer 92, einem erneuter Versuch Signal und erneuter Versuchtyp Signalen von der Lade/Speicher-Einheit 42, einem almost_done Signal von den Ausführungskernen 40A40B und einem pick(i) Signal von der Ausgabeauswahlschaltung 82. Des weiteren ist die ROP Steuerschaltung(i) 86A angeschlossen, um ein request(i) Signal der Ausgabeauswahlschaltung 82 zur Verfügung zu stellen.
  • Die ROP Steuerschaltung(i) 86A fängt an, die Abhängigkeiten der in dem Eintrag (i) gespeicherten Befehlsoperation zu überwachen, sobald die Befehlsoperation in den in den Eintrag (i) geschrieben ist. Bis die Befehlsoperation die Abhängigkeiten anderer Befehlsoperationen von dieser Befehlsoperation befriedigt hat, gibt die ROP Steuerschaltung(i) 86A das Block(i) Signal aus (welches an die Abhängigkeitseinträge weiter geleitet wird, welche anderer Befehlsoperationen von der Befehlsoperation aufzeichnen, wie in 6 dargestellt). Die Befehlsoperation hat die nicht befriedigte Abhängigkeiten, während der Zustand der Ausführung der Befehlsoperation in dem nicht ausgeführt zustand ist und während der Zustand der Ausführung in dem ausführenden Zustand ist, aber nicht nahe genug zum Abschluss der Ausführung ist, um befriedigte Abhängigkeiten zu haben. Des weiteren überwacht die ROP Steuerschaltung(i) 86A das Not_Blocked(i) Signal, um festzustellen, wann die Abhängigkeiten der Befehlsoperation befriedigt worden sind.
  • Jeder Abhängigkeitseintrag 104, der eine Abhängigkeitsangabe einer Befehlsoperation von einer anderen Befehlsoperation speichert, ist angeschlossen, um das Not_Blocked(i) Signal zurück zu nehmen, um anzuzeigen, dass die Befehlsoperation blockiert ist. Zum Beispiel ist der Abhängigkeitseintrag 104M mit einem UND Gatter 106A und einem Transistor 108A verbunden und der Abhängigkeitseintrag 104N ist mit einem UND Gatter 106B und einem Transistor 108B verbunden. Falls die gespeicherte Abhängigkeitsangabe und der Abhängigkeitseintrag eine Abhängigkeit anzeigen und das entsprechende Blocksignal angelegt ist, aktiviert das UNG Gatter den entsprechenden Transistor, der das Not_Blocked(i) Signal zurück nimmt. Andererseits deaktiviert das UND Gatter den entsprechenden Transistor und dieser Transistor legt das Not_Blocked(i) Signal nicht an, wenn die Abhängigkeitsangabe keine Abhängigkeit anzeigt oder das Blocksignal nicht angelegt ist. Entsprechend blockieren Befehlsoperationen, von denen die Befehlsoperation in dem Eintrag (i) nicht abhängig ist, nicht die Ausgabe von dieser Befehlsoperation. Befehlsoperationen, von denen die Befehlsoperation in dem Eintrag (i) abhängig ist, blockieren die Ausgabe dieser Befehlsoperation bis die Abhängigkeit befriedigt ist (angezeigt durch die Rücknahme des entsprechenden Blocksignals).
  • In Antwort auf das Anlegen des Not_Blocked Signals legt die ROP Steuerschaltung(i) 86A das request(i) Signal an die Ausgabeauswahlschaltung 82 an. Die Ausgabeauswahlschaltung 82 tastet die request(i) Signale zusammen mit ähnlichen Signalen von anderen Steuerschaltungen, die anderen Einträgen entsprechen, ab. Sobald die Ausgabeauswahlschaltung 82 den Ablauf der Befehlsoperation in dem Eintrag (i) für die Ausgabe plant, legt die Ausgabeauswahlschaltung 82 das pick(i) Signal an. In Antwort auf das pick(i) Signal ändert die ROP Steuerschaltung(i) den Zustand der Ausführung auf ausführend. Wie oben bemerkt, zeichnet der Ablaufplaner 36 in dem vorliegenden Ausführungsbeispiel die Latenz der Befehlsoperation auf und zählt die Taktzyklen von der Ausgabe der Befehlsoperation, um den Punkt festzustellen, an dem Abhängigkeiten befriedigt sind. Weitere Ausführungsbeispiele können zum Beispiel Abschlusssignale von den Ausführungseinheiten empfangen oder jeglichen anderen alternativen Mechanismus zur Feststellung, wann Abhängigkeiten befriedigt sind, verwenden. Des weiteren haben in dem vorliegendem Ausführungsbeispiel gewisse Befehlsoperationen eine variable Latenz oder haben eine längere Latenz als erwünscht zu zählen ist. Für derartige Befehlsoperationen können die Ausführungskerne 40A40B ein almost done Signal zur Verfügung stellen. Das almost done Signal wird angelegt, wenn die Ausführungskerne feststellen, dass eine Befehlsoperation mit variabler Latenz eine voreingestellte Anzahl von Taktzyklen vor dem Abschluss erreicht hat. Das almost done Signal kann von der ROP Steuerschaltung(i) 86A verwendet werden, um anzufangen, Zyklen bis zu der voreingestellten Anzahl zu zählen, an welchem Punkt die Befehlsoperation die Ausführung abgeschlossen hat.
  • Falls die Befehlsoperation eine Speicheroperation ist, tastet die ROP Steuerschaltung(i) 86A jedes erneuter Versuch Signal von der Lade/Speicher-Einheit 42 während des Taktzyklus ab, in dem der Zustand des erneuten Versuchs für die in dem Eintrag (i) gespeicherte Befehlsoperation zur Verfügung gestellt wird. In Reaktion auf ein angelegtes erneuter Versuch Signal ändert die ROP Steuerschaltung(i) 86 den Zustand der Ausführung auf nicht ausgeführt und legt das Block(i) Signal erneut an. Auf diese Weise wird die Befehlsoperation in einen Zustand vor der Ausgabe zurück gebracht und nachfolgende Befehlsoperationen in einer Abhängigkeitskette mit der Befehlsoperation werden ebenfalls in einen Zustand vor der Ausgabe zurück gebracht (durch Zurücknehmen der entsprechenden Not_Blocked Signale). Zusätzlich tastet die ROP Steuerschaltung(i) 86A die erneuter Versuchstyp Signale ab, falls das erneuter Versuch Signal angelegt ist. Falls der erneute Versuchstyp das Auftreten eines nachfolgenden Ereignisses erfordert bevor die Befehlsoperation erneut ausgegeben ist, zeichnet die ROP Steuerschaltung(i) 86A das zu suchende Ereignis auf und verhindert eine erneute Anfrage nach einer erneuten Ausgabe (durch erneutes Anlegen des request(i) Signals), bis das nachfolgende Ereignis auftritt.
  • Zusätzlich zu dem erneuten versucht werden während der Ausführung, können Lade-Speicheroperationen erneut versucht werden, weil eine physikalische Adresse einer ausführenden Speicher-Speicheroperation die physikalische Adresse der Lade-Speicheroperation (gespeichert in dem Puffer für physikalische Adressen 90) trifft oder die R# der ausführenden Speicher-Speicheroperation die Speichern R# trifft, die für die Lade-Speicheroperation aufgezeichnet wurde. Der Puffer für physikalische Adressen 90 legt ein retry_PA(i) Signal an, um den vorigen Fall an die ROP Steuerschaltung(i) 86A zu kommunizieren (und kann ähnliche Signale für jeden anderen Eintrag enthalten). Der Speichern R# Puffer 92 legt ein retry_stq(i) Signal an, um den späteren Fall zu kommunizieren (und kann ähnliche Signale für jeden anderen Eintrag enthalten). In Antwort auf das Anlegen eines der beiden Signale ändert die ROP Steuerschaltung(i) 86A den Zustand der Ausführung auf nicht ausgeführt und legt das Block(i) Signal erneut an. Unter der Annahme, dass das Not_Blocked(i) Signal angelegt ist, kann die ROP Steuerschaltung(i) 86A das request(i) Signal anlegen, um eine erneute Ablaufplanung und eine erneute Ausgabe der Befehlsoperation anzufordern.
  • Zusätzlich zu den erneuter versuch, retry_PA(i) und retry_stq(i) Signalen kann der Zustand der Ausführung der Befehlsoperation auf nicht ausgeführt zurück gebracht werden, falls das Not_Blocked(i) Signal zurück genommen wird. Dieser Mechanismus wird verwendet, um den abgeschlossen Zustand einer Abhängigkeitskette rückgängig zu machen, wenn eine Befehlsoperation an dem Anfang der Kette rückgängig gemacht wird, um die erneute Ausgabe der Befehlsoperationen in der Abhängigkeitskette zu veranlassen. Entsprechend ändert, falls das Not_Blocked(i) Signal nicht angelegt ist, die ROP Steuerschaltung(i) 86A den Zustand der Ausführung auf nicht ausgeführt und legt das Block(i) Signal wieder an (was nachfolgend weitere Not_Blocked Signale veranlassen kann, zurück zu nehmen, was die Abhängigkeitskette weiter rückgängig macht).
  • Der Puffer für physikalische Adressen 90 stellt der ROP Steuerschaltung(i) 86A ein zusätzliches Signal zur Verfügung, um anzuzeigen, falls eine von der externen Interfaceeinheit 46 zur Verfügung gestellte Adresse die physikalische Adresse des Ladevorgangs in dem Puffer für physikalische Adressen 90 trifft, als fill_hit(i) in 7 gezeigt. Der Puffer für physikalische Adressen 90 legt das fill_hit(i) Signal an, um anzuzeigen, dass die von der externen Interfaceeinheit 46 zur Verfügung gestellte Adresse die dem Eintrag (i) zugeordnete physikalische Adresse in dem Puffer für physikalische Adressen 90 trifft. Die externe Interfaceeinheit 46 kann auch Füll/Sondierung Signale zur Verfügung stellen, um den Typ der zur Verfügung gestellten Adresse anzuzeigen. Falls die Füll/Sondierung Signale Füllen anzeigen, dann ist das Anlegen des fill_hit(i) eine Angabe, dass die Fülldaten für die Zeile des Cachespeichers einschließlich der physikalischen Adresse für die Lade-Speicheroperation zur Verfügung gestellt werden. Falls die Lade-Speicheroperation an der Ablaufplanung gehindert wird, wegen einer Detektierung eines Fehltreffers im Cachespeicher während einer vorherigen Ausgabe, kann die Lade-Speicheroperation für ein erneutes Planen des Ablaufs auswählbar sein und die ROP Steuerschaltung(i) 86A kann das request(i) Signal in Antwort auf den Treffer der Fülladresse anlegen. Das oben erwähnte Ausführungsbeispiel stellt auch Adressen von der externen Interfaceeinheit 46 zur Verfügung, um Sondierungen auszuführen. Falls das fill_hit(i) Signal angelegt ist und die Füll/Sondierung Signale von der externen Interfaceeinheit 46 eine Sondierung anzeigen, dann wird ein Sondierungstreffer detektiert, der eine korrigierende Aktion erfordern könnte. In einem Ausführungsbeispiel kann das Anlegen des fill_hit(i) Signals für eine Sondierung die ROP Steuerschaltung(i) 86A veranlassen, den Zustand der Ausführung auf nicht ausgeführt zu ändern. Weitere Ausführungsbeispiele können kompliziertere Mechanismen versuchen, um eine Speicherordnung sicher zu stellen, ohne Befehlsoperation unnötig erneut auszugeben. Zum Beispiel kann die ROP Steuerschaltung(i) 86A den Treffer durch die Sondierungsadresse aufzeichnen. Falls eine ältere Lade-Speicheroperation nachfolgend aus dem Ablaufplaner zurückgezogen wird, kann dann die ROP Steuerschaltung(i) 86A den Zustand der Ausführung auf nicht ausgeführt ändern. Weitere Alternativen sind ebenfalls möglich.
  • Es wird nun auf 8 Bezug genommen, in der eine beispielhafte Zustandsmaschine gezeigt ist, welche von einem Ausführungsbeispiel der ROP Steuerschaltung(i) 86A verwendet werden kann. Weitere Steuerschaltungen können ähnliche Zustandsmaschinen verwenden. Weitere Ausführungsbeispiele sind möglich und werden betrachtet. In dem Ausführungsbeispiel von 8 ent hält die Zustandsmaschine einen Ungültig Zustand 110, einen Blockiert Zustand 112, einen Anforderung Zustand 114, einen Ausführung Variable (ExecV) Zustand 118, einen Exec6 Zustand 120, einen Exec5 Zustand 122, einen Exec4 Zustand 124, einen Exec3 Zustand 126, einen Exec2 Zustand 128, einen Exec1 Zustand 130 und einen Abgeschlossen Zustand 132.
  • Die Zustandsmaschine fängt in dem Ungültig Zustand 110 an, wenn der entsprechende Eintrag keine Befehlsoperation speichert. In Reaktion auf das Schreiben einer Befehlsoperation in den entsprechenden Eintrag geht die Zustandsmaschine entweder in den Blockiert Zustand 112 oder in den Anforderung Zustand 114 über. Der Blockiert Zustand 112 wird ausgewählt, wenn das Not_Blocked(i) Signal nicht angelegt ist, und der Anforderung Zustand 114 wird ausgewählt, wenn das Not_Blocked(i) Signal angelegt ist. In anderen Ausführungsbeispielen können Befehlsoperationen mit voreingestellten Warteereignissen in den Ablaufplaner geschrieben werden, welche die Befehlsoperation blockieren, im Ablauf geplant zu werden, sogar wenn alle Abhängigkeiten befriedigt sind (auf ähnliche Weise zu den Ereignissen, die ein erneutes Planen des Ablaufs verhindern nachdem eine Befehlsoperation in den nicht ausgeführt Zustand zurück gebracht worden ist). Derartige Befehlsoperationen können einen Übergang in den Blockiert Zustand 112 veranlassen sogar wenn das Not_Blocked(i) Signal angelegt ist.
  • Die Zustandsmaschine verbleibt in dem Blockiert Zustand 112 bis die Befehlsoperation nicht mehr blockiert wird. Während der Übergang von dem Ungültig Zustand 110 in den Blockiert Zustand 112 oder in den Anforderung Zustand 114 in dem vorliegenden Ausführungsbeispiel auf dem Not_Blocked(i) Signal basieren kann, berücksichtigt der Übergang von dem Blockiert Zustand 112 in den Anforderung Zustand 114 die Auswirkungen von Situationen des erneuten Versuchens, die angeben, dass ein nachfolgendes Ereignis auftritt bevor die Befehlsoperation auswählbar ist für ein erneutes Planen des Ablaufs. Das Kasten 134 in der 8 enthält eine Gleichung für den Ausdruck für den blockierten Übergang, der an den Pfeilen in 8 für das oben beschriebene Ausfüh rungsbeispiel verwendet wird. Genauer gesagt ist eine Befehlsoperation blockiert, wenn das Not_Blocked(i) Signal nicht angelegt ist oder eine vorherige Ausgabe in der Feststellung endete, dass die Befehlsoperation nicht spekulativ (blocked_non_spec) auszuführen ist und immer noch spekulativ ist, oder eine vorherige Ausgabe in einem Fehltreffer im Cachespeicher (blocked_until_fill) endete und die Fülldaten noch nicht zur Verfügung gestellt worden sind. Weitere Ausführungsbeispiele können zusätzliche Ereignisse enthalten, die falls gewünscht ein erneutes Planen des Ablaufs blockieren. Sobald die Befehlsoperation nicht mehr blockiert ist geht die Zustandsmaschine von dem Blockiert Zustand 112 in den Anforderung Zustand 114 über.
  • Während die Zustandsmaschine in dem Anforderung Zustand 114 ist, legt die ROP Steuerschaltung(i) 86A das request(i) Signal an. Falls die Befehlsoperation während des Anforderung Zustands 114 wieder blockiert wird, geht die Zustandsmaschine in den Blockiert Zustand 112 über. Die Zustandsmaschine geht von dem Anforderung Zustand 114 in einen der Zustände 118128 (basierend auf der Latenz der Befehlsoperation) in Reaktion auf ein Anlegen des pick(i) Signals über. Der Zustand, in den in Reaktion auf das pick(i) Signal übergegangen wurde, kann in einem Ausführungsbeispiel der Stufe Lesen Ablaufplanung der Pipeline von 2 entsprechen.
  • Das vorliegende Ausführungsbeispiel unterstützt Latenzen von zwei bis sechs Taktzyklen und eine variable Latenz größer als sechs Taktzyklen. Die Zustandsmaschine verbleibt in dem ExecV Zustand 118 bis das almost done Signal von den Ausführungskernen 40A40B angelegt wird und dann in den Exec6 Zustand 120. Jeder der Exec6 Zustand 120 bis Exec2 Zustand 128 geht in den nächst niedrigeren Zustand in der Latenzkette über, wenn die Befehlsoperation nicht rückgängig gemacht ist, wie in 8 gezeigt. Von dem Exec1 Zustand 130 geht die Zustandsmaschine in den Abgeschlossen Zustand 132 über, wenn die Befehlsoperation nicht rückgängig gemacht ist. Schließlich geht die Zustandsmaschine von dem Abgeschlossen Zustand 132 in den Un gültig Zustand 110 über, wenn die Befehlsoperation nicht vor dem Zurückziehen rückgängig gemacht ist.
  • Zur Übersichtlichkeit der Zeichnung ist das pick(i) Signal gezeigt, wie es zu einem Auswahlknoten 116 geht, von dem einer der Zustände 118128 betreten wird. Der Auswahlknoten 116 wird nur verwendet, um die Unordnung in der Zeichnung zu reduzieren und ist nicht beabsichtigt, einen separaten Zustand darzustellen.
  • In dem vorliegenden Ausführungsbeispiel. ist die Latenz der Befehlsoperation für Zwecke der Zustandsmaschine von 8 die Anzahl der Taktzyklen bevor die Befehlsoperation die Abhängigkeiten von dieser Befehlsoperation befriedigt hat. Diese Latenz kann auslaufen, bevor die Befehlsoperation Informationen zu dem Zustand der Ausführung zurück gibt (zum Beispiel ob die Befehlsoperation eine Ausnahme erfährt oder nicht). Jedoch nimmt die Zustandsmaschine Vorteil von der Verzögerung der Pipeline zwischen einer Befehlsoperation, die im Ablauf geplant wird, und dieser Befehlsoperation, welche Operanden von den Registerdateien 38A38B liest, um anzuzeigen, dass Abhängigkeiten befriedigt sind bevor die Abhängigkeiten tatsächlich physikalisch mittels einer Aktualisierung der Registerdateien befriedigt sind. Entsprechend wird das Block(i) Signal zurück genommen, wenn die Befehlsoperation in dem vorliegenden Ausführungsbeispiel den Exec2 Zustand 128 erreicht und verbleibt nicht angelegt, wenn die Zustandsmaschine in dem Exec1 Zustand 130, dem Abgeschlossen Zustand 132 oder dem Ungültig Zustand 134 ist (siehe Kasten 134). Das Block(i) Signal wird für andere Zustände angelegt.
  • An jedem Punkt nach der Ablaufplanung (pick(i) ist angelegt) kann die Befehlsoperation rückgängig gemacht werden und kehrt in den nicht ausgeführt Zustand zurück. Diese Operation ist in 8 dargestellt durch jeden der Zustände 118132, der einen Übergang basierend auf einer "undo" Gleichung (Kasten 134) zu einem zentralen Punkt 136 hat, von dem ein Übergang entweder in den Blockiert Zustand 112 oder den Anforderung Zustand 114 aus geführt wird basierend auf der in dem Kasten 134 dargestellten Blockierungsgleichung. Der zentrale Punkt 136 wird nur verwendet, um die Unordnung in der Zeichnung zu reduzieren und ist nicht beabsichtigt, einen separaten Zustand darzustellen. Für jeden der Zustände, der einen Übergang zu dem zentralen punkt 136 zeigt, wird ein Übergang in den Blockiert Zustand 112 ausgeführt, wenn die Rückgängig-Gleichung wahr ist und die Blockierungsgleichung wahr ist, und ein Übergang in den Anforderung Zustand 114 wird ausgeführt, wenn die Rückgängig-Gleichung wahr ist und die Blockierungsgleichung falsch ist.
  • In dem vorliegenden Ausführungsbeispiel wird eine Befehlsoperation "rückgängig gemacht" (das heißt kehrt in einem Zustand der Ausführung von nicht ausgeführt) zurück, wenn die Befehlsoperation direkt erneut versucht wird oder wenn das Not_Blocked(i) Signal zurück genommen wird. Die Rückgängig-Gleichung in dem Kasten 134 stellt die Bedingung für das erneute Versuchen als einen retry_this_op Wert dar, um anzuzeigen, dass die Befehlsoperation in dem Eintrag (i) zurückgezogen wurde. Ein Kasten 138 ist ferner gezeigt, der den retry_this op Wert als eine Gleichung darstellt, die wahr sein kann, wenn das retry_PA(i) Signal oder das retry_stq(i) Signal angelegt ist, oder wenn die Befehlsoperation während der Ausführung erneut versucht wird (zum Beispiel das erneuter Versuch Signal von der Lade/Speicher-Einheit 42). Die retry this op Gleichung stellt ferner die Abtastung des erneuter Versuch Signals dar, wenn die Befehlsoperation in dem Exec1 Zustand 130 ist. In dem vorliegenden Ausführungsbeispiel werden Situationen des erneuten Versuchs von der Lade/Speicher-Einheit 42 gemeldet, wenn die entsprechende Befehlsoperation in dem Exec1 Zustand 130 ist. Weitere Ausführungsbeispiele können den Zustand an verschiedenen Punkten während der Ausführung der Befehlsoperation melden, in Übereinstimmung mit den Wünschen des Entwicklers.
  • Wie zuvor erwähnt kann der Zustand der Ausführung einer Befehlsoperation weithin nicht ausgeführt, ausführend und abgeschlossen Zustände umfassen.
  • Für das Ausführungsbeispiel von 8 kann der nicht ausgeführt Zustand den Blockiert Zustand 112 oder den Anforderung Zustand 114 aufweisen. Der ausführende Zustand kann die Ausführung Zustände 118130 umfassen. Der abgeschlossen Zustand kann den Abgeschlossen Zustand 132 umfassen. Es ist zu bemerken, dass die Anzahl der Ausführung Zustände 118130 von der Implementierung abhängig ist und je nach Wahl des Entwicklers variiert werden kann. Des weiteren kann der Punkt in der Ausführung der Befehlsoperation, an dem Abhängigkeiten befriedigt werden je nach Wahl des Entwicklers variiert werden. Die Variation kann teilweise auf der Anzahl der Stufen der Pipeline zwischen der Stufe, in der die abhängige Befehlsoperation für den Ablauf geplant ist, und einer bestimmten Stufe, in der die Befriedigung der Abhängigkeiten, wie Operanden- oder Ordnungsabhängigkeiten, wie benötigt befriedigt werden, basieren. In dem vorliegenden Ausführungsbeispiel ist die bestimmte Stufe die Stufe Lesen Registerdatei.
  • Nun Bezug nehmend auf 9 ist ein Register 140 gezeigt, das von der ROP Steuerschaltung(i) 86A verwendet werden kann, um Zustände der Zustandsmaschine von 8 und weitere Zustände, wie sie gewünscht sein könnten, zu speichern. Weitere Ausführungsbeispiel sind möglich und werden betrachtet. In dem Ausführungsbeispiel von 9 kann das Register 140 einen Zustand 142, eine blocked_non spec Angabe 144, eine blocked_until_fill Angabe 146 und weitere Informationen 148 speichern.
  • Der Zustand 142 speichert den derzeitigen Zustand der in 8 dargestellten Zustandsmaschine. Die Zustände können auf jegliche geeignete Weise in dem Zustand 142 kodiert sein. Das Register 142 wird jeden Taktzyklus in Übereinstimmung mit den Übergängen der Zustände, wie in der 8 dargestellt, aktualisiert.
  • Die blocked_non spec Angabe 144 kann gesetzt werden, um ein Blockieren in Reaktion auf den Empfang des erneuter Versuch Signals von der Lade/Speicher-Einheit 42 während der Ausführung der Befehlsoperation anzu zeigen, wenn der erneute Versuchtyp anzeigt, dass die Befehlsoperation nicht spekulativ auszuführen ist. Die blocked_non spec Angabe 144 kann in der in dem Kasten 134 in 8 gezeigten Blockierungsgleichung verwendet werden. Insbesondere ist, während die blocked_non spec Angabe 144 die Blockierung anzeigt, die Befehlsoperation an der Anforderung einer Ablaufplanung gehindert bis die Befehlsoperation nicht spekulativ wird. In Reaktion darauf, dass die Befehlsoperation nicht spekulativ wird, kann die blocked_non spec Angabe gesetzt werden, um nicht blockiert anzuzeigen und die Befehlsoperation kann für den Ablauf geplant werden. In einem bestimmten Ausführungsbeispiel wird die Befehlsoperation nicht spekulativ, wenn jede ältere Befehlsoper ration in dem Ablaufplaner 36 einen Zustand der Ausführung von abgeschlossen hat.
  • Die blocked_until fill Angabe 146 kann gesetzt werden, um ein Blockieren in Reaktion auf den Empfang des erneuter Versuch Signals von der Lade/Speicher-Einheit 42 während der Ausführung der Befehlsoperation anzuzeigen, wenn der erneute Versuchtyp anzeigt, dass die Befehlsoperation in dem D-Cachespeicher 44 fehl trifft. Die blocked_until fill Angabe 146 kann in der in dem Kasten 134 in 8 gezeigten Blockierungsgleichung verwendet werden. Insbesondere ist, während die blocked_until fill Angabe 146 die Blockierung anzeigt, die Befehlsoperation an der Anforderung einer Ablaufplanung gehindert bis die entsprechenden Fülldaten zur Verfügung gestellt werden. In Reaktion darauf, dass die als zur Verfügung gestellt angezeigt werden, kann die blocked_until_fill Angabe gesetzt werden, um nicht blockiert anzuzeigen und die Befehlsoperation kann für den Ablauf geplant werden.
  • Weitere Informationen können wie gewünscht in dem Weitere Informationen Feld 148 aufgezeichnet werden. Zum Beispiel können gewisse Ausführungsbeispiele die Zurückziehung einer Speicheroperation verhindern bis eine SMC Überprüfung durchgeführt wird. Das Weitere Informationen Feld 148 kann das Erfordernis auf die SMC Überprüfung zu warten aufzeichnen und kann die Beendigung der SMC Überprüfung aufzeichnen. Jegliche andere Information kann aufgezeichnet werden. Des weiteren werden Ausführungsbeispiele, bei denen keine weitere Information aufgezeichnet wird, betrachtet werden.
  • Nun wird auf 10 Bezug genommen, in der ein Zeitablaufdiagramm gezeigt ist, das ein Beispiel des Rückgängigmachens einer Abhängigkeitskette in Übereinstimmung mit einem Ausführungsbeispiel des Ablaufplaners 36 darstellt. Taktzyklen werden von vertikalen punktierten Linien unterteilt, mit einem Identifizieren für jeden Taktzyklus an der Spitze zwischen den vertikalen punktierten Linien, die diesen Taktzyklus abgrenzen. Zustände für jede der Befehlsoperationen (wie von der ROP Steuerschaltung 86 aufgezeichnet) sind ebenfalls in 10 gezeigt (angrenzend zu dem Wort "State" und die R#s der entsprechenden Befehlsoperation in Klammern), wobei "done" den Abgeschlossen Zustand 132 anzeigt, und "blkd" den Blockiert Zustand 112 anzeigt. Die 10 umfasst einen Kasten 150, der zwei Abhängigkeitsketten darstellt. Die erste Abhängigkeitskette beginnt mit einer Befehlsoperation I0, einer R# von 10 zugewiesen, und enthält ferner die Befehlsoperationen I1, I2 und I3. die Befehlsoperation I1 ist abhängig von I0 und hat einen R# von 15. Die Befehlsoperation I2 ist abhängig von I1 und hat einen R# von 23. Die Befehlsoperation I3 ist abhängig von I2 und hat einen R# von 34. Die Befehlsoperation I4 ist in einer zweiten Abhängigkeitskette eingeleitet von I0 und ist somit abhängig von I0. Die Befehlsoperation I4 hat einen R# von 45. I1 und I4 sind direkt abhängig von I0, während I2 und I3 indirekt abhängig von I0 sind. Die Block und Not_Blocked Signale für jede Befehlsoperation sind in 10 dargestellt (wobei die R# der Befehlsoperation in Klammern gezeigt ist). Gewisse Ereignisse, welche andere Ereignisse veranlassen, sind durch Pfeile von dem Ereignis zu dem sich ergebenden Ereignis dargestellt. Zum Beispiel verursacht die Rücknahme von Not_Blocked(10) eine Änderung von State(10) zu blockiert, dargestellt durch einen Pfeil von der Rücknahme von Not_Blocked(10) zu dem blockierten Zustand von State(10).
  • Während des Taktzyklus clk0 ist jede der Befehlsoperationen in dem abgeschlossen Zustand. Entsprechend sind die entsprechenden Block Signale nicht angelegt und die Not_Blocked Signale sind angelegt. Während des Taktzyklus clk1 wird das Not_Blocked(10) Signal zurück genommen (wegen einer oder mehrerer Befehlsoperationen, von denen die Rückgängigmachung von I0 abhängt). In Reaktion auf die Rücknahme von Not_Blocked(10) kehrt die Zustandsmaschine für I0 (State(10)) in den blockierten Zustand zurück und somit wird das Block(10) Signal in dem Taktzyklus clk2 erneut angelegt. In Reaktion auf das Anlegen von Block(10) und die aufgezeichnete Abhängigkeit von I1 und I4 von I0, werden die Not_Blocked(15) und Not_Blocked(45) Signale zurück genommen (Taktzyklus clk2). Die Rücknahme der Not_Blocked(15) und Not_Blocked(45) Signale führen wiederum zu dem rückgängig machen von I1 und I4 (State(15) und State(45) wechseln in den blockierten Zustand in dem Taktzyklus clk3). Nachfolgend werden I2 und I3 rückgängig gemacht wegen ihrer direkten Abhängigkeiten von I1 beziehungsweise I2 und damit wegen ihrer indirekten Abhängigkeit von I0. an dem Ende des Taktzyklus clk5 sind die Abhängigkeitsketten in dem beispielhaften Beispiel rückgängig gemacht und die Zustände der Ausführung entsprechend jeder Befehlsoperation (I0 bis I4) sind in dem nicht ausgeführt Zustand. Nachfolgend können die Befehlsoperationen Befriedigung ihrer Abhängigkeiten erfahren und können wiederum erneut ausgegeben werden, wenn die Befehlsoperationen in der Abhängigkeitskette erneut ausgeben und die Abhängigkeiten von anderen Befehlsoperationen in den Abhängigkeitsketten erfüllen.
  • Es ist zu bemerken, dass während die Block und Not_Blocked Signale in 10 gezeigt sind (und in den 11, 12 und 15 unten) als angelegt oder nicht angelegt während eines bestimmten Taktzyklus, die Block Signale während eines ersten Teils des Taktzyklus inaktiv sein können, um es den Not_Blocked Signalen zu erlauben, vorgeladen zu werden, und dann können die Block Signale während des zweiten Teils des Taktzyklus pulsieren (und Not_Blocked Signale können entladen werden oder vorgeladen bleiben, in Übereinstimmung mit den aufgezeichneten Abhängigkeiten). Des weiteren stellen die Zeitablaufdiagramme der 10, 11, 12 und 15 den Übergang der Not_Blocked Signale basierend auf dem Übergang der dargestellten Block Signale dar. Entsprechend stellen die Beispie lein Beispiel dar, in dem die Abhängigkeiten der dargestellten Abhängigkeitsketten die letzten zu befriedigenden Abhängigkeiten für jede Befehlsoperation in der Abhängigkeitskette sind. Falls weitere Abhängigkeiten unbefriedigt bleieben würden die Not_Blocked Signale nicht angelegt bleiben bis zur Erfüllung von diesen anderen Abhängigkeiten. Auf ähnliche Weise stellen die Zeitablaufdiagramme für die Übersichtlichkeit der Zeichnungen Befehlsoperationen dar, die in Reaktion auf eine Anforderung unmittelbar für den Ablauf geplant werden. Jedoch kann die Ablaufplanung für einen oder mehrere Taktzyklen verzögert werden, falls jüngere Befehlsoperationen des gleichen Typs die Ablaufplanung anfordern.
  • Es wird nun auf 11 Bezug genommen, in der ein Zeitablaufdiagramm die Ausgabe und die erneute Ausgabe von beispielhaften Befehlsoperationen in einer Abhängigkeitskette darstellt, wobei die erneute Ausgabe wegen eines erneuten Versuchs der ersten Befehlsoperation in der Abhängigkeitskette auftritt. Taktzyklen werden von vertikalen punktierten Linien unterteilt, mit einem Identifizieren für jeden Taktzyklus an der Spitze zwischen den vertikalen punktierten Linien, die diesen Taktzyklus abgrenzen. Ein Kasten 152 stellt die beispielhafte Abhängigkeitskette dar, welche die Befehle I0 bis I2 von dem Beispiel aus 10 sind. Die Block und Not_Blocked Signale für jede Befehlsoperation sind dargestellt, ebenso wie die Zustände von jeder Befehlsoperation (wie von der ROP Steuerschaltung 86 aufgezeichnet), ähnlich wie bei dem Beispiel von 10. Die in der 11 dargestellten Zustände umfassen blockierte und abgeschlossene Zustände, dargestellt durch "blkd" und "done" in der 11 ähnlich wie in 10. Ebenso sind der Anforderung Zustand 114, der Exec2 Zustand 128 und der Exec1 Zustand 130 als "rgst", "ex2" beziehungsweise "ex1" dargestellt. Wieder ähnlich zu der 10 sind gewisse Ereignisse, die andere Ereignisse veranlassen als Pfeile von den verursachenden Ereignissen zu den sich ergebenden Ereignissen dargestellt. In diesem Beispiel sind beide Befehlsoperationen I0 und I1 von einer Latenz von 2.
  • Der Taktzyklus clk0 stellt jede der Befehlsoperationen I0–I2 in einem blockierten Zustand dar, wartend auf die Erfüllung von Abhängigkeiten bevor sie für die Ausgabe auswählbar werden. Jedes der Not_Blocked Signale ist nicht angelegt und jedes der Block Signale ist angelegt. Während des Taktzyklus clk1 wird das Not_Blocked(10) Signal angelegt. In Reaktion auf das Anlegen von Not_Blocked(10) wechselt State(10) in den Anforderung Zustand während des Taktzyklus clk2. I0 wird für die Ausgabe ausgewählt und damit geht Block(10) in den Exec2 Zustand in dem Taktzyklus clk3 über. In dem Taktzyklus clk4 geht State(10) in die Exec1 Zustände über.
  • In Reaktion auf den Exec2 Zustand von State(10), wird während des Taktzyklus clk4 Block(10) zurück genommen (was wiederum dazu führt, dass Not_Blocked(15) angelegt wird). State(15) geht in dem Taktzyklus clk4 in Reaktion auf das Anlegen von Not_Blocked(15) in den Anforderung Zustand über und in dem Taktzyklus clk5 in Reaktion auf ausgewählt zu werden in den Exec2 Zustand.
  • Während des Exec1 Zustands von State(10) (Taktzyklus clk4) detektiert die ROP Steuerschaltung 86 einen erneuten Versuch von I0 (dargestellt in 10 mittels des retry(R#10) Signals). Der erneute Versuch veranlasst ein rückgängig machen von I0 und damit geht State(10) in dem Taktzyklus clk5 in einen nicht ausgeführt Zustand über. Genauer gesagt geht State(10) in den Anforderung Zustand über, weil das Not_Blocked(10) Signal während des Taktzyklus clk4 angelegt wird. In Reaktion auf State(10), das in einen nicht ausgeführt Zustand zurück kehrt, wird das Block(10) Signal erneut angelegt (und damit wird Not_Blocked(15) zurück genommen. Die Rücknahme von Not_Blocked(15)führt zu einer Rückkehr von State(15) in einen nicht ausgeführten Zustand (Taktzyklus clk6).
  • Der erneute Versuch von I0 in diesem Beispiel ist von einem Typ des erneuten Versuchs, der eine unmittelbare erneute Ausgabe von I0 erlaubt. Entsprechend ist State(10) im Taktzyklus clk5 in dem Anforderung Zustand. I0 wird für die Ausführung ausgewählt und daher geht State(10) in den Taktzyklen clk6, clk7 beziehungsweise clk8 in die Exec2, Exec1 und abgeschlossen Zustände über. Während der erneuten Ausführung von I0 tritt ein erneuter Versuch nicht auf. Es ist jedoch zu bemerken, dass erneute Versuche mehrere Male auftreten können bevor eine Befehlsoperation erfolgreich abschließt.
  • Sobald State(10) während der erneuten Ausführung von I0 den Exec2 Zustand erreicht (Taktzyklus clk6) wird das Block(10) Signal zurück genommen und das Not_Blocked(15) Signal wird angelegt. In Reaktion auf das Anlegen des Not_Blocked(15) Signals geht State(15) in den Anforderung Zustand über (Taktzyklus clk7) und nachfolgend in den Exec2 Zustand in Reaktion darauf, zur Ausgabe ausgewählt zu werden (Taktzyklus clk8). State(15) geht in den Taktzyklen clk9 beziehungsweise cIk10 in die Exec1 und abgeschlossen Zustände über.
  • In Reaktion auf das Erreichen von dem Exec2 Zustand durch State(15) (Taktzyklus clk8) wird das Block(15) Signal zurück genommen. Das Not_Blocked(23) Signal wird während Taktzyklus clk8 in Reaktion auf die Rücknahme von Block(15) angelegt und damit geht State(23) in den Anforderung Zustand während Taktzyklus clk9 zurück. Die Ausgabe von I2 kann während eines späteren Taktzyklus geschehen (nicht gezeigt).
  • Es wird nun auf 12 Bezug genommen, in der ein Zeitablaufdiagramm eine erneute Ausgabe von einer Befehlsoperationen darstellt, mit einem Grund für eine erneute Ausgabe, der das Auftreten eines nachfolgendes Ereignisses erfordert, bevor die erneute Ablaufplanung der Befehlsoperation durchgeführt wird. Genauer gesagt stellt 12 einen erneuten Versuch einer Befehlsoperation dar, die nicht spekulativ auszuführen ist. Taktzyklen werden von vertikalen punktierten Linien unterteilt, mit einem Identifizierer für jeden Taktzyklus an der Spitze zwischen den vertikalen punktierten Linien, die diesen Taktzyklus abgrenzen. Ein Kasten 152 stellt die beispielhafte Abhängigkeitskette dar, welche die gleichen Befehlsoperationen I0 bis I2 und Abhängigkeiten von dem Beispiel aus 11 sind. Die Block und Not_Blocked Signale für jede Befehlsoperation sind dargestellt, ebenso wie die Zustände von jeder Befehlsoperation (wie von der ROP Steuerschaltung 86 aufgezeichnet), ähnlich wie bei dem Beispiel von 11. Die in der 12 dargestellten Zustände sind ähnlich wie in 11 dargestellt. Wieder ähnlich zu der 11 sind gewisse Ereignisse, die andere Ereignisse veranlassen als Pfeile von dem Ereignis zu dem sich ergebenden Ereignis dargestellt. In diesem Beispiel ist die Befehlsoperation I0 von einer Latenz von 2.
  • Die Taktzyklen clk0 bis clk6 sind ähnlich. zu den entsprechenden Taktzyklen clk0 bis clk6 aus 11 mit der Ausnahme, dass das erneute Versuchen von I0 in dem Taktzyklus clk4 als ein erneutes Versuchen angezeigt wird, weil I0 nicht spekulativ auszuführen ist. Daher wurde I0 spekulativ ausgegeben und seine nicht spekulative Natur wurde nach der Ausgabe detektiert. Der Ablaufplaner 36 löst diese Situation durch rückgängig machen von I0, um nicht spekulativ zu werden bevor eine erneute Ausgabe erlaubt wird. Genauer gesagt kann die ROP Steuerschaltung 86 in Reaktion auf den erneuten Versuchstyp als "wartend auf nicht spekulativ" seiend die Blocked_non spec Angabe entsprechend zu I0 setzen. Damit wird die ROP Steuerschaltung 86 daran gehindert, eine Ablaufplanung von I0 anzufordern bevor I0 nicht spekulativ wird, sogar obwohl das Not_Blocked(10) Signal angelegt ist. Einige Anzahlen von Taktzyklen können ablaufen und dann kann die ROP Steuerschaltung 86 feststellen, dass I0 nicht spekulativ ist (zum Beispiel Taktzyklus clkn in 12, dargestellt durch das Anlegen von dem non-spec(R#10) Signal in 12). Wie zuvor erwähnt kann eine Befehlsoperation nicht spekulativ sein, wenn in Übereinstimmung mit einem Ausführungsbeispiel jede vorherige Befehlsoperation (in der Reihenfolge des Programms) innerhalb des Ablaufplaners 36 in dem abgeschlossen Zustand ist.
  • In Reaktion darauf, dass I0 nicht spekulativ wird geht State(10) in den Anforderung Zustand über (Taktzyklus clkn + 1). Nachfolgend wird I0 für die Ausgabe ausgewählt (Exec2 Zustand von State(10) in dem Taktzyklus clkn + 2) und führt aus. Die abhängigen Befehlsoperationen I1 und I2 können nachfolgend ausgeführt werden, sobald ihre Abhängigkeiten von I0 erfüllt sind.
  • Es wird nun auf 13 Bezug genommen, in der ein beispielhafter Eintrag 160 des Puffers für physikalische Adressen gezeigt ist, der von einem Ausführungsbeispiel des Puffers für physikalische Adressen 90 verwendet werden kann. Des weiteren ist eine beispielhafte kombinatorische Logikschaltung 172 gezeigt. Die Schaltung 172 kann verwendet werden, um die fill_hit(i) und retry_PA(i) Signale zu erzeugen. Weitere Ausführungsbeispiele sind möglich und werden betrachtet. Genauer gesagt kann jede geeignete kombinatorische Logikschaltung verwendet werden, einschließlich jeglicher Boolean Äquivalente der in 13 gezeigten Logik. Des weiteren kann die in dem Eintrag 160 gespeicherte Information in Form und Inhalt geändert werden, in Übereinstimmung mit den Wünschen des Entwicklers. In dem Ausführungsbeispiel von 13 umfasst der Eintrag 160 ein Gültig Bit 162, ein erstes Laden PA Feld 164, ein erstes Bytemaskierungsfeld 166, ein zweites Laden PA Feld 168 und ein zweites Bytemaskierungsfeld 170.
  • Im Allgemeinen wird, falls die Befehlsoperation in dem Eintrag des Befehlspuffers, dem der Eintrag 160 zugeordnet ist, eine Lade-Speicheroperation ist, der Eintrag 160 mit der physikalischen Adressinformation des Speicheroperanden aktualisiert, auf den von der Lade-Speicheroperation zugegriffen wird (der "Lade Speicheroperand") und das Gültig Bit 162 wird gesetzt. In dem vorliegenden Ausführungsbeispiel wird die Information von der physikalischen Adresse des Quadwortes einschließlich des ersten Bytes des Lade Speicheroperanden (erstes Laden PA Feld 164) und einer Bytemaskierung repräsentiert, die anzeigt, welche Bytes in dem Quadwort Teil des Lade Speicheroperanden sind (erstes Bytemaskierungsfeld 166). Die Bytemaskierung weist ein Bit für jedes Byte in dem Quadwort auf. Falls das Bit gesetzt ist, ist das entsprechende Byte Teil des Lade Speicheroperanden. Falls das Bit nicht gesetzt ist, ist das entsprechende Byte kein Teil des Lade Speicheroperanden.
  • Lade Speicheroperanden können beliebig in dem Speicher ausgerichtet sein. Entsprechend können ein oder mehrere Bytes des Lade Speicheroperanden in einem Quadwort sein und ein oder mehrere Bytes des Lade Speicheroperanden können in dem nächsten darauf folgenden Quadwort sein. Daher stellt der Eintrag 160 das zweite Laden PA Feld 168 und das zweite Bytemaskierungsfeld 170 zur Vertügung. Das zweite Laden PA Feld 168 speichert die physikalische Adresse des nächsten darauf folgenden Quadworts in das erste Laden PA Feld 168. In dem vorliegenden Ausführungsbeispiel wird der in der Seite befindliche Teil der physikalischen Adresse in dem zweite Laden PA Feld 168 gespeichert. Weil Lade-Speicheroperationen, die eine Seitengrenze überschreiten in dem vorliegenden Ausführungsbeispiel nicht spekulativ sind, ist es ausreichend, lediglich den in der Seite befindlichen Teil des nächsten darauf folgenden Quadworts zu speichern (weil die Lade-Speicheroperation, wenn eine Seite überschritten wird, nicht spekulativ erneut ausgegeben wird und daher keine älteren Speichervorgänge nachfolgend zu der erneuten Ausgabe der Lade-Speicheroperation ausgegeben werden). Weitere Ausführungsbeispiele können die Gesamtheit des nächsten darauf folgenden Quadworts speichern oder falls gewünscht jeden geeigneten Teil. Des weiteren können andere Ausführungsbeispiele, während das vorliegende Ausführungsbeispiel Adressen mit einer Auflösung von einem Quadwort speichert, jegliche andere geeignete Auflösung verwenden (zum Beispiel Oktawort, Doppelwort, usw.). Das zweite Bytemaskierungsfeld 170, ähnlich zu dem ersten Bytemaskierungsfeld 166, zeigt an, welche Bytes in dem nächsten darauf folgenden Quadwort Teil des Lade Speicheroperanden sind.
  • Der Ausführungskern 40A stellt die Speicher physikalische Adresse und die entsprechende Bytemaskierung während der Ausführung von Speicher-Speicheroperationen zur Verfügung. Die Schaltung 172 vergleicht die entsprechenden Teile der Speicher physikalische Adresse mit den in dem ersten Laden PA Feld 164 und in dem zweiten Laden PA Feld 168 gespeicherten Werten. Des weiteren werden entsprechende Speicher Bytemaskierungen zur Verfügung gestellt. Die UND Gatter, welche die Speicher und Lade Bytemaskie rungen in der Schaltung 172 empfangen, stellen eine Logik dar, welche feststellt, ob zumindest ein Byte der Lade Bytemaskierung und zumindest ein entsprechendes Bit in der Speicher Bytemaskierung gesetzt sind, was anzeigt, dass zumindest ein Byte des Lade Speicheroperanden von der Lade-Speicheroperation aktualisiert wird. Zum Beispiel kann ein UND Gatter für jedes Bit verwendet werden, deren Ausgänge mit einem ODER verknüpft sind. Falls der Eintrag 160 gültig ist, stimmen die physikalischen Adressteile überein und zumindest ein Byte in dem entsprechenden Quadwort ist Teil des Lade Speicheroperanden und wird von der Speicher-Speicheroperation aktualisiert, dann kann das retry_PA(i) Signal erzeugt werden. Es ist zu bemerken, dass das retry_PA(i) Signal ebenfalls maskiert werden kann, wenn die Speicher-Speicheroperation in der Reihenfolge des Programms nicht vor der Lade-Speicheroperation ist (nicht gezeigt in 3).
  • Es ist zu bemerken, dass Speicher Speicheroperanden ebenfalls willkürlich im Speicher ausgerichtet sein können. Entsprechend können ein oder mehrere Bytes des Speicher Speicheroperanden in einem Quadwort sein und ein oder mehrere Bytes des Speicher Speicheroperanden können in dem nächsten darauf folgenden Quadwort sein. Daher kann die Speicher PA+1 (ähnlich zu der Lade PA+1) mit den gespeicherten Lade PAs verglichen werden, um eine Speicher PA zu detektieren, die eine Lade PA trifft. Die folgende Formel kann das retry_PA(i) Signal darstellen (in dem die MATCH(A(n : 0),B(n : 0)) Funktion eine binäre 1 zurück gibt, wenn zumindest ein Bit in A(n : 0) gesetzt ist ein entsprechendes Bit in B(n : 0) gesetzt ist):
  • Figure 00680001
  • Figure 00690001
  • Es ist ferner zu bemerken, dass der letzte der vier Ausdrücke (Load_PA(11 : 3) + 1 und Store_PA(11 : 3) + 1 vergleichend) redundant ist und in dem vorliegenden Ausführungsbeispiel eliminiert werden kann, weil, für einen Speicheroperanden mit einem gültigen Byte in dem nächsten darauf folgenden Quadwort, der Speicheroperand zumindest ein gültiges Byte (Byte 7, repräsentiert von dem Maskierungsbit 7) in dem ersten Quadwort hat. Daher wird eine Übereinstimmung in dem vierten Ausdruck nur angetroffen, wenn auch eine Übereinstimmung in dem ersten Ausdruck (Load_PA(11 : 3) und Store_PA(11 : 3) vergleichend) angetroffen wird.
  • Des weiteren wird der Eintrag 160 mit den von der externen Interfaceeinheit 46 zur Verfügung gestellten Füll/Sondierung Adressen verglichen. In dem dargestellten Ausführungsbeispiel wird die für einen Füllvorgang zur Verfügung gestellte Zeile des Cachespeichers dem Puffer für physikalische Adressen 90 zum Vergleich zur Verfügung gestellt. Ein entsprechender Teil des ersten Laden PA Feld 164 und des zweiten Laden PA Feld 168 kann mit der Fülladresse verglichen werden. Falls eine Übereinstimmung detektiert wird, kann das fill_hit(i) Signal angelegt werden. In anderen Ausführungsbeispielen kann die Zeile des Cachespeichers dem D-Cachespeicher 44 als eine Vielzahl von Paketen zur Verfügung gestellt werden. Der Teil der Adresse, der die Zeile des Cachespeichers identifiziert, und das zur Verfügung gestellte Paket können in diesen Ausführungsbeispielen verglichen werden.
  • Es ist ferner zu bemerken, dass das retry_PA(i) Signal maskiert werden kann, wenn die Speicher-Speicheroperation, die dem store_PA entspricht, jünger ist als die Lade-Speicheroperation, die dem Eintrag 160 entspricht.
  • Es wird nun auf 14 Bezug genommen, in der ein beispielhafter Eintrag 180 des Puffers für Speichern R# Adressen gezeigt ist, der von einem Ausführungsbeispiel des Speichern R# Puffer 92 verwendet werden kann. Des weiteren ist eine beispielhafte kombinatorische Logikschaltung 190 gezeigt. Die Schaltung 190 kann verwendet werden, um das retry_stq(i) Signal zu erzeugen. Weitere Ausführungsbeispiele sind möglich und werden betrachtet. Genauer gesagt kann jede geeignete kombinatorische Logikschaltung verwendet werden, einschließlich jeglicher Boolean Äquivalente der in 14 gezeigten Logik. Des weiteren kann die in dem Eintrag 180 gespeicherte Information in Form und Inhalt geändert werden, in Übereinstimmung mit den Wünschen des Entwicklers. In dem Ausführungsbeispiel von 14 umfasst der Eintrag 180 ein Gültig Bits 182 und 186 und Speichern R# Felder 184 und 188.
  • Im Allgemeinen wird, falls die Befehlsoperation in dem Eintrag des Befehlspuffers, dem der Eintrag 180 zugeordnet ist, eine Lade-Speicheroperation ist, der Eintrag 180 mit dem Speicher R# eines Speichervorgangs in der Speicher-Warteschlange 70 aktualisiert, der von der Lade-Speicheroperation getroffen wird. Das vorliegende Ausführungsbeispiel stellt die Weiterleitung von bis zu zwei Speicher-Speicheroperationen an eine Lade-Speicheroperation zur Verfügung und daher sind zwei Speichern R# Felder 184 und 188 vorgesehen, um die R# von jedem weiter geleiteten Speichervorgang aufzuzeichnen. Entsprechende Gültig Bits 182 und 186 sind gesetzt, wenn die entsprechenden weiterleitenden Speichervorgänge detektiert werden. Weitere Ausführungsbeispiele könnten lediglich von einem Speichervorgang weiterleiten und der Eintrag 180 könnte lediglich ein Speicher R# aufzeichnen. Noch weitere Ausführungsbeispiele können von mehr als zwei Speichervorgängen weiterleiten und der Eintrag 180 kann eine entsprechende Anzahl von Speicher R#s aufzeichnen.
  • Sobald Speicher-Speicheroperationen ausgeführt werden stellt die Lade/Speicher-Einheit 42 die R# der Speicher-Speicheroperation dem Speichern 2# Puffer 92 zur Verfügung. Die R# wird mit den in dem Eintrag 180 gespeicherten R# verglichen und falls eine Übereinstimmung detektiert wird (und das entsprechende Gültig Bit gesetzt ist), legt die Schaltung 190 das retn stq(i) Signal an. Wie oben erwähnt können in einer weiteren Alternative die Nummern der Speicherwarteschlange in dem Puffer 92 gespeichert werden und die Nummern der Speicherwarteschlange können zum Vergleich zur Verfügung gestellt werden.
  • Es wird nun auf 15 Bezug genommen, in der ein Zeitablaufdiagramm eine erneute Ausgabe von einer Lade-Speicheroperation über einen Treffer in dem Puffer für physikalische Adressen 90 darstellt. Ein erneuter Versuch einer Lade-Speicheroperation über einen Treffer in dem Speichern R# Puffer 92 kann ähnlich sein. Taktzyklen werden von vertikalen punktierten Linien unterteilt, mit einem Identifizieren für jeden Taktzyklus an der Spitze zwischen den vertikalen punktierten Linien, die diesen Taktzyklus abgrenzen. Ein Kasten 192 stellt die beispielhafte Abhängigkeitskette dar, welche die gleichen Befehlsoperationen I0 bis I2 und Abhängigkeiten von dem Beispiel aus 11 sind (mit der Ausnahme, dass I0 nun eine Lade-Speicheroperation ist). Die Block und Not_Blocked Signale für jede Befehlsoperation sind dargestellt, ebenso wie die Zustände von jeder Befehlsoperation (wie von der ROP Steuerschaltung 86 aufgezeichnet), ähnlich wie bei dem Beispiel von 11. Die in der 12 dargestellten Zustände sind ähnlich wie in 11 dargestellt. Des weiteren sind die Exec4 und Exec3 Zustände als "ex4" beziehungsweise "ex3" dargestellt. Wieder ähnlich zu der 11 sind gewisse Ereignisse, die andere Ereignisse veranlassen als Pfeile von dem Ereignis zu dem sich ergebenden Ereignis dargestellt. In diesem Beispiel ist die Lade-Speicheroperation I0 von einer Latenz von 4.
  • In dem Taktzyklus clk0 ist jede der Befehlsoperationen I0–I2 ausgegeben und ausgeführt worden und sind daher in dem abgeschlossen Zustand. Entsprechende Block Signale sind nicht angelegt und Not_Blocked Signale sind angelegt. Jedoch wird für R#10 ein Treffer in dem Puffer für physikalische Adressen 90 detektiert (retry_PA(10) wird während des Taktzyklus clk0 angelegt). In Reaktion geht State(10) in dem Taktzyklus clk1 in den Anforderung Zustand über. Des weiteren wird das Block(10) Signal angelegt und I1 und I2 werden nach einander während der Taktzyklen clk2 bis clk3 rückgängig gemacht.
  • Die Lade-Speicheroperation I0 wird in den Taktzyklen clk2 bis clk6 für die Ausführung ausgewählt und läuft durch die ausführenden Stufen in den abgeschlossen Zustand. In Reaktion darauf, dass I0 in dem Taktzyklus clk4 den Exec2 Zustand erreicht, wird das Block(10) Signal zurückgenommen (und damit wird das Not_Blocked(15) Signal angelegt. Die Befehlsoperationen I1 und I2 werden damit erneut für den Ablauf geplant und wie in 15 gezeigt erneut ausgegeben.
  • 15 stellt dar, dass eine Lade-Speicheroperation vor Speicher-Speicheroperationen ausgegeben und ausgeführt werden kann, von denen die Lade Befehlsoperation abhängt. Nachfolgend können die Speicher-Speicheroperationen ausgegeben werden und die Abhängigkeit detektiert werden. Die Abhängigkeit wird berücksichtigt durch eine erneute Ausgabe der Lade-Speicheroperation (und ihrer Abhängigkeitsketten) durch den Ablaufplaner 36, sobald die Abhängigkeit erkannt wird. Ein ähnliches Zeitablaufdiagramm mit dem retry_stq(10) Signal angelegt stellt die Detektierung einer falschen Abhängigkeit einer Lade-Speicheroperation von einer vorherigen Speicher-Speicheroperation dar, welche nicht korrekt ausgeführt wurde und nachfolgend erneut ausgegeben wurde. Wiederum behandelt der Ablaufplaner 36 die Situation durch eine erneute Ausgabe der Lade-Speicheroperation und ihrer Abhängigkeitsketten. Eine korrekte Operation kann bei minimaler Abnahme der Leistungsfähigkeit zur Verfügung gestellt werden und daher kann eine aggressive spekulative Ausführung durchgeführt werden und eine höhere Leistungsfähigkeit kann erreicht werden.
  • Computersysteme
  • Es wird nun auf 16 Bezug genommen, in der ein Blockdiagramm gezeigt ist, das ein Ausführungsbeispiel eines Computersystems 200 einschließlich des Prozessors 10 darstellt, der über eine Busbrücke 202 mit einer Vielzahl von Systemkomponenten verbunden ist. Weitere Ausführungsbeispiele sind möglich und werden betrachtet. In dem dargestellten System ist ein Hauptspeicher 204 über einen Speicherbus 206 mit der Busbrücke 202 verbunden und eine Grafiksteuerung 208 ist über einen AGP Bus 210 mit der Busbrücke 202 verbunden. Schließlich ist eine Vielzahl von PCI Geräten 212A212B über einen PCI Bus 214 mit der Busbrücke 202 verbunden. Eine zweite Busbrücke 216 kann ferner vorgesehen sein, um einem oder mehreren EISA oder ISA Geräten 218 über einen EISA/ISA Bus 220 eine elektrische Schnittstelle zu bieten. Der Prozessor 10 ist über einen CPU Bus 224 mit der Busbrücke 202 und mit einem optionalen L2 Cachespeicher 228 verbunden. Zusammen können der CPU Bus 224 und die Schnittstelle zu dem L2 Cachespeicher 228 eine externe Schnittstelle 52 aufweisen.
  • Die Busbrücke 202 stellt eine Schnittstelle zwischen dem Prozessor 10, dem Hauptspeicher 204, der Grafiksteuerung 208 und an den PCI Bus 214 angebrachten Geräten zur Verfügung. Wenn eine Operation von einem der an die Busbrücke 202 angeschlossenen Geräte empfangen wird, identifiziert die Busbrücke 202 das Ziel der Operation (zum Beispiel ein bestimmtes Gerät oder in dem Fall des PCI Busses 214, dass das Ziel auf dem PCI Bus 214 ist). Die Busbrücke 202 führt die Operation zu dem angezielten Gerät. Die Busbrücke 202 übersetzt im Allgemeinen eine Operation von dem Protokoll, das von dem Quellgerät oder -bus benutzt wird, in das Protokoll, das von dem Zielgerät oder -bus benutzt wird.
  • Zusätzlich zur Bereitstellung einer Schnittstelle zu einem ISA/EISA Bus für den PCI Bus 214 kann die zweite Busbrücke 216 wie gewünscht weitere Funktionalität enthalten. Eine Eingangs/Ausgangssteuerung (nicht gezeigt), entweder außerhalb von der oder in die zweite Busbrücke 216 integriert, kann auch in dem Computersystem 200 enthalten sein, um operationelle Unterstützung für eine Tastatur und Maus 222 und für verschiedene serielle und parallele Anschlüsse wie gewünscht zur Verfügung zu stellen. Eine externe Cachespeichereinheit (nicht gezeigt) kann ferner an den CPU Bus 224 zwischen dem Prozessor 10 und der Busbrücke 202 in anderen Ausführungsbeispielen angeschlossen sein. Alternativ kann der externe Cachespeicher an die Busbrücke 202 angeschlossen sein und die Cachespeichersteuerlogik für den externen Cachespeicher kann in der Busbrücke 202 integriert sein. Ein L2 Cachespeicher 228 ist des weiteren in einer hinter dem Prozessor 10 angeordneten Konfiguration gezeigt. Es ist zu bemerken, dass der L2 Cachespeicher 228 getrennt von dem Prozessor 10, in einem Einsatz (zum Beispiel Slot 1 oder Slot A) für den Prozessor 10 integriert oder sogar integriert auf einem Halbleitersubstrat in dem Prozessor 10 sein kann.
  • Der Hauptspeicher 204 ist ein Speicher, in dem Anwendungsprogramme gespeichert werden und von dem der Prozessor 10 hauptsächlich ausführt. Ein geeigneter Hauptspeicher 204 weist DRAM (dynamischen wahlfreien Zugriffsspeicher) auf. Zum Beispiel kann eine Vielzahl von Bänken an SDRAM (Synchrones DRAM) oder an Rambus DRAM (RDRAM) geeignet sein.
  • Die PCI Geräte 212A212B sind beispielhaft für eine Vielzahl von peripheren Geräten, wie zum Beispiel Netzwerkschnittstellenkarten, Videobeschleunigern, Audiokarten, Festplatten oder Diskettenlaufwerken oder Laufwerkssteuerungen, SCSI (kleine Computer Systemschnittstelle) Adaptern oder Telefoniekarten. Auf ähnliche Weise ist das ISA Gerät 218 beispielhaft für verschiedene Typen von peripheren Geräten, wie einem Modem, einer Soundkarte und einer Vielzahl von Daten sammelnden Karten, wie GPIB oder Feldbus Schnittstellenkarten.
  • Die Grafiksteuerung 208 ist vorgesehen, um Text und Bilder auf einer Anzeige 256 sichtbar zu machen. Die Grafiksteuerung 208 kann einen typischen Grafikbeschleuniger verwenden, der allgemein im Stand der Technik bekannt ist, um dreidimensionale Datenstrukturen sichtbar zu machen, die effektiv aus und in den Hauptspeicher 204 geschoben werden können. Die Grafiksteuerung 208 kann daher ein Master von dem AGP Bus 210 sein, so dass es Zugriff auf eine Zielschnittstelle innerhalb der Busbrücke 202 anfordern und empfangen kann, um dadurch Zugriff auf den Hauptspeicher 204 zu bekommen. Ein fest zugeordneter Grafikbus erlaubt eine schnelle Erlangung von Daten aus dem Hauptspeicher 204. Für gewisse Operationen kann die Grafiksteuerung 208 des weiteren konfiguriert sein, um auf dem AGP Bus Transaktionen nach dem PCI Protokoll zu erzeugen. Die AGP Schnittstelle der Busbrücke 202 kann daher Funktionalitäten enthalten, um sowohl Transaktionen nach dem AGP Protokoll als auch Ziel- und Urhebertransaktionen nach dem PCI Protokoll zu unterstützen. Die Anzeige 226 ist jegliche elektronische Anzeige, auf der ein Bild oder ein Text dargestellt werden kann. Eine geeignete Anzeige umfasst eine Kathodenstrahlröhre („CRT"), ein Flüssigkristalldisplay („LCD") usw.
  • Es ist zu bemerken, dass, während die AGP, PCI und ISA oder EISA Busse in der obigen Beschreibung als Beispiele benutzt worden sind, jede Busarchitektur wie gewünscht ersetzt werden kann. Es ist weiter zu bemerken, dass das Computersystem 200 ein Mehrfachprozessorsystem sein kann, das zusätzliche Prozessoren enthält (zum Beispiel Prozessor 10a, der als optionale Komponente des Computersystems 200 gezeigt ist). Der Prozessor 10a kann ähnlich zu dem Prozessor 10 sein. Genauer gesagt kann der Prozessor 10a eine identische Kopie des Prozessors 10 sein. Der Prozessor 10a kann über einen unabhängigen Bus (wie in 11 gezeigt) mit der Busbrücke 202 verbunden sein oder kann den CPU Bus 224 mit dem Prozessor 10 teilen. Des weiteren kann der Prozessor 10a mit einem optionalen L2 Cachespeicher 228a verbunden sein, der dem L2 Cachespeicher 228 ähnlich ist.
  • Es wird nun auf 17 Bezug genommen, in der ein weiteres Ausführungsbeispiel eines Computersystems 300 gezeigt ist. Weitere Ausführungsbeispiele sind möglich und werden betrachtet. In dem Ausführungsbeispiel von 17 enthält das Computersystem 300 mehrere Verarbeitungsknoten 321A, 312B, 312C und 312D. Jeder Verarbeitungsknoten ist mit einem entsprechenden Speicher 314A314D über eine Speichersteuerung 316A316D verbunden, die in jedem entsprechenden Verarbeitungsknoten 312A312D enthalten ist. Des weiteren enthalten die Verarbeitungsknoten 312A312D eine Interfacelogik, die zur Kommunikation zwischen den Verarbeitungsknoten 312A312D verwendet wird. Zum Beispiel enthält der Verarbeitungsknoten 312A eine Intertacelogik 318A zum Kommunizieren mit dem Verarbeitungsknoten 312B, eine Intertacelogik 318B zum Kommunizieren mit dem Verarbeitungsknoten 312C und eine dritte Interfacelogik 318C zum Kommunizieren mit noch einem weiteren Verarbeitungsknoten (nicht gezeigt). Auf ähnliche Weise enthält der Verarbeitungsknoten 312B die Intertacelogiken 318D, 318E und 318F; der Verarbeitungsknoten 312C enthält die Intertacelogiken 318G, 318H und 318I und der Verarbeitungsknoten 312D enthält die Interacelogiken 318J, 318K und 318L. Der Verarbeitungsknoten 312D ist angeschlossen, um mit einer Vielzahl von Eingangs/Ausgangs Geräten (zum Beispiel Geräte 320A320B in verketteter Konfiguration) über die Interfacelogik 318L zu kommunizieren. Weitere Verarbeitungsknoten können mit anderen I/O Geräten in ähnlicher Weise kommunizieren.
  • Die Verarbeitungsknoten 312A312D implementieren eine paketbasierte Verbindung für die Kommunikation zwischen den Verarbeitungsknoten. In dem vorliegenden Ausführungsbeispiel ist die Verbindung als Sätze von unidirektionalen Leitungen verwirklicht (zum Beispiel werden Leitungen 324A verwendet, um Pakete von dem Verarbeitungsknoten 312A zu dem Verarbeitungsknoten 312B zu übermitteln und Leitungen 324B werden verwendet, um Pakete von dem Verarbeitungsknoten 312B zu dem Verarbeitungsknoten 312A zu übermitteln). Weitere Sätze von Leitungen 324C324h werden wie in 17 dargestellt verwendet, um Pakete zwischen den anderen Verarbeitungsknoten zu übermitteln. Im Allgemeinen kann jeder Satz von Leitungen 324 eine oder mehrere Datenleitungen, eine oder mehrere den Datenleitungen entsprechende Taktleitungen und eine oder mehrere Steuerleitungen zur Anzeige des Typs des beförderten Pakets aufweisen. Die Verbindung kann für die Kommunikation zwischen den Verarbeitungsknoten auf eine mit einem Cachespeicher kohärente Weise betrieben werden oder für die Kommunikation zwischen einem Verarbeitungsknoten und einem I/O Gerät (oder einer Busbrücke zu einem I/O Bus von konventioneller Konstruktion, wie einem PCI Bus oder einem ISA Bus) auf nicht kohärente Weise betrieben werden. Des weiteren kann die Verbindung unter Benutzung einer verketteten Struktur zwischen den I/O Geräten, wie gezeigt, auf nicht kohärente Weise betrieben werden. Es ist zu bemerken, dass ein Paket, das von einem Verarbeitungsknoten zu einem Anderen übermittelt wird, einen oder mehrere andere in der Mitte liegende Knoten passieren kann. Zum Beispiel kann ein von dem Verarbeitungsknoten 312A an den Verarbeitungsknoten 312D übermitteltes Paket entweder durch den Verarbeitungsknoten 312B oder den Verarbeitungsknoten 312C wie in 17 gezeigt gelangen. Jeder geeignete Algorithmus zur Dirigierung kann verwendet werden. Weitere Ausführungsbeispiele des Computersystems 300 können mehr oder weniger Verarbeitungsknoten als in dem in 17 gezeigten Ausführungsbeispiel enthalten.
  • Im Allgemeinen können die Pakete mit einer oder mehr Bitzeiten auf den Leitungen 324 zwischen den Knoten übermittelt werden. Eine Bitzeit kann die steigende oder fallende Flanke des Taktsignals auf den entsprechenden Taktleitungen sein. Die Pakete können Anweisungspakete zum Einleiten von Transaktionen, Sondierungspakete zur Beibehaltung der Kohärenz des Cachespeichers und Antwortpakete sein, die auf Sondierungen und Anweisungen antworten.
  • Die Verarbeitungsknoten 312A312D können, zusätzlich zu einer Speichersteuerung und einer Interfacelogik, einen oder mehrere Prozessoren enthal ten. Allgemein gesagt weist ein Verarbeitungsknoten mindestens einen Prozessor auf und kann optional eine Speichersteuerung zur Kommunikation mit einem Speicher und weitere Logik wie gewünscht enthalten. Insbesondere kann ein Verarbeitungsknoten 312A312D einen Prozessor 10 aufweisen. Die externe Interfaceeinheit 46 kann die Interfacelogik 318 innerhalb des Knotens enthalten, ebenso wie die Speichersteuerung 316.
  • Die Speicher 314A314D können alle geeigneten Speichergeräte aufweisen. Zum Beispiel kann ein Speicher 314A314D einen oder mehrere RAMBUS DRAMs (RDRAMs), synchrone DRAMs (SDRAMs), statische RAMs usw. aufweisen. Der Adressraum des Computersystems 300 ist zwischen den Speichern 314A314D aufgeteilt. Jeder Verarbeitungsknoten 312A312D kann eine Speicherabbildung enthalten, die verwendet wird, um festzustellen, welche Adressen auf welche Speicher 314A314D abgebildet sind, und damit, an welchen Verarbeitungsknoten 312A312D eine Speicheranforderung für eine bestimmte Adresse dirigiert werden soll. In einem Ausführungsbeispiel ist der Kohärenzpunkt für eine Adresse in dem Computersystem 300 die Speichersteuerung 316A316D, die mit dem Speicher verbunden ist und den Adressen entsprechende Bytes speichert. Anders gesagt ist die Speichersteuerung 316A316D verantwortlich für die Sicherstellung, dass jeder Speicherzugriff auf den entsprechenden Speicher 314A314D auf eine mit dem Cachespeicher kohärente Weise geschieht. Die Speichersteuerungen 316A316D können eine Steuerschaltung aufweisen, um eine Schnittstelle zu dem Speicher 314A314D zu bilden. Des weiteren können die Speichersteuerungen 316A316D Anforderungswarteschlangen für die Aufreihung von Speicheranforderungen enthalten.
  • Im Allgemeinen kann die Interfacelogik 318A318L eine Vielzahl von Puffern zum Empfangen von Paketen von der Verbindung und zum Puffern von auf der Verbindung zu übermittelnden Paketen aufweisen. Das Computersystem 300 kann jeden geeigneten Mechanismus zur Flusssteuerung für die Übermittelung von Paketen verwenden. Zum Beispiel speichert in einem Ausführungs- Beispiel die Interfacelogik 318 einen Zählwert der Anzahl von jedem Typ des Puffers in dem Empfänger an der anderen Seite der Verbindung, mit dem diese Interfacelogik verbunden ist. Die Interfacelogik übermittelt kein Paket, es sei denn die empfangene Interfacelogik hat einen freien Puffer, um das Paket zu speichern. Wenn ein empfangender Puffer durch die Weiterleitung eines Pakets frei wird, übermittelt die empfangende Logik eine Nachricht zu der sendenden Interfacelogik, um anzuzeigen, dass der Puffer leer gemacht worden ist. Ein derartiger Mechanismus kann als ein „Coupon basiertes" System bezeichnet werden.
  • Die I/O Geräte 320A320B können alle geeigneten I/O Geräte sein. Zum Beispiel können die I/O Geräte 320A320B Netzwerk-Schnittstellenkarten, Videobeschleuniger, Audiokarten, Festplatten oder Diskettenlaufwerke oder Laufwerkcontroller, SCSI (Kleincomputer-Systemschnittstelle) Adapter und Telefoniekarten, Modems, Soundkarten und eine Vielzahl von Datenaquisitionskarten, wie GPIB oder Feldbusinterfacekarten sein.
  • Zahlreiche Variationen und Modifikationen werden den Fachleuten auf dem Gebiet offenbar werden, sobald die obige Offenbarung vollständig anerkannt ist. Es ist beabsichtigt, dass die folgenden Ansprüche interpretiert werden, um alle derartigen Variationen und Modifikationen zu umfassen.
  • Industrielle Anwendbarkeit
  • Diese Erfindung ist in dem Gebiet von Prozessoren und Computersystemen anwendbar.

Claims (10)

  1. Planungseinrichtung (36) mit: einem Puffer (80) zum Speichern einer ersten Befehlsoperation; einer mit dem Puffer (80) gekoppelten Schaltung (82;86), die zum Auswählen der ersten Befehlsoperation zwecks Ausgebens aus dem Puffer (80), zum Halten der ersten Befehlsoperation nach dem Ausgeben in dem Puffer (80) und zum Wiederausgeben der ersten Befehlsoperation, wenn die erste Befehlsoperation inkorrekt ausgeführt worden ist, vorgesehen ist; dadurch gekennzeichnet, dass die Planungseinrichtung ferner einen mit der Schaltung (82;86) gekoppelten Adressenpuffer (90) aufweist, wobei die erste Befehlsoperation eine erste Speicheroperation ist und der Adressenpuffer (90) zum Speichern einer ersten Adresse vorgesehen ist, auf die die erste Speicheroperation zugreift, wobei der Adressenpuffer zum Empfangen der ersten Adresse, zum Empfangen der zweiten Adresse einer im Anschluss an die erste Speicheroperation erfolgenden Speichern-in-Speicheroperation und zum Vergleichen der zweiten Adresse mit im Adressenpuffer (90) gespeicherten Adressen vorgesehen ist, und wobei die erste Befehlsoperation inkorrekt ausgeführt worden ist, wenn die Speichern-in-Speicheroperation mindestens ein Byte aktualisiert, auf das die erste Befehlsoperation zugreift, und die Speichern-in-Speicheroperation der ersten Speicheroperation in der Programmreihenfolge vorangeht.
  2. Planungseinrichtung nach Anspruch 1 zum Empfangen eines ersten Signals von einer Ausführungseinheit (42), das anzeigt, dass die erste Befehlsoperation inkorrekt ausgeführt worden ist, wobei die Schaltung (82;86) zum Wiederausgeben der ersten Befehlsoperation in Reaktion auf das erste Signal vorgesehen ist und das erste Signal ferner anzeigt, dass die erste Befehlsoperation nicht spekulativ ausgeführt werden soll, und wobei die Schaltung (82;86) zum Verzögern des Wiederausgebens der ersten Befehlsoperation vorgesehen ist, bis die erste Befehlsoperation nicht spekulativ ist.
  3. Planungseinrichtung nach Anspruch 1 zum Empfangen eines ersten Signals von einer Ausführungseinheit (42), das anzeigt, dass die Befehlsoperation inkorrekt ausgeführt worden ist, wobei die Schaltung zum Wiederausgeben der ersten Befehlsoperation in Reaktion auf das erste Signal vorgesehen ist.
  4. Planungseinrichtung nach Anspruch 1, bei der der Adressenpuffer (90) zum Empfangen einer Fülladresse vorgesehen ist, die anzeigt, dass Daten an einen Daten-Cachespeicher (44) gesendet werden, und wobei, wenn die erste Adresse Daten innerhalb der an den Daten-Cachespeicher gesendeten Daten anzeigt, die Schaltung zum Wiederausgeben der ersten Speicheroperation vorgesehen ist.
  5. Planungseinrichtung nach Anspruch 1, ferner mit einem Kennzeichenpuffer (92), der zum Empfangen eines Speicherkennzeichens entsprechend einer Speichern-in-Speicheroperation vorgesehen ist, wobei die erste Befehlsoperation eine erste Speicheroperation ist, wobei die Speichern-in-Speicheroperation mindestens ein Byte aktualisiert, auf das die erste Speicheroperation zugreift, und die Speichern-in-Speicheroperation der ersten Speichern-in-Speicher-Speicheroperation in der Programmreihenfolge vorangeht, wobei der Kennzeichenpuffer (92) zum Speichern des Speicherkennzeichens in einen Eintrag entsprechend der ersten Spei cheroperation in Reaktion auf das Ausführen der ersten Speicheroperation vorgesehen ist.
  6. Planungseinrichtung nach Anspruch 5, bei dem der Kennzeichenpuffer (92) ferner zum Empfangen eines zweiten Speicherkennzeichens entsprechend einem Ausführungsspeicher vorgesehen ist, wobei der Kennzeichenpuffer (92) zum Vergleichen des zweiten Speicherkennzeichens mit dem Speicherkennzeichen vorgesehen ist und wobei die Schaltung zum Wiederausgeben der ersten Speicheroperation in Reaktion darauf, dass das Speicherkennzeichen dem zweiten Speicherkennzeichen gleich ist, vorgesehen ist.
  7. Prozessor (10) mit: einer Planungseinrichtung (36) nach einem der Ansprüche 1 bis 6; und einer mit der Planungseinrichtung gekoppelten Ausführungseinheit (42), die zum Ausführen der ersten Befehlsoperation vorgesehen ist.
  8. Verfahren mit folgenden Schritten: Ausgeben einer ersten Befehlsoperation von einer Planungseinrichtung (36) zu Ausführungszwecken; Halten der ersten Befehlsoperation in der Planungseinrichtung (36) nach dem Ausgeben; Wiederausgeben der ersten Befehlsoperation von der Planungseinrichtung (36) zu Ausführungszwecken in Reaktion darauf, dass die erste Befehlsoperation inkorrekt ausgeführt worden ist; dadurch gekennzeichnet, dass die erste Befehlsoperation eine erste Speicheroperation ist; wobei das Verfahren ferner folgende Schritte umfasst: Speichern einer ersten Adresse der ersten Befehlsoperation in einem Adressenpuffer (90); Ausgeben einer Speichern-in-Speicheroperation, die der ersten Befehloperation in der Programmreihenfolge vorangeht, nach dem Ausgeben der ersten Befehlsoperation; Vergleichen der ersten Adresse in dem Puffer (90) mit einer Speicheradresse entsprechend der Speichern-in-Speicheroperation; und Detektieren, dass die erste Befehlsoperation inkorrekt ausgeführt worden ist, wenn der Vergleich anzeigt, dass die Speichern-in-Speicheroperation mindestens ein Byte aktualisiert, auf das die erste Speicheroperation zugreift.
  9. Verfahren nach Anspruch 8, bei dem die erste Befehlsoperation eine erste Speicheroperation ist, wobei das Verfahren ferner folgende Schritte umfasst: Speichern einer ersten Adresse der ersten Befehlsoperation in einem Adressenpuffer (90); Vergleichen einer Fülladresse, die anzeigt, dass Daten zu einem Daten-Cachespeicher (44) gesendet werden; und Wiederausgeben der ersten Speicheroperation, wenn die erste Adresse Daten innerhalb der zu dem Daten-Cachespeicher gesendeten Daten anzeigt.
  10. Verfahren nach Anspruch 8, bei dem die erste Befehlsoperation eine erste Speicheroperation ist, wobei das Verfahren ferner folgende Schritte umfasst: Speichern eines Speicherkennzeichens entsprechend einer Speichern-in-Speicheroperation in einem Eintrag eines Kennzeichenpuffers (92) entsprechend der ersten Speicheroperation, wobei die Speichern-in-Speicheroperation mindestens ein Byte aktualisiert, auf das die erste Speicheroperation in der Programmreihenfolge zugreift; Vergleichen eines zweiten Speicherkennzeichens entsprechend einer ausgeführten Speicherung mit dem Speicherkennzeichen in dem Kennzeichenpuffer (92); und Wiederausgeben der ersten Speicheroperation in Reaktion darauf, dass der Vergleich eine Gleichheit anzeigt.
DE60005860T 2000-01-03 2000-08-16 Ablaufsteuerung zum ausgeben und wiederausgeben von ketten abhängiger befehle Expired - Lifetime DE60005860T2 (de)

Applications Claiming Priority (9)

Application Number Priority Date Filing Date Title
US476322 1990-02-07
US47657000A 2000-01-03 2000-01-03
US09/476,322 US6564315B1 (en) 2000-01-03 2000-01-03 Scheduler which discovers non-speculative nature of an instruction after issuing and reissues the instruction
US09/476,204 US6622235B1 (en) 2000-01-03 2000-01-03 Scheduler which retries load/store hit situations
US09/476,578 US6542984B1 (en) 2000-01-03 2000-01-03 Scheduler capable of issuing and reissuing dependency chains
US476204 2000-01-03
US476570 2000-01-03
US476578 2000-01-03
PCT/US2000/022458 WO2001050253A1 (en) 2000-01-03 2000-08-16 Scheduler capable of issuing and reissuing dependency chains

Publications (2)

Publication Number Publication Date
DE60005860D1 DE60005860D1 (de) 2003-11-13
DE60005860T2 true DE60005860T2 (de) 2004-08-05

Family

ID=27504212

Family Applications (1)

Application Number Title Priority Date Filing Date
DE60005860T Expired - Lifetime DE60005860T2 (de) 2000-01-03 2000-08-16 Ablaufsteuerung zum ausgeben und wiederausgeben von ketten abhängiger befehle

Country Status (6)

Country Link
EP (1) EP1244962B1 (de)
JP (1) JP2003519833A (de)
KR (1) KR100747128B1 (de)
CN (1) CN1210649C (de)
DE (1) DE60005860T2 (de)
WO (1) WO2001050253A1 (de)

Families Citing this family (28)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20020138714A1 (en) * 2001-03-22 2002-09-26 Sun Microsystems, Inc. Scoreboard for scheduling of instructions in a microprocessor that provides out of order execution
US7165167B2 (en) * 2003-06-10 2007-01-16 Advanced Micro Devices, Inc. Load store unit with replay mechanism
US7243200B2 (en) * 2004-07-15 2007-07-10 International Business Machines Corporation Establishing command order in an out of order DMA command queue
CN101449256B (zh) 2006-04-12 2013-12-25 索夫特机械公司 对载明并行和依赖运算的指令矩阵进行处理的装置和方法
CN107368285B (zh) 2006-11-14 2020-10-09 英特尔公司 多线程架构
EP3156896B1 (de) 2010-09-17 2020-04-08 Soft Machines, Inc. Mehrfach verzweigte einzelzyklusvorhersage mit einem latenten cache für frühe und entfernte verzweigungsvorhersage
US9274793B2 (en) 2011-03-25 2016-03-01 Soft Machines, Inc. Memory fragments for supporting code block execution by using virtual cores instantiated by partitionable engines
CN108376097B (zh) 2011-03-25 2022-04-15 英特尔公司 用于通过使用由可分割引擎实例化的虚拟核来支持代码块执行的寄存器文件段
WO2012135031A2 (en) 2011-03-25 2012-10-04 Soft Machines, Inc. Executing instruction sequence code blocks by using virtual cores instantiated by partitionable engines
TWI603198B (zh) 2011-05-20 2017-10-21 英特爾股份有限公司 以複數個引擎作資源與互連結構的分散式分配以支援指令序列的執行
EP2710480B1 (de) 2011-05-20 2018-06-20 Intel Corporation Verbindungsstruktur zur unterstützung der ausführung von instruktionssequenzen durch mehrere maschinen
WO2013077875A1 (en) 2011-11-22 2013-05-30 Soft Machines, Inc. An accelerated code optimizer for a multiengine microprocessor
CN108427574B (zh) 2011-11-22 2022-06-07 英特尔公司 微处理器加速的代码优化器
US9400653B2 (en) 2013-03-14 2016-07-26 Samsung Electronics Co., Ltd. System and method to clear and rebuild dependencies
US10140138B2 (en) 2013-03-15 2018-11-27 Intel Corporation Methods, systems and apparatus for supporting wide and efficient front-end operation with guest-architecture emulation
US9569216B2 (en) 2013-03-15 2017-02-14 Soft Machines, Inc. Method for populating a source view data structure by using register template snapshots
US9886279B2 (en) 2013-03-15 2018-02-06 Intel Corporation Method for populating and instruction view data structure by using register template snapshots
EP2972836B1 (de) 2013-03-15 2022-11-09 Intel Corporation Verfahren zur emulierung einer zentralisierten gast-flag-architektur mithilfe einer nativen verteilten flag-architektur
US9891924B2 (en) 2013-03-15 2018-02-13 Intel Corporation Method for implementing a reduced size register view data structure in a microprocessor
WO2014150941A1 (en) * 2013-03-15 2014-09-25 Soft Machines, Inc. A method for executing blocks of instructions using a microprocessor architecture having a register view, source view, instruction view, and a plurality of register templates
US9811342B2 (en) 2013-03-15 2017-11-07 Intel Corporation Method for performing dual dispatch of blocks and half blocks
US9904625B2 (en) 2013-03-15 2018-02-27 Intel Corporation Methods, systems and apparatus for predicting the way of a set associative cache
WO2014150991A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for implementing a reduced size register view data structure in a microprocessor
US10275255B2 (en) 2013-03-15 2019-04-30 Intel Corporation Method for dependency broadcasting through a source organized source view data structure
EP2972845B1 (de) 2013-03-15 2021-07-07 Intel Corporation Verfahren zur ausführung von in blöcken gruppierten befehlen aus mehreren threads
WO2014150806A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for populating register view data structure by using register template snapshots
WO2014150971A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for dependency broadcasting through a block organized source view data structure
JP7428689B2 (ja) 2021-12-17 2024-02-06 華邦電子股▲ふん▼有限公司 メモリシステム

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5546554A (en) * 1994-02-02 1996-08-13 Sun Microsystems, Inc. Apparatus for dynamic register management in a floating point unit
US5649136A (en) * 1995-02-14 1997-07-15 Hal Computer Systems, Inc. Processor structure and method for maintaining and restoring precise state at any instruction boundary
US5710902A (en) * 1995-09-06 1998-01-20 Intel Corporation Instruction dependency chain indentifier
EP1012708B1 (de) * 1997-01-29 2003-05-07 Advanced Micro Devices, Inc. Zeilenorientierter wiedereinordnungsspeicher für superskalaren mikroprozessor
US5987594A (en) * 1997-06-25 1999-11-16 Sun Microsystems, Inc. Apparatus for executing coded dependent instructions having variable latencies
US6098166A (en) * 1998-04-10 2000-08-01 Compaq Computer Corporation Speculative issue of instructions under a load miss shadow
KR100608389B1 (ko) * 1998-08-24 2006-08-09 어드밴스드 마이크로 디바이시즈, 인코포레이티드 저장 어드레스 생성에 대한 적재 블록을 위한 메커니즘

Also Published As

Publication number Publication date
WO2001050253A1 (en) 2001-07-12
KR100747128B1 (ko) 2007-08-09
CN1451115A (zh) 2003-10-22
DE60005860D1 (de) 2003-11-13
EP1244962A1 (de) 2002-10-02
EP1244962B1 (de) 2003-10-08
JP2003519833A (ja) 2003-06-24
CN1210649C (zh) 2005-07-13
KR20020097149A (ko) 2002-12-31

Similar Documents

Publication Publication Date Title
DE60005860T2 (de) Ablaufsteuerung zum ausgeben und wiederausgeben von ketten abhängiger befehle
DE69908193T2 (de) Ausführung von speicher- und ladeoperationen mittels einer linkdatei
DE112007000812B4 (de) Vorrichtung mit einer speichereinheit und drei logiken, verfahren zum durchführen der verfahrensschritte der vorrichtung undsystem mit einem speicher und einem prozessor zur bereitstellung eines effizienten mechanismus‘ für transaktionalspeicherausführungen in out-of-order-prozessoren
DE112010003492B4 (de) Transaktionsspeichersystem mit wirksamerZwischenspeicherunterstützung
DE112004002848B4 (de) Mikroprozessor und Verfahren zum Verifizieren einer Speicherdatei in einem derartigen Mikroprozessor
DE60036016T2 (de) Schnell multithreading für eng gekoppelte multiprozessoren
DE112005003874B3 (de) Transaktionsgestützter Verarbeitungsbetrieb mit gemeinsam genutzten Daten in einer Multiprozessorumgebung
DE68928677T2 (de) Verfahren und digitaler Computer zur Vorverarbeitung mehrerer Befehle
DE69434728T2 (de) Synchronisationssystem und verfahren in einem datencachesystem mit aufgeteiltem pegel
DE69904189T2 (de) Konfigurierter prozessor zur abbildung von logischen registernummern auf physikalische registernummern unter verwendung von virtuellen registernummern
DE60025028T2 (de) Speicherpuffer, der daten, basierend auf index und freiwilliger weisebemusterung überträgt
DE69901910T2 (de) Verfahren und gerät zur rechnung von indirekten verzweigungszieladressen
DE69612991T2 (de) System zur bearbeitung von selbstmodifizierendem kode
DE112006002237B4 (de) Verfahren zur selbstinitiierenden Synchronisierung in einem Computersystem
DE69932066T2 (de) Mechanismus zur "store-to-load forwarding"
DE69131637T2 (de) Registerhaltige Datenbearbeitung in einem Prozessor mit reduziertem Befehlssatz
DE69607760T2 (de) Ungeordnete lade-/speicher-ausführungssteuerung
DE69031991T2 (de) Verfahren und Gerät zur Beschleunigung von Verzweigungsbefehlen
DE69534148T2 (de) Rechnersystem zur Ausführung von Verzweigungsbefehlen
DE69327637T2 (de) Superskalar-Computersystem
DE60003235T2 (de) Cachespeicher zum bereitstellen von partiellen etiketten aus nicht-vorhergesagten wegen um die suche bei wegvorhersagefehlgriffen zu leiten
DE69033331T2 (de) Sprungvorhersage
DE69506623T2 (de) Datenprozessor mit einer Ausführungseinheit zur Durchführung von Ladebefehlen und Verfahren zu seinem Betrieb
DE69629495T2 (de) Vereinheitlichter multifunktions-operationsverteiler für die ungeordnete befehlsexekution in einem superskalaren prozessor
DE69429612T2 (de) Schreibpuffer für einen superskalaren Mikroprozessor mit Pipeline

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