DE69932066T2 - Mechanismus zur "store-to-load forwarding" - Google Patents

Mechanismus zur "store-to-load forwarding" Download PDF

Info

Publication number
DE69932066T2
DE69932066T2 DE69932066T DE69932066T DE69932066T2 DE 69932066 T2 DE69932066 T2 DE 69932066T2 DE 69932066 T DE69932066 T DE 69932066T DE 69932066 T DE69932066 T DE 69932066T DE 69932066 T2 DE69932066 T2 DE 69932066T2
Authority
DE
Germany
Prior art keywords
write
load
byte
address
queue
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
DE69932066T
Other languages
English (en)
Other versions
DE69932066D1 (en
Inventor
B. David Austin WITT
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
GlobalFoundries Inc
Original Assignee
Advanced Micro Devices Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Advanced Micro Devices Inc filed Critical Advanced Micro Devices Inc
Application granted granted Critical
Publication of DE69932066D1 publication Critical patent/DE69932066D1/de
Publication of DE69932066T2 publication Critical patent/DE69932066T2/de
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • G06F9/3834Maintaining memory consistency
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30018Bit or string instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • G06F9/3826Bypassing or forwarding of data results, e.g. locally between pipeline stages or within a pipeline stage

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 der Prozessoren und betrifft insbesondere die Speicherabhängigkeitsprüfung und die Weiterleitung von Schreibdaten für nachfolgende Lade- bzw. Leseoperationen.
  • 2. Hintergrund der Erfindung
  • EP-A-0 651 331 offenbart einen Schreibpuffer für superskalare Mikroprozessoren mit einer „Superpipeline"-Konfiguration. Es werden Maßnahmen zum Erkennen von Datengefährdungen oder Abhängigkeiten, etwa „Lesen-nach-Schreiben" (RAW) Abhängigkeiten vorgesehen, indem die gelesene physikalische Adresse eines Lesebefehls mit jedem der physikalischen Adressenwerte in allen Einträgen des Schreibpuffers verglichen wird. Um Daten einer Schreiboperation an eine nachfolgende Leseoperation weiterzuleiten, muss im Falle einer RAW-Gefährdung, die Bedingung erfüllt werden, dass die Leseoperation nur Bytes umfasst, die eine Teilmenge der Bytes bilden, die von der Schreiboperation zu schreiben sind.
  • US-A-5 606 670 offenbart ein Verfahren und eine Vorrichtung, um einem Schreibpuffer zu signalisieren, gespeicherte Schreibdaten für eine Lade- bzw. Leseoperation in einem Computersystem mit „außer der Reihenfolge"-Ausführung auszugeben. Es ist eine Schreibweiterleitungsschaltung vorgesehen, die bedingt Schreibdaten für eine Speicherleseoperation aus einer variablen Teilmenge der gespeicherten Speicherschreiboperationen, die funktionell abhängig ist zu dem Zeitpunkt, in welchem die Speicherleseoperation ausgegeben wird, weiterleitet, wobei die Ausnahmezustände dieser gespeicherten Speicherschreiboperationen berücksichtigt werden.
  • Superskalare Prozessoren versuchen, ein höheres Leistungsvermögen zu erreichen, indem mehrere Befehle pro Taktzyklus ausgegeben und ausgeführt werden und indem die größtmögliche Taktfrequenz, die mit dem Aufbau verträglich ist, verwendet wird. Im Laufe der Zeit wurde die Anzahl der Befehle, die gleichzeitig von superskalaren Prozessoren ausge geben und/oder ausgeführt werden können, ständig erhöht, um das Leistungsvermögen superskalarer Prozessoren zu verbessern.
  • Wenn jedoch mehr Befehle gleichzeitig ausgeführt werden können, wird es zunehmend wichtig, Lade- bzw. Leseoperationen in rascher Weise zu verarbeiten. Ladeoperationen sind Zugriffe auf einen externen Speicher (im Gegensatz zu internen Registern), in denen die Daten, die an den Speicherstellen abgelegt sind, auf die von der Ladeoperation zugegriffen wird, in den Prozessor übertragen werden (beispielsweise in ein internes Register). Im Gegensatz dazu sind Speicher- bzw. Schreiboperationen Zugriffe auf einen externen Speicher, wobei Daten, die von dem Prozessor erzeugt werden, in der Speicherstelle gespeichert werden, auf die von der Schreib- bzw. Speicheroperation zugegriffen wird. Obwohl Ladeoperationen und Schreiboperationen als Zugriffe auf einen externen Speicher definiert sind, können ein oder mehrere interne Cache-Speicher in dem Prozessor verwendet werden, um die Speicherwartezeit für Zugriffe, die auf die Cache-Speicher abzielen, zu reduzieren.
  • Da Lade- bzw. Leseoperationen Daten von dem Speicher in den Prozessor übertragen, was typischerweise so stattfindet, dass auf den Daten mittels nachfolgender Befehlsoperationen operiert werden kann, ist es wichtig, die Ladeoperationen in rascher Weise zu verarbeiten, um damit die Daten für die nachfolgenden Befehlsoperationen bereitzustellen. Wenn die Daten nicht rasch bereitgestellt werden, werden die nachfolgenden Befehlsoperationen unterbrochen. Wenn andere Befehle für die Disponierung bzw. die Ablauforganisation zur Ausführung nicht verfügbar sind, kann sich der Gesamtbefehlsdurchsatz verringern (und kann folglich das Leistungsverhalten reduzieren). Da superskalare Prozessoren versuchen, eine große Anzahl an Befehlen gleichzeitig auszugeben/auszuführen, können diese Auswirkungen noch stärker hervortreten. Somit wächst auch der Bedarf für ein rasches Verarbeiten von Ladeoperationen.
  • Ferner kann die Zunahme der Zahl an gleichzeitig ausgegebenen/ausgeführten Befehlen in einem Prozessor zu einer mittleren Zunahme der Anzahl an Schreib- bzw. Speicheroperationen führen, die in einer Schreibwarteschlange enthalten sind. Typischerweise werden Schreiboperationen nicht an einen Speicher (Cache-Speicher oder externer Speicher) übergeben, bis nicht bekannt ist, dass diese nicht-spekulativ sind. Beispielsweise werden Schreiboperationen nicht festgelegt, bis sie abgeschlossen sind. Die Schreiboperationen werden in der Schreibwarteschlange angeordnet, wobei eine Schreibadresse enthalten ist, die unter Verwendung der Adressenoperanden des Schreibbefehls und der zu speichernden Daten erzeugt wird, bis die Schreibbefehle in dem Speicher abgelegt werden.
  • Obwohl eine größere Anzahl an Schreibbefehlen in der Schreibwartelange für sich kein Problem hinsichtlich der Leistungsfähigkeit darstellen muss, kann die größere Anzahl an Schreibbefehlen indirekterweise ein Problem für die Leistungsfähigkeit für die rasche Verarbeitung von Ladebefehlen darstellen. Wenn die Anzahl der Schreibbefehle innerhalb der Schreibwarteschlange ansteigt, wächst auch die Wahrscheinlichkeit, dass Daten, auf die von einem Ladebefehl zugegriffen wird, sich in der Schreibwarteschlange befinden (im Gegensatz zu dem Cache/externen Speicher). Ferner kann auch die Wahrscheinlichkeit ansteigen, dass einige Bytes, auf die von dem Ladebefehl zugegriffen wird, von einem vorhergehenden Schreibbefehl in der Schreibwarteschlange modifiziert werden, während andere Bytes, auf die von dem Ladebefehl zugegriffen wird, von einem weiteren vorhergehenden Schreibbefehl in der Schreibwarteschlange modifiziert werden können. Des weiteren steigt auch die Wahrscheinlichkeit an, dass Schreibdaten, die von dem Ladebefehl zu verwenden sind, in der Schreibwarteschlange nicht verfügbar sind. Je häufiger diese Ereignisse auftreten, desto größer wird die Barriere für eine rasche Ladebefehlsverarbeitung.
  • Überblick über die Erfindung
  • Die zuvor dargestellten Probleme werden größtenteils durch eine Lade/Schreibeinheit gelöst, die ausgebildet ist, eine Weiterleitung von Schreibbefehlen zu Ladebefehlen auszuführen. Die Lade/Schreibeinheit durchsucht eine Schreibwarteschlange, die darin enthalten ist, in Bezug auf jedes von dem Ladebefehl abgerufene Byte unabhängig von den anderen Bytes, und bestimmt den jüngsten Schreibbefehl (in der Programmreihenfolge), um dieses Bytes zu aktualisieren. Selbst wenn ein oder mehrere Bytes, auf die von dem Ladebefehl zugegriffen werden, durch einen Schreibbefehl modifiziert werden, während ein oder mehrere andere Bytes, auf die von dem Ladebefehl zugegriffen wird, durch einen weiteren Schreibbefehl modifiziert werden, kann der Weiterleitungsmechanismus daher die Bytes, auf die von dem Ladebefehl bzw. der Ladeoperation zugegriffen wird, zusammenfügen. Vorteilhafterweise können die Ladedaten von der Schreibwarteschlange weitergeleitet werden, wenn die Ladedaten darin gespeichert sind. Insbesondere können die Ladedaten in genauer Weise aus einer beliebigen Anzahl an Schreibbefehlen weitergeleitet werden. Bei spielsweise kann die Weiterleitung aus Null Schreibbefehlen heraus (wenn die Schreibwartschlange leer ist oder keine Treffer für die Schreibwarteschlange für einen speziellen Ladebefehl erkannt werden), aus einem einzelnen Schreibbefehl bzw. einer einzelnen Schreiboperation (wenn der Schreibbefehl der jüngste ist, um jedes Byte zu aktualisieren, auf das von der Ladeoperation zugegriffen wird), oder aus bis zu N Schreiboperationen (wobei N die Anzahl an Bytes ist, auf die von der Ladeoperation zugegriffen wird) heraus erfolgen. Ladeoperationen bzw. Befehle können in rascher Weise verarbeitet werden und somit kann das Gesamtleistungsverhalten eines Prozessors mit der Lade/Schreibeinheit verbessert werden.
  • In einer speziellen Ausführungsform erzeugt die Lade/Schreibeinheit einen Bit-Vektor aus einer vorbestimmten Menge von am wenigsten signifikanten Bits der Adressen von Ladebefehlen und Schreibbefehlen. Der Bit-Vektor enthält ein Bit für jedes Byte in einem Bereich, der durch die Anzahl der am wenigsten signifikanten Bits definiert ist. Das Bit zeigt an, ob das Byte aktualisiert wird (für Schreib-Bit-Vektoren) oder ob darauf zugegriffen wird (für Lade-Bit-Vektor). Die Lade/Schreibeinheit kann dann die Bit-Vektoren untersuchen (und die verbleibenden Bits der Schreib- und Ladeadressen ausschließlich der am wenigsten signifikanten Bits, die zum Erzeugen der Bit-Vektoren verwendet werden, vergleichen), um die jüngste Aktualisierung jedes Bytes zu erkennen. Da die Bit-Vektoren jedes angesprochene/aktualisierte Byte individuell angeben, kann die Verarbeitung zur Erkennung der jüngsten Aktualisierung jedes Bytes unabhängig für jedes Byte (und parallel) ausgeführt werden. Die von den diversen Schreibwarteschlangeneinträgen ausgewählten Bytes werden dann zusammengefügt, um den Satz aus Bytes zu bilden, auf den von dem Ladebefehl bzw. der Ladeoperation zugegriffen wird.
  • Allgemein gesagt, wird ein Verfahren zur Weiterleitung von Schreibdaten, auf die von einem Ladebefehl zugegriffen wird, aus einer Schreibwarteschlange bereitgestellt. Es wird ein erstes Byte, auf das von dem Ladebefehl zugegriffen wird, aus einem ersten Schreibwarteschlangeneintrag innerhalb der Schreibwarteschlange ausgewählt. Ein erster Schreibbefehl bzw. eine erste Schreiboperation entsprechend dem ersten Schreibwarteschlangeneintrag ist der jüngste in der Programmreihenfolge, um das erste Byte zu aktualisieren. Ein zweites Byte, auf das von dem Ladebefehl zugegriffen wird, wird aus einem zweiten Schreibwarteschlangeneintrag innerhalb der Schreibwarteschlange ausgewählt, wobei der zweite Schreibwarteschlangeneintrag unterschiedlich ist zu dem ersten Schreibwarteschlangenein trag. Ein zweiter Schreibbefehl, der dem zweiten Schreibwarteschlangeneintrag entspricht, ist der jüngste in der Programmreihenfolge, um das zweite Byte zu aktualisieren. Das Auswählen des zweiten Bytes ist unabhängig zum Auswählen des ersten Bytes.
  • Es wird eine Lade/Schreibeinheit bereitgestellt. Die Lade/Schreibeinheit umfasst eine Schreibwarteschlange, die ausgebildet ist, Adressen und Daten, die den Schreibbefehlen bzw. Schreiboperationen entsprechen, die noch nicht abgeschlossen sind, in einem Datencache-Speicher abzulegen, und umfasst ferner eine Weiterleitungslogik, die mit der Warteschlange verbunden ist. Die Weiterleitungslogik ist ferner angeschlossen, um eine Ladeadresse zu empfangen und ist ausgebildet, unabhängig für jedes einzelne Byte aus mehreren Bytes, auf die von einem Ladebefehl entsprechend der Ladeadresse zugegriffen wird, zu bestimmen, welche der Schreiboperationen, die in der Schreibwarteschlange gespeichert sind, die jüngste Aktualisierung dieses einzelnen Bytes der mehreren Bytes ist. Mindestens eines der mehreren Bytes ist von einer Schreiboperation in der Schreibwarteschlange verfügbar und mindestens ein weiteres der mehreren Bytes ist von einer weiteren Schreiboperation innerhalb der Schreiboperation verfügbar.
  • Ferner wird ein Prozessor bereitgestellt. Der Prozessor umfasst mindestens einen Ausführungskern mit einer oder mehreren Adressenerzeugungseinheiten. Die Adressenerzeugungseinheiten sind ausgebildet, Lade- bzw. Lese-Adressen entsprechend den Ladeoperationen bzw. Ladebefehlen zu erzeugen, und Schreibadressen entsprechend den Schreiboperationen bzw. Schreibbefehlen zu erzeugen. Der Prozessor umfasst ferner eine Lade/Schreibeinheit, die mit dem Ausführungskern verbunden ist, wobei die Lade/Schreibeinheit eine Schreibwarteschlange aufweist, die ausgebildet ist, die Schreibadressen und entsprechende Schreibdaten für Schreiboperationen zu speichern, die innerhalb des Prozessors anhängig sind. Des weiteren ist die Lade/Schreibeinheit ausgebildet, die Ladeadressen zu empfangen und Schreibdaten entsprechend den Ladeoperationen von der Schreibwarteschlange weiterzuleiten, wenn darin Schreibdaten gespeichert sind, die den Ladeoperationen entsprechen. Die Lade/Schreibeinheit ist ausgebildet, eine spezielle Schreiboperation innerhalb der Schreibwarteschlange auszuwählen, von der Daten unabhängig auf der Grundlage von Byte zu Byte für jedes Byte, auf das von einem speziellen Ladebefehl zugegriffen wird, weiterzuleiten sind.
  • Kurze Beschreibung der Zeichnungen
  • Weitere Aufgaben und Vorteile der Erfindung gehen deutlicher aus der folgenden detaillierten Beschreibung unter Bezugnahme zu den begleitenden Zeichnungen hervor, in denen:
  • 1 eine Blockansicht einer Ausführungsform eines Prozessors ist;
  • 2 eine Blockansicht von Teilen einer Ausführungsform des in 1 gezeigten Prozessors ist, wobei ein Datencache-Speicher, eine Lade/Schreibeinheit und Funktionseinheiten enthalten sind;
  • 3 eine Blockansicht ist, die eine Schreibwarteschlange und eine Weiterleitungslogik gemäß einer Ausführungsform der in 2 gezeigten Lade/Schreibeinheit zeigt;
  • 4 eine Ansicht ist, in der eine beispielhafte Ausführungsform eines Schreibdatenbereichs der Schreibwarteschlange gezeigt ist, die in 3 dargestellt ist;
  • 5 eine Ansicht ist, die eine Ausführungsform der in 3 gezeigten Weiterleitungslogik zeigt;
  • 6 ein Beispiel zum Weiterleiten von Daten aus der in 2 gezeigten Schreibwarteschlange ist;
  • 7 eine Blockansicht eines Computersystems ist, das den in 1 gezeigten Prozessor enthält.
  • Obwohl die Erfindung diversen Modifizierungen und alternativen Formen unterliegen kann, sind dennoch spezielle Ausführungsformen beispielhaft in den Zeichnungen dargestellt und werden im Folgenden detailliert beschrieben. Es sollte jedoch beachtet werden, dass die Zeichnungen und die detaillierte Beschreibung nicht beabsichtigen, die Erfindung auf die spezielle offenbarte Form einzuschränken, sondern die Erfindung soll vielmehr alle Modifizierungen, Äquivalente und Alternativen abdecken, die im Bereich der vorliegenden Erfindung, wie sie durch die angefügten Patentansprüche definiert ist, liegen.
  • Art bzw. Arten zum Ausführen der Erfindung
  • 1 ist eine Blockansicht einer Ausführungsform eines Prozessors. In der Ausführungsform aus 1 umfasst der Prozessor 10 eine Reihenvorhersageeinheit 12, einen Befehlscache-Speicher (I-Cache-Speicher) 14, eine Ausricht- bzw. Justiereinheit 16, eine Verzweigungsgeschichtetabelle 18, einen indirekten Adressencache-Speicher 20, einen Rücksprungstapel 22, eine Decodiereinheit 24, eine Vorhersagenichttreffer-Decodiereinheit 26, eine Mikrocodierungseinheit 28, eine Abbildungs- bzw. Zuordnungseinheit 30, einen Zuordnungs-Silo 32, einen Konfigurationsumbenennungsblock 34, ein Paar aus Befehlswarteschlangen 36a bis 36b, ein Paar aus Registerdateien 38a bis 38b, ein Paar aus Ausführungskernen 40a bis 40b, eine Lade/Schreibeinheit 42, einen Datencache-Speicher (D-Cache-Speicher) 44, eine externe Schnittstelleneinheit 46, eine PC-Silo- und Umleitungseinheit 48 und einen Befehls-TLB (ITB) 50. Die Reihenvorhersageeinheit 12 ist mit dem ITB 50, der Vorhersagenichttrefferdecodiereinheit 26, der Verzweigungsgeschichtetabelle 18, dem indirekten Adressencache-Speicher 20, dem Rücksprungstapel 22, dem PC-Silo- und Umleitungsblock 48, der Justiereinheit 16 und dem I-Cache-Speicher 14 verbunden. Der I-Cache-Speicher 14 ist mit der Justiereinheit 14 verbunden. Die Justiereinheit 16 ist ferner mit der Vorhersagenichttreffer-Decodiereinheit 26 und der Decodiereinheit 24 verbunden. Die Decodiereinheit 24 ist ferner mit der Mikrocodierungseinheit 28 und der Zuordnungseinheit 30 verbunden. Die Zuordnungseinheit 30 ist mit dem Zuordnungs-Silo 32, dem Konfigurationsumbenennungsblock 34, den Befehlswarteschlangen 36A36B, der Lade/Schreibeinheit 42, den Ausführungskernen 40A40B und dem PC-Silo- und Umbenennungsblock 48 verbunden. Die Befehlswarteschlangen 36A36B sind miteinander und mit den entsprechenden Ausführungskernen 40A40B und den Registerdateien 38A38B verbunden. Die Registerdateien 38A38B sind miteinander und mit entsprechenden Ausführungskernen 40A40B verbunden. Die Ausführungskerne 40A40B sind ferner mit der Lade/Schreibeinheit 42, dem Datencache-Speicher 44 und der PC-Silo- und Umleitungseinheit 48 verbunden. Die Lade/Schreibeinheit 42 ist mit der PC-Silo- und Umleitungseinheit 48, dem D-Cache-Speicher 44 und der externen Schnittstelleneinheit 46 verbunden. Der D-Cache-Speicher 44 ist mit den Registerdateien 38 verbunden, und die externe Schnittstelleneinheit 46 ist mit einer externen Schnittstelle 52 verbunden. Elemente, die hierin mit einem Bezugszeichen mit einem nachfolgenden Buchstaben bezeichnet sind, werden gemeinsam durch das Bezugszeichen alleine benannt. Beispielsweise werden die Befehlswarteschlangen 36A36B gemeinsam als Befehlswarteschlangen 36 bezeichnet.
  • Im Allgemeinen stellt die Lade/Schreibeinheit 42 die Weiterleitung von einer Schreibwarteschlange, die darin enthalten ist, für Ladeoperationen bzw. Ladebefehle bereit. Der Weiterleitungsmechanismus durchsucht die Schreibwarteschlange nach jedem Byte des Ladebefehls unabhängig zu den anderen Bytes und bestimmt den jüngsten Schreibbefehl (in der Programmreihenfolge), um das Byte zu aktualisieren. Wenn daher ein oder mehrere Bytes, auf die von der Ladeoperation zugegriffen wird, von einem einzelnen Schreibbefehl modifiziert werden, während ein oder mehrere Bytes, auf die von dem Ladebefehl zugegriffen wird, durch einen weiteren Schreibbefehl modifiziert werden, kann der Weiterleitungsmechanismus die Bytes zusammenfügen, auf die von der Ladeoperation zugegriffen wird. Vorteilhafterweise können die Ladedaten von der Schreibwarteschlange weitergeleitet werden, wenn die Ladedaten darin gespeichert sind. Ladebefehle- bzw. Ladeoperationen können rascher ausgeführt werden, und somit kann das Gesamtleistungsverhalten des Prozesses 10 verbessert werden.
  • Im hierin verwendeten Sinne bezeichnet der Begriff „Programmreihenfolge" die Sequenz bzw. Abfolge aus Befehlen, wie sie in einem gerade ausgeführten Programm spezifiziert ist. Ein spezieller Schreibbefehl ist der jüngste in der Programmreihenfolge, um ein Byte zu aktualisieren, wenn keine anderen Schreibbefehle zwischen (in der Programmreihenfolge) dem speziellen Schreibbefehl und dem Ladebefehl, für den die Weiterleitung versucht wird, vorhanden sind.
  • In einer speziellen Ausführungsform erzeugt die Lade/Schreibeinheit 42 einen Bit-Vektor aus einer vorbestimmten Menge von am wenigsten signifikanten Bits der Adressen der Lade- und Schreibbefehle. Der Bit-Vektor enthält ein Bit für jedes Byte in einem Bereich, der die Anzahl der am wenigsten signifikanten Bits definiert. Das Bit zeigt an, ob das Byte aktualisiert wird (für Schreib-Bit-Vektoren) oder ob auf dieses zugegriffen wird (für Lade-Bit-Vektoren). Beispielsweise kann ein Setzen des Bits anzeigen, dass das Byte aktualisiert/dem Zugriff unterliegt und ein Zurücksetzen des Bits kann anzeigen, dass das Byte nicht aktualisiert wird/kein Zugriff darauf erfolgt. Alternativ kann ein zurückgesetztes Bit anzeigen, dass das Byte aktualisiert wird/ein Zugriff darauf erfolgt, und ein gesetztes Bit kann anzeigen, dass das Byte nicht aktualisiert wird/darauf zugegriffen wird. Die Lade/Schreibeinheit 42 kann die Schreib-Bit-Vektoren erzeugen, wenn die Schreibadressen in der Schreibwarteschlange abgelegt werden, und sie kann die Lade-Bit-Vektoren bei der Bereitstellung der entsprechenden Ladeadressen für den Daten-Cache-Speicher 44 und die Lade/Schreibeinheit 42 erzeugen. Die Lade/Schreibeinheit 42 kann dann die Bit-Vektoren untersuchen (und die verbleibenden Bits der Schreib- und Ladeadressen ausschließlich der am wenigsten signifikanten Bits, die zum Erzeugen der Bit-Vektoren verwendet werden, vergleichen), um die jüngste Aktualisierung jedes Bytes zu erkennen. Da die Bit-Vektoren jedes angesprochene/aktualisierte Byte individuell kennzeichnen, kann die Verarbeitung für das Erkennen der jüngsten Aktualisierung jedes Bytes unabhängig für jedes Byte (und parallel) ausgeführt werden. Die von den diversen Schreibwarteschlangeneinträgen ausgewählten Bytes werden dann zusammengefügt, um den Satz aus Bytes zu bilden, auf den von dem Ladebefehl zugegriffen wird.
  • Es ist zu beachten, dass Ladebefehle und Schreibbefehle im Allgemeinen eine damit verknüpfte Adresse besitzen, die den Speicherplatz innerhalb eines Speichers angibt, auf den von dem Ladebefehl/Schreibbefehl zugegriffen wird oder der aktualisiert wird. Ein oder mehrere Adressenoperanden der Lade/Schreibbefehle wird von dem Prozessor 10 verwendet, um die Adresse zu erzeugen. Adressenoperanden können Registerwerte sowie Verschiebungen, die in dem Befehl codiert sind, enthalten.
  • In der Ausführungsform aus 1 verwendet der Prozessor 10 eine Befehlssatzarchitektur mit variabler Bytelänge und einer komplexen Befehlssatzberechnung (CISC). Beispielsweise kann der Prozessor 10 die x86-Befehlssatzarchitektur verwenden (die auch als IA-32 bezeichnet ist). In anderen Ausführungsformen können andere Befehlssatzarchitekturen verwendet werden, einschließlich einer Befehlssatzarchitektur mit festgelegter Befehlslänge und Befehlssatzarchitekturen mit einer reduzierten Befehlssatzberechnung (RISC). Gewisse Merkmale, die in 1 gezeigt sind, können in derartigen Architekturen weggelassen werden.
  • Die Reihenvorhersageeinheit 12 ist ausgebildet, Abholadressen für den I-Cache-Speicher 14 zu erzeugen, und ist ferner ausgebildet, Information hinsichtlich einer Linie bzw. Reihe aus Befehlsoperationen für die Justiereinheit 16 bereitzustellen. Im Allgemeinen speichert die Reihenvorhersageeinheit 12 Reihen aus den Befehlsoperationen, die zuvor von dem Prozessor 10 spekulativ abgeholt werden, und speichert eine oder mehrerer nächste Abholadressen entsprechend jeder Linie, die beim Abholen der Linie auszuwählen sind. In einer Ausführungsform ist die Reihenvorhersageeinheit 12 ausgebildet, 1K-Einträge zu speichern, wobei jeder eine einzelne Linie aus Befehlsoperationen definiert. Die Reihenvor hersageeinheit 12 kann in beispielsweise 4 Bänke aus 246 Einträgen aufgeteilt werden, um bei Bedarf ein gleichzeitiges Auslesen und Aktualisieren ohne eine duale Port- bzw. Anschlusskonfiguration zu ermöglichen.
  • Die Reihenvorhersageeinheit 12 liefert die nächste Abholadresse an den I-Cache-Speicher 14, um die entsprechenden Befehlsbytes abzuholen. Der I-Cache-Speicher 14 ist ein Hochgeschwindigkeitscache-Speicher zur Speicherung von Instruktions- bzw. Befehlsbytes. Gemäß einer Ausführungsform umfasst der I-Cache-Speicher 14 beispielsweise eine 256 K-Byte-Vier-Wege-teilassoziative Organisation unter Anwendung von 64 Byte-Cache-Zeilen. Jedoch ist eine beliebige andere I-Cache-Struktur möglich. Ferner wird die nächste Abholadresse zurück an die Reihenvorhersageeinheit 12 als ein Eingangssignal geleitet, um Information hinsichtlich der entsprechenden Linien aus Befehlsoperationen abzuholen. Die nächste Abholadresse kann von einer Adresse überschrieben werden, die von dem ITB 50 in Reaktion auf Ausnahmebedingungen bereitgestellt werden, die der PC-Silo- und Umleitungseinheit 48 berichtet werden.
  • Die nächste Abholadresse, die von der Reihenvorhersageeinheit 12 bereitgestellt wird, kann die Adresse benachbart zu dem letzten Befehl innerhalb der Linie sein (wenn die Linie mit einem Nichtverzweigungsbefehl abschließt). Alternativ kann die nächste Abholadresse eine Zieladresse eines Verzweigungsbefehls sein, der die Linie beschließt. In einer noch weiteren Alternative kann die Linie durch einen Rücksprungbefehl abgeschlossen sein, wobei dann die nächste Abholadresse aus dem Rücksprungstapel 22 gewonnen wird.
  • In Reaktion auf eine Abholadresse liefert die Reihenvorhersageeinheit 12 Informationen hinsichtlich einer Linie bzw. Reihe aus Befehlsoperationen an die Justiereinheit 16 beginnend bei der Abholadresse. Die Justiereinheit 16 empfängt die Befehlsbytes, die der Abholadresse entsprechen, von dem I-Cache-Speicher 14 und gruppiert Befehlsbytes in einen Satz aus Ausgabepositionen gemäß der bereitgestellten Information über die Befehlsoperationen. Genauer gesagt, die Reihenvorhersageeinheit 12 liefert einen Verschiebebetrag für jeden Befehl innerhalb der Reihe der Befehlsoperationen und eine Zuordnung der Befehle zu dem Satz aus Befehlsoperationen, die die Linie bzw. Reihe bilden. Ein Befehl kann mehreren Befehlsoperationen entsprechen, und damit kann der Verschiebebetrag, der diesem Befehl entspricht, verwendet werden, um Befehlsbytes für mehrere Ausgabepositionen auszuwählen. Es wird eine Ausgabeposition für jede mögliche Befehlsoperation in der Rei he bereitgestellt. In einer Ausführungsform kann eine Linie oder Reihe aus Befehlsoperationen bis zu acht Befehlsoperationen, die bis zu 6 Befehlen entsprechen, enthalten. Im Allgemeinen bezeichnet im hierin verwendeten Sinne eine Linie bzw. eine Reihe aus Befehlsoperationen eine Gruppe aus Befehlsoperationen, die gleichzeitig an die Decodiereinheit 24 ausgegeben werden. Die Reihe aus Befehlsoperationen wandert als Einheit durch die Pipeline des Mikroprozessors 10 zu den Befehlswarteschlangen 36. Beim Speichern in den Befehlswarteschlangen 36 können die einzelnen Befehlsoperationen in einer beliebigen Reihenfolge ausgeführt werden.
  • Die Ausgabepositionen innerhalb der Decodiereinheit 24 (und die nachfolgenden Pipeline-Stufen bis zu den Befehlswarteschlangen 36) definieren die Programmreihenfolge der Befehlsoperationen innerhalb der Reihe für die Hardware in diesen Pipeline-Stufen. Eine Befehlsoperation, die von der Justiereinheit 16 einer Ausgabeposition zugeordnet ist, verbleibt in dieser Ausgabeposition, bis sie in einer Befehlswarteschlange 36A36B gespeichert wird. Folglich kann eine erste Ausgabeposition als vor einer zweiten Ausgabeposition liegend betrachtet werden, wenn eine Befehlsoperation in der ersten Ausgabeposition vor einer Befehlsoperation liegt, die gleichzeitig in der zweiten Ausgabeposition in der Programmreihenfolge vorliegt. In ähnlicher Weise kann eine erste Ausgabeposition als nachfolgend zu einer zweiten Ausgabeposition betrachtet werden, wenn eine Befehlsoperation in der ersten Ausgabeposition nachfolgend in der Programmreihenfolge ist, die gleichzeitig in der zweiten Ausgabeposition vorliegt. Befehlsoperationen in den Ausgabepositionen können auch als vor oder nach anderen Befehlsoperationen innerhalb der Reihe bezeichnet werden.
  • Im hierin verwendeten Sinne ist eine Befehlsoperation (oder ROP) eine Operation, die in einer Ausführungseinheit innerhalb der Ausführungskerne 40A bis 40B als eine einzelne Einheit ausgeführt werden kann. Einfache Befehle können einer einfachen Befehlsoperation entsprechen, während komplexere Befehle mehreren Befehlsoperationen entsprechen können. Gewisse komplexere Befehle können in der Mikrocodierungseinheit 28 als Mikrocodierungsroutinen eingerichtet sein. Ferner kann in Ausführungsformen, in denen Nicht-CISC-Befehlssätze verwendet werden, eine einzelne Befehlsoperation für jeden Befehl verwendet werden (d. h. in derartigen Ausführungsformen sind ein Befehl und eine Befehlsoperation gleichbedeutend). In einer speziellen Ausführungsform kann eine Linie bzw. Reihe bis zu 8 Befehlsoperationen entsprechend bis zu 6 Befehle aufweisen. Des weiteren kann die spezielle Ausführungsform eine Reihe mit weniger als 6 Befehlen und/oder 8 Be fehlsoperationen beenden, wenn ein Verzweigungsbefehl erkannt wird. Weitere Einschränkungen hinsichtlich der Befehlsoperationen für die Reihe können nach Bedarf eingesetzt werden.
  • Die von der Reihenvorhersageeinheit 12 erzeugte Abholadresse wird zu der Verzweigungsgeschichtetabelle 18, dem indirekten Adressencache-Speicher 20 und dem Rücksprungstapel 22 geleitet. Die Verzweigungsgeschichtstabelle 18 liefert eine Verzweigungsgeschichte für einen bedingten Verzweigungsbefehl, der die durch die nächste Abholadresse gekennzeichnete Reihe abschließen kann. Die Reihenvorhersageeinheit 12 kann die Vorhersage, die von der Verzweigungsgeschichtetabelle 18 bereitgestellt wird, verwenden, um zu bestimmen, ob ein bedingter Verzweigungsbefehl am Ende der Reihe als durchgeführt oder nicht durchgeführt vorhergesagt werden sollte. In einer Ausführungsform kann die Reihenvorhersageeinheit 12 eine Verzweigungsvorhersage speichern, die verwendet werden soll, um das „durchgeführt oder nicht durchgeführt" auszuwählen, und die Verzweigungsgeschichtetabelle 18 wird verwendet, um eine genauere Vorhersage bereitzustellen, die die Vorhersage der Reihenvorhersageeinheit löschen kann und bewirken kann, dass eine andere nächste Abholadresse ausgewählt wird. Der indirekte Adressencache-Speicher 20 wird verwendet, um indirekte Verzweigungszieladressen vorherzusagen, die sich häufig ändern. Die Reihenvorhersageeinheit 12 kann als nächste Abholadresse eine zuvor erzeugte indirekte Zieladresse speichern.
  • Der indirekte Adressencache-Speicher 20 kann die nächste Abholadresse speichern, die von der Reihenvorhersageeinheit 12 bereitgestellt wird, wenn die entsprechende Reihe von einem indirekten Verzweigungsbefehl abgeschlossen wird. Des weiteren kann die auf dem letzten Befehl nachfolgende Adresse innerhalb einer Reihe aus Befehlsoperationen auf den Rücksprungstapel 22 gelegt werden, wenn die Reihe durch einen Unterroutinenaufrufbefehl abgeschlossen wird. Der Rücksprungstapel 22 liefert die an seiner Oberseite gespeicherte Adresse an die Reihenvorhersageeinheit 12 als mögliche nächste Abholadresse für Reihen, die von einem Rücksprungbefehl abgeschlossen werden. Zusätzlich zum Bereitstellen einer nächsten Abholadresse und einer Information über die Befehlsoperation für die oben genannten Blöcke ist die Reihenvorhersageeinheit 12 ausgebildet, Information über die nächste Abholadresse und Befehlsoperationen an die PC-Silo- und Umleitungseinheit 48 zu liefern. Die PC-Silo- und Umleitungseinheit 48 speichert die Abholadresse und die Reiheninformation und ist für das Umleiten von Befehlsabholungen bei Ausnahmebehandlungen sowie bei verspäteten Abschließen von Befehlen verantwortlich. Die PC-Silo- und Umleitungseinheit 48 kann einen Ringpuffer zum Speichern der Abholadresse und der Befehlsoperationsinformation entsprechend den mehreren Reihen aus Befehlsoperationen beinhalten, die in dem Prozessor 10 anhängig sein können. Beim Abschluss einer Reihe aus Befehlen kann die PC-Silo- und Umleitungseinheit 48 die Verzweigungsgeschichtetabelle 18 und den indirekten Adressencache-Speicher 20 gemäß der Ausführung eines bedingten Verzweigungsbefehls bzw. einer indirekten Verzweigung aktualisieren. Beim Verarbeiten eines Sonder- bzw. Ausnahmebefehls kann die PC-Silo- und Umleitungseinheit 48 Einträge aus dem Rücksprungstapel 22 löschen, die nachfolgend zu dem die Ausnahmesituation hervorrufenden Befehl sind. Ferner kann die PC-Silo- und Umleitungseinheit 48 eine Angabe über den die Ausnahme hervorrufenden Befehl an die Zuordnungseinheit 30, die Befehlswarteschlangen 36 und die Lade/Schreibeinheit 42 weiterleiten, so dass diese Einheiten Befehle löschen können, die nachfolgend sind zu dem die Ausnahmesituation hervorrufenden Befehl und den spekulativen Zustand entsprechend wieder herstellen.
  • In einer Ausführungsform ordnet die PC-Silo- und Umleitungseinheit 48 eine Sequenznummer (R#) jeder Befehlsoperation zu, um die Reihenfolge der Befehlsoperationen anzugeben, die in dem Prozessor 10 anhängig sind. Die PC-Silo- und Umleitungseinheit 48 kann deren # jeder möglichen Befehlsoperation innerhalb einer Reihe zuordnen. Wenn eine Reihe weniger als die maximale Anzahl an Befehlsoperationen enthält, werden einige der zugeordneten R# für diese Reihe nicht verwendet. Jedoch kann die PC-Silo- und Umleitungseinheit 48 so ausgebildet sein, dass der nächste Satz aus R# der nächsten Reihe aus Befehlsoperationen zugeordnet wird, und damit verbleiben die zugeordneten aber nicht verwendeten R# unbenutzt, bis die entsprechende Reihe aus Befehlsoperationen abgeschlossen ist. Auf diese Weise wird ein Teil der einer vorgegebenen Reihe zugeordneten R# verwendet, um die Reihe innerhalb des Prozesses 10 zu kennzeichnen. In einer Ausführungsform wird ein Maximum an 8 ROP's einer Reihe zugeordnet. Folglich kann der ersten ROP innerhalb jeder Reihe eine R# zugeordnet werden, die ein Vielfaches von acht ist. Nicht benutzte R# werden entsprechend automatisch übersprungen.
  • Die vorhergehende Erläuterung ist so angegeben, dass die Reihenvorhersageeinheit 12 die nächsten Adressen vorhersagt, und Befehlsoperationsinformationen für Reihen aus Befehlsoperationen bereitstellt. Diese Funktionsweise wird beibehalten, solange jede Abholadresse die Reihenvorhersageeinheit 12 betrifft. Beim Erkennen eines Nichttreffers für die Reihenvorhersageeinheit 12 leitet die Justiereinheit 16 die entsprechenden Befehlsbytes aus dem I-Cache-Speicher 14 an die Vorhersagenichttreffer-Decodiereinheit 26 weiter. Die Vorhersagenichttreffer-Decodiereinheit 26 decodiert die Befehle beginnend bei dem Offset, der von der nichttreffenden Abholadresse angegeben wird, und erzeugt eine Reihe aus Befehlsoperationsinformationen und eine nächste Abholadresse. Die Vorhersagenichttreffer-Decodiereinheit 26 setzt entsprechende Beschränkungen für eine Reihe aus Befehlsoperationen entsprechend dem Aufbau des Prozesses 10 fest (beispielsweise eine maximale Anzahl an Befehlsoperationen, eine maximale Anzahl an Befehlen, Beendigung bei Verzweigungsbefehlen, etc.). Nach dem Ende des Decodierens einer Reihe liefert die Vorhersagenichttreffer-Decodiereinheit 26 die Information an die Reihenvorhersageeinheit 12, um die Information zu speichern. Zu beachten ist, dass die Vorhersagenichttreffer-Decodiereinheit 26 ausgebildet sein kann, um Befehle in ihrer decodierten Form auszugeben. In 1 ist diese Option mit einer gestrichelten Linie dargestellt. Alternativ kann die Vorhersagenichttreffer-Decodiereinheit 26 die Reihe aus Befehlsoperationen decodieren und diese Reihe der Reihenvorhersageeinheit 12 zur Speicherung zuführen. Nachfolgend kann die nichttreffende Abholadresse erneut in der Reihenvorhersageeinheit 12 verwendet werden, und es kann ein Treffer erkannt werden. Des weiteren kann ein Treffer in der Reihenvorhersageeinheit 12 erkannt werden und ein Nichttreffer für den I-Cache-Speicher 14 kann auftreten. Die entsprechenden Befehlsbytes können über die externen Schnittstelleneinheit 46 abgeholt und in dem I-Cache-Speicher 14 gespeichert werden.
  • In einer Ausführungsform verwenden die Reihenvorhersageeinheit 12 und der I-Cache-Speicher 14 eine physikalische Adressierung. Beim Erkennen eines Sonderbefehls bzw. eines Ausnahmebefehls liefert jedoch die PC-Silo- und Umleitungseinheit 48 eine logische (oder virtuelle) Adresse. Folglich werden die umgeleiteten Adressen von dem ITB 50 für die Darstellung für die Reihenvorhersageeinheit 12 übersetzt (und parallel für den I-Cache-Speicher 14 zum Lesen der entsprechenden Befehlsbytes). Zusätzlich bewahrt die PC-Silo- und Umleitungseinheit 48 einen virtuellen vorausschauenden PC-Wert zur Verwendung bei der Berechnungen für einen relativen PC, etwa relative Verzweigungszieladressen. Der virtuelle vorausschauende PC, der jeder Reihe entspricht, wird von dem ITB 50 übersetzt, um zu verifizieren, dass die entsprechende physikalische Adresse mit der physikalische Abholadresse, die von der Reihenvorhersageeinheit 12 erzeugt wird, übereinstimmt. Wenn eine Nichtübereinstimmung auftritt, wird die Reihenvorhersageeinheit 12 mit der korrekten physikalischen Adresse aktualisiert und die korrekten Befehle werden abgeholt. Die PC- Silo- und Umleitungseinheit 48 handhabt ferner Ausnahme- bzw. Sondersituationen, die mit dem Abholen über Schutzgrenzen hinaus, etc. verknüpft sind. Die PC-Silo- und Umleitungseinheit 48 bewahrt ferner einen Abschluss-PC-Wert, der die Adresse der jüngsten abgeschlossenen Befehle angibt. In der vorliegenden Ausführungsform kann die PC-Silo- und Umleitungseinheit 48 eine Reihe aus Befehlsoperationen gleichzeitig abschließen. Folglich kann die PC-Silo- und Umleitungseinheit 48 eine R#, die die Reihe angibt, an die Zuordnungseinheit 30, die Befehlswarteschlange 38A36B und die Lade/Schreibeinheit 42 übermitteln.
  • Die Decodiereinheit 24 ist ausgebildet, Befehlsoperationen von der Justiereinheit 16 in mehreren Ausgabepositionen zu empfangen, wie dies zuvor beschrieben ist. Die Decodiereinheit 24 decodiert parallel die Befehlsbytes, die zu jeder Ausgabeposition gehören (zusammen mit einer Angabe, welche Befehlsoperation entsprechend den Befehlsbytes in einer speziellen Ausgabeposition zu erzeugen ist). Die Decodiereinheit 24 erkennt Quellen- und Zieloperanden für jede Befehlsoperation und erzeugt die Codierung der Befehlsoperation, die von den Ausführungskernen 40A40B verwendet wird. Die Decodiereinheit 24 ist ferner ausgebildet, Mikrocodierungsroutinen von der Mikrocodierungseinheit 28 für Befehle abzuholen, die in einer Mikrocodierung vorliegen.
  • Gemäß einer speziellen Ausführungsform werden die folgenden Befehlsoperationen von dem Prozessor 10 unterstützt: Ganzzahl, Fließkommaaddition (einschließlich Multimedia), Fließkommamultiplikation (einschließlich Multimedia), Verzweigung, Laden bzw. Lesen, Schreibadressenerzeugung und Datenspeicherung. Jede Befehlsoperation kann bis zu zwei Quellenregisteroperanden und einen Zielregisteroperanden verwenden. Gemäß einer speziellen Ausführungsform kann ein einzelner Zielregisteroperand Integer-ROP's zugeordnet werden, um sowohl das Integer- bzw. Ganzzahlergebnis als auch eine Bedingungscodierung- (oder Flaggen-) Aktualisierung zu speichern. Die entsprechenden logischen Register erhalten beide die entsprechenden PR# beim Abschluss der Integeroperation. Gewisse Befehle können zwei Befehlsoperationen der gleichen Art erzeugen, um damit zwei Zielregister zu aktualisieren (beispielsweise POP, die ESP und das spezifizierte Zielregister aktualisiert).
  • Die decodierten Befehlsoperationen und die Quellen- und Zielregisternummern werden der Zuordnungseinheit 30 zugeführt. Die Zuordnungseinheit 30 ist ausgebildet, eine Register umbenennung durch Zuordnung physikalischer Registernummern (PR#) zu jedem Zielregisteroperanden und Quellenregisteroperanden für jede Befehlsoperation durchzuführen. Die physikalischen Registernummern geben Register innerhalb der Registerdatei 38A38B an. Ferner ordnet die Zuordnungseinheit 30 eine Warteschlangennummer (IQ#) jeder Befehlsoperation zu, die die Lage innerhalb der Befehlswarteschlangen 36A36B angibt, die für die Speicherung der Befehlsoperation ausgewählt sind. Die Zuordnungseinheit 30 liefert zusätzlich eine Angabe über die Abhängigkeiten für jede Befehlsoperation, indem die Warteschlangennummern der Befehle bereitgestellt werden, die jede physikalische Registernummer aktualisieren, die dem Quellenoperanden der Befehlsoperation zugeordnet ist. Die Zuordnungseinheit 30 aktualisiert den Zuordnungs-Silo 32 entsprechend den physikalischen Registernummern und dem Befehl, mit Nummern, die jeder Befehlsoperation zugeordnet sind (sowie die entsprechenden logischen Registernummern). Ferner kann der Zuordnungs-Silo 32 ausgebildet sein, einen vorausschauenden Zustand entsprechend den logischen Registern vor der Reihe aus Befehlen und eine R# zu speichern, die die Reihe aus Befehlen in Bezug auf den PC-Silo angibt. Ähnlich zu dem PC-Silo, wie er zuvor beschrieben ist, kann der Zuordnungs-Silo 32 einen Ringpuffer aus Einträgen aufweisen. Jeder Eintrag kann ausgebildet sein, Information entsprechend einer einzelnen Reihe aus Befehlsoperationen zu speichern.
  • Die Zuordnungseinheit 30 und der Zuordnungs-Silo 32 sind ferner ausgebildet, eine Angabe über den Abschluss aus dem PC-Silo 48 zu empfangen. Beim Abschließen einer Reihe aus Befehlsoperationen überträgt der Zuordnungs-PC-Silo 32 die physikalischen Zielregisternummern, die der Reihe zugeordnet sind, und entsprechende logische Registernummern zu dem Konfigurationsumbenennungsblock 34 zur Speicherung. Der Konfigurationsumbenennungsblock 34 speichert eine physikalische Registernummer entsprechend jedem logischen Register, die den festgeschriebenen Registerzustand für jedes logische Register repräsentiert. Die Nummern der physikalischen Register, die von dem Konfigurationsumbenennungsblock 34 beim Aktualisieren der entsprechenden logischen Register durch eine neue physikalische Registernummer verschoben werden, werden wieder der freien Liste aus physikalischen Registernummern für die Reservierung für nachfolgende Befehle zurückgegeben. In einer Ausführungsform werden vor dem Zurückgeben einer Nummer eines physikalischen Registers an die freie Liste, die Nummern der physikalischen Register mit den verbleibenden Nummern der physikalischen Registern innerhalb des Konfigurationsumbenennungsblocks 34 verglichen. Wenn eine physikalische Registernummern weiterhin innerhalb des Konfigurationsumbenennungsblocks 34 nach dem Verschieben repräsentiert ist, wird die physikalische Registernummer nicht der freien Liste hinzugefügt. Eine derartige Ausführungsform kann in Fällen eingesetzt werden, in denen die gleiche physikalische Registernummer verwendet wird, um mehr als ein Ergebnis eines Befehls zu speichern. Beispielsweise kann in einer Ausführungsform mit dem x86-Befehlssatz eine ausreichende Menge an physikalischen Registern bereitgestellt werden, um Fließkommaoperanden zu speichern. Auf diese Weise kann ein beliebiges physikalisches Register verwendet werden, um eine beliebige Art eines Operanden zu speichern. Jedoch nutzen Ganzzahloperanden und Bedingungscodierungsoperanden den Platz innerhalb eines gegebenen physikalischen Registers nicht vollständig. In einer derartigen Ausführungsform kann der Prozessor 10 ein einzelnes physikalisches Register benutzen, um sowohl ein Ganzzahlergebnis als auch ein Bedingungscodierungsergebnis eines Befehls zu speichern. Ein nachfolgender Abschluss eines Befehls, der das Bedingungscodierungsergebnis, das den physikalischen Registern entspricht, überschreibt, kann das gleiche Ganzzahlregister nicht aktualisieren, und damit ist das physikalische Register beim Festschreiben eins neuen Bedingungscodierungsergebnisses nicht frei. In ähnlicher Weise kann bei einem nachfolgenden Abschluss eines Befehls, der das Ganzzahlregister, aktualisiert, das Bedingungscodierungsregister nicht aktualisiert werden, und somit ist das physikalische Register beim Abspeichern des neuen Ganzzahlergebnisses nicht frei.
  • Ferner sind die Zuordnungseinheit 30 und der Zuordnungs-Silo 32 ausgebildet, Ausnahme- bzw. Sondersituationsangaben von dem PC-Silo 48 zu empfangen. Reihen aus Befehlsoperationen, die auf die Reihe folgen, die die Ausnahmesituation hervorrufende Befehlsoperation enthält, werden als unzulässig innerhalb des Zuordnungs-Silos 32 markiert. Die physikalischen Registernummern, die den nachfolgenden Reihen aus Befehlsoperationen entsprechen, werden bei der Auswahl der entsprechenden Reihen für den Abschluss freigegeben (und der Konfigurationsumbenennungsblock 34 wird nicht mit den als ungültig erklärten Zielregistern aktualisiert). Des weiteren wird der vorausschauende Registerzustand, der von der Zuordnungseinheit 30 bewahrt wird, wieder zu dem vorausschauenden Registerzustand gemacht, der dem die Ausnahme hervorrufenden Befehl entspricht.
  • Die Reihe aus Befehlsoperationen, die Nummern der physikalischen Quellenregister, die Nummern der Quellenwarteschlange und die Nummern der physikalischen Zielregister werden in den Befehlswarteschlangen 36A, 36B entsprechend den Warteschlangennum mern, die von der Zuordnungseinheit 30 vergeben werden, gespeichert. Gemäß einer Ausführungsform sind die Befehlswarteschlangen 36A, 36B symmetrisch und können beliebige Befehle speichern. Ferner können Abhängigkeiten für eine spezielle Befehlsoperation in Bezug auf andere Befehlsoperationen auftreten, die in einer der Befehlswarteschlangen gespeichert sind. Die Zuordnungseinheit 30 kann beispielsweise eine Reihe aus Befehlsoperationen in einer der Befehlswarteschlangen 36A36B speichern und eine nachfolgende Reihe aus Befehlsoperationen in der anderen Befehlswarteschlange 36A36B speichern. Eine Befehlsoperation bleibt in der Befehlswarteschlange 36A36B zumindest bis die Befehlsoperation für die Ausführung vorgesehen ist. In einer Ausführungsform bleiben die Befehlsoperationen in den Befehlswarteschlangen 36A36B, bis diese abgeschlossen sind.
  • Die Befehlswarteschlangen 36A36B prüfen beim Einteilen einer speziellen Befehlsoperation für die Ausführung, bei welchem Taktzyklus diese spezielle Befehlsoperation die Registerdateien 38A, 38B aktualisiert. Unterschiedliche Ausführungseinheiten innerhalb der Ausführungskerne 40A40B können unterschiedliche Anzahlen an Pipeline-Stufen (und damit unterschiedliche Wartezeiten) verwenden. Ferner können gewisse Befehle eine größere Wartezeit bzw. Verarbeitungszeit innerhalb einer Pipeline erfahren als andere Befehle. Folglich wird eine Abwärtszählung erzeugt, die die Wartezeit für die spezielle Befehlsoperation misst (gemäß der Anzahl der Taktzyklen). Die Befehlswarteschlangen 36A36B warten, bis die spezifizierte Anzahl an Taktzyklen verstrichen ist (bis die Aktualisierung vor oder gleichzeitig mit dem Auslesen der Registerdatei durch die abhängigen Befehlsoperationen geschieht), und gibt dann an, dass die Befehlsoperationen, die von dieser speziellen Befehlsoperation abhängen, disponiert bzw. zur Abarbeitung freigegeben werden. Beispielsweise werden in einer speziellen Ausführungsform abhängige Befehlsoperationen zwei Taktzyklen vor der Befehlsoperation disponiert, von der diese durch Aktualisierung der Registerdateien 38A38B abhängen. In anderen Ausführungsformen können abhängige Befehlsoperationen mit einer unterschiedlichen Anzahl an Taktzyklen vor oder nachfolgend zu der Befehlsoperation disponiert werden, von der sie für das Abschließen und Aktualisieren von den Registerdateien 38A38B abhängen. Jede Befehlswarteschlange 36A36B bewahrt die Abwärtszählung für die Befehlsoperationen innerhalb dieser Warteschlange und ermöglichen es intern, dass abhängige Befehlsoperationen nach Ablauf der Abwärtszählung disponiert werden. Ferner liefert die Befehlswarteschlange Angaben für die andere Befehlswarteschlange nach Ablauf der Abwärtszählung. Daraufhin kann die andere Befehlswarteschlange abhängige Befehlsoperationen disponieren. Diese verzögerte Übertragung von Abschlüssen von Befehlsoperationen zu der anderen Befehlswarteschlange ermöglicht es den Registerdateien 38A38B, Ergebnisse, die von einem der Ausführungskerne 40A40B bereitgestellt werden, zur anderen Registerdatei weiterzuleiten. Jede der Registerdateien 38A38B richtet den Satz aus physikalischen Registern ein, die von dem Prozessor 10 verwendet werden, und wird durch einen der Ausführungskerne 40A40B aktualisiert. Die Aktualisierungen werden dann zu der anderen Registerdatei weitergegeben. Zu beachten ist, dass die Befehlswartenschlangen 36A36B einen Befehl disponieren können, sobald dessen Abhängigkeiten erfüllt sind (d. h. außer der Reihenfolge in Bezug auf seine Reihenfolge innerhalb der Warteschlange).
  • Befehlsoperationen, die von der Befehlswarteschlange 36A disponiert werden, lesen Quellenoperanden gemäß der Nummer der physikalischen Quellenregister aus der Registerdatei 38A aus und werden dann dem Ausführungskern 40A für die Ausführung zugeführt. Der Ausführungskern 40A führt die Befehlsoperation aus und aktualisiert das physikalische Register, das dem Ziel in der Registerdatei 38A zugeordnet ist. Einige Befehlsoperationen besitzen keine Zielregister, und der Ausführungskern 40A wird in diesem Falle kein physikalisches Zielregister aktualisieren. Ferner berichtet der Ausführungskern 40A die R# der Befehlsoperation und die Ausnahmeinformation hinsichtlich der Befehlsoperation (falls vorhanden) an die PC-Silo- und Umleitungseinheit 48. Die Befehlswarteschlange 38B, die Registerdatei 38B und der Ausführungskern 40B können in ähnlicher Weise betrieben werden.
  • In einer Ausführungsform sind der Ausführungskern 40A und der Ausführungskern 40B symmetrisch. Jeder Ausführungskern 40 kann beispielsweise eine Fließkommaaddiereinheit, ein Fließkommamultipliziereinheit, zwei Integer- bzw. Ganzzahleinheiten, eine Verzweigungseinheit, eine Ladeadressenerzeugungseinheit, eine Schreibaddressenerzeugungseinheit und eine Schreibdateneinheit aufweisen. Es sind jedoch auch andere Konfigurationen für die Ausführungseinheiten möglich.
  • Zu den Befehlsoperationen, die keine Zielregister besitzen, gehören das Erzeugen von Schreibadressen, Schreibdatenoperationen und Verzweigungsoperationen. Die Schreibadressen/Schreibdatenoperationen liefern Ergebnisse an die Lade/Schreibeinheit 42. Die Lade/Schreibeinheit 42 stellt eine Schnittstelle für den D-Cache-Speicher 44 bereit, um Speicherdatenoperationen auszuführen. Die Ausführungskerne 40A40B führen Lade- bzw. Lese-ROP's und Schreibadressen-ROP's aus, um die Lade- und Schreibadressen auf der Grundlage der Adressenoperanden der Befehle zu erzeugen. Insbesondere können die Ladeadressen und Schreibadressen den D-Cache-Speicher 44 beim Erzeugen durch Ausführungskerne 40A40B (direkt über Verbindungen zwischen den Ausführungskernen 40A40B und dem D-Cache-Speicher 44) zugeführt werden. Ladeadressen, die den D-Cache-Speicher 44 ansprechen, führen dazu, dass Daten von dem D-Cache-Speicher 44 zu den Registerdateien 38 geleitet werden. Andererseits wird den treffenden Schreibadressen ein Schreibwarteschlangeneintrag zugeordnet. Danach werden die Schreibdaten von einer Schreibdatenbefehlsoperation (die verwendet wird, um die Schreibdaten von den Registerdateien 38A38B zu der Lade/Schreibeinheit 42 zu leiten) bereitgestellt. Folglich kann eine Schreiboperation eine Schreibadressenbefehlsoperation und eine Schreibdatenbefehlsoperation in dieser Ausführungsform umfassen. Anders ausgedrückt, die Schreibadressenbefehlsoperation und die entsprechende Schreibdatenbefehlsoperation werden aus dem gleichen Befehl abgeleitet. Die Schreiboperation kann ein Befehl sein, oder kann ein impliziter Bereich eines weiteren Befehls mit einem Speicherzieloperanden sein. Beim Abschluss des Schreibbefehls werden die Daten in dem D-Cache-Speicher 44 gespeichert. Ferner kann die Lade-Schreib-Einheit 42 einen Lade/Schreibpuffer zur Speicherung von Lade/Schreibadressen beinhalten, die nicht den D-Cache-Speicher 44 betreffen, für nachfolgende Cache-Speicherfüllereignisse (über die externe Schnittstelle 46), und für das erneute Versuchen, die betreffenden Lade/Schreiboperationen auszuführen. Die Lade/Schreibeinheit 42 ist ferner ausgebildet, Lade/Schreibspeicherabhängigkeiten zu handhaben.
  • 2 ist eine Blockansicht einer Ausführungsform von Bereichen des Prozessors 10. In der Ausführungsform aus 2 sind eine Schreibadressenerzeugungseinheit AGU 40AA, eine Lade-AGU 40AB und eine Schreibdateneinheit 40AC gezeigt. Die Schreib-AGU 40AA, die Lade-AGU 40AB und die Schreibdateneinheit 40AC sind in dem Ausführungskern 40A (in 1 gezeigt) enthalten. Der Ausführungskern 40B ist in einer Ausführungsform in ähnlicher Weise aufgebaut. Alternativ kann in dem Ausführungskern 40B eine oder mehrere der Ausführungseinheiten, die in 2 gezeigt sind, weggelassen werden. Des weiteren ist in 2 ein Schreibtranslationspuffer (TB) 40AD und ein Lade-TB 40AE dargestellt, die in dem Ausführungskern 40A enthalten sein können. Der D-Cache-Speicher 44 und die Lade/Schreibeinheit 42 sind so dargestellt, dass die Lade/Schreibeinheit 42 eine Lade/Schreibwarteschlange 60, eine Weiterleitungslogik 62 und eine Schreibwarteschlange 64 enthält. Ferner ist eine Rotation/Multiplexer-Schaltung 66 gezeigt. Die Schreib-AGU 40AA ist mit dem Schreib-TB 40AD verbunden, der wiederum mit dem D-Cache-Speicher 44, der Lade/Schreibwarteschlange 60 und der Schreibwarteschlange 64 verbunden ist. Die Lade-AGU 40AB ist mit dem Lade-TB 40AE verbunden, der wiederum mit dem Daten-Cache-Speicher 44, der Lade/Schreibwarteschlange 60 und der Weiterleitungslogik 62 verbunden ist. Die Schreibdateneinheit 40AC ist mit der Schreibwarteschlange 64 verbunden. Der PC-Silo 48 ist mit der Schreibwarteschlange 64 verbunden. Die Schreibwarteschlange 64, die Weiterleitungslogik 62 und der Daten-Cache-Speicher 44 sind mit der Rotation/Multiplexer-Schaltung 66 verbunden, die ihrerseits mit den Registerdateien 38A/38B verbunden ist. Der Daten-Cache-Speicher 44 ist mit der Lade/Schreibwarteschlange 60 und der Schreibwarteschlange 64 verbunden. Der Ausführungskern 40B ist mit dem Daten-Cache-Speicher 44, der Lade/Schreib-Warteschlange 60, der Weiterleitungslogik 62 und der Schreibwarteschlange 64 in der vorliegenden Ausführungsform verbunden.
  • Die Schreib-AGU 40AA führt Schreibadressen-ROP's aus und erzeugt eine Schreibadresse entsprechend dem Schreibbefehl, aus dem die Schreibadressen-ROP abgeleitet wurde. Die erzeugte Adresse ist eine virtuelle Adresse (VA), die zu dem Schreib-TB 40AD zur Übersetzung in eine physikalische Adresse (PA) übermittelt wird. Es kann ein beliebiger geeigneter Übersetzungsmechanismus eingesetzt werden, und der Übersetzungsmechanismus ist im Allgemeinen entsprechend der Befehlssatzarchitektur definiert, die in dem Prozessor 10 eingesetzt wird. Beispielsweise wird in einer Ausführungsform des Prozesses 10 die x86-Befehlfssatzarchitektur verwendet. In einer derartigen Ausführungsform ist die virtuelle Adresse eine logische Adresse, die zunächst über einen Segmentierungsmechanismus in eine lineare Adresse übersetzt wird. Es kann ein Festadressierungsmodus eingesetzt werden, in welchem die logischen und linearen Adressen gleich sind. Die lineare Adresse wird über einen Seitenbildungsmechanismus in eine physikalische Adresse übersetzt. Der Schreib-TB 40AD speichert jüngst verwendete Übersetzungen für ein rasches Ausführen der Übersetzung. Wenn eine Übersetzung für eine vorgegebene Adresse nicht in dem Schreib-TB 40AD gefunden wird, dann wird eine erneute Einladesequenz für den Translationspuffer ausgeführt, um die in dem externen Speicher für die entsprechende Übersetzung gespeicherte Übersetzungsinformation zu finden.
  • Die Schreibwarteschlange 64 speichert Adressen und Daten entsprechend den Schreiboperationen, die in dem Prozessor 10 anhängig sind (d. h. die ausgegebenen und noch nicht abgeschlossen sind). Insbesondere hält in der vorliegenden Ausführungsform die Schreibwarteschlange 64 Schreiboperationen, die ausgeführt wurden aber noch nicht abgeschlossen sind. Folglich ist die Schreibwarteschlange 64 ausgebildet, eine physikalische Schreibadresse und eine entsprechende R# aus dem Schreib-TB 40AD zu erhalten. Beim Empfang einer Adresse reserviert die Schreibwarteschlange 64 einen Schreibwarteschlangeneintrag für die Schreiboperation und legt die Schreibadresse darin ab. Die Schreibwarteschlange 64 kann in ähnlicher Weise physikalische Schreibadressen von einer Schreib-AGU-Schreib-TB-Struktur innerhalb des Ausführungskern 40B ebenso erhalten.
  • Danach wird die Schreibdaten-ROP, die der Schreiboperation entspricht, von der Schreibdateneinheit 40AC ausgeführt. Die Schreibdateneinheit 40AC sendet die Schreibdaten zusammen mit der der Schreibdaten-ROP zugeordneten R# zu der Schreibwarteschlange 64. Die Schreibwarteschlange 64 speichert die Schreibdaten in dem Schreibwarteschlangeneintrag, der dem entsprechenden Schreibbefehl zugeordnet ist. Die Schreibwarteschlange 64 kann in ähnlicher Weise Schreibdaten von einer Schreibdateneinheit innerhalb der Ausführungseinheit 40B ebenso erhalten.
  • Ähnlich zu der Funktionsweise der Schreib-AGU 40AA und des Schreib-TB 40AD erzeugen die Lade-AGU 40AB und der Lade-TB 40AE eine physikalische Lade- bzw. Leseadresse, die einer Lade-ROP entspricht, und überträgt die physikalische Ladeadresse an die Weiterleitungslogik 62. Die Weiterleitungslogik 62 bestimmt, ob von der Ladeoperation angesprochene Bytes in der Schreibwarteschlange 64 gespeichert sind oder nicht. Unter unabhängiger Behandlung jedes angesprochenen Bytes durchsucht die Weiterleitungslogik 62 die Schreibwarteschlange 64 in Bezug auf die jüngste Schreiboperation in dieses Byte. Wenn eine Aktualisierung erkannt wird, wird das Byte aus der Schreibwarteschlange 64 ausgewählt und der Rotations/Multiplexerschaltung 66 zugeführt. Auf diese Weise wird jedes Byte der jüngsten Aktualisierung des Bytes innerhalb der Schreibwarteschlange 64 bereitgestellt (wenn eine Aktualisierung für dieses Bytes erkannt wird). Jedes Byte kann von einer separaten Schreiboperation bereitgestellt werden, oder zwei oder mehr Bytes können von der gleichen Schreiboperation bereitgestellt werden, während andere Bytes von unterschiedlichen Schreiboperationen geliefert werden, oder die gleiche Schreiboperation kann alle angesprochenen Bytes bereitstellen, je nach Situation. Folglich werden die angesprochenen Bytes, die aus der Schreibwarteschlange 64 ausgewählt werden, in effizienter Wiese zusammengefügt, um die Lade- bzw. Lesedaten an der Rotations/Multiplexerschaltung 66 bereitzustellen.
  • Die Weiterleitungslogik 62 liefert ferner Auswahl- und Rotationssteuersignale an die Rotations/Multiplexerschaltung 66. Wenn die Weiterleitungslogik 62 erkennt, dass eine Lade-ROP weitergeleitete Daten aus einem Schreibbefehl in der Schreibwarteschlange 64 erhält, dann signalisiert die Weiterleitungslogik 62 der Rotations/Multiplexerschaltung 66, die von der Schreibwarteschlange 64 bereitgestellten Daten auszuwählen. Ferner liegen von der Schreibwarteschlange 64 bereitgestellten Daten in der Speicherreihenfolge vor (d. h. die Bytes werden in der Schreibwarteschlange 64 an Byte-Positionen gespeichert, die entsprechend der Adresse der entsprechenden Schreiboperationen ausgerichtet sind). Die Daten können rotiert werden, so dass sie in geeigneter Weise für die Speicherung in den Registerdateien 38A38B angeordnet sind. Die Weiterleitungslogik 62 stellt auch diese Signalisierung bereit. Wenn schließlich die Weiterleitungslogik 62 erkennt, dass eine Lade-ROP keine weitergeleiteten Daten aus der Schreibwarteschlange 64 empfängt, dann signalisiert die Weiterteitungslogik 62 der Rotations/Multiplexerschaltung 66, den Ausgang des Daten-Cache-Speichers 44 auszuwählen.
  • Zu beachten ist, dass eine Lade-ROP vor der Schreibdaten-ROP ausgeführt werden kann, die die Schreibdaten bereitstellt, auf die von der Lade-ROP zugegriffen wird. In einem derartigen Falle kann die Schreibwarteschlange 64 die R# der Schreibdaten-ROP anstelle der angesprochenen Bytes bereitstellen. Die Lade-ROP kann erneut für die Ausführung disponiert werden, nachdem die Schreibdaten-ROP disponiert wurde. Die Lade/Schreibeinheit 42 kann den Befehlswarteschlangen 36A36B signalisieren, wenn Schreibdaten für das Weiterleiten zu der Ladeoperation noch nicht verfügbar sind, um damit das erneute Disponieren der Ladeoperation zu ermöglichen (sowie von nachfolgend disponierten ROP's). Des weiteren kann die Zuordnungseinheit 30 ausgebildet sein, Fälle von Leseoperationen, die Schreiboperationen betreffen, in denen die Schreibdaten noch nicht verfügbar waren, vorherzusagen. Die R# der Schreibdaten-ROP kann dem PC-Silo 48 zugeführt werden, der Information hinsichtlich des Schreibbefehls der Zuordnungseinheit 30 zur Verwendung in der Vorhersage nachfolgender Leseoperationen, die Schreiboperationen treffen (wobei die Schreibdaten nicht verfügbar sind) zuführt.
  • Zusätzlich zu dem Bereitstellen von Lade- und Schreibadressen für die Schreibwarteschlange 64 gemäß dem obigen Ablauf werden Lade- und Schreibadressen dem Daten-Cache-Speicher 44 zugeführt, um zu bestimmen, ob ein Treffer in dem Daten-Cache- Speicher 44 erkannt wird. Bei Lade-ROP's werden bei einem Treffer in dem Daten-Cache-Speicher 44 Daten aus dem Daten-Cache-Speicher 44 an die Registerdateien 38A, 38B weitergeleitet. Wenn eine Lade-ROP den Daten-Cache-Speicher 44 nicht betrifft, dann wird die Lade-ROP in die Lade-Schreibwarteschlange 60 für ein nachfolgendes erneutes Versuchen des Ausführens gespeichert (und schließlich für die Übertragung zu der externen Schnittstelleneinheit 46, um die fehlende Cache-Zeile aus dem Speicher abzuholen, wenn die Lade-ROP den Anfang der Lade/Schreibwarteschlange 60 erreicht und nicht mehr spekulativ ist, ohne ein Treffer in dem D-Cache-Speicher 44 durch die Cache-Speicherauffüllung aus einer früheren Speicheroperation zu werden). Beim erneuten Ausleseversuch des Daten-Cache-Speicher 44 wird die Lade-ROP auch zu der Weiterleitungslogik 62 übermittelt, um zu bestimmen, ob Schreibdaten in der Schreibwarteschlange 64 für die Lade-ROP weiterzuleiten sind. Angaben über Treffer/Nichttreffer für jede Lade-ROP, die an dem Daten-Cache-Speicher 44 versucht wurde (von dem Ausführungskant 40A oder 40B), werden zu der Lade/Schreib-Warteschlange 60 übermittelt, um zu bestimmen, ob die Lade-ROP darin gespeichert ist. Für Schreibadressen-ROP's bestimmt die Angabe über den Treffer/Nichttreffer, ob die Schreiboperation einem Eintrag in der Lade/Schreibwarteschlange 60 zugeordnet ist oder nicht (ähnlich zu dem Lade-ROP's). Jedoch werden Schreibadressen-ROP's in der Schreibwarteschlange 64 unabhängig von ihrem Status hinsichtlich des Treffens/Nichttreffens zugeordnet. Zu beachten ist, dass, obwohl eine beliebige Anzahl an Einträgen verwendet werden, die Lade/Schreibwarteschlange 60 128 Einträge und die Schreibwarteschlange 64 64 Einträge in einer beispielhaften Ausführungsform aufweisen können.
  • Der PC-Silo 48 liefert Abschlusssteuersignale an die Schreibwarteschlange 64. Wie zuvor erläutert ist, schließt in der vorliegenden Ausführungsform der PC-Silo 48 eine Reihe aus ROP's gleichzeitig ab. Der PC-Silo 48 kann die R# der ROP's, die gerade abgeschlossen werden, an die Schreibwarteschlange 64 liefern, so dass die Schreibwarteschlange 64 Daten auswählt, die in dem Daten-Cache-Speicher 44 abgelegt werden. Wenn eine spezielle Schreiboperation nicht unmittelbar gespeichert werden kann (beispielsweise wenn die Schreiboperation nicht den Daten-Cache-Speicher 44 betrifft oder wenn mehr als eine Schreiboperation gleichzeitig abgeschlossen wird), kann die Schreibwarteschlange 64 den Abschluss des speziellen Schreibbefehls aufzeichnen und die Schreibdaten nachfolgend abspeichern.
  • Es ist zu beachten, dass, obwohl die in 2 (und in anderen nachfolgenden Figuren) gezeigte Ausführungsform physikalische Adressen zum Ausführen der Weiterleitung vom Schreibbefehl zum Ladebefehl nutzt, andere Ausführungsformen ebenso möglich sind, in denen virtuelle Adressen, logische Adressen oder lineare Adressen verwendet werden. Des weiteren ist zu beachten, dass, obwohl in der obigen Ausführungsform der Ausführungskern 40B so beschrieben ist, dass er die gleichen Lade/Schreibausführungsressourcen wie der Ausführungskern 40A aufweist (d. h., dass der Ausführungskern 40A und 40B symmetrisch sind im Hinblick auf die Ausführungsressourcen), können jedoch in anderen Ausführungsformen asymmetrische Ausführungsressourcen nach Bedarf verwendet werden.
  • 3 ist eine Blockansicht, die eine Ausführungsform der Schreibwarteschlange 64 und der Weiterleitungslogik 62 zeigt. Wie in 3 gezeigt ist, enthält die Schreibwarteschlange 64 eine Schreibadressenwarteschlange 64A, eine Schreibbit-Vektorwarteschlange 64B und eine Schreibdatenwarteschlange 64C. Ferner sind zwei Bitvektorgeneratoren 70A und 70B in 3 gezeigt. 3 zeigt das Weiterleiten von Daten für eine Lese- bzw. Ladeadresse, um die zeichnerische Darstellung zu vereinfachen. Wie in 2 gezeigt ist, kann die Schreibwarteschlange 64 ausgebildet sein, um Ladedaten für bis zu drei Lade-ROP's bereitzustellen (jeweils Daten von dem Ausführungskern 40A und 40B und für Ladeoperationen, die aus der Lade/Schreib-Warteschlange erneut untersucht werden). Ein ähnlicher Aufbau kann auch für die anderen Lade-ROP's verwendet werden. Für die vorliegende Erläuterung wird die Lese- bzw. Ladeinformation so beschrieben, dass diese von dem Lade-TB 40AE und die Schreibadressinformation von dem Schreib-TB 40AD erhalten wird. Die Schreibdateninformationen werden so beschrieben, dass diese von der Schreibdateneinheit 40AC erhalten werden. Es können jedoch auch andere Quellen für jede Art von Information vorgesehen werden, einschließlich jener Quellen, die in 2 gezeigt sind. Ferner können die Adressen direkt aus den AGU's in Ausführungsformen erhalten werden, in denen virtuelle Adressen für die Weiterleitung verwendet werden.
  • Der Bit-Vektorgenerator 70A ist angeschlossen, um eine vorbestimmte Anzahl von am wenigsten signifikanten Bits der Ladeadresse und eine Angabe über die Größe des Ladebefehls (d. h. die Anzahl der Bytes, auf die zugegriffen wird, beginnend von der Ladeadresse) von dem Lade-TB 40AE zu erhalten, und ist ferner mit der Weiterleitungslogik 62 verbunden. In ähnlicher Weise ist der Bit-Vektorgenerator 70B angeschlossen, um die vorbestimmte Anzahl der wenigsten signifikanten Bits der Schreibadresse und die Größe des Schreibbefehls aus dem Schreib-TB 40AD zu erhalten, und ist ferner mit der Schreib-Bit-Vektorwarteschlange 40B verbunden. Zu beachten ist, dass in Ausführungsformen, in denen Ladeoperationen lediglich eine einzelne Operation sind, die Information über die Größe weggelassen werden kann. Die Schreib-Bit-Vektorwarteschlange 64B und die Schreibadressenwarteschlange 64A sind mit der Weiterleitungslogik 62 verbunden, die wiederum mit einem Satz aus Multiplexern (MUX) 72A bis 72H und mit der Rotations/Multiplexer-Schaltung 66 verbunden ist. Die Multiplexer 72A bis 72H sind mit der Rotations/Multiplexer-Schaltung 66 und der Schreibdatenwarteschlange 64C verbunden. Die Schreibwarten-schlange 64C ist angeschlossen, um Schreibdaten und eine entsprechende R# aus der Schreibdateneinheit 70AC zu erhalten, und ist ferner mit dem PC-Silo 48 verbunden, um eine abgeschlossene R# zu empfangen. Des weiteren ist die Schreibdatenwartenschlange 64C angeschlossen, um eine R# entsprechend einer Schreibadressen-ROP aus dem Schreib-TB 40AD zu empfangen. Die Schreibadressenwarteschlange 64A ist angeschlossen, um eine Schreibadresse von dem Schreib-TB 40AD und eine Ladeadresse von dem Lade-TB 40AE zu erhalten. Insbesondere ist die Schreibadressenwarteschlange 64A angeschlossen, die Adressen ohne die wenigsten signifikanten Bits, die von dem Bit-Vektor 70A erhalten werden, zu empfangen.
  • Die vorbestimmte Anzahl der wenigsten signifikanten Bits, die von den Bit-Vektorgeneratoren 70A und 70B erhalten werden, definieren einen Bereich an Bytes, innerhalb welchem die Bytes liegen, auf die zugegriffen wird oder die aktualisiert werden. Anders ausgedrückt, die Adresse ohne die wenigsten signifikanten Bits ist die gleiche für einen Satz an Bytes innerhalb des Bytebereichs. Die Bit-Vektorgeneratoren 70A bis 70B erzeugen Bit-Vektoren mit einem Bit für jedes Byte innerhalb dieses Bereichs. Das Bit wird gesetzt, wenn das Byte in Reaktion auf die entsprechende Ladeoperation oder Schreiboperation angesprochen/aktualisiert wird, und wird zurückgesetzt, wenn das Byte in Reaktion auf die entsprechende Ladeoperation oder Schreiboperation nicht angesprochen/aktualisiert wird. Die Schreibbit-Vektoren, die von dem Bit-Vektorgenerator 70B erzeugt werden, werden in der Schreib-Bit-Vektorwarteschlange 64B gespeichert. Folglich werden Schreib-Bit-Vektoren, für jede in der Schreibwarteschlange 64 repräsentierte Schreibadresse erzeugt. Lade-Bit-Vektoren, die von dem Bit-Vektor-Generator 70A erzeugt wurden, werden der Weiterleitungslogik 62 zur Verfügung gestellt. Die verbleibenden Bits der Ladeadresse (ausschließlich der Bits, die zur Bildung des Lade-Bit-Vektors verwendet werden) werden der Schreibadressenwarteschlange 64A zur Verfügung gestellt. Die Ladeadresse wird mit der Schreibadresse, die in der Schreibadressenwarteschlange 64A gespeichert ist, verglichen. Die Schreibadressenwarteschlange 64A kann beispielsweise einen inhaltsadressierbaren Speicher (CAM) für Ladeadressen gegenüber den darin gespeicherten Schreibadressen sein. Es sind jedoch auch andere alternative Konfigurationen möglich. Jeder Eintrag innerhalb der Schreibadressenwarteschlange 64A, der eine Schreibadresse enthält, die mit der gelieferten Leseadresse übereinstimmt, setzt ein „Treffer"-Signal für die Weiterleitungslogik 62.
  • Zusätzlich zu dem Ladebit-Vektor und den Treffersignalen aus der Schreibadressenwarteschlange 64A erhält die Weiterleitungslogik 62 die Schreib-Bit-Vektoren, die den Schreiboperationen innerhalb der Schreibwarteschlange 64 entsprechen. Die Weiterleitungslogik 62 behandelt jedes Byte unabhängig, untersucht das entsprechende Bit in dem Lade-Bit-Vektor, um zu bestimmen, ob auf das Byte zugegriffen wird und untersucht das entsprechende Bit in jedem Schreib-Bit-Vektor, um zu bestimmen, ob das Byte von dem entsprechenden Schreibbefehl aktualisiert wird. Jeder Schreibwarteschlangeneintrag, der angibt, dass ein Byte aktualisiert wird (über das entsprechende Bit in dem Schreibbit-Vektor und ein entsprechendes gesetztes Treffersignal aus der Schreibadressenwarteschlange 64A) ist Teil einer „Wähle 1"-Schaltung in der Weiterleitungslogik 62, die die jüngste Aktualisierung an dem Bit gemäß der Programmreihenfolge der Schreiboperationen in der Schreibwarteschlange auswählt. Das ausgewählte Byte wird aus der Schreibdatenwarteschlange 64C über Auswahlsignale ausgewählt, die von der Weiterleitungslogik 62 für die Multiiplexer 72 gesetzt werden. Jeder Multiplexer 72A bis 72H entspricht einem anderen Byte innerhalb der Schreibwarteschlange 64. Beispielsweise wählt der Multiplexer 72A das Byte Null der Ladedaten von den Byte-Null-Positionen jedes Eintrags für erhalb der Schreibwarteschlange 64 unter der Steuerung der Weiterleitungslogik 62 aus. In ähnlicher Weise wählt der Multiplexer 72H das Byte 7 der Ladedaten aus den Byte-7-Positionen jedes Eintrags innerhalb der Schreibwarteschlange 64 unter Steuerung der Weiterleitungslogik 62 aus. Andere Bytepositionen werden von anderen Multiplexern ausgewählt (die der Einfachheit halber in 3 nicht gezeigt sind). Des weiteren bestimmt die Weiterleitungslogik 62, ob Ladedatenbytes von der Schreibwarteschlange 64 bereitgestellt werden, und stellt Auswahlsteuersignale für die Rotations/Multiplexer-Schaltung 66 bereit, und die von den Multiplexern 72 gelieferten Datenbytes als Eingänge für die Rotations/Multiplexer-Schaltung 66 auszuwählen.
  • Rotationssteuersignale werden ebenso von der Weiterleitungslogik 62 bereitgestellt. Datenbytes werden in der Schreibwarteschlange 64C in der Speicherreihenfolge abgelegt (d. h. an Byte-Positionen in dem Warteschlangeneintrag, die den Speicherpositionen innerhalb eines Speicherblocks entsprechen, der zu einer Grenze ausgerichtet ist, die die Größe eines Warteschlangeneintrags ist, etwa eine 8-Byte-Grenze für die 8-Byte-Datenwartenschlangeneinträge in der vorliegenden beispielhaften Ausführungsform). Obwohl die Ladeoperationen und die Schreiboperationen in den Speicher eine beliebige Ausrichtung in Bezug auf die Speicherplätze besitzen können, sind die Bytepositionen in dem Register festgelegt. Folglich kann die Rotation der Datenbytes, die von dem Multiplexern 72 geliefert wird, durchgeführt werden, um die Bytes entsprechend der Registerdatei auszurichten.
  • Im Allgemeinen wird ein Eintrag in der Schreibwarteschlange 64 beim Ausführen einer Schreibadressen-ROP entsprechend einem Schreibbefehl reserviert. Der Eintrag umfasst einen Eintrag in der Schreibadressenwarteschlange 64A, einen Eintrag in der Schreibbit-Vektorwarteschlange 64B und einen Eintrag in der Schreibdatenwarteschlange 64C. Beispielsweise können die Einträge 76A, 76B und 76C, die in 3 gezeigt sind, einen Schreibwarteschlangeneintrag in der Schreibwarteschlange 64 bilden. Die Schreibadresse (ohne die wenigsten signifikanten Bits, die zum Erzeugen des Bit-Vektors verwendet werden) wird in der Schreibadressenwarteschlange 64A und der entsprechende Schreibbit-Vektor wird in der Schreibbit-Vektorwarteschlange 64B bei Erhalt der Schreibadresse aus dem Schreib-TB 40AD gespeichert. Ferner wird die R# entsprechend der entsprechenden Schreibdaten-ROP in der Schreibdatenwarteschlange 64C beim Erhalt der Schreibadresse aus dem Schreib-TB 40AD gespeichert. In der vorliegenden Ausführungsform liegt die Schreibdaten-ROP vor der Schreibadressen-ROP in der gleichen Reihe aus ROP's. Folglich ist die entsprechende R# die R# der Schreibädressen-ROP, die um 1 vermindert ist.
  • Nachfolgend wird die entsprechende Schreibdaten-ROP von der Schreibdateneinheit 40AC ausgeführt, und die R# und die Schreibdaten werden der Schreibdatenwarteschlange 64C bereitgestellt. Die R#, die von der Schreibdateneinheit 40AC geliefert wird, wird mit dem R#, die in der Schreibdatenwarteschlange 64C gespeichert sind, verglichen, um den Eintrag zu bestimmen, in welchem die Schreibdaten gespeichert werden sollten. Die Schreibdatenwarteschlange 64C kann beispielsweise als ein CAM für die R# der Schreibdatenoperation in einer Ausführungsform eingerichtet sein. Es sind auch alternative Konfigurationen möglich. Der Eintrag, für den eine Übereinstimmung der R# erkannt wird, zeichnet die Daten auf. Die Schreibdatenwarteschlange 64C kann zusätzlich ein Gültigkeitsbit enthalten, das angibt, dass die Daten gültig sind. Eine CAM-Übereinstimmung kann verwendet werden, um das Gültigkeitsbit zu setzen. Wenn die Daten nicht gültig sind, kann die Schreibdatenwarteschlange 64C die R# der Schreibdatenoperation als ein Eingang für die Multiplexer 72A72H anstelle der Daten bereitstellen. Alternativ kann die R# in jeder Bytestelle innerhalb der Schreibdatenwarteschlange 64C gespeichert werden, um automatisch die R# bereitzustellen, wenn die Daten noch nicht gültig sind.
  • In der vorliegenden beispielhaften Ausführungsform enthalten die Bit-Vektoren 16 Bits, während die Schreibdatenwartenschlange bis zu 8 Bytes an Schreibdaten pro Eintrag speichert. Die vorliegende anschauliche Ausführungsform unterstützt damit bis zu 8 Bytes an Schreibdaten pro Schreiboperation. Jedoch werden 16 Bits des Bit-Vektors unterstützt, um eine eindeutige Verarbeitung von nicht ausgerichteten 8 Byte-Werten zu ermöglichen. Anders ausgedrückt, bei einem Bit-Vektor mit 16 Bits ist eine beliebige nicht ausgerichtete 8 Byte-Größe als eine Maske aus Nullen und Einsen darstellbar. Wenn der Bit-Vektor beispielsweise 8 Bits aufweist, dann ist der gesamte Bit-Vektor lauter Einsen für eine 8 Byte-Schreiboperation, unabhängig von der Ausrichtung der Schreiboperation (und damit unabhängig davon, ob die Bytes, auf die von der Ladeoperation zugegriffen wird, von der Schreiboperation aktualisiert werden oder nicht). Im Allgemeinen kann es wünschenswert sein, Bit-Vektoren aus 2n Bits zu verwenden, wobei n die größte Anzahl an Bytes ist, die von einem einzelnen Schreibbefehl aktualisierbar sind.
  • Es ist zu beachten, dass gewisse Bits innerhalb des Bit-Vektors gegenseitig ausschließlich sind, da Bit-Vektoren mit 16 Bits in der vorliegenden beispielhaften Ausführungsform eingerichtet sind und 8 Byte-Lade- und Schreiboperationen die größten Lade- und Schreiboperationen sind, die in der vorliegenden beispielhaften Ausführungsform unterstützt werden. Beispielsweise sind das Bit, das dem Byte Null innerhalb des Bereiches entspricht, der durch den Bit-Vektor angegeben ist, und das Bit entsprechend dem Byte 8 innerhalb des Bereiches gegenseitig ausschließend. Wenn das Byte Null als angesprochen/aktualisiert angegeben ist, dann kann das Byte 8 nicht als angesprochen/aktualisiert angegeben sein. In ähnlicher Weise sind Byte 1 und Byte 9 gegenseitig ausschließend, etc. Ferner wird ein Byte, das entweder dem Byte 0 oder dem Byte 8 innerhalb des Bit-Vektors entspricht, in der Byte-Null-Position innerhalb der Schreibdatenwarteschlange 64C gespeichert. Ferner kann eine Auswahllogik die Ergebnisse der Untersuchung der Bit-Vektor-Positionen 0 und 8 logisch Oder-verknüpft, um Auswahlsteuersignale für das Byte 0 der Schreibdatenwarteschlange 64C zu erzeugen. Jedoch werden vor der Oder-Verknüpfung der Ergebnisse die Bits unabhängig untersucht, um zu bestimmen, ob das entsprechende Byte sowohl von der Ladeoperation angesprochen als auch von der entsprechenden Schreiboperation aktualisiert wird.
  • Der PC-Silo 48 liefert eine Abschluss-R#, die eine Reihe aus ROP's kennzeichnet, die abgeschlossen werden. Die Schreibdatenwarteschlange 64C vergleicht die Abschluss-R# mit den R#, die in der Schreibdatenwarteschlange 64C gespeichert sind. Die Schreibdatenwarteschlange 64C kann als ein CAM in Bezug auf die Abschluss-R# gemäß einer beispielhaften Ausführungsform betrieben werden. Alternative Konfigurationen sind möglich. Der CAM kann bezüglich der Abschluss-R# lediglich mit dem Teil der R#, der die Reihe kennzeichnet, mit der R# vergleichen, die von dem PC-Silo 48 geliefert wird. Beliebige erkannte Übereinstimmungen zeigen an, dass die Schreiboperation in diesem Warteschlangeneintrag abgeschlossen ist und dem D-Cache-Speicher 44 übergeben werden kann. Die Schreibwarteschlange 64 kann ein Bit in jedem Eintrag enthalten, das beispielsweise angibt, ob die Schreiboperation an den D-Cache-Speicher 44 zur festen Speicherung übergeben werden kann oder nicht. Das Bit kann gemäß dem Vergleich der Abschluss-R# gesetzt werden. Sobald eine Schreiboperation als abgeschlossen gekennzeichnet ist, kann die Schreiboperation aus der Schreibwarteschlange 64 durch Übertragung an den D-Cache-Speicher 44 ausgewählt werden. Nach Aktualisierung des D-Cache-Speichers 44 kann die Schreiboperation aus der Schreibwarteschlange 64 gelöscht werden.
  • Es ist zu beachten, dass, obwohl gewisse Bit-Bereiche und Größen anderer Merkmale in der Beschreibung und in 3 dargestellt sind, diese Bereiche und Größen lediglich beispielhaft sind und entsprechend den Entwurfserfordernissen variiert werden können. Ferner ist zu beachten, dass als Alternative zur Verwendung der Bit-Vektorgeneratoren 70A70B die Adressenerzeugungseinheiten ausgebildet sein können, die entsprechenden Bit-Vektoren zu erzeugen. Es ist ferner zu beachten, dass eine Alternative für die CAM-Strukturen, die zuvor dargestellt sind, darin besteht, die Warteschlangeneintröge in Registern mit separaten Komparatorschaltungen einzurichten, die damit verbunden sind, um den Vergleich auszuführen. Es sind auch andere Alternativen möglich.
  • 4 zeigt eine beispielhafte Ausführungsform einer Schreibdatenwarteschlange 64C, die keine separaten Multiplexerschaltungen 72A bis 72H, wie sie in 3 gezeigt sind, benötigt. Andere alternative Konfigurationen einschließlich der Konfiguration in 3 sind ebenfalls möglich. Wie in 4 gezeigt ist, ist die Schreibwarteschlange 64C mit einem Satz aus Lade- bzw. Lesebytebussen verbunden, die in 3 als Ausgänge jedes Multiplexer 72A bis 72H gezeigt wurden. Das Byte 0 jedes Schreibwarteschlangeneintrags ist mit dem Byte 0 des Ladebusses verbunden. In ähnlicher Weise ist das Byte 1 jedes Schreibwarteschlangeneintrags mit dem Byte 1 des Lade-Busses verbunden, etc. Die Auswahlsignale, die zuvor den Multiplexern 72A bis 72H zugeführt wurden, werden stattdessen als Freigabe- bzw. Aktivierungssignale jedem der Warteschlangeneinträge zugeführt. Es ist ein Freigabesignal für jedes Byte innerhalb des Warteschlangeneintrags vorgesehen. Wenn das Freigabesignal für dieses Byte gesetzt ist, steuert der Warteschlangeneintrag dieses Byte auf dem angeschlossen Bus an. Wenn das Freigabesignal nicht gesetzt ist, steuert der Warteschlangeneintrag das Byte auf dem angeschlossenen Bus nicht an. Diese Konfiguration wird typischerweise als eine „verdrahtete Oder"-Konfiguration bezeichnet.
  • 5 ist eine Blockansicht eines Teils einer Ausführungsform der Weiterleitungslogik 62. In der Ausführungsform aus 5 umfasst die Weiterleitungslogik 62 mehrere Wähle 1"-Schaltungen (eine für jedes Byte, das zu einer Ladeoperation weitergeleitet werden, beispielsweise 8 „Wähle 1"-Schaltungen in einer speziellen Ausführungsform). Beispielsweise sind die „Wähle 1"-Schaltungen 80A und 80B in 5 gezeigt. Des weiteren ist eine kombinatorische Logik in der Weiterleitungslogik 62 vorgesehen, um die Bit-Vektoren aus dem Bit-Vektorgenerator 60A und der Schreibbit-Vektorwarteschlange 64B sowie die Treffersignale für die Schreibadressenwarteschlange 64A zu verarbeiten. Beispielsweise ist eine kombinatorische Logik 82A vorgesehen, um die Bytes 0 und 8 für den Schreibwarteschlangeneintrag 0 zu verarbeiten. In ähnlicher Weise ist die kombinatorische Logik 82B vorgesehen, um die Bytes 0 und 8 für den Schreibwarteschlangeneintrag 1 zu verarbeiten, während die kombinatorischen Logik 82C und 82D die Bytes 1 und 9 für die Schreibwarteschlangeneinträge 1 und 0 verarbeiten. Andere kombinatorische Logikeinheiten (nicht gezeigt) verarbeiten andere Bytes und/oder andere Schreibwarteschlangeneinträge.
  • Die „Wähle 1"-Schaltung 80A wählt das Byte 0 aus der Schreibdatenwarteschlange 64C aus. Die „Wähle 1"-Schaltung 80B nimmt das Byte aus der Schreibdatenwarteschlange 64C. Andere „Wähle 1"-Schaltungen (in 5 nicht gezeigt) werden verwendet, um die Bytes 2 bis 7 auszuwählen. Die „Wähle 1"-Schaltungen 80A und 80B sind jeweils angeschlossen, um Eingangssignale von einer kombinatorischen Logik zu empfangen, die für jeden Schreibwarteschlangeneintrag bestimmt, ob der Eintrag eine Schreiboperation speichert, die ein spezielles Byte aktualisiert, auf das von dem Lese- bzw. Ladeprozess zugegriffen wird. Beispielsweise bestimmt die kombinatorische Logik 82A, ob die Schreiboperation in dem Schreibwarteschlangeneintrag 0 das Byte 0 oder das Byte 8 (SBV0(0) und SBV0(8)) innerhalb des Bytebereichs, der durch den Bit-Vektor definiert wird, aktualisiert, und ob das entsprechende Byte 0 oder Byte 8 von der Ladeoperation (LBV(0) und LVB(8)) angesprochen wird. Die entsprechenden Ergebnisse des Bestimmens werden logisch Oder-verknüpft (da Zugriffsbytes 0 und 8 in der beispielhaften Ausführungsform sich gegenseitig ausschließen) und werden mit dem Treffersignal für die Schreibadressenwarteschlange 64 für den Eintrag 0 (ST0 Hit) kombiniert. Wenn auf das Byte von der Ladeoperation zugegriffen wird und von der Schreiboperation aktualisiert wird (wie dies durch die entsprechenden Bit-Vektoren angegeben ist) und die Ladeadresse und Schreibadresse (ausschließlich der Bits, die zum Erzeugen der Bit-Vektoren verwendet werden) übereinstimmen, setzt die kombinatorische Logik ein Signal für die „Wähle 1"-Schaltungen und der Schreibwarteschlangeneintrag nimmt an der Auswahl teil. Ansonsten wird das Signal für die „Wähle 1"-Logikschaltung zurückgesetzt und der Schreibwarteschlangeneintrag nimmt an den Auswahlereignissen nicht teil.
  • In ähnlicher Weise analysiert die kombinatorische Logik 82B den Schreibwarteschlangen-Bit-Vektor aus dem Schreibwarteschlangeneintrag 1 (SBV1 in 5), den Ladebit-Vektor und das Schreibadressenwarteschlangentreffersignal für den Schreibwarteschlangeneintrag 1 (ST1 Hit in 5), um ein Signal zu setzen/zurückzusetzen. Die kombinatorische Logik 82C und 82D untersuchen die Bits aus den Schreib- und Ladebit-Vektoren für die Bytes 1 und 9 (der Schreibwarteschlangeneintrag 0 für die kombinatorische Logik 82C und der Schreibwarteschlangeneintrag 1 für die kombinatorische Logik 82D). Die "Wähle 1"-Schaltungen wählen unabhängig voneinander die jüngste Aktualisierung des Bytes aus, dem diejenige „Wähle 1"-Schaltung zugeordnet ist. Beispielsweise wählt die „Wähle 1"-Schaltung 80A das Byte 0 aus der Schreibdatenwarteschlange 64C in Reaktion auf Bit-Vektor-Angaben für die Bytes 0 und 8 und die Schreibadressenwarteschlangen-Treffersignale aus. Unabhängig davon wählt die "Wähle 1"-Schaltung 80B das Byte 1 aus der Schreibdatenwarteschlange 64C. Folglich liefert die „Wähle 1"-Schaltung 80A Auswahlsignale an den Multiplexer 72A (3) oder die Freigabesignale für das Byte 0 jedes War teschlangeneintrags (4). In ähnlicher Weise kann die "Wähle 1"-Schaltung 80B Auswahlsignale für einen Multiplexer bereitstellen, der angeschlossen ist, um das Byte 1 der Ladedaten „3) zu liefern, oder kann die Freigabesignale für das Byte 1 jedes Warteschlangeneintrags bereitstellen (4). In einer Ausführungsform ist die Schreibwarteschlange 64 als eine Ringpufferanordnung mit „zuerst hinein, zuerst heraus" (FIFO) ausgebildet, mit einem Kopfzeiger, der den ältesten Eintrag in der Warteschlange kennzeichnet, und einem Endbereichszeiger, der den jüngsten Eintrag angibt. Anstatt die Einträge zu verschieben, wenn Einträge gelöscht werden, können der Kopfzeiger und der Endbereichszeiger heraufgesetzt und herabgesetzt werden, um Schreiboperationen in der Warteschlange hinzuzufügen oder daraus zu löschen. Die „Wähle 1"-Schaltungen 80A80B erhalten die Kopfzeiger und Endbereichszeiger für eine derartige Ausführungsform und Untersuchen die Eingangssignale von der kombinatorischen Logik, etwa der kombinatorischen Logik 82A, 82D ausgehend von dem Signal, das dem Eintrag entspricht, der von dem Endbereichszeiger angegeben wird, bis zu dem Signal, das dem Eintrag entspricht, der von dem Kopfzeiger angegeben ist. Für eine derartige Ausführungsform können Schreiboperationen in der Schreibwarteschlange 64 in Programmreihenfolge zugewiesen werden. Als Alternative können R# verwendet werden um eine Reihenfolge der Schreiboperationen bei Bedarf in der Schreibwarteschlange zu bestimmen.
  • Es ist zu beachten, dass obwohl die kombinatorischen Logiken 82A82D in 5 gezeigt sind, um damit die logische Bestimmung von Schreibwarteschlangeneinträgen zur Teilnahme bei der Auswahl von Bytes aus der Schreibwarteschlange darzustellen, auch andere geeignete Logikkonfigurationen verwendet werden können. Der Inhalt der Eingangssignale (gesetzt/nicht gesetzt) kann geändert werden, um eine alternative kombinatorische Logik bereitzustellen, und es können logische äquivalente Sätze an Logikgattern eingesetzt werden, falls dies gewünscht ist. Ferner ist zu beachten, dass ein zusätzlicher Logikblock (in 5 nicht gezeigt) verwendet werden kann, um die Auswahl- und Rotationssteuersignale für die Rotations/Multiplexer-Schaltung 66 zu erzeugen. Die Auswahlsteuersignale können auf der Auswahl von Bytes aus der Schreibwarteschlange 64 für die Weiterleitung beruhen, und die Rotationssteuersignale können auf den wenigsten signifikanten Ladeadressenbits (die die Zuordnung von Bytes innerhalb des Speichers und damit innerhalb der Schreibdatenwarteschlange 64C definieren und der Größe der Ladeoperation, die definiert, wie viele Bytes in das Zielregister übertragen werden) beruhen.
  • In 6 ist ein Beispiel des Weiterleitens eines beispielhaften Satzes aus Schreibwarteschlangeneinträgen gezeigt. In 6 ist die Schreibadressenwarteschlange 64A, die Schreibbit-Vektorwarteschlange 64B und die Schreibdatenwarteschlange 64C gezeigt. Der Einfachheit sind in diesem Beispiel 5 Einträge dargestellt. Jedoch kann die Schreibwarteschlange eine beliebige geeignete Anzahl an Einträgen enthalten. Beispielsweise kann die Schreibwarteschlange 64 in einer beispielhaften Ausführungsform 64 Einträge aufweisen. Die Schreibadressenwarteschlange 64A enthält Einträge 90A bis 90E. Die Schreibbitvektorwarteschlange 64B enthält entsprechende Einträge 92A bis 92E und die Schreibdatenwarteschlange 64C enthält entsprechende Einträge 92A bis 94E. Anders ausgedrückt, die Einträge 90A, 92A und 94A bilden eine ersten Eintrag in der Schreibwarteschlange 64. In ähnlicher Weise bilden die Einträge 90B, 92B und 94B einen zweiten Eintrag in der Schreibwarteschlange 64, etc. In dem Beispiel gibt der Kopfzeiger der Schreibwarteschlange an, dass der Eintrag mit den Einträgen 90A, 92A und 94A der älteste Eintrag in der Warteschlange ist, und der Endbereichszeiger der Schreibwarteschlange gibt an, dass der Eintrag mit den Einträgen 90E, 92E und 94E der jüngste Eintrag ist. Die verbleibenden Einträge liegen zwischen dem ältesten und dem jüngsten Eintrag.
  • Die Schreibadressenwartenschlangeneinträge 90A, 90B, 90D und 90E enthalten jeweils eine spezielle Adresse A1. Der Schreibadressenwarteschlangeneintrag 90C enthält eine andere Adresse A2. Die Bit-Vektoren, die jeder Schreiboperation entsprechen, sind in den Schreibbit-Vektorwarteschlangeneinträgen 92A bis 92E gezeigt, und die Schreibdaten sind in den Schreibdatenwarteschlangeneinträgen 94A bis 94E gezeigt.
  • In dem Beispiel wird eine Ladeoperation mit der Adresse A1 ausgeführt, und in 6 ist ein Ladebit-Vektor gezeigt. Gemäß dem Ladebit-Vektor wird auf 4 Bytes zugegriffen (Bytes 11, 10, 9 und 8). Durch Untersuchung der Bit-Vektoren in der Schreibbit-Vektorwarteschlange 64B können die folgenden Aktualisierungen der Bytes, auf die zugegriffen wird, erkannt werden: Bit-Vektoren in den Einträgen 92B und 92E geben Aktualisierungen des Bytes 11 an; Bit-Vektoren in den Einträgen 92B und 92D geben Aktualisierungen an dem Byte 10 an; und Bit-Vektoren in den Einträgen 92B und 92C geben Aktualisierungen an den Bytes 9 und 8 an. Jedoch enthält die Adresse in dem Schreibadressenwarteschlangeneintrag 90C (der dem Bit-Vektorwartenschlangeneintrag 92C entspricht) die Adresse A2. Da der Lese- bzw. Ladevorgang auf die Adresse A1 zugreift, wird die Schreiboperation in den Einträgen 90C, 92C und 94C für die weitere Berücksichtigung bei der Weiterleitung gestrichen. Folg lich suchen die „Wähle 1"-Schaltungen die jüngste Aktualisierung: Byte 11 aus den Einträgen entsprechend zu 92B und 92E; Byte 10 aus den Einträgen 92B und 92D; und Bytes 9 und 8 aus dem Eintrag 92B.
  • Wie zuvor erläutert ist, gibt der Endbereichzeiger den Eintrag an, der der Eintrag ist, der 90E entspricht, während der Kopfzeiger den ältesten Eintrag angibt, der der Eintrag entsprechend 90A ist. Folglich wird Byte 11 aus dem Eintrag 94E; Byte 10 aus dem Eintrag 94D und die Bytes 9 und 8 aus dem Eintrag 94D ausgewählt. Byte 11 ist die Byteposition 3 innerhalb der Schreibdatenwarteschlange und in ähnlicher Weise ist Byte 10 die Byteposition 2, Byte 9 ist die Byteposition 1 und Byte 8 ist die Byteposition 0. Daher sind die weitergeleiteten Daten für den Ladebefehl 76DD DE F0 (Hexadezimal). Der Wert 76 wird aus der Byteposition 3 aus dem Eintrag 94E gewonnen. Der Wert DD wird aus der Byteposition 2 des Eintrags 94D gewonnen. Die Werte DE und F0 werden aus den Bytepositionen 1 und 0 des Eintrags 94B gewonnen. Diese Werte sind in dem Beispiel in der Schreibdatenwarteschlange 64C fettgedruckt.
  • Wie das Beispiel zeigt, können die Bytes, auf die von der Ladeoperation zugegriffen wird, zusammengefügt werden, selbst wenn die Bytes aus zwei oder mehr unterschiedlichen Schreiboperationen hervorgehen. Vorteilhafterweise können Ladedaten in genauer Weise aus einer beliebigen Anzahl an Schreiboperationen weitergeleitet werden. Beispielsweise kann das Weiterleiten aus 0 Schreiboperationen (wenn die Schreibwarteschlange 64 leer ist oder wenn keine Treffer in der Schreibwarteschlange 64 für eine spezielle Leseoperation erkannt werden), aus einer Schreiboperation (wenn die Schreiboperation die jüngste Operation ist, die jedes Bytes aktualisiert, auf das von der Leseoperation zugegriffen wird), oder aus bis zu n Schreiboperationen (wobei n die Anzahl an Bytes ist, auf die von der Ladeoperation zugegriffen wird) erfolgen.
  • 7 ist eine Blockansicht einer Ausführungsform eines Computersystem 200 mit einem Prozessor 10, der mit einer Reihe von Systemkomponenten über einer Busbrücke 202 verbunden ist. Andere Ausführungsformen sind möglich und sind hierin berücksichtigt. In dem dargestellten System ist ein Hauptspeicher 204 mit der Busbrücke 202 über einen Speicherbus 206 verbunden, und eine Graphiksteuerung 208 ist mit der Busbrücke 202 über einen AGP-Bus 210 verbunden. Schließlich sind mehrere PCI-Geräte 212A bis 212B mit der Busbrücke 202 über einen PCI-Bus 214 verbunden. Eine sekundäre Busbrücke 216 kann ferner vorgesehen sein, um eine elektrische Schnittstelle mit einem oder mehreren EISA oder ISA-Geräten 218 über einen EISA/ISA-Bus 220 zu bilden. Der Prozessor 10 ist mit der Busbrücke 202 über eine externe Schnittstelle 52 verbunden.
  • Die Busbrücke 202 bildet eine Schnittstelle zwischen dem Prozessor 10, dem Hauptspeicher 204, der Graphiksteuerung 208 und den Geräten, die an den PCI-Bus 214 angeschlossen sind. Wenn eine Operation aus einem der Geräte empfangen wird, die mit der Busbrücke 202 verbunden sind, erkennt die Busbrücke 202 das Ziel der Operation (beispielsweise ein spezielles Gerät oder im Falle des PCI-Busses 214, dass das Ziel auf dem PCI-Bus 214 liegt). Die Busbrücke 202 leitet die Operation an das Zielgerät weiter. Die Busbrücke 202 übersetzt im Wesentlichen eine Operation aus dem Protokoll, das von dem Quellengerät oder dem Quellenbus verwendet wird, in das Protokoll, das von dem Zielgerät oder dem Zielbus verwendet wird.
  • Zusätzlich zur Bereitstellung einer Schnittstelle für einen ISA/EISA-Bus für den PCI-Bus 214 kann die sekundäre Busbrücke 216 weitere Funktionen nach Bedarf aufweisen. Eine Eingabe/Ausgabe-Steuerung (nicht gezeigt), die extern oder intern zur sekundären Busbrücke 216 vorgesehen sein kann, kann ebenfalls in dem Computersystem 200 enthalten sein, um eine Funktionsunterstützung für eine Tastatur und eine Maus 222 und für diverse serielle und parallele Anschlüsse nach Bedarf bereitzustellen. Eine externe Cache-Einheit (nicht gezeigt) kann ferner mit der externen Schnittstelle 52 zwischen dem Prozessor 10 und der Busbrücke 202 in anderen Ausführungsformen vorgesehen sein. Alternativ kann der externe Cache-Speicher mit der Busbrücke 202 verbunden sein, und eine Cache-Steuerlogik kann für den externen Cache-Speicher in der Busbrücke 202 integriert sein.
  • Der Hauptspeicher 204 ist ein Speicher, der Anwendungsprogramme enthält und aus dem der Prozessor 10 heraus hauptsächlich arbeitet. Ein geeigneter Hauptspeicher 204 umfasst einen DRAM (dynamischer Speicher mit wahlfreiem Zugriff). Beispielsweise kann der Hauptspeicher 204 mehrere Bänke aus SDRAM (synchrone DRAM) aufweisen. Alternativ kann der Hauptspeicher 204 einen RAM-Bus DRAM (RDRAM) oder einen anderen beliebigen geeigneten DRAM enthalten.
  • Die PCI-Geräte 212A212B sind als anschauliche Beispiele für eine Vielzahl von peripheren Geräten dargestellt, etwa beispielsweise Netzwerkschnittstellenkarten, Videobeschleuniger, Klangkarten, Festplatten und Diskettenlaufwerte oder Laufwerkssteuerungen (SCSI-(Kleincomputersystemschnittstellen-Adapter und Telefonkarten). In ähnlicher Weise ist das ISA-Gerät 218 als anschauliches Beispiel für diverse Arten von peripheren Geräten dargestellt, etwa ein Modem, eine Klangkarte, und eine Vielzahl von Datennahmekarten, etwa GPIB- oder Feldbusschnittstellenkarten.
  • Die Graphiksteuerung 208 ist vorgesehen, um das Erzeugen von Text und Bildern auf einer Anzeige 226 zu ermöglichen. Die Graphiksteuerung 208 kann einen typischen Graphikbeschleuniger darstellen, der im Stand der Technik bekannt ist, um dreidimensionale Datenstrukturen zu erzeugen, die in effizienter Weise in den Hauptspeicher 204 verschoben und daraus ausgelesen werden können. Die Graphiksteuerung 208 kann daher ein übergeordnetes Gerät bzw. ein Master des AGP-Busses 210 sein, indem diese Zugriff auf eine Zielschnittstelle innerhalb der Busbrücke 202 anfordert und erhält, um damit Zugriff auf den Hauptspeicher 204 zu erhalten. Ein zugeordneter Graphikbus sorgt für einen raschen Zugriff auf Daten in dem Hauptspeicher 204. Für gewisse Operationen kann die Graphiksteuerung 208 ferner ausgebildet sein, PCI-Protokolltransaktionen auf dem AGP-Bus 210 zu erzeugen. Die AGP-Schnitstelle der Busbrücke 202 kann somit eine Funktion enthalten, um sowohl AGP-Protokolltransaktionen sowie PCI-Protokollziell- und Initiatortransaktionen zu unterstützen. Die Anzeige 226 ist eine beliebige elektronische Anzeige, auf der Bild oder Text dargestellt werden kann. Zu einer geeigneten Anzeige 226 gehört eine Kathodenstahlröhre („CRT"), eine Flüssigkristallanzeige („LCD"), und dergleichen.
  • Es ist zu beachten, dass obwohl die AGP-, PCI- und ISA- oder EISA-Busse als Beispiele in der obigen Beschreibung verwendet sind, beliebige Busarchitekturen nach Bedarf eingesetzt werden können. Ferner ist zu beachten, dass das Computersystem 200 ein parallel verarbeitendes Computersystem mit zusätzlichen Prozessoren sein kann (beispielsweise der Prozessor 10A, wie er als optionale Komponente des Computersystems 200 gezeigt ist). Der Prozessor 10A kann ähnlich zu dem Prozessor 10 sein. Insbesondere kann der Prozessor 10A eine identische Kopie des Prozessors 10 sein. Der Prozessor 10A kann die externe Schnittstelle 52 gemeinsam mit dem Prozessor 10 benutzen (wie in 7 gezeigt ist), oder kann mit der Busbrücke 202 über einen unabhängigen Bus verbunden sein.
  • Zu beachten ist, dass diverse Signale hierin als gesetzt bzw. nicht gesetzt beschrieben sind. Ein spezielles Signal kann als gesetzt definiert sein, wenn es einen logischen Wert 1 trägt, und kann nicht gesetzt sein, wenn es einen logischen Wert 0 trägt. Alternativ kann ein spezielles Signal als gesetzt definiert betrachtet werden, wenn es einen logischen Wert 0 trägt und kann als nicht gesetzt definiert betrachtet werden, wenn es einen logischen Wert 1 trägt. Die Auswahl der Definition für ein spezielles Signal liegt im Rahmen der speziellen Gestaltung des Systems.
  • Industrielle Anwendbarkeit
  • Die vorliegende Erfindung ist auf dem Gebiet von Prozessoren und Computersystemen anwendbar.

Claims (12)

  1. Verfahren zum Weiterleiten von Schreibdaten, auf die durch einen Ladeprozess an einer Ladeadresse von einer Schreibwartereihe (64) in einer Lade/Schreibeinheit (42) zugegriffen, wobei die Schreibwartereihe ausgebildet ist, Adressen und Daten zu speichern, die den Schreibprozessen entsprechen, die noch nicht an den Datencache-Speicher (44) als abgeschlossen übergeben sind, wobei das Verfahren umfasst: Bestimmen, welcher Schreibprozess in der Schreibwartereihe (64) eine jüngste Aktualisierung von jedem von mehreren Bytes ist, auf das von dem Ladevorgang an der Ladeadresse zugegriffen wird; Auswählen eines ersten Bytes, auf das von dem Ladevorgang zugegriffen wird, aus einem ersten Schreibwartereiheneintrag in der Schreibwartereihe (64), wobei ein erster Schreibvorgang entsprechend dem ersten Schreibwarteeintrag in der Programmreihenfolge der jüngste ist, um das erste Byte zu aktualisieren; und Auswählen eines zweiten Bytes, auf das durch den Ladevorgang zugegriffen wird, aus einem zweiten Schreibwartereiheneintrag in der Schreibwartereihe (64), wobei der zweite Schreibwartereiheeintrag unterschiedlich ist zu dem ersten Schreibwartereiheneintrag, und wobei ein zweiter Schreibvorgang, der dem zweiten Schreibwartereiheneintrag entspricht, in der Programmreihenfolge der jüngste ist, um das zweite Byte zu aktualisieren.
  2. Verfahren nach Anspruch 1, wobei das Auswählen des zweiten Bytes umfasst: Auswählen des zweiten Bytes unabhängig von dem Auswählen des ersten Bytes.
  3. Verfahren nach Anspruch 1 oder 2, das ferner umfasst: Erzeugen eines Ladebitvektors mit einem Bit, das jedem Byte in einem vorbestimmten Bereich entspricht, der durch eine vorbestimmte Anzahl von am wenigsten signifikanten Bits einer Ladeadresse definiert ist, die dem Ladevorgang entspricht, wobei das Bit angibt, ob auf ein entsprechendes Byte von dem Ladevorgang zugegriffen wird oder nicht; Erzeugen eines ersten Schreibbitvektors mit einem Bit, das jedem Byte in einem vorbestimmten Bereich entspricht, der durch die vorbestimmte Anzahl an am wenigsten signifikanten Bits einer ersten Schreibadresse definiert ist, die dem ersten Schreibvorgang entspricht, und wobei das Bit angibt, ob ein entsprechendes Byte von dem ersten Schreibvorgang aktualisiert wird oder nicht; und Erzeugen eines zweiten Schreibbitvektors mit einem Bit, das jedem Byte in einem vorbestimmten Bereich entspricht, der durch eine vorbestimmte Anzahl an am wenigsten signifikanten Bits einer zweiten Schreibadresse definiert ist, die dem zweiten Schreibvorgang entspricht, und wobei das Bit angibt, ob ein entsprechendes Byte von dem zweiten Schreibvorgang aktualisiert wird oder nicht.
  4. Verfahren nach Anspruch 3, wobei das Auswählen eines ersten Bytes umfasst: Prüfen eines entsprechenden Bits in dem Ladebitvektor, um zu bestimmen, dass auf das erste Byte von dem Ladevorgang zugegriffen wird; und Prüfen eines entsprechenden Bits in dem ersten Schreibbitvektor, um zu bestimmen, dass der erste Schreibvorgang das erste Byte aktualisiert; und wobei das Auswählen eines zweiten Bytes umfasst: Prüfen eines entsprechenden Bits in dem Ladebitvektor, um zu bestimmen, dass auf das zweite Byte von dem Ladevorgang zugegriffen wird; und Prüfen eines entsprechenden Bits in dem zweiten Schreibbitvektor, um zu bestimmen, dass der zweite Schreibvorgang das zweite Byte aktualisiert.
  5. Verfahren nach Anspruch 4, das ferner umfasst: Vergleichen der Ladeadresse und der ersten Schreibadresse ohne die vorbestimmte Anzahl an am wenigsten signifikanten Bits, wobei das Auswählen des ersten Bytes in Reaktion auf das Vergleichen ausgeführt wird; und Vergleichen der Ladeadresse und der zweiten Schreibadresse ohne die vorbestimmte Anzahl an am wenigsten signifikanten Bits, wobei das Auswählen des zweiten Bytes in Reaktion auf das Vergleichen ausgeführt wird.
  6. Lade/Schreib-Einheit (42) mit: einer Schreibwartereihe (64) die ausgebildet ist, Adressen und Daten zu speichern, die den Schreibenvorgängen entsprechen, die noch nicht in einem Datencache-Speicher (44) abgeschlossen sind; und einer Weiterleitungslogik (62), die mit der Schreibwartereihe (64) verbunden und ausgebildet ist, eine Ladeadresse zu empfangen, wobei die Weiterleitungslogik (62) ferner ausgebildet ist, zu bestimmen, welcher der Schreibvorgänge, die in der Schreibwartereihe (64) gespeichert sind, eine jüngste Aktualisierung von jeweils mehreren Bytes ist, auf das von einem Ladevorgang zugegriffen wird, der der Ladeadresse entspricht, und wobei die Weiterleitungslogik ausgebildet ist, mindestens eines der mehreren Bytes aus einem einzelnen Schreibvorgang in der Schreibwartereihe (64) und mindestens ein weiteres der mehreren Bytes von einem weiteren Schreibvorgang in der Schreibwartereihe (64) auszuwählen.
  7. Lade/Schreib-Einheit (42) nach Anspruch 6, wobei die Weiterleitungslogik (62) ausgebildet ist, jedes der mehreren Bytes unabhängig vom Auswählen jedes weiteren der mehreren Bytes auszuwählen.
  8. Lade/Schreib-Einheit (42) nach Anspruch 6 oder Anspruch 7, die ferner umfasst: einen ersten Bitvektorgenerator (70B), der mit der Schreibwartereihe (64) verbunden ist und dazu dient, mehrere am wenigsten signifikante Bits jeder Schreibadresse zu empfangen, wobei der erste Bitvektorgenerator (70B) ausgebildet ist, einen Schreibbitvektor zu erzeugen, der jeder Schreibadresse entspricht, und wobei jedes Bit des Schreibbitvektors einem Byte entspricht und angibt, ob dieses Byte von dem Schreibvorgang aktualisiert wird oder nicht, und wobei die Lade/Schreibeinheit (42) ausgebildet ist, den Schreibbitvektor in der Schreibwartereihe (64) zu speichern; und einen zweiten Bitvektorgenerator (70A), der mit der Weiterleitungslogik (62) gekoppelt ist und dazu dient, mehrere am wenigsten signifikante Bits der Ladeadresse zu empfangen, wobei der zweite Bitvektorgenerator (70A) ausgebildet ist, einen Ladebitvektor zu erzeugen, der der Ladeadresse entspricht, und wobei jedes Bit des Ladebitvektors einem Byte entspricht und angibt, ob auf dieses Byte von einem Ladevorgang zugegriffen wird oder nicht, der der Ladeadresse entspricht; wobei die Weiterleitungslogik (62) ausgebildet ist, den Ladebitvektor und den Schreibbitvektor und ein Ergebnis des Vergleichs der Ladeadresse ohne die mehreren am wenigsten signifikanten Bits und der Schreibadresse ohne die_ mehreren am wenigsten signifikanten Bits zu prüfen, um eine jüngste Aktualisierung für jedes Byte, auf das von dem Ladevorgang zugegriffen wird, zu bestimmen.
  9. Prozessor (10) mit: mindestens einem Ausführungskern (40A) mit einer oder mehreren Adresserzeugungseinheiten (40AA), wobei die Adresserzeugungseinheiten (40AA) ausgebildet sind, Ladeadressen entsprechend zu Ladevorgängen und Schreibadressen entsprechend zu Schreibvorgängen zu erzeugen; und einer Lade/Schreibeinheit (42) nach Anspruch 6, 7 oder 8, die mit dem Ausführungskern (40A) verbunden ist, wobei die Lade/Schreibeinheit (42) ausgebildet ist, die Ladeadressen zu empfangen und Schreibdaten, die den Ladevorgängen aus der Schreibwartereihe (64) entsprechen, weiterzuleiten, wenn Schreibdaten, die den Ladevorgängen entsprechen, darin gespeichert sind.
  10. Prozessor nach Anspruch 9, wobei der Ausführungskern (40A) ferner eine Schreibdateneinheit (40AC) aufweist, die ausgebildet ist, Schreibdaten zu der Lade/Schreibeinheit (42) zuzuführen, und wobei die Schreibdateneinheit (40AC) ausgebildet ist, Schreibdaten in Reaktion zum Ausführen einer Schreibdateninstruktionsoperation bereitzustellen.
  11. Prozessor nach Anspruch 10, wobei die eine oder die mehreren Adresserzeugungseinheiten (40AA) eine Schreibadresserzeugungseinheit (40AA) aufweisen, die ausgebildet ist, die Schreibadresse in Reaktion auf eine Schreibadressinstruktionsoperation zu erzeugen.
  12. Prozessor nach Anspruch 11, wobei der Prozessor (10) ausgebildet ist, die Schreibadresseninstruktionsoperation und die Schreibdateninstruktionsoperation aus der gleichen Instruktion abzuleiten.
DE69932066T 1998-09-22 1999-04-03 Mechanismus zur "store-to-load forwarding" Expired - Lifetime DE69932066T2 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US09/158,465 US6141747A (en) 1998-09-22 1998-09-22 System for store to load forwarding of individual bytes from separate store buffer entries to form a single load word
US158465 1998-09-22
PCT/US1999/007332 WO2000017746A1 (en) 1998-09-22 1999-04-03 Mechanism for store to load forwarding

Publications (2)

Publication Number Publication Date
DE69932066D1 DE69932066D1 (en) 2006-08-03
DE69932066T2 true DE69932066T2 (de) 2007-06-21

Family

ID=22568258

Family Applications (1)

Application Number Title Priority Date Filing Date
DE69932066T Expired - Lifetime DE69932066T2 (de) 1998-09-22 1999-04-03 Mechanismus zur "store-to-load forwarding"

Country Status (6)

Country Link
US (1) US6141747A (de)
EP (1) EP1116103B1 (de)
JP (1) JP3871884B2 (de)
KR (1) KR100626858B1 (de)
DE (1) DE69932066T2 (de)
WO (1) WO2000017746A1 (de)

Families Citing this family (87)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
AU1634600A (en) * 1998-12-30 2000-07-24 Intel Corporation Memory array organization
US7779236B1 (en) * 1998-12-31 2010-08-17 Stmicroelectronics, Inc. Symbolic store-load bypass
US6247097B1 (en) * 1999-01-22 2001-06-12 International Business Machines Corporation Aligned instruction cache handling of instruction fetches across multiple predicted branch instructions
US6594754B1 (en) 1999-07-07 2003-07-15 Intel Corporation Mapping destination logical register to physical register storing immediate or renamed source register of move instruction and using mapping counters
US6625723B1 (en) * 1999-07-07 2003-09-23 Intel Corporation Unified renaming scheme for load and store instructions
US6385676B1 (en) * 1999-07-12 2002-05-07 Hewlett-Packard Company Coherent ordering queue for computer system
US6481251B1 (en) 1999-10-25 2002-11-19 Advanced Micro Devices, Inc. Store queue number assignment and tracking
US6523109B1 (en) 1999-10-25 2003-02-18 Advanced Micro Devices, Inc. Store queue multimatch detection
US6591342B1 (en) * 1999-12-14 2003-07-08 Intel Corporation Memory disambiguation for large instruction windows
US6970996B1 (en) * 2000-01-04 2005-11-29 National Semiconductor Corporation Operand queue for use in a floating point unit to reduce read-after-write latency and method of operation
US7065632B1 (en) * 2000-04-07 2006-06-20 Ip First Llc Method and apparatus for speculatively forwarding storehit data in a hierarchical manner
US6678807B2 (en) * 2000-12-21 2004-01-13 Intel Corporation System and method for multiple store buffer forwarding in a system with a restrictive memory model
US7739483B2 (en) * 2001-09-28 2010-06-15 Intel Corporation Method and apparatus for increasing load bandwidth
US20030177312A1 (en) * 2002-03-15 2003-09-18 Aravindh Baktha Controlling a store data forwarding mechanism during execution of a load operation
US7085889B2 (en) 2002-03-22 2006-08-01 Intel Corporation Use of a context identifier in a cache memory
US7202942B2 (en) * 2003-05-28 2007-04-10 Doppler, Ltd. System and method for measuring velocity using frequency modulation of laser output
EP1462934A1 (de) * 2003-03-29 2004-09-29 Deutsche Thomson-Brandt Gmbh Verfahren und Vorrichtung zur Beförderung von Ergebnissen
US7177982B2 (en) * 2004-01-16 2007-02-13 International Business Machines Corporation Method to maintain order between multiple queues with different ordering requirements in a high frequency system
US7376817B2 (en) * 2005-08-10 2008-05-20 P.A. Semi, Inc. Partial load/store forward prediction
US7461238B2 (en) * 2006-06-07 2008-12-02 International Business Machines Corporation Simple load and store disambiguation and scheduling at predecode
US20070288725A1 (en) * 2006-06-07 2007-12-13 Luick David A A Fast and Inexpensive Store-Load Conflict Scheduling and Forwarding Mechanism
US7594100B2 (en) * 2006-09-29 2009-09-22 Sun Microsystems, Inc. Efficient store queue architecture
US7600098B1 (en) * 2006-09-29 2009-10-06 Sun Microsystems, Inc. Method and system for efficient implementation of very large store buffer
US7752393B2 (en) * 2006-11-16 2010-07-06 International Business Machines Corporation Design structure for forwarding store data to loads in a pipelined processor
US7640414B2 (en) * 2006-11-16 2009-12-29 International Business Machines Corporation Method and apparatus for forwarding store data to loads in a pipelined processor
US7721066B2 (en) * 2007-06-05 2010-05-18 Apple Inc. Efficient encoding for detecting load dependency on store with misalignment
US8447911B2 (en) * 2007-07-05 2013-05-21 Board Of Regents, University Of Texas System Unordered load/store queue
US7849290B2 (en) * 2007-07-09 2010-12-07 Oracle America, Inc. Store queue architecture for a processor that supports speculative execution
US8645670B2 (en) * 2008-02-15 2014-02-04 International Business Machines Corporation Specialized store queue and buffer design for silent store implementation
US8627047B2 (en) 2008-02-15 2014-01-07 International Business Machines Corporation Store data forwarding with no memory model restrictions
WO2010050947A1 (en) * 2008-10-30 2010-05-06 Hewlett-Packard Development Company, L.P. Redundant array of independent disks (raid) write cache sub-assembly
US20100250850A1 (en) * 2009-03-25 2010-09-30 Faraday Technology Corp. Processor and method for executing load operation and store operation thereof
US8914617B2 (en) * 2009-12-26 2014-12-16 Intel Corporation Tracking mechanism coupled to retirement in reorder buffer for indicating sharing logical registers of physical register in record indexed by logical register
US10157060B2 (en) 2011-12-29 2018-12-18 Intel Corporation Method, device and system for control signaling in a data path module of a data stream processing engine
US9128725B2 (en) 2012-05-04 2015-09-08 Apple Inc. Load-store dependency predictor content management
US9600289B2 (en) 2012-05-30 2017-03-21 Apple Inc. Load-store dependency predictor PC hashing
US20140244984A1 (en) * 2013-02-26 2014-08-28 Advanced Micro Devices, Inc. Eligible store maps for store-to-load forwarding
US9619382B2 (en) 2013-08-19 2017-04-11 Intel Corporation Systems and methods for read request bypassing a last level cache that interfaces with an external fabric
US9665468B2 (en) 2013-08-19 2017-05-30 Intel Corporation Systems and methods for invasive debug of a processor without processor execution of instructions
US9632947B2 (en) * 2013-08-19 2017-04-25 Intel Corporation Systems and methods for acquiring data for loads at different access times from hierarchical sources using a load queue as a temporary storage buffer and completing the load early
US9361227B2 (en) 2013-08-30 2016-06-07 Soft Machines, Inc. Systems and methods for faster read after write forwarding using a virtual address
US10331583B2 (en) 2013-09-26 2019-06-25 Intel Corporation Executing distributed memory operations using processing elements connected by distributed channels
US9710268B2 (en) 2014-04-29 2017-07-18 Apple Inc. Reducing latency for pointer chasing loads
US9483409B2 (en) 2015-02-05 2016-11-01 International Business Machines Corporation Store forwarding cache
US9891824B2 (en) 2015-04-24 2018-02-13 International Business Machines Corporation Sub-block input/output (I/O) commands for storage device including byte stream buffer
US10514925B1 (en) 2016-01-28 2019-12-24 Apple Inc. Load speculation recovery
US10437595B1 (en) 2016-03-15 2019-10-08 Apple Inc. Load/store dependency predictor optimization for replayed loads
US10402168B2 (en) 2016-10-01 2019-09-03 Intel Corporation Low energy consumption mantissa multiplication for floating point multiply-add operations
US10558575B2 (en) 2016-12-30 2020-02-11 Intel Corporation Processors, methods, and systems with a configurable spatial accelerator
US10474375B2 (en) * 2016-12-30 2019-11-12 Intel Corporation Runtime address disambiguation in acceleration hardware
US10572376B2 (en) * 2016-12-30 2020-02-25 Intel Corporation Memory ordering in acceleration hardware
US10416999B2 (en) 2016-12-30 2019-09-17 Intel Corporation Processors, methods, and systems with a configurable spatial accelerator
US10467183B2 (en) 2017-07-01 2019-11-05 Intel Corporation Processors and methods for pipelined runtime services in a spatial array
US10515046B2 (en) 2017-07-01 2019-12-24 Intel Corporation Processors, methods, and systems with a configurable spatial accelerator
US10515049B1 (en) 2017-07-01 2019-12-24 Intel Corporation Memory circuits and methods for distributed memory hazard detection and error recovery
US10469397B2 (en) 2017-07-01 2019-11-05 Intel Corporation Processors and methods with configurable network-based dataflow operator circuits
US10445451B2 (en) 2017-07-01 2019-10-15 Intel Corporation Processors, methods, and systems for a configurable spatial accelerator with performance, correctness, and power reduction features
US10445234B2 (en) 2017-07-01 2019-10-15 Intel Corporation Processors, methods, and systems for a configurable spatial accelerator with transactional and replay features
US10387319B2 (en) 2017-07-01 2019-08-20 Intel Corporation Processors, methods, and systems for a configurable spatial accelerator with memory system performance, power reduction, and atomics support features
US11086816B2 (en) 2017-09-28 2021-08-10 Intel Corporation Processors, methods, and systems for debugging a configurable spatial accelerator
US10496574B2 (en) 2017-09-28 2019-12-03 Intel Corporation Processors, methods, and systems for a memory fence in a configurable spatial accelerator
US10445098B2 (en) 2017-09-30 2019-10-15 Intel Corporation Processors and methods for privileged configuration in a spatial array
US10380063B2 (en) 2017-09-30 2019-08-13 Intel Corporation Processors, methods, and systems with a configurable spatial accelerator having a sequencer dataflow operator
US10417002B2 (en) 2017-10-06 2019-09-17 International Business Machines Corporation Hazard detection of out-of-order execution of load and store instructions in processors without using real addresses
US11175924B2 (en) 2017-10-06 2021-11-16 International Business Machines Corporation Load-store unit with partitioned reorder queues with single cam port
US10394558B2 (en) 2017-10-06 2019-08-27 International Business Machines Corporation Executing load-store operations without address translation hardware per load-store unit port
US10606591B2 (en) 2017-10-06 2020-03-31 International Business Machines Corporation Handling effective address synonyms in a load-store unit that operates without address translation
US10572256B2 (en) 2017-10-06 2020-02-25 International Business Machines Corporation Handling effective address synonyms in a load-store unit that operates without address translation
US10579387B2 (en) 2017-10-06 2020-03-03 International Business Machines Corporation Efficient store-forwarding with partitioned FIFO store-reorder queue in out-of-order processor
US10606590B2 (en) 2017-10-06 2020-03-31 International Business Machines Corporation Effective address based load store unit in out of order processors
US10417175B2 (en) 2017-12-30 2019-09-17 Intel Corporation Apparatus, methods, and systems for memory consistency in a configurable spatial accelerator
US10445250B2 (en) 2017-12-30 2019-10-15 Intel Corporation Apparatus, methods, and systems with a configurable spatial accelerator
US10565134B2 (en) 2017-12-30 2020-02-18 Intel Corporation Apparatus, methods, and systems for multicast in a configurable spatial accelerator
US11307873B2 (en) 2018-04-03 2022-04-19 Intel Corporation Apparatus, methods, and systems for unstructured data flow in a configurable spatial accelerator with predicate propagation and merging
US10564980B2 (en) 2018-04-03 2020-02-18 Intel Corporation Apparatus, methods, and systems for conditional queues in a configurable spatial accelerator
US11200186B2 (en) 2018-06-30 2021-12-14 Intel Corporation Apparatuses, methods, and systems for operations in a configurable spatial accelerator
US10891240B2 (en) 2018-06-30 2021-01-12 Intel Corporation Apparatus, methods, and systems for low latency communication in a configurable spatial accelerator
US10853073B2 (en) 2018-06-30 2020-12-01 Intel Corporation Apparatuses, methods, and systems for conditional operations in a configurable spatial accelerator
US10459866B1 (en) 2018-06-30 2019-10-29 Intel Corporation Apparatuses, methods, and systems for integrated control and data processing in a configurable spatial accelerator
US10678724B1 (en) 2018-12-29 2020-06-09 Intel Corporation Apparatuses, methods, and systems for in-network storage in a configurable spatial accelerator
US11029927B2 (en) 2019-03-30 2021-06-08 Intel Corporation Methods and apparatus to detect and annotate backedges in a dataflow graph
US10817291B2 (en) 2019-03-30 2020-10-27 Intel Corporation Apparatuses, methods, and systems for swizzle operations in a configurable spatial accelerator
US10915471B2 (en) 2019-03-30 2021-02-09 Intel Corporation Apparatuses, methods, and systems for memory interface circuit allocation in a configurable spatial accelerator
US10965536B2 (en) 2019-03-30 2021-03-30 Intel Corporation Methods and apparatus to insert buffers in a dataflow graph
US11037050B2 (en) 2019-06-29 2021-06-15 Intel Corporation Apparatuses, methods, and systems for memory interface circuit arbitration in a configurable spatial accelerator
US11907713B2 (en) 2019-12-28 2024-02-20 Intel Corporation Apparatuses, methods, and systems for fused operations using sign modification in a processing element of a configurable spatial accelerator
US11379241B2 (en) * 2020-07-30 2022-07-05 International Business Machines Corporation Handling oversize store to load forwarding in a processor

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE69429612T2 (de) * 1993-10-18 2002-09-12 Via Cyrix Inc Schreibpuffer für einen superskalaren Mikroprozessor mit Pipeline
US5471598A (en) * 1993-10-18 1995-11-28 Cyrix Corporation Data dependency detection and handling in a microprocessor with write buffer
US5878245A (en) * 1993-10-29 1999-03-02 Advanced Micro Devices, Inc. High performance load/store functional unit and data cache
US5588126A (en) * 1993-12-30 1996-12-24 Intel Corporation Methods and apparatus for fordwarding buffered store data on an out-of-order execution computer system
US5784586A (en) * 1995-02-14 1998-07-21 Fujitsu Limited Addressing method for executing load instructions out of order with respect to store instructions
US5802588A (en) * 1995-04-12 1998-09-01 Advanced Micro Devices, Inc. Load/store unit implementing non-blocking loads for a superscalar microprocessor and method of selecting loads in a non-blocking fashion from a load/store buffer
US5832297A (en) * 1995-04-12 1998-11-03 Advanced Micro Devices, Inc. Superscalar microprocessor load/store unit employing a unified buffer and separate pointers for load and store operations
US5835747A (en) * 1996-01-26 1998-11-10 Advanced Micro Devices, Inc. Hierarchical scan logic for out-of-order load/store execution control
US6021485A (en) * 1997-04-10 2000-02-01 International Business Machines Corporation Forwarding store instruction result to load instruction with reduced stall or flushing by effective/real data address bytes matching

Also Published As

Publication number Publication date
EP1116103A1 (de) 2001-07-18
EP1116103B1 (de) 2006-06-21
WO2000017746A1 (en) 2000-03-30
JP2002525742A (ja) 2002-08-13
KR100626858B1 (ko) 2006-09-22
JP3871884B2 (ja) 2007-01-24
US6141747A (en) 2000-10-31
KR20010073182A (ko) 2001-07-31
DE69932066D1 (en) 2006-08-03

Similar Documents

Publication Publication Date Title
DE69932066T2 (de) Mechanismus zur "store-to-load forwarding"
DE69308548T2 (de) Vorrichtung und verfahren zum befehlsabschluss in einem superskalaren prozessor.
DE69031991T2 (de) Verfahren und Gerät zur Beschleunigung von Verzweigungsbefehlen
DE68927492T2 (de) Verfahren und Vorrichtung zur gleichzeitigen Verteilung von Befehlen an mehrere funktionelle Einheiten
DE68928513T2 (de) Verfahren zur Vorverarbeitung mehrerer Befehle
DE69311330T2 (de) Befehlsablauffolgeplanung von einem risc-superskalarprozessor
DE60025028T2 (de) Speicherpuffer, der daten, basierend auf index und freiwilliger weisebemusterung überträgt
DE69929936T2 (de) Verfahren und Vorrichtung zum Abrufen von nicht-angrenzenden Befehlen in einem Datenverarbeitungssystem
DE68927855T2 (de) Verfahren und Datenverarbeitungseinheit zur Vorverarbeitung von implizierten Spezifizierern in einem Pipeline-Prozessor
DE60010907T2 (de) Sram-steuerungvorrichtung für parallele prozessorarchitektur mit adressen- und befehlswarteschlange und arbiter
DE69835100T2 (de) Prozessor konfiguriert um vorausschauende resultate von zusammengefassten übertragungs-, vergleichs- und einfachen arithmetischen befehlen zu produzieren
DE112004002848B4 (de) Mikroprozessor und Verfahren zum Verifizieren einer Speicherdatei in einem derartigen Mikroprozessor
DE3751474T2 (de) Verzweigungsstrom-Koprozessor.
DE69534148T2 (de) Rechnersystem zur Ausführung von Verzweigungsbefehlen
DE69433621T2 (de) Geraet zur verarbeitung von befehlen in einem rechnersystem
DE69636861T2 (de) Mikroprozessor mit Lade-/Speicheroperation zu/von mehreren Registern
DE69724771T2 (de) Zentralprozessoreinheit mit x86 und dsp kern und einem dsp funktions-dekoder zum abbilden von x 86-befehlen auf dsp-befehle
DE69031139T2 (de) Verfahren und Vorrichtung zum Ordnen und in Warteschlangesetzen mehrerer Speicherzugriffsanforderungen
DE3851746T2 (de) Sprungvorhersage.
DE69434669T2 (de) Spekulative Befehlswarteschlange für Befehle mit variabler Byteslänge
DE69024068T2 (de) Verfahren und Datenverarbeitungseinheit zur Pipeline- Verarbeitung von Register- und Registeränderungs- Spezifizierern in dem gleichen Befehl
DE3588182T2 (de) Vorausschauende Speicherabrufmethode und System für Verzweigung mit Ausführungsbefehlen
DE69736105T2 (de) Hierarchische durchsuchlogik für ungeordnete lade/speicherausführungssteuerung
DE3789604T2 (de) Datenprozessor zur parallelen Ausführung von miteinander im Konflikt stehenden Befehlen.
DE69636416T2 (de) Mikroprozessor ausgelegt zum erkennen eines unterprogramm-aufrufs einer dsp-routine und zum ansteuern eines dsp, diese routine auszuführen

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., GRAND CAYMAN, KY

8328 Change in the person/name/address of the agent

Representative=s name: GRUENECKER, KINKELDEY, STOCKMAIR & SCHWANHAEUSSER,