-
HINTERGRUND
-
Technisches Gebiet
-
Die hierin beschriebenen Ausführungsformen beziehen sich auf Interrupts in Rechensystemen und insbesondere auf das Verteilen der Interrupts an Prozessoren zur Wartung.
-
Beschreibung des Stands der Technik
-
Rechensysteme schließen im Allgemeinen einen oder mehrere Prozessoren ein, die als zentrale Verarbeitungseinheiten (CPUs) zusammen mit einer oder mehreren Peripheriegeräten dienen, die verschiedene Hardware-Funktionen implementieren. Die CPUs führen die Steuersoftware (z. B. ein Betriebssystem) aus, die den Betrieb der verschiedenen Peripheriegeräte steuert. Die CPUs können auch Anwendungen ausführen, die eine Benutzerfunktionalität im System bereitstellen. Zusätzlich können die CPUs Software ausführen, die mit den Peripheriegeräten interagiert und verschiedene Dienste im Namen des Peripheriegeräts durchführt. Andere Prozessoren, die nicht als CPUs im System verwendet werden (z. B. Prozessoren, die in einige Peripheriegeräte integriert sind) können auch eine solche Software für Peripheriegeräte ausführen.
-
Die Peripheriegeräte können die Prozessoren veranlassen, Software in ihrem Namen unter Verwendung von Interrupts auszuführen. Im Allgemeinen geben die Peripheriegeräte einen Interrupt aus, üblicherweise durch Anlegen eines Interrupt-Signals an eine Interrupt-Steuerung, welche die Interrupts steuert, die zu den Prozessoren gehen. Der Interrupt bewirkt, dass der Prozessor das Ausführen seines aktuellen Softwareauftrags stoppt, den Zustand für die Aufgabe speichert, sodass es später wieder aufgenommen werden kann. Der Prozessor kann den Zustand in Bezug auf den Interrupt laden und die Ausführung einer Interrupt-Dienstroutine beginnen. Die Interrupt-Dienstroutine kann ein Treibercode für das Peripheriegerät sein oder kann die Ausführung nach Bedarf an den Treibercode übertragen. Im Allgemeinen ist der Treibercode ein Code, der für eine Peripherievorrichtung bereitgestellt wird, um von dem Prozessor ausgeführt zu werden, um die Peripherievorrichtung zu steuern und/oder zu konfigurieren.
-
Die Latenz vor dem Anlegen des Interrupts bis zur Wartung des Interrupts kann für die Leistung und sogar die Funktionalität in einem System wichtig sein. Zusätzlich kann eine effiziente Bestimmung, welche CPU den Interrupt bedienen wird und den Interrupt mit minimaler Störung des Rests des Systems liefert, wichtig für sowohl die Leistung als auch die Aufrechterhaltung des niedrigen Stromverbrauchs im System sein. Da die Anzahl oder Prozessoren in einem System zunimmt, ist effiziente und effektive Skalierung der Interrupt-Lieferung noch wichtiger.
-
Figurenliste
-
Die folgende detaillierte Beschreibung nimmt Bezug auf die begleitenden Zeichnungen, die nun kurz beschrieben werden.
- 1 ist ein Blockdiagramm einer Ausführungsform eines Systems, das eine Interrupt-Steuerung und eine Vielzahl von Cluster-Interrupt-Steuerungen, die einer Vielzahl von Clustern von Prozessoren entsprechen, einschließt.
- 2 ist ein Blockdiagramm einer Ausführungsform eines Systems auf einem Chip (SOC), das eine Ausführungsform des in 1 gezeigten Systems implementiert.
- 3 ist ein Blockdiagramm einer Ausführungsform einer Zustandsmaschine, die in einer Ausführungsform der Interrupt-Steuerung implementiert sein kann.
- 4 ist ein Flussdiagramm, das den Betrieb einer Ausführungsform der Interrupt-Steuerung veranschaulicht, um eine weiche oder harte Iteration der Interrupt-Lieferung durchzuführen.
- 5 ist ein Flussdiagramm, das den Betrieb einer Ausführungsform einer Cluster-Interrupt-Steuerung veranschaulicht.
- 6 ist ein Blockdiagramm einer Ausführungsform eines Prozessors.
- 7 ist ein Blockdiagramm einer Ausführungsform eines Umordnungspuffers.
- 8 ist ein Flussdiagramm, das den Betrieb einer Ausführungsform einer in 6 gezeigten Interrupt-Acknowledgement-Steuerschaltung veranschaulicht.
- 9 ist ein Blockdiagramm einer Vielzahl von SOCs, die eine Ausführungsform des in 1 gezeigten Systems implementieren können.
- 10 ist ein Flussdiagramm, das den Betrieb einer Ausführungsform einer primären Interrupt-Steuerung, die in 9 gezeigt ist, veranschaulicht.
- 11 ist ein Flussdiagramm, das den Betrieb einer Ausführungsform einer sekundären Interrupt-Steuerung, die in 9 gezeigt ist, veranschaulicht.
- 12 ist ein Flussdiagramm, das eine Ausführungsform eines Verfahrens zum Handhaben von Interrupts veranschaulicht.
- 13 ist ein Blockdiagramm einer Ausführungsform eines Systems, das in einer Mehrzahl von Kontexten verwendet wird.
- 14 ist ein Blockdiagramm eines computerzugänglichen Speichermediums.
-
Während in dieser Offenbarung beschriebene Ausführungsformen verschiedenen Abänderungen und alternativen Formen unterliegen können, sind spezifische Ausführungsformen davon beispielhaft in den Zeichnungen gezeigt und werden hierin detailliert beschrieben. Es versteht sich jedoch, dass die Zeichnungen und die detaillierte Beschreibung dazu die Ausführungsformen der offenbarten besonderen Form nicht einschränken sollen, sondern dass im Gegenteil alle Modifikationen, Äquivalente und Alternativen, die innerhalb des Wesens und Schutzumfangs der beiliegenden Patentansprüche sind, abgedeckt werden sollen. Die hierin verwendeten Überschriften dienen nur organisatorischen Zwecken und sollen nicht verwendet werden, um den Umfang der Beschreibung einzuschränken.
-
DETAILLIERTE BESCHREIBUNG VON AUSFÜHRUNGSFORMEN
-
Unter Bezugnahme auf 1 ist ein Blockdiagramm einer Ausführungsform eines Abschnitts eines Systems 10, das eine Interrupt-Steuerung 20 einschließt, die mit einer Vielzahl von Cluster-Interrupt-Steuerungen 24A-24n gekoppelt ist, gezeigt. Jede der Vielzahl von Cluster-Interrupt-Steuerungen 24A-24n ist mit einer jeweiligen Vielzahl von Prozessoren 30 (z. B. einem Prozessor-Cluster) gekoppelt. Die Interrupt-Steuerung 20 ist mit einer Vielzahl von Interrupt-Quellen 32 gekoppelt.
-
Wenn mindestens ein Interrupt durch die Interrupt-Steuerung 20 empfangen wurde, kann die Interrupt-Steuerung 20 konfiguriert sein, um zu versuchen, den Interrupt zu liefern (z. B. an einen Prozessor 30, um den Interrupt zu bedienen, indem er Software zur Aufnahme des Interrupts zur weiteren Wartung durch eine Interrupt-Dienstroutine ausführt, und/oder um die durch den Interrupt angeforderte Verarbeitung über die Interrupt-Dienstroutine bereitzustellen). In dem System 10 kann die Interrupt-Steuerung 20 versuchen, Interrupts durch die Cluster-Interrupt-Steuerungen 24A-24n zu liefern. Jede Cluster-Steuerung 24A-24n ist einem Prozessor-Cluster zugeordnet und kann versuchen, den Interrupt an Prozessoren 30 in den jeweiligen mehreren Prozessoren zu liefern, die den Cluster bilden.
-
Insbesondere kann die Interrupt-Steuerung 20 konfiguriert sein, um zu versuchen, den Interrupt in einer Vielzahl von Iterationen über die Cluster-Interrupt-Steuerungen 24A-24n zu liefern. Die Schnittstelle zwischen der Interrupt-Steuerung 20 und jeder Interrupt-Steuerung 24A-24n kann eine Anforderungs-/Acknowledge-(Ack-)/Nicht-Acknowledge-(Nack-)Struktur einschließen. Zum Beispiel können die Anforderungen durch Iteration: weich, hart und erzwungen, in der veranschaulichten Ausführungsform identifiziert werden. Eine anfängliche Iteration (die „weiche“ Iteration) kann durch Anlegen der weichen Anforderung signalisiert werden. Die nächste Iteration (die „harte“ Iteration) kann durch Anlegen der harten Anforderung signalisiert werden. Die letzte Iteration (die „erzwungene“ Iteration) kann durch Anlegen der erzwungenen Anforderung signalisiert werden. Eine gegebene Cluster-Interrupt-Steuerung 24A-24n kann auf die weichen und harten Iterationen mit einer Ack-Antwort reagieren (was angibt, dass ein Prozessor 30 in dem Prozessor-Cluster, welcher der gegebenen Cluster-Interrupt-Steuerung 24A-24n zugeordnet ist, den Interrupt angenommen hat und mindestens einen Interrupt verarbeiten wird) oder einer Nack-Antwort (was angibt, dass die Prozessoren 30 in dem Prozessor-Cluster den Interrupt verweigert haben). Die erzwungene Iteration kann die Ack-/Nack-Antworten nicht verwenden, sondern kann weiterhin Interrupts anfordern, bis die Interrupts bedient werden, wie nachstehend ausführlicher erörtert wird.
-
Die Cluster-Interrupt-Steuerungen 24A-24n können ebenso eine Anforderungs-/Ack-/Nack-Struktur mit den Prozessoren 30 verwenden und versuchen, den Interrupt an einen bestimmten Prozessor 30 zu liefern. Basierend auf der Anforderung von der Cluster-Interrupt-Steuerung 24A-24n kann der gegebene Prozessor 30 konfiguriert sein, um zu bestimmen, ob der gegebene Prozessor 30 in der Lage ist, die aktuelle Befehlsausführung innerhalb eines vorbestimmten Zeitraums zu unterbrechen. Wenn der gegebene Prozessor 30 in der Lage ist, innerhalb des Zeitraums zu unterbrechen, kann der gegebene Prozessor 30 konfiguriert sein, um eine Ack-Antwort durchzusetzen. Wenn der gegebene Prozessor 30 nicht in der Lage ist zu unterbrechen, kann der gegebene Prozessor 30 konfiguriert sein, um eine Nack-Antwort durchzusetzen. Die Cluster-Interrupt-Steuerung 24A-24n kann konfiguriert sein, um die Ack-Antwort an die Interrupt-Steuerung 20 durchzusetzen, wenn mindestens ein Prozessor die Ack-Antwort an die Cluster-Interrupt-Steuerung 24A-24n durchsetzt, und kann konfiguriert sein, um die Nack-Antwort durchzusetzen, wenn die Prozessoren 30 die Nack-Antwort in einer gegebenen Iteration durchsetzen.
-
Die Verwendung der Anforderungs-/Ack-/Nack-Struktur kann in einer Ausführungsform eine schnelle Angabe bereitstellen, ob der Interrupt von dem Empfänger der Anforderung akzeptiert wird oder nicht (z. B. der Cluster-Interrupt-Steuerung 24A-24n oder dem Prozessor 30, abhängig von der Schnittstelle). Die Angabe kann beispielsweise in einer Ausführungsform schneller sein als eine Zeitüberschreitung. Zusätzlich kann die abgestufte Struktur der Cluster-Interrupt-Steuerungen 24A-24n und der Interrupt-Steuerung 20 in einer Ausführungsform auf größere Anzahlen von Prozessoren in einem System 10 (z. B. mehreren Prozessor-Cluster) skalierbarer sein.
-
Eine Iteration über die Cluster-Interrupt-Steuerungen 24A-24n kann einen Versuch einschließen, den Interrupt durch mindestens eine Teilmenge der Cluster-Interrupt-Steuerungen 24A-24n bis zu allen der Cluster-Interrupt-Steuerungen 24A-24n zu liefern. Eine Iteration kann auf jede gewünschte Weise erfolgen. Zum Beispiel kann in einer Ausführungsform die Interrupt-Steuerung 20 konfiguriert sein, um die Interrupt-Anforderungen an jeweilige Cluster-Interrupt-Steuerungen 24A-24n seriell durchzusetzen, die durch eine Ack-Antwort von einer der Cluster-Interrupt-Steuerungen 24A-24n (und einem Fehlen zusätzlicher anstehender Interrupts, in einer Ausführungsform) oder durch eine Nack-Antwort von allen Cluster-Interrupt-Steuerungen 24A-24n abgeschlossen werden. Das heißt, die Interrupt-Steuerung kann eine der Cluster-Interrupt-Steuerungen 24A-24n auswählen und eine Interrupt-Anforderung an die ausgewählte Cluster-Interrupt-Steuerung 24A-24n durchsetzen (z. B. durch Durchsetzung der weichen oder harten Anforderung, je nachdem, welche Iteration durchgeführt wird). Die ausgewählte Cluster-Interrupt-Steuerung 24A-24n kann mit einer Ack-Antwort antworten, welche die Iteration beenden kann. Wenn andererseits die ausgewählte Cluster-Interrupt-Steuerung 24A-24n die Nack-Antwort durchsetzt, kann die Interrupt-Steuerung konfiguriert sein, um eine andere Cluster-Interrupt-Steuerung 24A-24n auszuwählen und kann die weiche oder harte Anforderung an die ausgewählte Cluster-Interrupt-Steuerung 24A-24n durchsetzen. Die Auswahl und Durchsetzung kann fortgesetzt werden, bis entweder eine Ack-Antwort empfangen wird oder jede der Cluster-Interrupt-Steuerungen 24A-24n ausgewählt wurde und die Nack-Antwort durchgesetzt hat. Andere Ausführungsformen können eine Iteration über die Cluster-Interrupt-Steuerungen 24A-24n auf andere Weise durchführen. Zum Beispiel kann die Interrupt-Steuerung 20 konfiguriert sein, um eine Interrupt-Anforderung an eine Teilmenge von zwei oder mehr Cluster-Interrupt-Steuerungen 24A-24n gleichzeitig durchzusetzen, mit anderen Teilmengen fortzufahren, wenn jede Cluster-Interrupt-Steuerung 24A-24n in der Teilmenge eine Nack-Reaktion auf die Interrupt-Anforderung bereitstellt. Eine solche Implementierung kann unechte Interrupts verursachen, wenn mehr als eine Cluster-Interrupt-Steuerung 24A-24n in einer Teilmenge eine Ack-Antwort bereitstellt, und so kann der Code, der als Reaktion auf den Interrupt ausgeführt wird, so ausgelegt sein, dass er das Auftreten eines unechten Interrupts handhabt.
-
Die anfängliche Iteration kann die weiche Iteration sein, wie vorstehend erwähnt. In der weichen Iteration kann eine gegebene Cluster-Interrupt-Steuerung 24A-24n versuchen, den Interrupt an eine Teilmenge der Vielzahl von Prozessoren 30 zu liefern, die der gegebenen Cluster-Interrupt-Steuerung 24A-24n zugeordnet sind. Die Teilmenge kann die Prozessoren 30 sein, die eingeschaltet sind, wobei die gegebene Cluster-Interrupt-Steuerung 24A-24n nicht versuchen kann, den Interrupt an die Prozessoren 30 zu liefern, die ausgeschaltet sind (oder schlafen). Das heißt, die ausgeschalteten Prozessoren sind nicht in der Teilmenge eingeschlossen, an welche die Cluster-Interrupt-Steuerung 24A-24n versucht, den Interrupt zu liefern. Somit können die ausgeschalteten Prozessoren 30 in der weichen Iteration ausgeschaltet bleiben.
-
Basierend auf einer Nack-Antwort von jeder Cluster-Interrupt-Steuerung 24A-24n während der weichen Iteration kann die Interrupt-Steuerung 20 eine harte Iteration durchführen. Bei der harten Iteration können die ausgeschalteten Prozessoren 30 in einem gegebenen Prozessor-Cluster durch die jeweilige Cluster-Interrupt-Steuerung 24A-24n eingeschaltet werden, und die jeweilige Interrupt-Steuerung 24A-24n kann versuchen, den Interrupt an jeden Prozessor 30 in dem Prozessor-Cluster zu liefern. Insbesondere, wenn ein Prozessor 30 eingeschaltet wurde, um die harte Iteration durchzuführen, kann der Prozessor 30 in einer Ausführungsform schnell für Interrupts verfügbar sein und kann häufig zu Ack-Antworten führen.
-
Wenn die harte Iteration mit einem oder mehreren noch anstehenden Interrupts endet, oder wenn eine Zeitüberschreitung vor dem Abschluss der weichen und harten Iterationen auftritt, kann die Interrupt-Steuerung eine erzwungene Iteration einleiten, indem das erzwungene Signal durchgesetzt wird. In einer Ausführungsform kann die erzwungene Iteration parallel zu den Cluster-Interrupt-Steuerungen 24A-24n durchgeführt werden, und Nack-Antworten können nicht zugelassen werden. Die erzwungene Iteration kann in einer Ausführungsform so lange fortgesetzt werden, bis keine Interrupts mehr anstehen.
-
Eine gegebene Cluster-Interrupt-Steuerung 24A-24n kann versuchen, Interrupts in jeder gewünschten Weise zu liefern. Zum Beispiel kann die gegebene Cluster-Interrupt-Steuerung 24A-24n die Interrupt-Anforderungen an die jeweiligen Prozessoren 30 in dem Prozessor-Cluster seriell durchsetzen, die durch eine Ack-Antwort von einem der jeweiligen Prozessoren 30 oder durch eine Nack-Antwort von jedem der jeweiligen Prozessoren 30, an welche die gegebene Cluster-Interrupt-Steuerung 24A-24n versuchen soll den Interrupt zu liefern, beendet werden. Das heißt, die gegebene Cluster-Interrupt-Steuerung 24A-4n kann einen der jeweiligen Prozessoren 30 auswählen und eine Interrupt-Anforderung an den ausgewählten Prozessor 30 durchsetzen (z. B. durch Aktivieren der Anforderung an den ausgewählten Prozessor 30). Der ausgewählte Prozessor 30 kann mit einer Ack-Antwort anworten, was den Versuch beenden kann. Wenn andererseits der ausgewählte Prozessor 30 die Nack-Antwort durchsetzt, kann die gegebene Cluster-Interrupt-Steuerung 24A-24n konfiguriert sein, um einen anderen Prozessor 30 auszuwählen und kann die Interrupt-Anforderung an den ausgewählten Prozessor 30 durchsetzen. Die Auswahl und Durchsetzung kann fortgesetzt werden, bis entweder eine Ack-Antwort empfangen wird oder jeder der Prozessoren 30 ausgewählt wurde und die Nack-Antwort durchgesetzt hat (ohne ausgeschaltete Prozessoren in der weichen Iteration). Andere Ausführungsformen können die Interrupt-Anforderung an mehrere Prozessoren 30 gleichzeitig oder an die Prozessoren 30 parallel mit dem Potenzial für unechte Interrupts durchsetzen, wie vorstehend erwähnt. Die gegebene Cluster-Interrupt-Steuerung 24A-24n kann auf die Interrupt-Steuerung 20 mit einer Ack-Antwort, basierend auf dem Empfangen einer Ack-Antwort von einem der Prozessoren 30, reagieren oder kann auf die Interrupt-Steuerung 20 mit einer Nack-Antwort reagieren, wenn jeder der Prozessoren 30 mit einer Nack-Antwort geantwortet hat.
-
Die Reihenfolge, in der die Interrupt-Steuerung 20 Interrupt-Anforderungen an die Cluster-Interrupt-Steuerungen 24A-24n durchsetzt, kann in einer Ausführungsform programmierbar sein. Insbesondere kann in einer Ausführungsform die Reihenfolge basierend auf der Quelle des Interrupts variieren (z. B. können Interrupts von einer Interrupt-Quelle 32 zu einer Reihenfolge führen, und Interrupts von einer anderen Interrupt-Quelle 32 können zu einer anderen Reihenfolge führen). Zum Beispiel können in einer Ausführungsform die Vielzahl von Prozessoren 30 in einem Cluster von der Vielzahl von Prozessoren 30 in einem anderen Cluster abweichen. Ein Prozessor-Cluster kann Prozessoren aufweisen, die für Leistung optimiert sind, aber hochstromig sein können, während ein anderer Prozessor-Cluster Prozessoren aufweisen kann, die für Stromeffizienz optimiert sind. Interrupts von Quellen, die relativ wenig Verarbeitung erfordern, können Cluster mit den stromeffizienten Prozessoren bevorzugen, während Interrupts von Quellen, die eine signifikante Verarbeitung erfordern, Cluster mit höheren Leistungsprozessoren bevorzugen können.
-
Die Interrupt-Quellen 32 können jede Hardwareschaltlogik sein, die konfiguriert ist, um einen Interrupt durchzusetzen, um zu bewirken, dass ein Prozessor 30 eine Interrupt-Dienstroutine ausführt. Zum Beispiel können verschiedene Peripheriekomponenten (Peripheriegeräte) in einer Ausführungsform Interrupt-Quellen sein. Beispiele für verschiedene Peripheriegeräte werden nachstehend unter Bezugnahme auf 2 beschrieben. Der Interrupt ist asynchron zu dem Code, der vom Prozessor 30 ausgeführt wird, wenn der Prozessor 30 den Interrupt empfängt. Im Allgemeinen kann der Prozessor 30 konfiguriert sein, um einen Interrupt anzunehmen, indem die Ausführung des aktuellen Codes gestoppt wird, der Prozessorkontext gespeichert wird, um eine Wiederaufnahme der Ausführung nach dem Warten des Interrupts zu ermöglichen, und zu einer vorbestimmten Adresse verzweigt wird, um die Ausführung des Interrupt-Codes zu beginnen. Der Code an der vorbestimmten Adresse kann den Zustand von der Interrupt-Steuerung lesen, um zu bestimmen, welche Interrupt-Quelle 32 den Interrupt und eine entsprechende Interrupt-Dienstroutine durchgesetzt hat, die basierend auf dem Interrupt ausgeführt werden soll. Der Code kann die Interrupt-Dienstroutine zur Ausführung (die durch das Betriebssystem geplant werden kann) warten lassen und die von der Interrupt-Dienstroutine erwarteten Daten bereitstellen. Der Code kann dann die Ausführung an den zuvor ausgeführten Code zurückgeben (z. B. kann der Prozessorkontext erneut geladen werden und die Ausführung kann an der Anweisung fortgesetzt werden, an der die Ausführung angehalten wurde).
-
Interrupts können auf beliebige gewünschte Weise von den Interrupt-Quellen 32 an die Interrupt-Steuerung 20 übertragen werden. Zum Beispiel können dedizierte Interrupt-Drähte zwischen Interrupt-Quellen und der Interrupt-Steuerung 20 bereitgestellt werden. Eine gegebene Interrupt-Quelle 32 kann ein Signal auf ihrem dedizierten Draht durchsetzen, um einen Interrupt an die Interrupt-Steuerung 20 zu übertragen. Alternativ können nachrichtensignalisierte Interrupts verwendet werden, bei denen eine Nachricht über eine Verbindung übertragen wird, die für andere Kommunikationen in dem System 10 verwendet wird. Die Nachricht kann beispielsweise in Form eines Schreibens an eine spezifizierte Adresse vorliegen. Die Schreibdaten können die Nachricht sein, die den Interrupt identifiziert. Eine Kombination von dedizierten Drähten aus einigen Interrupt-Quellen 32 und nachrichtensignalisierten Interrupts aus anderen Interrupt-Quellen 32 kann verwendet werden.
-
Die Interrupt-Steuerung 20 kann die Interrupts empfangen und sie als anstehende Interrupts in der Interrupt-Steuerung 20 aufzeichnen. Interrupts von verschiedenen Interrupt-Quellen 32 können durch die Interrupt-Steuerung 20 gemäß verschiedenen programmierbaren Prioritäten priorisiert werden, die durch das Betriebssystem oder einen anderen Steuercode angeordnet sind.
-
Unter Bezugnahme auf 2 ist ein Blockdiagramm einer Ausführungsform des Systems 10, das als System auf einem Chip (SOC) 10 implementiert ist, gezeigt, das mit einem Speicher 12 gekoppelt ist. Wie durch den Namen impliziert, können die Komponenten des SOC 10 auf einem einzigen Halbleitersubstrat als ein „Chip“ einer integrierten Schaltung integriert sein. In manchen Ausführungsformen können die Komponenten auf zwei oder mehr separaten Chips in einem System implementiert sein. Hierin wird jedoch das SOC 10 als ein Beispiel verwendet. In der veranschaulichten Ausführungsform schließen die Komponenten des SOC 10 eine Vielzahl von Prozessor-Clustern 14A-14n, die Interrupt-Steuerung 20, eine oder mehrere Peripheriekomponenten 18 (genauer „Peripheriegeräte“), eine Speichersteuerung 22 und eine Kommunikationsstruktur 27 ein. Die Komponenten 14A-14n, 18, 20 und 22 können alle mit der Kommunikationsstruktur 27 gekoppelt sein. Die Speichersteuerung 22 kann während der Verwendung mit dem Speicher 12 gekoppelt sein. In einigen Ausführungsformen kann mehr als eine Speichersteuerung vorhanden sein, die mit einem entsprechenden Speicher gekoppelt ist. Der Speicheradressraum kann auf jede gewünschte Weise über die Speichersteuerungen abgebildet werden. In der veranschaulichten Ausführungsform können die Prozessor-Cluster 14A-14n die jeweilige Vielzahl von Prozessoren (P) 30 und die jeweiligen Cluster-Interrupt-Steuerungen (ICs) 24A-24n einschließen, wie in 2 gezeigt. Die Prozessoren 30 können die zentrale Verarbeitungseinheiten (CPU(s)) des SOC 10 bilden. In einer Ausführungsform können ein oder mehrere Prozessor-Cluster 14A-14n nicht als CPUs verwendet werden.
-
Die Peripheriegeräte 18 können in einer Ausführungsform Peripheriegeräte einschließen, die Beispiele für Interrupt-Quellen 32 sind. Somit können eine oder mehrere Peripheriegeräte 18 dedizierte Drähte zu der Interrupt-Steuerung 20 aufweisen, um Interrupts an die Interrupt-Steuerung 20 zu übertragen. Andere Peripheriegeräte 18 können nachrichtensignalisierte Interrupts verwenden, die über die Kommunikationsstruktur 27 übertragen werden. In einigen Ausführungsformen können eine oder mehrere off-SOC-Vorrichtungen (in 2 nicht gezeigt) auch Interrupt-Quellen sein. Die gepunktete Linie von der Interrupt-Steuerung 20 zum off-Chip veranschaulicht das Potenzial für die off-SOC-Interrupt-Quellen.
-
Die harte/weiche/erzwungene Ack-/Nack-Schnittstellen zwischen den in 1 gezeigten Cluster-ICs 24A-24n sind in 2 über die Pfeile zwischen den Cluster-ICs 24A-24n und der Interrupt-Steuerung 20 veranschaulicht. In ähnlicher Weise werden die Req Ack-/Nack-Schnittstellen zwischen den Prozessoren 30 und den Cluster-ICs 24A-24n in 1 durch die Pfeile zwischen den Cluster-ICs 24A-24n und den Prozessoren 30 in den jeweiligen Clustern 14A-14n veranschaulicht.
-
Wie vorstehend erwähnt, können die Prozessor-Cluster 14A-14n einen oder mehrere Prozessoren 30 einschließen, die als CPU des SOC 10 dienen können. Die CPU des Systems schließt den einen oder die mehreren Prozessoren ein, welche die Hauptsteuersoftware des Systems, wie beispielsweise ein Betriebssystem, ausführen. Allgemein kann durch die CPU während der Verwendung ausgeführte Software die anderen Komponenten des Systems steuern, um die gewünschte Funktionalität des Systems zu verwirklichen. Die Prozessoren können auch andere Software ausführen, wie z. B. Anwendungsprogramme. Die Anwendungsprogramme können Benutzerfunktionalität bereitstellen, und sie können auf dem Betriebssystem aufbauen in Bezug auf Vorrichtungssteuerung unterer Ebene, Planung, Speichermanagement usw. Dementsprechend können die Prozessoren auch als Anwendungsprozessoren bezeichnet werden.
-
Allgemein kann ein Prozessor jede beliebige Schaltlogik und oder jeden beliebigen Mikrocode einschließen, die oder der konfiguriert ist, um Anweisungen auszuführen, die in einer durch den Prozessor implementierten Anweisungssatzarchitektur definiert sind. Prozessoren können Prozessorkerne, die auf einer integrierten Schaltung mit anderen Komponenten als einem System auf einem Chip (SOC 10) implementiert sind, oder andere Ebenen der Integration einbeziehen. Prozessoren können ferner diskrete Mikroprozessoren umfassen, sowie Prozessorkerne und/oder Mikroprozessoren, die in Mehrfachchipmodul-Implementierungen integriert sind; Prozessoren, die als mehrere integrierte Schaltungen implementiert sind; usw.
-
Die Speichersteuerung 22 kann allgemein die Schaltlogik zum Empfangen von Speichervorgängen von den anderen Komponenten des SOC 10 und zum Zugreifen auf den Speicher 12 einschließen, um die Speichervorgänge durchzuführen. Die Speichersteuerung 22 kann konfiguriert sein, um auf jeden beliebigen Typ von Speicher 12 zuzugreifen. Beispielsweise kann der Speicher 12 ein statischer RAM (SRAM) sein oder dynamischer RAM (DRAM), wie z. B. synchroner DRAM (SDRAM) einschließlich DRAM mit doppelter Datenrate (DDR, DDR2, DDR3, DDR4 usw.). Versionen mit geringer Leistung/mobile Versionen des DDR DRAM können unterstützt werden (z. B. LPDDR, mDDR usw.). Die Speichersteuerung 22 kann Warteschlangen für Speichervorgänge zum Ordnen (und potenziellen Umordnen) der Operationen und zum Vorlegen der Operationen an den Speicher 12 einschließen. Die Speichersteuerung 22 kann ferner Datenpuffer einschließen, um Schreibdaten, die auf ein Schreiben in dem Speicher warten, und Lesedaten, die auf ein Zurückgeben an die Quelle des Speichervorgangs warten, zu speichern. In manchen Ausführungsformen kann die Speichersteuerung 22 einen Speicher-Cache einschließen, um Speicherdaten zu speichern, auf die kürzlich zugegriffen wurde. In SOC-Implementierungen kann der Speicher-Cache zum Beispiel den Energieverbrauch in dem SOC reduzieren, indem ein erneuter Zugriff von Daten aus dem Speicher 12 vermieden wird, wenn erwartet wird, dass bald erneut auf sie zugegriffen wird. In einigen Fällen kann der Speicher-Cache auch als ein System-Cache bezeichnet werden, im Gegensatz zu privaten Caches wie z. B. dem L2-Cache oder Caches in den Prozessoren, die nur für bestimmte Komponenten dienen. Zusätzlich muss sich in manchen Ausführungsformen ein System-Cache nicht innerhalb der Speichersteuerung 22 befinden.
-
Die Peripheriegeräte 18 können ein beliebiger Satz von in dem SOC 10 eingeschlossener zusätzlicher Hardwarefunktionalität sein. Zum Beispiel können die Peripheriegeräte 18 Videoperipheriegeräte einschließen, wie etwa einen Bildsignalprozessor, der zum Verarbeiten von Bilderfassungsdaten von einer Kamera oder einem anderen Bildsensor konfiguriert ist, GPUs, Video-Encoder/-Decoder, Skalierer, Rotatoren, Mischer usw. Die Peripheriegeräte können Audioperipheriegeräte einschließen, wie etwa Mikrofone, Lautsprecher, Schnittstellen für Mikrofone und Lautsprecher, Audioprozessoren, digitale Signalprozessoren, Mischer usw. Die Peripheriegeräte können Schnittstellensteuerungen für verschiedene Schnittstellen außerhalb des SOC 10 einschließen, einschließlich Schnittstellen, wie etwa Universal Serial Bus (USB), Peripheral Component Interconnect (PCI), einschließlich PCI Express (PCIe), serielle und parallele Ports usw. Die Verbindung zur externen Vorrichtung in 1 wird durch einen gestrichelten Pfeil veranschaulicht, der sich extern zu dem SOC 10 erstreckt. Die Peripherieeinheiten können Netzwerkperipherieeinheiten, wie beispielsweise „Media Access Controller“ (MACs) einschließen. Jeder beliebige Satz von Hardware kann eingeschlossen sein.
-
Die Kommunikationsstruktur 27 kann jede beliebige Kommunikationsverbindung und jedes beliebige Protokoll zum Kommunizieren zwischen den Komponenten des SOC 10 sein. Die Kommunikationsstruktur 27 kann busgestützt sein, einschließlich gemeinsam genutzter Buskonfigurationen, Crossbar-Konfigurationen und hierarchischen Bussen mit Brücken. Die Kommunikationsstruktur 27 kann auch packungsgestützt sein und kann hierarchisch sein mit Brücken, Crossbar-, Punkt-zu-Punkt- oder anderen Verbindungen.
-
Es ist zu beachten, dass die Anzahl von Komponenten des SOC 10 (und die Anzahl von Teilkomponenten für die in 2 gezeigten, wie etwa die Prozessoren 30 in jedem Prozessor-Cluster 14A-14n von Ausführungsform zu Ausführungsform) schwanken kann. Zusätzlich kann sich die Anzahl von Prozessoren 30 in einem Prozessor-Cluster 14A-14n von der Anzahl von Prozessoren 30 in einem anderen Prozessor-Cluster 14A-14n unterscheiden. Es kann mehr oder weniger von jeder Komponente/Teilkomponente geben als die in 2 gezeigte Anzahl.
-
3 ist ein Blockdiagramm, das eine Ausführungsform einer Zustandsmaschine veranschaulicht, die in einer Ausführungsform durch die Interrupt-Steuerung 20 implementiert werden kann. Bei der dargestellten Ausführungsform schließen die Zustände einen Ruhezustand 40, einen weichen Zustand 42, einen harten Zustand 44, einen erzwungenen Zustand 46 und einen Warteableitzustand 48 ein.
-
Im Ruhezustand 40 können keine Interrupts anstehen. Im Allgemeinen kann die Zustandsmaschine aus einem der anderen Zustände in den Ruhezustand 40 zurückkehren, wenn keine Interrupts anstehen, wie in 3 gezeigt. Wenn mindestens ein Interrupt empfangen wurde, kann die Interrupt-Steuerung 20 in den weichen Zustand 42 übergehen. Die Interrupt-Steuerung 20 kann auch einen Zeitüberschreitungs-Zähler initialisieren, um zu beginnen, ein Zeitüberschreitungs-Intervall zu zählen, was bewirken kann, dass die Zustandsmaschine in den erzwungenen Zustand 46 übergeht. Der Zeitüberschreitungs-Zähler kann auf Null initialisiert werden und kann hochgezählt werden und mit einem Zeitüberschreitungs-Wert verglichen werden, um eine Zeitüberschreitung zu erkennen. Alternativ kann der Zeitüberschreitungs-Zähler auf den Zeitüberschreitungs-Wert initialisiert werden und kann bis zum Erreichen von Null runtergezählt werden. Das Hochzählen/Runterzählen kann in jedem Taktzyklus des Takts für die Interrupt-Steuerung 20 durchgeführt werden oder kann gemäß einem anderen Takt (z. B. einem festen Frequenztakt von einem piezoelektrischen Oszillator oder dergleichen) hochgezählt/runtergezählt werden.
-
In dem weichen Zustand 42 kann die Interrupt-Steuerung 20 konfiguriert sein, um eine weiche Iteration des Versuchens einen Interrupt zu liefern, zu initialisieren. Wenn eine der Cluster-Interrupt-Steuerungen 24A-24n die Ack-Antwort während der weichen Iteration überträgt und mindestens ein Interrupt anstehend ist, kann die Interrupt-Steuerung 20 in den Warteableitzustand 48 übergehen. Der Warteableitzustand 48 kann bereitgestellt werden, da ein gegebener Prozessor einen Interrupt annehmen kann, aber tatsächlich mehrere Interrupts von der Interrupt-Steuerung erfassen kann, die er für ihre jeweiligen Interrupt-Dienstroutinen in eine Warteschlange stellt. Der Prozessor kann weiterhin Interrupts ableiten, bis alle Interrupts aus der Interrupt-Steuerung 20 gelesen wurden, oder kann bis zu einer bestimmten maximalen Anzahl von Interrupts lesen und zur Verarbeitung zurückkehren, oder kann Interrupts lesen, bis ein Zeitgeber abläuft, in verschiedenen Ausführungsformen. Wenn der vorstehend erwähnte Zeitgeber abläuft und noch Interrupts anstehen, kann die Interrupt-Steuerung 20 konfiguriert sein, um in den erzwungenen Zustand 46 überzugehen und eine erzwungene Iteration zum Liefern von Interrupts einzuleiten. Wenn der Prozessor das Ableiten der Interrupts unterbricht und mindestens ein Interrupt ansteht, oder neue Interrupts anstehen, kann die Interrupt-Steuerung 20 konfiguriert sein, um in den weichen Zustand 42 zurückzukehren und die weiche Iteration fortzusetzen.
-
Wenn die weiche Iteration mit Nack-Antworten von jeder Cluster-Interrupt-Steuerung 24A-24n abschließt (und mindestens ein Interrupt anstehend bleibt), kann die Interrupt-Steuerung 20 so konfiguriert sein, um in den harten Zustand 44 überzugehen und eine harte Iteration einzuleiten. Wenn eine Cluster-Interrupt-Steuerung 24A-24n die Ack-Antwort während der harten Iteration bereitstellt und mindestens ein anstehender Interrupt vorhanden ist, kann die Interrupt-Steuerung 20 in den Warteableitzustand 48 übergehen, ähnlich wie in der vorstehende Erörterung. Wenn die harte Iteration mit Nack-Antworten von jeder Cluster-Interrupt-Steuerung 24A-24n abschließt und mindestens ein anstehender Interrupt vorhanden ist, kann die Interrupt-Steuerung 20 konfiguriert sein, um in den erzwungenen Zustand 46 überzugehen und eine erzwungene Iteration einzuleiten. Die Interrupt-Steuerung 20 kann im erzwungenen Zustand 46 verbleiben, bis keine anstehenden Interrupts mehr vorhanden sind.
-
4 ist ein Flussdiagramm, das den Betrieb einer Ausführungsform der Interrupt-Steuerung 20 veranschaulicht, wenn eine weiche oder harte Iteration durchgeführt wird (z. B. in den Zuständen 42 oder 44 in 3). Obwohl die Blöcke der Einfachheit des Verständnisses wegen in einer bestimmten Reihenfolge gezeigt sind, können andere Reihenfolgen verwendet werden. Blöcke können parallel in kombinatorischen Logikschaltungen in der Interrupt-Steuerung 20 ausgeführt werden. Blöcke, Kombinationen von Blöcken und/oder das Flussdiagramm als Ganzes können über mehrere Taktzyklen geleitet werden. Die Interrupt-Steuerung 20 kann konfiguriert sein, um den in 4 veranschaulichten Vorgang zu implementieren.
-
Die Interrupt-Steuerung kann konfiguriert sein, um eine Cluster-Interrupt-Steuerung 24A-24n (Block 50) auszuwählen. Jeder Mechanismus zum Auswählen der Cluster-Interrupt-Steuerung 24A-24n aus der Vielzahl von Interrupt-Steuerungen 24A-24n kann verwendet werden. Zum Beispiel kann eine programmierbare Reihenfolge des Clusters von Interrupt-Steuerungen 24A-24n angeben, welcher Cluster von Interrupt-Steuerungen 24A-24n ausgewählt wird. In einer Ausführungsform kann die Reihenfolge auf der Interrupt-Quelle eines gegebenen Interrupts basieren (z. B. kann es mehrere Reihenfolgen geben, eine bestimmte Reihenfolge kann basierend auf der Interrupt-Quelle ausgewählt werden). Eine solche Implementierung kann es unterschiedlichen Interrupt-Quellen ermöglichen, Prozessoren eines gegebenen Typs zu bevorzugen (z. B. leistungsoptimierte oder effizienzoptimierte), indem zunächst versucht wird, den Interrupt an Prozessor-Cluster des gewünschten Typs zu liefern, bevor sie sich zu einem Prozessor-Cluster eines anderen Typs weiterbewegen. In einer anderen Ausführungsform kann ein zuletzt gelieferter Algorithmus verwendet werden, um die jüngste Cluster-Interrupt-Steuerung 24A-24n auszuwählen (z. B. die Cluster-Interrupt-Steuerung 24A-24n, die zuletzt eine Ack-Antwort für einen Interrupt erzeugt hat), um die Interrupts über verschiedene Prozessor-Cluster hinweg zu verteilen. In einer anderen Ausführungsform kann ein zuletzt gelieferter Algorithmus verwendet werden, um eine Cluster-Interrupt-Steuerung auszuwählen (z. B. die Cluster-Interrupt-Steuerung 24A-24n, die zuletzt eine Ack-Antwort für einen Interrupt erzeugt hat), um die Möglichkeit zu nutzen, dass der Interrupt-Code oder der -Zustand noch in dem Prozessor-Cluster zwischengespeichert ist. Beliebige Mechanismen oder Kombinationen von Mechanismen können verwendet werden.
-
Die Interrupt-Steuerung 20 kann konfiguriert sein, um die Interrupt-Anforderung (hart oder weich, abhängig von der aktuellen Iteration) an die ausgewählte Cluster-Interrupt-Steuerung 24A-24n (Block 52) zu übertragen. Zum Beispiel kann die Interrupt-Steuerung 20 ein hartes oder weiches Interrupt-Anforderungssignal an die ausgewählte Cluster-Interrupt-Steuerung 24A-24n durchsetzen. Wenn die ausgewählte Cluster-Interrupt-Steuerung 24A-24n eine Ack-Antwort an die Interrupt-Anforderung bereitstellt (Entscheidungsblock 54, „Ja“-Zweig), kann die Interrupt-Steuerung 20 so konfiguriert sein, um in den Warteableitzustand 48 überzugehen, um dem Prozessor 30 in dem Prozessor-Cluster 14A-14n, welcher der ausgewählten Cluster-Interrupt-Steuerung 24A-24n zugeordnet ist, zu ermöglichen, einen oder mehrere anstehende Interrupts zu bedienen (Block 56). Wenn die ausgewählte Cluster-Interrupt-Steuerung eine Nack-Antwort (Entscheidungsblock 58, „Ja“-Zweig) bereitstellt und mindestens eine Cluster-Interrupt-Steuerung 24A-24n vorhanden ist, die in der aktuellen Iteration nicht ausgewählt wurde (Entscheidungsblock 60, „Ja“-Zweig), kann die Interrupt-Steuerung 20 konfiguriert sein, um die nächste Cluster-Interrupt-Steuerung 24A-24n gemäß dem implementierten Auswahlmechanismus (Block 62) auszuwählen und zu Block 52 zurückzukehren, um die Interrupt-Anforderung an die ausgewählte Cluster-Interrupt-Steuerung 24A-24n durchzusetzen. Somit kann die Interrupt-Steuerung 20 in dieser Ausführungsform konfiguriert sein, um seriell zu versuchen, die Interrupt-Steuerung an die Vielzahl von Cluster-Interrupt-Steuerungen 24A-24n während einer Iteration über die Vielzahl von Cluster-Interrupt-Steuerungen 24A-24n zu liefern. Wenn die ausgewählte Cluster-Interrupt-Steuerung 24A-24n die Nack-Antwort (Entscheidungsblock 58, „Ja“-Zweig) bereitstellt und keine weiteren auszuwählenden Cluster-Interrupt-Steuerungen 24A-24n vorhanden sind (z. B. alle Cluster-Interrupt-Steuerungen 24A-24n ausgewählt wurden), kann die Cluster-Interrupt-Steuerung 20 so konfiguriert sein, um in den nächsten Zustand in der Zustandsmaschine überzugehen (z. B. in den harten Zustand 44, wenn die aktuelle Iteration die weiche Iteration ist, oder in den erzwungenen Zustand 46, wenn die aktuelle Iteration die harte Iteration ist)(Block 64). Wenn eine Antwort noch nicht für die Interrupt-Anforderung empfangen wurde (Entscheidungsblöcke 54 und 58, „Nein“-Zweige), kann die Interrupt-Steuerung 20 konfiguriert sein, um das Warten auf die Antwort fortzusetzen.
-
Wie vorstehend erwähnt, kann ein Zeitüberschreitungs-Mechanismus vorhanden sein, der initialisiert werden kann, wenn der Interrupt-Lieferungsprozess beginnt. Wenn die Zeitüberschreitung während eines beliebigen Zustands auftritt, kann in einer Ausführungsform die Interrupt-Steuerung 20 konfiguriert sein, um sich in den erzwungenen Zustand 46 zu bewegen. Alternativ kann der Zeitgeber-Ablauf nur im Warteableitzustand 48 in Betracht gezogen werden.
-
5 ist ein Flussdiagramm, das den Betrieb einer Ausführungsform einer Cluster-Interrupt-Steuerung 24A-24n basierend auf einer Interrupt-Anforderung von der Interrupt-Steuerung 20 veranschaulicht. Obwohl die Blöcke der Einfachheit des Verständnisses wegen in einer bestimmten Reihenfolge gezeigt sind, können andere Reihenfolgen verwendet werden. Blöcke können parallel in kombinatorischen Logikschaltungen in der Interrupt-Steuerung 24A-24n parallel ausgeführt werden. Blöcke, Kombinationen von Blöcken und/oder das Flussdiagramm als Ganzes können über mehrere Taktzyklen geleitet werden. Die Cluster-Interrupt-Steuerung 24A-24n kann konfiguriert sein, um den in 5 veranschaulichten Vorgang zu implementieren.
-
Wenn die Interrupt-Anforderung eine harte oder erzwungene Anforderung ist (Entscheidungsblock 70, „Ja“-Zweig), kann die Cluster-Interrupt-Steuerung 24A-24n konfiguriert sein, um alle heruntergefahrenen (z. B. schlafenden) Prozessoren 30 hochzufahren (Block 72). Wenn die Interrupt-Anforderung eine erzwungene Interrupt-Anforderung ist (Entscheidungsblock 74, „Ja“-Zweig), kann die Cluster-Interrupt-Steuerung 24A-24n konfiguriert sein, um alle Prozessoren 30 parallel zu unterbrechen (Block 76). Ack/Nack kann im erzwungenen Fall nicht angewendet werden, sodass die Cluster-Interrupt-Steuerung 24A-24n die Durchsetzung der Interrupt-Anforderungen fortsetzen kann, bis mindestens ein Prozessor den Interrupt annimmt. Alternativ kann die Cluster-Interrupt-Steuerung 24A-24n konfiguriert sein, um eine Ack-Antwort von einem Prozessor zu empfangen, der angibt, dass er den Interrupt annehmen wird, und kann den erzwungenen Interrupt beenden und eine Ack-Antwort an die Interrupt-Steuerung 20 übertragen.
-
Wenn die Interrupt-Anforderung eine harte Anforderung ist (Entscheidungsblock 74, „Nein“-Zweig) oder eine weiche Anforderung (Entscheidungsblock 70, „Nein“-Zweig) ist, kann die Cluster-Interrupt-Steuerung konfiguriert sein, um einen eingeschalteten Prozessor 30 auszuwählen (Block 78). Jeder Auswahlmechanismus kann, ähnlich den vorstehend erwähnten Mechanismen, zum Auswählen von Cluster-Interrupt-Steuerungen 24A-24n durch die Interrupt-Steuerung 20 (z. B. programmierbare Reihenfolge, zuletzt unterbrochen, kürzlich unterbrochen usw.) verwendet werden. In einer Ausführungsform kann die Reihenfolge auf den Prozessor-IDs basieren, die den Prozessoren in dem Cluster zugewiesen sind. Die Cluster-Interrupt-Steuerung 24A-24n kann konfiguriert sein, um die Interrupt-Anforderung an den ausgewählten Prozessor 30 durchzusetzen, welcher die Anforderung an den Prozessor 30 (Block 80) überträgt. Wenn der ausgewählte Prozessor 30 die Ack-Antwort (Entscheidungsblock 82, „Ja“-Zweig) bereitstellt, kann die Cluster-Interrupt-Steuerung 24A-24n konfiguriert sein, um die Ack-Antwort an die Interrupt-Steuerung 20 bereitzustellen (Block 84) und den Versuch zu beenden, den Interrupt innerhalb des Prozessor-Clusters zu liefern. Wenn der ausgewählte Prozessor 30 die Nack-Antwort (Entscheidungsblock 86, „Ja“-Zweig) bereitstellt und mindestens ein eingeschaltet Prozessor 30 vorhanden ist, der noch nicht ausgewählt wurde (Entscheidungsblock 88, „Ja“-Zweig), kann die Cluster-Interrupt-Steuerung 24A-24n konfiguriert sein, um den nächsten eingeschalteten Prozessor (z. B. gemäß dem vorstehend beschriebenen Auswahlmechanismus) auszuwählen (Block 90) und die Interrupt-Anforderung an den ausgewählten Prozessor 30 (Block 80) durchzusetzen. Somit kann die Cluster-Interrupt-Steuerung 24A-24n seriell versuchen, den Interrupt an die Prozessoren 30 in dem Prozessor-Cluster zu liefern. Wenn es keine auszuwählenden eingeschalteten Prozessoren mehr gibt (Entscheidungsblock 88, „Nein“-Zweig), kann die Cluster-Interrupt-Steuerung 24A-24n konfiguriert sein, um die Nack-Antwort an die Interrupt-Steuerung 20 bereitzustellen (Block 92). Wenn der ausgewählte Prozessor 30 noch keine Antwort bereitgestellt hat (Entscheidungsblöcke 82 und 86, „Nein“-Zweige), kann die Cluster-Interrupt-Steuerung 24A-24n konfiguriert sein, um auf die Antwort zu warten.
-
In einer Ausführungsform kann in einer harten Iteration, wenn ein Prozessor 30 aus dem ausgeschalteten Zustand eingeschaltet wurde, kann er dann schnell für einen Interrupt verfügbar sein, da ihm noch keine Aufgabe durch das Betriebssystem oder eine andere Steuersoftware zugewiesen wurde. Das Betriebssystem kann konfiguriert sein, um Interrupts im Prozessor 30, der von einem ausgeschalteten Zustand eingeschaltet wurden, sobald wie nach der Initialisierung des Prozessors praktisch möglich, zu demaskieren. Die Cluster-Interrupt-Steuerung 24A-24n kann einen kürzlich eingeschalteten Prozessor zuerst in der Auswahlreihenfolge auswählen, um die Wahrscheinlichkeit zu verbessern, dass der Prozessor eine Ack-Antwort für den Interrupt bereitstellt.
-
6 ist ein ausführlicheres Blockdiagramm einer Ausführungsform eines Prozessors 30. In der veranschaulichten Ausführungsform schließt der Prozessor 30 eine Abruf- und Decodiereinheit 100 (einschließlich eines Anweisungszwischenspeichers oder ICache, 102), eine Map-Dispatch-Rename-Einheit (MDR-Einheit) 106 (einschließlich einer Prozessor-Interrupt-Acknowledgement-Steuerschaltung (Int Ack-Steuerschaltung) 126 und eines Umordnungspuffers 108), eine oder mehrere Reservierungsstationen 110, eine oder mehrere Ausführungseinheiten 112, eine Registerdatei 114, einen Datencache (DCache) 104, eine Lade-/Speichereinheit (LSU) 118, eine Reservierungsstation (RS) für die Lade-/Speichereinheit 116 und eine Kernschnittstelleneinheit (CIF) 122, ein. Die Abruf- und Decodiereinheit 100 ist mit der MDR-Einheit 106 gekoppelt, die mit den Reservierungsstationen 110, der Reservierungsstation 116 und der LSU 118 gekoppelt ist. Die Reservierungsstationen 110 sind mit den Ausführungseinheiten 28 gekoppelt. Die Registerdatei 114 ist mit den Ausführungseinheiten 112 und der LSU 118 gekoppelt. Die LSU 118 ist außerdem mit dem DCache 104 gekoppelt, der mit der CIF 122 und der Registerdatei 114 gekoppelt ist. Die LSU 118 schließt eine Speicherwarteschlange 120 (STQ 120) und eine Lastwarteschlange (LDQ 124) ein. Die CIF 122 ist mit der Prozessor-Int-Ack-Steuerschaltung 126 gekoppelt, um eine Interrupt-Anforderung (Int Req) zu übermitteln, die an den Prozessor 30 durchgesetzt wurde, und um eine Ack-/Nack-Antwort von der Prozessor-Int-Ack-Steuerschaltung 126 an den Interrupt-Anforderer zu übermitteln (z. B. eine Cluster-Interrupt-Steuerung 24A-24n).
-
Die Prozessor-Int-Ack-Steuerschaltung 126 kann konfiguriert sein, um zu bestimmen, ob der Prozessor 30 eine Interrupt-Anforderung annehmen kann, die an den Prozessor 30 übertragen wurde, und kann basierend auf der Bestimmung eine Ack- und Nack-Angabe an die CIF 122 bereitstellen. Wenn der Prozessor 30 die Ack-Antwort bereitstellt, ist der Prozessor 30 verpflichtet, den Interrupt innerhalb eines spezifizierten Zeitraums anzunehmen (und die Ausführung des Interrupt-Codes zu starten, um den Interrupt und die Interrupt-Quelle zu identifizieren). Das heißt, die Prozessor-Int-Ack-Steuerschaltung 126 kann konfiguriert sein, um eine Acknowledge-Antwort (Ack-Antwort) auf die Interrupt-Anforderung zu erzeugen, die basierend auf einer Bestimmung empfangen wird, dass der Umordnungspuffer 108 die Anweisungsvorgänge zu einem unterbrechbaren Punkt zurückziehen wird und die LSU 118 die Lade-/Speichervorgänge an dem unterbrechbaren Punkt innerhalb des spezifizierten Zeitraums abschließen wird. Wenn festgestellt wird, dass mindestens einer von dem Umordnungspuffer 108 und der LSU 118 den unterbrechbaren Punkt innerhalb der angegebenen Zeitspanne nicht erreichen (oder möglicherweise nicht erreichen), kann die Prozessor-Int-Ack-Steuerschaltung 126 konfiguriert sein, um eine Nicht-Acknowledge-Antwort (Nack-Antwort) auf die Interrupt-Anforderung zu erzeugen. Zum Beispiel kann der spezifizierte Zeitraum in einer Ausführungsform in der Größenordnung von 5 Mikrosekunden liegen, kann aber in anderen Ausführungsformen länger oder kürzer sein.
-
In einer Ausführungsform kann die Prozessor-Int-Ack-Steuerschaltung 126 konfiguriert sein, um den Inhalt des Umordnungspuffers 108 zu untersuchen, um eine anfängliche Bestimmung von Ack/Nack durchzuführen. Das heißt, es kann einen oder mehrere Fälle geben, in denen die Prozessor-Int-Ack-Steuerschaltung 126 in der Lage sein kann zu bestimmen, dass die Nack-Antwort basierend auf dem Zustand innerhalb der MDR-Einheit 106 erzeugt wird. Zum Beispiel schließt der Umordnungspuffer 108 einen oder mehrere Anweisungsvorgänge ein, die noch nicht ausgeführt wurden und die eine potenzielle Ausführungslatenz aufweisen, die größer als ein bestimmter Schwellenwert ist, wobei die Prozessor-Int-Ack-Steuerschaltung 126 konfiguriert sein kann, um zu bestimmen, dass die Nack-Antwort erzeugt werden soll. Die Ausführungslatenz wird als „potenziell“ bezeichnet, da einige Anweisungsvorgänge eine variable Ausführungslatenz aufweisen können, die datenabhängig, speicherlatenzabhängig usw. sein kann. Somit kann die potenzielle Ausführungslatenz die längste Ausführungslatenz sein, die auftreten kann, selbst wenn sie nicht immer auftritt. In anderen Fällen kann die potenzielle Ausführungslatenz die längste Ausführungslatenz sein, die über einer bestimmten Wahrscheinlichkeit usw. auftritt. Beispiele für solche Anweisungen können bestimmte kryptografische Beschleunigungsanweisungen, bestimmte Arten von Floating-Point- oder Vektoranweisungen usw. einschließen. Die Anweisungen können als potenziell lange Latenz betrachtet werden, wenn die Anweisungen nicht unterbrechbar sind. Das heißt, die unterbrechungsfreien Anweisungen sind erforderlich, um die Ausführung abzuschließen, sobald sie die Ausführung beginnen.
-
Eine andere Bedingung, die beim Erzeugen der Ack-/Nack-Antwort berücksichtigt werden kann, ist der Zustand der Interrupt-Maskierung im Prozessor 30. Wenn Interrupts maskiert werden, wird verhindert, dass der Prozessor 30 Interrupts annimmt. Die Nack-Antwort kann erzeugt werden, wenn die Prozessor-Int-Ack-Steuerschaltung 126 erkennt, dass Interrupts in dem Prozessor maskiert sind (was in einer Ausführungsform in der MDR-Einheit 106 ein beibehaltener Zustand sein kann). Insbesondere kann in einer Ausführungsform die Interrupt-Maske einen architektonisch aktuellen Zustand aufweisen, der den zuletzt zurückgezogenen Anweisungen entspricht, und eine oder mehrere spekulative Aktualisierungen der Interrupt-Maske können ebenfalls in die Warteschlange aufgenommen werden. In einer Ausführungsform kann die Nack-Antwort erzeugt werden, wenn der architektonisch aktuelle Zustand derjenige ist, dass Interrupts maskiert sind. In einer anderen Ausführungsform kann die Nack-Antwort erzeugt werden, wenn der architektonisch aktuelle Zustand derjenige ist, dass Interrupts maskiert sind, oder wenn einer der spekulativen Zustände angibt, dass Interrupts maskiert sind.
-
Andere Fälle können auch als Nack-Antwortfälle in der Prozessor-Int-Ack-Steuerschaltung 126 betrachtet werden. Wenn zum Beispiel eine anstehende Umleitung in dem Umordnungspuffer vorliegt, der sich auf die Ausnahmehandhabung bezieht (z. B. keine Mikroarchitekturumleitungen wie Zweig-Fehlprognosen oder dergleichen), kann eine Nack-Antwort erzeugt werden. Bestimmte Debug-Modi (z. B. Einzelschrittmodus) und interne Interrupts mit hoher Priorität können als Nack-Antwortfälle betrachtet werden.
-
Wenn die Prozessor-Int Ack-Steuerschaltung 126 keine Nack-Antwort erkennt, die auf der Untersuchung des Reorder-Puffers 108 und des Prozessorzustands in der MDR-Einheit 106 basiert, kann die Prozessor-Int Ack-Steuerschaltung 126 mit der LSU 118 verbunden werden, um zu bestimmen, ob es Last-/Speichervorgänge mit langer Latenz gibt (z. B. an die CIF 122 oder außerhalb des Prozessors 30), die ausgegeben wurden und die noch nicht abgeschlossen wurden, jedoch mit dem Umordnungspuffer und der Lade-/Speichereinheit gekoppelt sind. Zum Beispiel können Ladevorgänge und Speichervorgänge in den Vorrichtungsraum (z. B. Ladevorgänge und Speichervorgänge, die an Peripheriegeräte anstelle des Speichers abgebildet werden) möglicherweise eine potenziell Langlatenz aufweisen. Wenn die LSU 118 antwortet, dass Last-/Speichervorgänge mit langer Latenz vorhanden sind (z. B. potenziell größer als ein Schwellenwert, der sich von dem oben erwähnten, in der MDR-Einheit 106 verwendeten Schwellenwert, unterscheiden kann oder gleich sein kann), kann dann die Prozessor-Int-Ack-Steuerschaltung 126 bestimmen, dass die Antwort Nack sein soll. Andere potenzielle Vorgänge mit langer Latenz können zum Beispiel Synchronisationssperrvorgänge sein.
-
Wenn in einer Ausführungsform die Bestimmung nicht die Nack-Antwort für die vorstehenden Fälle ist, kann die LSU 118 einen Zeiger auf den Umordnungspuffer 108 bereitstellen, der einen ältesten Lade-/Speicher-Vorgang identifiziert, welchen die LSU 118 verpflichtet ist abzuschließen (z. B. von der LDQ 124 oder der STQ 120 gestartet wurde, oder anderweitig nicht spekulativ in der LSU 118 ist). Der Zeiger kann als „wahrer Lade-/Speicher- (LS-) nicht spekulativer (NS) Zeiger“ bezeichnet werden. Der MDR 106/Umordnungspuffer 108 kann versuchen, am LS-NS-Zeiger zu unterbrechen, und wenn es innerhalb des spezifizierten Zeitraums nicht möglich ist, kann die Prozessor-Int-Ack-Steuerschaltung 126 bestimmen, dass die Nack-Antwort erzeugt werden soll. Andernfalls kann die Ack-Antwort erzeugt werden.
-
Die Abruf- und Decodiereinheit 100 kann konfiguriert sein, um Anweisungen zur Ausführung durch den Prozessor 30 abzurufen und die Anweisungen zur Ausführung in Vorgängen zu decodieren. Insbesondere kann die Abruf- und Decodiereinheit 100 konfiguriert sein, um Anweisungen zwischenzuspeichern, die zuvor aus dem Speicher (durch die CIF 122) in den ICache 102 abgerufen wurden, und kann konfiguriert sein, um einen spekulativen Pfad von Anweisungen für den Prozessor 30 abzurufen. Die Abruf- und Decodiereinheit 100 kann verschiedene Vorhersagestrukturen zum Vorhersagen des Abrufpfads implementieren. Zum Beispiel kann ein Nächster-Abruf-Prädiktor verwendet werden, um Abrufadressen basierend auf zuvor ausgeführten Befehlen vorherzusagen. Zweig-Prädiktoren verschiedenen Typs können verwendet werden, um die nächste Abrufvorhersage zu verifizieren, oder können verwendet werden, um nächste Abrufadressen vorherzusagen, wenn der nächste Abruf-Prädiktor nicht verwendet wird. Die Abruf- und Decodiereinheit 100 kann konfiguriert sein, um die Anweisungen in Anweisungsvorgängen zu decodieren. In einigen Ausführungsformen kann ein gegebener Befehl in Abhängigkeit von der Komplexität des Befehls zu einer oder mehreren Befehlsoperationen decodiert werden. Besonders komplexe Befehle können in einigen Ausführungsformen mikrocodiert sein. In solchen Ausführungsformen kann die Mikrocode-Routine für den Befehl in Befehlsoperationen codiert werden. In anderen Ausführungsformen kann jede Anweisung in der Anweisungssatzarchitektur, die durch den Prozessor 30 implementiert wird, in eine einzelne Anweisungsoperation decodiert werden und somit kann die Anweisungsoperation im Wesentlichen synonym mit der Anweisung sein (obwohl sie in der Form durch den Decodierer modifiziert werden kann). Der Begriff Befehlsoperation kann hierin kurz als „Operation“ bezeichnet werden.
-
Die MDR-Einheit 106 kann dafür konfiguriert sein, um die Operationen auf spekulative Ressourcen (z. B. physische Register) abzubilden, um eine Ausführung außerhalb der Reihenfolge und/oder eine spekulative Ausführung zu ermöglichen, und kann die Operationen an die Reservierungsstationen 110 und 116 senden. Die Operationen können von den Architekturregistern, die in den entsprechenden Anweisungen verwendet werden, auf physische Register in der Registerdatei 114 abgebildet werden. Das heißt, die Registerdatei 114 kann einen Satz von physischen Registern implementieren, die eine größere Anzahl aufweisen können als die architektonischen Register, die durch die Anweisungssatzarchitektur spezifiziert sind, die von dem Prozessor 30 implementiert wird. Die MDR-Einheit 106 kann die Abbildung der architektonischen Register auf physische Register verwalten. In einer Ausführungsform kann es separate physische Register für verschiedene Operandentypen (z. B. ganze Zahl, Medien, Gleitkommazahl usw.) geben. In anderen Ausführungsformen können die physischen Register für Operandentypen gemeinsam genutzt werden. Die MDR-Einheit 106 kann auch für das Verfolgen der spekulativen Ausführung und für das Abschließen von Operationen oder das Räumen von fehlspekulierten Operationen verantwortlich sein. Der Umordnungspuffer 108 kann zum Beispiel verwendet werden, um die Programmreihenfolge von Operationen zu verfolgen und das Zurückziehen/Räumen zu verwalten. Das heißt, der Umordnungspuffer 108 kann konfiguriert sein, um eine Vielzahl von Anweisungsvorgängen zu verfolgen, die Anweisungen entsprechen, die von dem Prozessor abgerufen werden und nicht durch den Prozessor zurückgezogen werden.
-
Operationen können für die Ausführung geplant werden, wenn die Quellenoperanden für die Operationen bereit sind. In der veranschaulichten Ausführungsform wird für jede der Ausführungseinheiten 28 und der LSU 118 eine dezentrale Ablaufplanung verwendet, z. B. in den Reservierungsstationen 116 und 110. Andere Ausführungsformen können eine zentrale Ablaufplanung implementieren, falls gewünscht.
-
Die LSU 118 kann konfiguriert sein, um Lade-/Speichervorgänge auszuführen. Im Allgemeinen kann ein Speichervorgang (Speicher-Operation) ein Anweisungsvorgang sein, der einen Zugriff auf den Speicher spezifiziert (obwohl der Speicherzugriff in einem Cache, wie etwa dem DCache 104, abgeschlossen sein kann). Eine Lade-Speicheroperation kann eine Übertragung von Daten von einer Speicherstelle in ein Register spezifizieren, während eine Speicher-Speicheroperation eine Übertragung von Daten von einem Register an eine Speicherstelle spezifizieren kann. Lade-Speicheroperationen können als Lade-Speicher-Ops, Ladeoperationen oder Ladevorgänge bezeichnet werden; und Speicher-Speicheroperationen können als Speicher-Speicher-Ops, Speicheroperationen oder Speichervorgänge bezeichnet werden. In einer Ausführungsform können Speicheroperationen als eine Speicheradressenoperation und eine Speicherdatenoperation ausgeführt werden. Die Speicheradressenoperation kann so definiert sein, dass sie die Adresse des Speichervorgangs erzeugt, den Cache für eine anfängliche Treffer/Fehler-Bestimmung untersucht und die Speicherwarteschlange mit den Adress- und Cache-Informationen aktualisiert. Somit kann die Speicheradressenoperation die Adressoperanden als Quellenoperanden aufweisen. Die Speicherdatenoperation kann so definiert sein, dass sie die Speicherdaten in die Speicherwarteschlange liefert. Somit muss die Speicherdatenoperation nicht die Adressoperanden als Quellenoperanden aufweisen, sondern kann den Speicherdatenoperanden als einen Quellenoperanden aufweisen. In vielen Fällen können die Adressoperanden eines Speichervorgangs vor dem Speicherdatenoperand verfügbar sein und somit kann die Adresse früher als die Speicherdaten bestimmt und verfügbar gemacht werden. In einigen Ausführungsformen kann es möglich sein, dass die Speicherdatenoperation vor der entsprechenden Speicheradressenoperation ausgeführt wird, z. B. wenn der Speicherdatenoperand vor einem oder mehreren der Speicheradressoperanden bereitgestellt wird. Während Speicheroperationen in einigen Ausführungsformen als Speicheradressen- und Speicherdatenoperation ausgeführt werden können, können andere Ausführungsformen die Aufteilung Speicheradresse/Speicherdaten nicht implementieren. Der Rest dieser Offenbarung wird häufig Speicheradressenoperationen (und Speicherdatenvorgänge) als ein Beispiel verwenden, aber Implementierungen, die nicht die Speicheradressen-/Speicherdatenoptimierung verwenden, werden ebenfalls in Betracht gezogen. Die über die Ausführung der Speicheradressenoperation erzeugte Adresse kann als eine Adresse bezeichnet werden, die der Speicheroperation entspricht.
-
Lade-/Speichervorgänge können in der Reservierungsstation 116 empfangen werden, die konfiguriert sein kann, um die Quelloperanden der Vorgänge zu überwachen, um zu bestimmen, wann sie verfügbar sind, und dann die Operationen an die Lade- bzw. Speicherpipelines ausgeben. Einige Quelloperanden können verfügbar sein, wenn die Vorgänge in der Reservierungsstation 116 empfangen werden, was in den Daten angezeigt werden kann, die von der Reservierungsstation 116 von der MDR-Einheit 106 für den entsprechenden Vorgang empfangen werden. Andere Operanden können über die Ausführung von Vorgängen durch andere Ausführungseinheiten 112 oder sogar durch Ausführung früherer Ladevorgänge verfügbar werden. Die Operanden können von der Reservierungsstation 116 gesammelt werden oder können aus einer Registerdatei 114 beim Ausgeben aus der Reservierungsstation 116 gelesen werden, wie in 6 gezeigt.
-
In einer Ausführungsform kann die Reservierungsstation 116 konfiguriert sein, um Lade-/Speichervorgänge außerhalb der Reihenfolge auszugeben (von ihrer ursprünglichen Reihenfolge in der Codefolge, die durch den Prozessor 30 ausgeführt wird, als „Programmreihenfolge“ bezeichnet), wenn die Operanden verfügbar werden. Um sicherzustellen, dass Platz in der LDQ 124 oder der STQ 120 für ältere Vorgänge vorhanden ist, die durch jüngere Vorgänge in der Reservierungsstation 116 umgangen werden, kann die MDR-Einheit 106 eine Schaltlogik einschließen, die LDQ 124 oder STQ 120 Einträge zu Vorgängen vorbelegt, die an die Lade-/Speichereinheit 118 übertragen werden. Wenn kein verfügbarer LDQ-Eintrag für einen Ladevorgang vorhanden ist, der in der MDR-Einheit 106 verarbeitet wird, kann die MDR-Einheit 106 trotzdem den Ladevorgang und nachfolgende Vorgänge in der Programmreihenfolge senden, bis ein oder mehrere LDQ-Einträge verfügbar werden. In ähnlicher Weise kann die MDR-Einheit 106, wenn kein STQ-Eintrag für einen Speicher verfügbar ist, den Operations-Versand beenden, bis ein oder mehrere STQ-Einträge verfügbar werden. In anderen Ausführungsformen kann die Reservierungsstation 116 Vorgänge in der Programmreihenfolge ausgeben und die LRQ 46-/STQ 120-Zuweisung kann beim Ausgeben von der Reservierungsstation 116 auftreten.
-
Die LDQ 124 kann Ladevorgänge von der anfänglichen Ausführung bis zum Zurückziehen durch die LSU 118 verfolgen. Die LDQ 124 kann dafür verantwortlich sein, sicherzustellen, dass die Speicherordnungsregeln nicht verletzt werden (zwischen außerhalb der Reihenfolge ausgeführten Ladevorgängen sowie zwischen Lade- und Speichervorgängen). Wenn eine Speicherreihenfolgeverletzung erkannt wird, kann die LDQ 124 eine Umleitung für den entsprechenden Ladevorgang signalisieren. Eine Umleitung kann bewirken, dass der Prozessor 30 den Ladevorgang und nachfolgende Vorgänge in der Programmreihenfolge räumt und die entsprechenden Anweisungen erneut abruft. Der spekulative Zustand für den Ladevorgang und nachfolgende Vorgänge kann verworfen werden und die Vorgänge können von der Abruf- und Decodiereinheit 100 wieder abgerufen und erneut verarbeitet werden, um wieder ausgeführt zu werden.
-
Wenn eine Lade-/Speicheradressenoperation von der Reservierungsstation 116 ausgegeben wird, kann die LSU 118 konfiguriert sein, um die Adresse zu generieren, auf die durch den Lade-/Speichervorgang zugegriffen wird, und kann konfiguriert sein, um die Adresse von einer effektiven oder virtuellen Adresse, die aus den Adressoperanden der Last-/Speicheradressenoperation erstellt wurde, in eine physische Adresse zu übersetzen, die tatsächlich zur Adressierung des Speichers verwendet wird. Die LSU 118 kann konfiguriert sein, um einen Zugang zum DCache 104 zu erzeugen. Für Ladevorgänge, die in dem DCache 104 auftreffen, können Daten spekulativ von dem DCache 104 an den Zieloperanden des Ladevorgangs weitergeleitet werden (z. B. ein Register in der Registerdatei 114), es sei denn, die Adresse trifft auf eine vorhergehende Operation in dem STQ 120 (d. h. ein älterer Speicher in der Programmreihenfolge) oder der Ladevorgang wird erneut wiedergegeben. Die Daten können auch an abhängige Operationen weitergeleitet werden, die spekulativ geplant waren und sich in den Ausführungseinheiten 28 befinden. Die Ausführungseinheiten 28 können in solchen Fällen die weitergeleiteten Daten anstelle der Datenausgabe aus der Registerdatei 114 umgehen. Wenn die Speicherdaten zur Weiterleitung auf einem STQ-Treffer verfügbar sind, können die von dem STQ 120 ausgegebene Daten anstelle von Cache-Daten weitergeleitet werden. Cache-Fehler und STQ-Treffer, bei denen die Daten nicht weitergeleitet werden können, können Gründe für die Wiedergabe sein und die Ladedaten können in diesen Fällen nicht weitergeleitet werden. Der Cache-Treffer-/Fehler-Status aus dem DCache 104 kann in der STQ 120 oder LDQ 124 zur späteren Verarbeitung protokolliert werden.
-
Die LSU 118 kann mehrere Lade-Pipelines implementieren. Zum Beispiel können in einer Ausführungsform drei Lade-Pipelines („Pipes“) implementiert werden, obwohl mehr oder weniger Pipelines in anderen Ausführungsformen implementiert sein können. Jede Pipeline kann einen anderen Ladevorgang, unabhängig und parallel zu anderen Ladevorgängen, ausführen. Das heißt, die RS 116 kann eine beliebige Anzahl von Ladevorgängen an die Anzahl von Lade-Pipelines im gleichen Taktzyklus ausgeben. Die LSU 118 kann auch ein oder mehrere Speicher-Pipelines implementieren und insbesondere mehrere Speicher-Pipelines implementieren. Die Anzahl der Speicher-Pipelines muss jedoch nicht gleich der Anzahl von Lade-Pipelines sein. In einer Ausführungsform können zum Beispiel zwei Speicher-Pipelines verwendet werden. Die Reservierungsstation 116 kann Speicheradressenoperationen und Speicherdatenoperationen ausgeben unabhängig und parallel zu den Speicher-Pipelines. Die Speicher-Pipelines können mit der STQ 120 gekoppelt sein, die so konfiguriert sein kann, dass sie Speichervorgänge hält, die ausgeführt, aber nicht verpflichtend wurden.
-
Die CIF 122 kann für die Kommunikation mit dem Rest eines Systems verantwortlich sein, einschließlich des Prozessors 30, im Namen des Prozessors 30. Zum Beispiel kann die CIF 122 konfiguriert sein, um Daten für DCache-Fehler 104 und ICache-Fehler 102 anzufordern. Wenn die Daten zurückgegeben werden, kann die CIF 122 die Cachefüllung an den entsprechenden Cache signalisieren. Für das Füllen des DCaches kann die CIF 122 auch die LSU 118 informieren. Die LDQ 124 kann versuchen, die wiedergegebenen Ladevorgänge zu planen, die auf die Cache-Füllung warten, sodass die wiedergegebenen Ladevorgänge die Fülldaten weiterleiten können, wie sie dem DCache 104 bereitgestellt werden (als Füllweiterleitungsoperation bezeichnet). Wenn der wiedergegebene Ladevorgang während der Füllung nicht erfolgreich wiedergegeben wird, kann der wiedergegebene Ladevorgang anschließend geplant und durch den DCache 104 als ein Cache-Treffer wiedergegeben werden. Die CIF 122 kann auch modifizierte Cache-Zeilen zurückschreiben, die durch den DCache 104 freigegeben wurden, Daten für nicht cachebare Speicher zusammenfügen usw.
-
Die Ausführungseinheiten 112 können in verschiedenen Ausführungsformen beliebige Arten von Ausführungseinheiten einschließen. Zum Beispiel können die Ausführungseinheiten 112 Ganzzahl-, Gleitkommazahl- und/oder Vektorausführungseinheiten einschließen. Ganzzahl-Ausführungseinheiten können dafür konfiguriert sein, ganzzahlige Operationen auszuführen. Im Allgemeinen ist eine ganzzahlige Operation ein Vorgang, bei dem eine definierte Operation (z. B. eine arithmetische, eine logische, eine Verschiebung/Drehung usw.) an ganzzahligen Operanden durchgeführt wird. Ganze Zahlen können numerische Werte sein, bei denen jeder Wert einer mathematischen ganzen Zahl entspricht. Die Ganzzahl-Ausführungseinheiten können Verzweigungsverarbeitungs-Hardware zum Verarbeiten von Verzweigungsoperationen einschließen oder es kann separate Verzweigungsausführungseinheiten geben.
-
Die Gleitkomma-Ausführungseinheiten können dafür konfiguriert sein, Gleitkommaoperationen auszuführen. Im Allgemeinen können Gleitkommaoperationen Operationen sein, welche so definiert worden sind, dass sie an Gleitkommaoperanden zur Ausführung gebracht werden. Ein Gleitkommaoperand ist ein Operand, der als eine Basis dargestellt ist, die einen Exponenten aufweist und mit einer Mantisse (oder einem Signifikanten) multipliziert wird. Der Exponent, das Vorzeichen des Operanden und die Mantisse/der Signifikant können explizit im Operanden dargestellt werden und die Basis kann implizit sein (in einer Ausführungsform z. B. Basis 2).
-
Vektorausführungseinheiten können dafür konfiguriert sein, Vektoroperationen auszuführen. Vektoroperationen können verwendet werden, z. B. um Mediendaten (z. B. Bilddaten wie etwa Pixel, Audiodaten usw.) zu verarbeiten. Die Medienverarbeitung kann dadurch gekennzeichnet sein, dass an bedeutenden Datenmengen die gleiche Verarbeitung durchgeführt wird, wobei jedes Datum ein relativ kleiner Wert ist (z. B. 8 Bits oder 16 Bits, verglichen mit 32 Bits bis 64 Bits für eine ganze Zahl). Somit schließen Vektoroperationen Single-Instruction-Multiple-Data-Operationen (SIMD-Operationen) oder Vektoroperationen an einem Operanden ein, der mehrere Mediendaten repräsentiert.
-
Somit kann jede Ausführungseinheit 112 Hardware umfassen, die dafür konfiguriert ist, die Vorgänge durchzuführen, die für die Operationen definiert sind, für deren Abwicklung die spezielle Ausführungseinheit definiert ist. Die Ausführungseinheiten können im Allgemeinen unabhängig voneinander sein, in dem Sinne, dass jede Ausführungseinheit dafür konfiguriert sein kann, an einer Operation zu arbeiten, die für diese Ausführungseinheit ausgegeben wurde, ohne von anderen Ausführungseinheiten abhängig zu sein. Anders betrachtet kann jede Ausführungseinheit eine unabhängige Pipe zum Ausführen von Operationen sein. Unterschiedliche Ausführungseinheiten können unterschiedliche Ausführungslatenzzeiten (z. B. unterschiedliche Pipe-Längen) aufweisen. Zusätzlich können verschiedene Ausführungseinheiten unterschiedliche Latenzzeiten bis zu der Pipeline-Stufe aufweisen, an der eine Umgehung erfolgt, und somit können die Taktzyklen, bei denen eine spekulative Ablaufplanung von abhängigen Operationen basierend auf einem Ladevorgang auftritt, basierend auf der Art der Operation und der Ausführungseinheit 28, welche die Operation ausführt, variieren.
-
Es sei angemerkt, dass in verschiedenen Ausführungsformen eine beliebige Anzahl und Art der Ausführungseinheiten 112 eingeschlossen sein können, einschließlich Ausführungsformen mit einer Ausführungseinheit und Ausführungsformen mit mehreren Ausführungseinheiten.
-
Eine Cache-Zeile kann die Einheit der Zuweisung/Freigabe in einem Cache sein. Das heißt, die Daten innerhalb der Cache-Zeile können im Cache als eine Einheit zugewiesen/freigegeben werden. Cache-Zeilen können in der Größe variieren (z. B. 32 Bytes, 64 Bytes, 128 Bytes oder größere oder kleinere Cache-Zeilen). Unterschiedliche Caches können unterschiedliche Cache-Zeilengrößen aufweisen. Der ICache 102 und der DCache 104 können jeweils ein Cache mit einer beliebigen gewünschten Kapazität, Cache-Zeilengröße und Konfiguration sein. In verschiedenen Ausführungsformen kann es weitere zusätzliche Cache-Ebenen zwischen dem DCache 104/ICache 102 und dem Hauptspeicher geben.
-
An verschiedenen Stellen werden Lade-/Speichervorgänge als jünger oder älter als andere Lade-/Speichervorgänge bezeichnet. Eine erste Operation kann jünger sein als eine zweite Operation, wenn in der Programmreihenfolge die erste Operation nach der zweiten Operation ausgeführt wird. In ähnlicher Weise kann eine erste Operation älter sein als eine zweite Operation, wenn in der Programmreihenfolge die erste Operation der zweiten Operation vorhergeht.
-
7 ist ein Blockdiagramm einer Ausführungsform eines Umordnungspuffers 108. In der veranschaulichten Ausführungsform schließt der Umordnungspuffer 108 eine Vielzahl von Einträgen ein. Jeder Eintrag kann in verschiedenen Ausführungsformen einer Anweisung, einem Anweisungsvorgang oder einer Gruppe von Anweisungsvorgängen entsprechen. Verschiedene Zustände, die sich auf die Anweisungsvorgänge beziehen, können in dem Umordnungspuffers gespeichert werden (z. B. logische und physische Zielregister, um die architektonische Registerabbildung, Ausnahmen oder Umleitungen, die während der Ausführung erfasst werden, zu aktualisieren usw.).
-
In 7 sind mehrere Zeiger veranschaulicht. Der Zurückziehzeiger 130 kann auf die älteste nicht zurückgezogene Operation im Prozessor 30 zeigen. Das heißt, Operationen vor der Operation an dem Zurückziehzeiger 130 wurden aus dem Umordnungspuffer 108 zurückgezogen, der architektonische Zustand des Prozessors 30 wurde aktualisiert, um die Ausführung der zurückgezogenen Operationen widerzuspiegeln, usw. Der Auflösungszeiger 132 kann auf die älteste Operation zeigen, für welche die vorhergehenden Zweiganweisungen wie korrekt vorhergesagt aufgelöst wurden und für welche die vorhergehenden Vorgänge, die eine Ausnahme verursachen könnten, aufgelöst wurden, um keine Ausnahme zu verursachen. Die Vorgänge zwischen dem Zurückziehzeiger 130 und dem Auflösungszeiger 132 können in dem Umordnungspuffer 108 verpflichtende Vorgänge sein. Das heißt, die Ausführung der Anweisungen, welche die Operationen erzeugt haben, wird auf den Auflösungszeiger 132 (in Abwesenheit externer Interrupts) abgeschlossen. Der jüngste Zeiger 134 kann auf die letzte abgerufene und versandte Operation von der MDR-Einheit 106 zeigen. Die Operationen zwischen dem Auflösungszeiger 132 und dem jüngsten Zeiger 134 sind spekulativ und können aufgrund von Ausnahmen, Zweig-Fehlprognosen usw. geräumt werden.
-
Der wahre LS-NS-Zeiger 136 ist der oben beschriebene wahre LS-NS-Zeiger. Der wahre LS-NS Zeiger kann nur erzeugt werden, wenn eine Interrupt-Anforderung durchgesetzt wurde und die anderen Tests für die Nack-Antwort negativ waren (z. B. wird durch diese Tests eine Ack-Antwort angezeigt). Die MDR-Einheit 106 kann versuchen, den Auflösungszeiger 132 zurück zu dem wahren LS-NS-Zeiger 136 zu bewegen. Es können verpflichtende Operationen in dem Umordnungspuffer 108 vorhanden sein, die nicht geräumt werden können (z. B. sobald sie verpflichtend sind, müssen sie abgeschlossen und zurückgezogen werden). Einige Gruppen von Anweisungsvorgängen sind möglicherweise nicht unterbrechbar (z. B. Mikrocoderoutinen, bestimmte unterbrechungsfreie Ausnahmen usw.). In solchen Fällen kann die Prozessor-Int-Ack-Steuerung 126 konfiguriert sein, um die Nack-Antwort zu erzeugen. Es können Operationen oder Kombinationen von Operationen vorhanden sein, die zu komplex sind, um im Prozessor 30 „rückgängig“ gemacht zu werden, und das Vorhandensein solcher Operationen zwischen dem Auflösungszeiger und dem wahren LS-NS-Zeiger 136 kann die Prozessor-Int-Ack-Steuerung 126 veranlassen, die Nack-Antwort zu erzeugen. Wenn der Umordnungspuffer 108 beim Bewegen des Auflösungszeigers zurück zu dem wahren LS-NS-Zeiger 136 erfolgreich ist, kann die Prozessor-Int-Ack-Steuerschaltung 126 konfiguriert sein, um die Ack-Antwort zu erzeugen.
-
8 ist ein Flussdiagramm, das den Betrieb einer Ausführungsform der Prozessor-Int-Ack-Steuerschaltung 126 basierend auf dem Empfang einer Interrupt-Anforderung durch den Prozessor 30 veranschaulicht. Obwohl die Blöcke der Einfachheit des Verständnisses wegen in einer bestimmten Reihenfolge gezeigt sind, können andere Reihenfolgen verwendet werden. Blöcke können parallel in kombinatorischen Logikschaltungen in der Prozessor-Int-Ack-Steuerschaltung 126 ausgeführt werden. Blöcke, Kombinationen von Blöcken und/oder das Flussdiagramm als Ganzes können über mehrere Taktzyklen geleitet werden. Die Prozessor-Int-Ack-Steuerschaltung 126 kann dafür konfiguriert sein, die in 8 veranschaulichte Operation zu implementieren.
-
Die Prozessor-Int-Ack-Steuerschaltung 126 kann konfiguriert sein, um zu bestimmen, ob überhaupt Nack-Bedingungen vorhanden sind, die in der MDR-Einheit 106 erfasst wurden (Entscheidungsblock 140). Zum Beispiel werden potenziell lange Latenzvorgänge, die nicht abgeschlossen sind, wobei Interrupts maskiert werden usw. können Nack-Bedingungen sein, die in der MDR-Einheit 106 erfasst werden. Wenn dies so ist (Entscheidungsblock 140, „Ja“-Zweig), kann die Prozessor-Int-Ack-Steuerschaltung 126 konfiguriert sein, um die Nack-Antwort zu erzeugen (Block 142). Wenn nicht (Entscheidungsblock 140, „Nein“-Zweig), kann die Prozessor-Int-Ack-Steuerschaltung 126 mit der LSU kommunizieren, um Nack-Bedingungen und/oder den wahren LS-NS-Zeiger anzufordern (Block 144). Wenn die LSU 118 eine Nack-Bedingung erkennt (Entscheidungsblock 146, „Ja“-Zweig), kann die Prozessor-Int-Ack-Steuerschaltung 126 konfiguriert sein, um die Nack-Antwort zu erzeugen (Block 142). Wenn die LSU 118 keine Nack-Bedingung erkennt (Entscheidungsblock 146, „Nein“-Zweig), kann die Prozessor-Int-Ack-Steuerschaltung 126 konfiguriert sein, um den wahren LS-NS-Zeiger von der LSU 118 (Block 148) zu empfangen, und kann versuchen, den Auflösungszeiger in dem Umordnungspuffer 108 zurück zu dem wahren LS-NS-Zeiger zu bewegen (Block 150). Wenn die Bewegung nicht erfolgreich ist (z. B. gibt es mindestens einen Anweisungsvorgang zwischen dem wahren LS-Zeiger und dem Auflösungszeiger, der nicht geräumt werden kann) (Entscheidungsblock 152, „Nein“-Zweig), kann die Prozessor-Int-Ack-Steuerschaltung 126 konfiguriert sein, um die Nack-Antwort zu erzeugen (Block 142). Andernfalls (Entscheidungsblock 152, „Ja“-Zweig) kann die Prozessor-Int-Ack-Steuerschaltung 126 konfiguriert sein, um die Ack-Antwort zu erzeugen (Block 154). Die Prozessor-Int-Ack-Steuerschaltung 126 kann konfiguriert sein, um den Auflösungszeiger am wahren LS-NS-Zeiger einzufrieren, und Operationen zurückziehen bis der Zurückziehzeiger den Auflösungszeiger erreicht (Block 156). Die Prozessor-Int-Ack-Steuerschaltung 126 kann dann konfiguriert sein, um den Interrupt anzunehmen (Block 158). Das heißt, der Prozessor 30 kann beginnen, den Interrupt-Code abzurufen (z. B. von einer vorbestimmten Adresse, die den Interrupts gemäß der Anweisungssatzarchitektur zugeordnet ist, die durch den Prozessor 30 implementiert wird).
-
In einer anderen Ausführungsform kann das SOC 10 eines der SOCs in einem System sein. Insbesondere können in einer Ausführungsform mehrere Instanzen des SOC 10 verwendet werden. Andere Ausführungsformen können asymmetrische SOCs aufweisen. Jedes SOC kann ein separater integrierter Schaltungschip sein (z. B. implementiert auf einem separaten Halbleitersubstrat oder „Die“). Der Die kann über einen Interposer, eine Package-auf-Packagelösung oder dergleichen verpackt und miteinander verbunden werden. Alternativ kann der Die in einer Chip-on-Chip-Packagelösung, einem Multichip-Modul usw. verpackt werden.
-
9 ist ein Blockdiagram, das eine Ausführungsform eines Systems veranschaulicht, welches die mehreren Instanzen des SOC 10 einschließt. Zum Beispiel können das SOC 10A, das SOC 10B usw. bis zum SOC 10q in einem System miteinander gekoppelt sein. Jedes SOC 10A-10q schließt eine Instanz der Interrupt-Steuerung 20 (z. B. Interrupt-Steuerung 20A, Interrupt-Steuerung 20B und Interrupt-Steuerung 20q in 9) ein. Eine Interrupt-Steuerung, in diesem Beispiel Interrupt-Steuerung 20A, kann als primäre Interrupt-Steuerung für das System dienen. Andere Interrupt-Steuerungen 20B bis 20q können als sekundäre Interrupt-Steuerungen dienen.
-
Die Schnittstelle zwischen der primären Interrupt-Steuerung 20A und der sekundären Steuerung 20B ist in 9 detaillierter gezeigt, und die Schnittstelle zwischen der primären Interrupt-Steuerung 20A und anderen sekundären Interrupts-Steuerungen, wie etwa der Interrupt-Steuerung 20q, kann ähnlich sein. In der Ausführungsform von 9 ist die sekundäre Steuerung 20B konfiguriert, um Interrupt-Informationen bereitzustellen, die Interrupts identifizieren, die von Interrupt-Quellen auf dem SOC 10B (oder externen Vorrichtungen, die mit dem SOC 10B gekoppelt sind, in 9 nicht gezeigt) als Ints 160 ausgegeben werden. Die primäre Interrupt-Steuerung 20A ist konfiguriert, um harte, weiche und erzwungene Iterationen an die sekundäre Interrupt-Steuerung 20B (Referenznummer 162) zu signalisieren und ist konfiguriert, um Ack-/Nack-Antworten von der Interrupt-Steuerung 20B (Referenznummer 164) zu empfangen. Die Schnittstelle kann auf beliebige Weise implementiert sein. Zum Beispiel können dedizierte Drähte zwischen dem SOC 10A und dem SOC 10B gekoppelt sein, um Referenznummern 160, 162 und/oder 164 zu implementieren. In einer anderen Ausführungsform können Nachrichten zwischen der primären Interrupt-Steuerung 20A und den sekundären Interrupt-Steuerungen 20B-20q über eine allgemeine Schnittstelle zwischen den SOCs 10A-10q ausgetauscht werden, die auch für andere Kommunikationen verwendet wird. In einer Ausführungsform können programmierte Eingabe-/Ausgabeschreibvorgänge (PIO-Schreibvorgänge) mit den Interrupt-Daten, harten /weichen /erzwungenen Anforderungen, bzw. Ack-/Nack-Antworten als Daten verwendet werden.
-
Die primäre Interrupt-Steuerung 20A kann konfiguriert sein, um die Interrupts aus verschiedenen Interrupt-Quellen zu sammeln, die auf dem SOC 10A, einem der anderen SOCs 10B-10q, welche off-Chip-Vorrichtungen sein können, oder einer beliebigen Kombination davon, sein können. Die sekundären Interrupt-Steuerungen 20B-20q können konfiguriert sein, um Interrupts an die primäre Interrupts-Steuerung 20A (Ints in 9) zu übertragen, wodurch die Interrupt-Quelle zu der primären Interrupt-Steuerung 20A identifiziert wird. Die primäre Interrupt-Steuerung 20A kann auch für die Gewährleistung der Lieferung von Interrupts verantwortlich sein. Die sekundären Interrupt-Steuerungen 20B-20q können konfiguriert sein, dass sie die Richtung von der primären Interrupt-Steuerung 20A übernehmen, wodurch die weichen, harten und erzwungenen Iterationsanforderungen von der primären Interrupt-Steuerung 20A empfangen werden und die Iterationen über die Cluster-Interrupt-Steuerungen 24A-24n durchgeführt werden, die auf dem entsprechenden SOC 10B-10q verkörpert sind. Basierend auf den Ack-/Nack-Antworten aus den Cluster-Interrupt-Steuerungen 24A-24n können die sekundären Interrupt-Steuerungen 20B-20q Ack-/Nack-Antworten bereitstellen. In einer Ausführungsform kann die primäre Interrupt-Steuerung 20A seriell versuchen, Interrupts über die sekundären Interrupt-Steuerungen 20B-20q in den weichen und harten Iterationen zu liefern und kann parallel zu den sekundären Interrupt-Steuerungen 20B-20q in die erzwungene Iteration liefern.
-
In einer Ausführungsform kann die primäre Interrupt-Steuerung 20A konfiguriert sein, um eine gegebene Iteration an einer Teilmenge der Cluster-Interrupt-Steuerungen durchzuführen, die in demselben SOC 10A wie die primäre Interrupts-Steuerung 20A integriert ist, bevor die gegebene Iteration an Teilmengen der Cluster-Interrupt-Steuerungen auf anderen SOCs 10B-10q (mit Hilfe der sekundären Interrupt-Steuerungen 20B-20q) auf anderen SOCs 10B-10q durchgeführt wird. Das heißt, die primäre Interrupt-Steuerung 20A kann seriell versuchen, den Interrupt durch die Cluster-Interrupt-Steuerungen auf dem SOC 10A zu liefern, und kann dann mit den sekundären Interrupt-Steuerungen 20B-20q kommunizieren. Die Versuche, durch die sekundären Interrupt-Steuerungen 20B-20q zu liefern, können auch seriell durchgeführt werden. Die Reihenfolge der Versuche durch die sekundären Interrupts-Steuerungen 20B-20q kann auf jede beliebige Art und Weise bestimmt werden, ähnlich den vorstehend beschriebenen Ausführungsformen für Cluster-Interrupt-Steuerungen und Prozessoren in einem Cluster (z. B. programmierbare Reihenfolge, zuletzt angenommen, kürzlich angenommen, usw.). Dementsprechend können die primäre Interrupts-Steuerung 20A und die sekundären Interrupt-Steuerungen 20B-20q die Software von der Existenz der mehreren SOCs 10A-10q weitgehend isolieren. Das heißt, die SOCs 10A-10q können als ein einzelnes System konfiguriert sein, das für die Softwareausführung auf dem einzelnen System weitgehend transparent ist. Während der Systeminitialisierung können einige Ausführungsformen programmiert werden, um die Interrupt-Steuerungen 20A-20q, wie vorstehend erörtert, zu konfigurieren, aber ansonsten können die Interrupt-Steuerungen 20A-20q die Lieferung von Interrupts über mehrere mögliche SOCs 10A-10q verwalten, jeweils auf einem separaten Halbleiter-Die, ohne Softwareunterstützung oder besondere Anzeichen der Software für die Multiple-Die-Natur des Systems. Zum Beispiel können Verzögerungen aufgrund der Kommunikation zwischen den Dies im System minimiert werden. Somit kann das einzelne System der Software während der Ausführung nach der Initialisierung als ein einzelnes System erscheinen und die Multi-Die-Natur des Systems kann transparent für die Software sein.
-
Es ist zu beachten, dass die primäre Interrupt-Steuerung 20A und die sekundären Interrupt-Steuerungen 20B-20q in einer Weise arbeiten können, die von Fachleuten auch als „Master“ (d. h. primär) und „Slave“ (d. h. sekundär) bezeichnet wird. Während die primäre/sekundäre Terminologie hierin verwendet wird, ist es ausdrücklich beabsichtigt, dass die Begriffe „primäre“ und „sekundäre“ so ausgelegt werden, dass sie diese Gegenbegriffe umfassen.
-
In einer Ausführungsform kann jede Instanz des SOC 10A-10q sowohl die primäre Interrupt-Steuerschaltung als auch die sekundäre Interrupt-Steuerschaltung aufweisen, die in ihrer Interrupt-Steuerung 20A-20q implementiert sind. Eine Interrupt-Steuerung (z. B. Interrupt-Steuerung 20A) kann als primär während der Herstellung des Systems (z. B. über Sicherungen auf den SOCs 10A-10q oder Pin-Laschen auf einem oder mehreren Pins der SOCs 10A-10q) bezeichnet werden. Alternativ können die primären und sekundären Bezeichnungen während der Initialisierung (oder Boot) des Systems vorgenommen werden.
-
10 ist ein Flussdiagramm, das den Betrieb einer Ausführungsform der primären Interrupt-Steuerung 20A basierend auf dem Empfang eines oder mehrerer Interrupts von einer oder mehreren Interrupt-Quellen veranschaulicht. Obwohl die Blöcke der Einfachheit des Verständnisses wegen in einer bestimmten Reihenfolge gezeigt sind, können andere Reihenfolgen verwendet werden. Blöcke können parallel in kombinatorischen Logikschaltungen in der primären Interrupt-Steuerung 20A durchgeführt werden. Blöcke, Kombinationen von Blöcken und/oder das Flussdiagramm als Ganzes können über mehrere Taktzyklen geleitet werden. Die primäre Interrupt-Steuerung 20A kann dafür konfiguriert sein, die in 10 veranschaulichte Operation zu implementieren.
-
Die primäre Interrupt-Steuerung 20A kann konfiguriert sein, um eine weiche Iteration über die Cluster-Interrupt-Steuerungen durchzuführen, die auf dem lokalen SOC 10A integriert sind (Block 170). Zum Beispiel kann die weiche Iteration dem Flussdiagramm von 4 ähnlich sein. Wenn die lokale weiche Iteration zu einer Ack-Antwort führt (Entscheidungsblock 172, „Ja“-Zweig), kann der Interrupt erfolgreich geliefert werden und die primäre Interrupt-Steuerung 20A kann konfiguriert sein, um in den Ruhezustand 40 zurückzukehren (unter der Annahme, dass keine anstehenden Interrupts mehr vorhanden sind). Wenn die lokale weiche Iteration zu einer Nack-Antwort führt (Entscheidungsblock 172, „Nein“-Zweig), kann die primäre Interrupt-Steuerung 20A konfiguriert sein, um einen der anderen SOCs 10B-10q unter Verwendung einer beliebigen gewünschten Reihenfolge auszuwählen wie vorstehend erwähnt (Block 174). Die primäre Interrupt-Steuerung 20A kann konfiguriert sein, um eine weiche Iterationsanforderung an die sekundäre Interrupt-Steuerung 20B-20q auf dem ausgewählten SOC 10B-10q durchzusetzen (Block 176). Wenn die sekundäre Interrupt-Steuerung 20B-20q eine Ack-Antwort bereitstellt (Entscheidungsblock 178, „Ja“-Zweig), kann der Interrupt erfolgreich geliefert werden und die primäre Interrupt-Steuerung 20A kann konfiguriert sein, um in den Ruhezustand 40 zurückzukehren (unter der Annahme, dass keine anstehenden Interrupts mehr vorhanden sind). Wenn die sekundäre Interrupt-Steuerung 20B-20q eine Nack-Antwort bereitstellt (Entscheidungsblock 178, „Nein“-Zweig) und mehr SOCs 10B-10q vorhanden sind, die noch nicht in der weichen Iteration ausgewählt wurden (Entscheidungsblock 180, „Ja“-Zweig), kann die primäre Interrupt-Steuerung 20A konfiguriert sein, um das nächste SOC 10B-10q gemäß dem implementierten Reihenfolgemechanismus auszuwählen (Block 182) und kann konfiguriert sein, um die weiche Iterationsanforderung an die sekundäre Interrupt-Steuerung 20B-20q auf dem ausgewählten SOC zu übertragen (Block 176) und die Verarbeitung fortzusetzen. Andererseits kann, wenn jedes SOC 10B-10q ausgewählt wurde, die weiche Iteration abgeschlossen sein, da der serielle Versuch, den Interrupt über die sekundären Interrupt-Steuerungen 20B-20q zu liefern, abgeschlossen ist.
-
Basierend auf dem Abschluss der weichen Iteration über die sekundären Interrupt-Steuerungen 20B-20q, ohne den Interrupt erfolgreich zu liefern (Entscheidungsblock 180, „Nein“-Zweig), kann die primäre Interrupt-Steuerung 20A konfiguriert sein, um eine harte Iteration über die lokalen Cluster-Interrupt-Steuerungen durchzuführen, die auf dem lokalen SOC 10A integriert sind (Block 184). Zum Beispiel kann die weiche Iteration dem Flussdiagramm von 4 ähnlich sein. Wenn die lokale harte Iteration zu einer Ack-Antwort führt (Entscheidungsblock 186, „Ja“-Zweig), kann der Interrupt erfolgreich geliefert werden und die primäre Interrupt-Steuerung 20A kann konfiguriert sein, um in den Ruhezustand 40 zurückzukehren (unter der Annahme, dass keine anstehenden Interrupts mehr vorhanden sind). Wenn die lokale harte Iteration zu einer Nack-Antwort führt (Entscheidungsblock 186, „Nein“-Zweig), kann die primäre Interrupt-Steuerung 20A konfiguriert sein, um eines der anderen SOCs 10B-10q unter Verwendung einer beliebigen gewünschten Reihenfolge auszuwählen, wie vorstehend erwähnt (Block 188). Die primäre Interrupt-Steuerung 20A kann konfiguriert sein, um eine harte Iterationsanforderung an die sekundäre Interrupt-Steuerung 20B-20q auf dem ausgewählten SOC 10B-10q durchzusetzen (Block 190). Wenn die sekundäre Interrupt-Steuerung 20B-20q eine Ack-Antwort bereitstellt (Entscheidungsblock 192, „Ja“-Zweig), kann der Interrupt erfolgreich geliefert werden und die primäre Interrupt-Steuerung 20A kann konfiguriert sein, um in den Ruhezustand 40 zurückzukehren (unter der Annahme, dass keine anstehenden Interrupts mehr vorhanden sind). Wenn die sekundäre Interrupt-Steuerung 20B-20q eine Nack-Antwort bereitstellt (Entscheidungsblock 192, „Nein“-Zweig) und mehr SOCs 10B-10q vorhanden sind, die noch nicht in der harten Iteration ausgewählt wurden (Entscheidungsblock 194, „Ja“-Zweig), kann die primäre Interrupt-Steuerung 20A konfiguriert sein, um das nächste SOC 10B-10q gemäß dem implementierten Reihenfolgemechanismus auszuwählen (Block 196) und kann konfiguriert sein, um die harte Iterationsanforderung an die sekundäre Interrupt-Steuerung 20B-20q auf dem ausgewählten SOC zu übertragen (Block 190) und die Verarbeitung fortzusetzen. Andererseits kann, wenn jedes SOC 10B-10q ausgewählt wurde, die harte Iteration abgeschlossen sein, da der serielle Versuch, den Interrupt über die sekundären Interrupt-Steuerungen 20B-20q zu liefern, abgeschlossen ist (Entscheidungsblock 194, „Nein“-Zweig). Die primäre Interrupt-Steuerung 20A kann mit einer erzwungenen Iteration fortfahrend konfiguriert sein (Block 198). Die erzwungene Iteration kann lokal durchgeführt werden oder kann parallel oder seriell über das lokale SOC 10A und die anderen SOCs 10B-10q durchgeführt werden.
-
Wie vorstehend erwähnt, kann ein Zeitüberschreitungs-Mechanismus vorhanden sein, der initialisiert werden kann, wenn der Interrupt-Lieferungsprozess beginnt. Wenn der Zeitüberschreitung während eines beliebigen Zustands auftritt, kann in einer Ausführungsform die Interrupt-Steuerung 20 konfiguriert sein, um sich zur erzwungenen Iteration zu bewegen. Alternativ kann der Zeitgeber-Ablauf nur im Warteableitzustand 48 in Betracht gezogen werden, wie bereits vorstehend erörtert.
-
11 ist ein Flussdiagramm, das den Betrieb einer Ausführungsform einer sekundären Interrupt-Steuerung 20B-20q veranschaulicht. Obwohl die Blöcke der Einfachheit des Verständnisses wegen in einer bestimmten Reihenfolge gezeigt sind, können andere Reihenfolgen verwendet werden. Blöcke können parallel in kombinatorischen Logikschaltungen in der sekundären Interrupt-Steuerung 20B-20q durchgeführt werden. Blöcke, Kombinationen von Blöcken und/oder das Flussdiagramm als Ganzes können über mehrere Taktzyklen geleitet werden. Die sekundäre Interrupt-Steuerung 20B-20q kann dafür konfiguriert sein, die in 11 veranschaulichte Operation zu implementieren.
-
Wenn eine Interrupt-Quelle in dem entsprechenden SOC 10B-10q (oder mit dem SOC 10B-10q gekoppelt) einen Interrupt an die sekundäre Interrupt-Steuerung 20B-20q bereitstellt (Entscheidungsblock 200, „Ja“-Zweig), kann die sekundäre Interrupt-Steuerung 20B-20q konfiguriert sein, um den Interrupt an die primäre Interrupt-Steuerung 20A zur Handhabung zusammen mit anderen Interrupts von anderen Interrupt-Quellen zu übertragen (Block 202).
-
Wenn die primäre Interrupt-Steuerung 20A eine Iterationsanforderung (Entscheidungsblock 204, „Ja“-Zweig) übertragen hat, kann die sekundäre Interrupt-Steuerung 20B-20q konfiguriert sein, um die angeforderte Iteration (hart, weich oder erzwungen) über die Cluster-Interrupt-Steuerungen in dem lokalen SOC 10B-10q durchzuführen (Block 206). Zum Beispiel können die harten und weichen Iterationen der 4 ähnlich sein, und die erzwungene kann parallel zu den Cluster-Interrupt-Steuerungen im lokalen SOC 10B-10q durchgeführt werden. Wenn die Iteration zu einer Ack-Antwort führt (Entscheidungsblock 208, „Ja“-Zweig), kann die sekundäre Interrupt-Steuerung 20B-20q konfiguriert sein, um eine Ack-Antwort an die primäre Interrupt-Steuerung 20A zu übertragen (Block 210). Wenn die Iteration zu einer Nack-Antwort führt (Entscheidungsblock 208, „Nein“-Zweig), kann die sekundäre Interrupt-Steuerung 20B-20q konfiguriert sein, um eine Nack-Antwort an die primäre Interrupt-Steuerung 20A zu übertragen (Block 212).
-
12 ist ein Flussdiagramm, das eine Ausführungsform eines Verfahrens zum Handhaben von Interrupts veranschaulicht. Obwohl die Blöcke der Einfachheit des Verständnisses wegen in einer bestimmten Reihenfolge gezeigt sind, können andere Reihenfolgen verwendet werden. Blöcke können parallel in kombinatorischen Logikschaltungen in den hierin beschriebenen Systemen durchgeführt werden. Blöcke, Kombinationen von Blöcken und/oder das Flussdiagramm als Ganzes können über mehrere Taktzyklen geleitet werden. Die hierin beschriebenen Systeme können konfiguriert sein, um die in 12 veranschaulichte Operation zu implementieren.
-
Eine Interrupt-Steuerung 20 kann einen Interrupt von einer Interrupt-Quelle empfangen (Block 220). In Ausführungsformen, die primäre und sekundäre Interrupt-Steuerungen 20A-20q aufweisen, kann der Interrupt in jeder Interrupt-Steuerung 20A-20q empfangen und der primären Interrupt-Steuerung 20A als Teil des Empfangens des Interrupts von der Interrupt-Quelle bereitgestellt werden. Die Interrupt-Steuerung 20 kann konfiguriert sein, um eine erste Iteration (z. B. eine weiche Iteration) durchzuführen, die seriell versucht, den Interrupt an eine Vielzahl von Cluster-Interrupt-Steuerungen zu liefern (Block 222). Eine jeweilige Cluster-Interrupt-Steuerung der Vielzahl von Cluster-Interrupt-Steuerungen ist einem jeweiligen Prozessor-Cluster zugeordnet, der eine Vielzahl von Prozessoren umfasst. Eine gegebene Cluster-Interrupt-Steuerung der Vielzahl von Cluster-Interrupt-Steuerungen in der ersten Iteration kann konfiguriert sein, um zu versuchen, den Interrupt an eine Teilmenge der jeweiligen Vielzahl von Prozessoren zu liefern, die eingeschaltet sind, ohne zu versuchen, den Interrupt an diejenigen der jeweiligen Vielzahl von Prozessoren zu liefern, die nicht in der Teilmenge eingeschlossen sind. Wenn eine Ack-Antwort empfangen wird, kann die Iteration durch die Interrupt-Steuerung 20 beendet werden (Entscheidungsblock 224, „Ja“-Zweig und Block 226). Andererseits kann (Entscheidungsblock 224, „Nein“-Zweig), basierend auf Nicht-Acknowledge-Antworten (Nack-Antworten) aus der Vielzahl von Cluster-Interrupt-Steuerungen in der ersten Iteration, die Interrupt-Steuerung konfiguriert sein, um eine zweite Iteration über die Vielzahl von Cluster-Interrupt-Steuerungen (z. B. eine harte Iteration) durchzuführen (Block 228). Die gegebene Cluster-Interrupt-Steuerung in der zweiten Iteration kann konfiguriert sein, um diejenigen der jeweiligen Vielzahl von Prozessoren einzuschalten, die ausgeschaltet waren, und versuchen, den Interrupt an die jeweilige Vielzahl der Prozessoren zu liefern. Wenn eine Ack-Antwort empfangen wird, kann die Iteration durch die Interrupt-Steuerung 20 beendet werden (Entscheidungsblock 230, „Ja“-Zweig und Block 232). Andererseits kann (Entscheidungsblock 230, „Nein“-Zweig), basierend auf Nicht-Acknowledge-Antworten (Nack-Antworten) aus der Vielzahl von Cluster-Interrupt-Steuerungen in der zweiten Iteration, die Interrupt-Steuerung konfiguriert sein, um eine dritte Iteration über die Vielzahl von Cluster-Interrupt-Steuerungen (z. B. eine erzwungene Iteration) durchzuführen (Block 234).
-
Computersystem
-
Als Nächstes ist in 13 ein Blockdiagramm einer Ausführungsform eines Systems 700 dargestellt. In der veranschaulichten Ausführungsform schließt das System 700 mindestens eine Instanz eines System-on-a-Chip (SOC) 10 ein, welches mit einer oder mehreren Peripheriegeräten 704 und einem externen Speicher 702 verbunden ist. Es wird eine Stromversorgung (PMU) 708 bereitgestellt, die dem SOC 10 Versorgungsspannungen sowie dem Speicher 702 und/oder den Peripheriegeräten 154 eine oder mehrere Versorgungsspannungen zuführt. In einigen Ausführungsformen kann mehr als eine Instanz des SOC 10 (z. B. die SOCs 10A-10q) eingeschlossen sein (und es kann auch mehr als ein Speicher 702 eingeschlossen sein). Der Speicher 702 kann in einer Ausführungsform den in 2 veranschaulichten Speicher 12 einschließen.
-
Die Peripheriegeräte 704 können abhängig von der Art des Systems 700 eine beliebige gewünschte Schaltlogik einschließen. Zum Beispiel kann in einer Ausführungsform das System 704 eine mobile Vorrichtung (z. B. ein persönlicher digitaler Assistent (PDA), ein Smartphone usw.) sein, und die Peripheriegeräte 704 können Vorrichtungen für verschiedene Typen von drahtloser Kommunikation, wie WiFi, Bluetooth, Mobilfunk, globales Positionsbestimmungssystem usw., einschließen. Die Peripheriegeräte 704 können auch eine zusätzliche Speicherung, einschließlich einer RAM-Speicherung, Solid-State-Speicherung oder Plattenspeicherung, einschließen. Die Peripheriegeräte 704 können Benutzerschnittstellenvorrichtungen, wie einen Anzeigebildschirm, einschließlich Berührungsanzeigebildschirmen oder Mehrfachberührungsanzeigebildschirmen, Tastatur- oder anderer Eingabevorrichtungen, Mikrofonen, Lautsprechern usw., einschließen. In anderen Ausführungsformen kann das System 700 ein beliebiger Typ von Rechensystem (z. B. Desktop-Personal-Computer, Laptop, Arbeitsstation, Nettop usw.) sein.
-
Der externe Speicher 702 kann eine beliebige Art von Speicher einschließen. Zum Beispiel kann der externe Speicher 702 SRAM, ein dynamischer RAM (DRAM), wie etwa der synchrone DRAM (SDRAM), SDRAM mit doppelter Datenrate (DDR, DDR2, DDR3 usw.), RAMBUS DRAM, weniger Leistung verbrauchende Versionen des DDR DRAM (z. B. LPDDR, mDDR usw.) usw. sein. Der externe Speicher 702 kann ein oder mehrere Speichermodule einschließen, an denen die Speichervorrichtungen befestigt sind, wie etwa einreihige Speichermodule (SIMMs), zweireihige Speichermodule (DIMMs) usw. Alternativ kann der externe Speicher 702 eine oder mehrere Speichervorrichtungen einschließen, die an dem SOC 10 in einer Chip-on-Chip- oder Package-on-Package-Implementierung befestigt sind.
-
Wie veranschaulicht, ist das System 700 derart gezeigt, dass es Anwendung in einem breiten Spektrum von Bereichen findet. Zum Beispiel kann das System 700 als Teil der Chips, Schaltlogik, Komponenten usw. eines Desktop-Computers 710, Laptop-Computers 720, Tablet-Computers 730, Mobilfunk- oder Mobiltelefons 740 oder Fernsehgeräts 750 (oder einer Set-Top-Box, die mit einem Fernsehgerät gekoppelt ist) genutzt werden. Ebenfalls veranschaulicht sind eine Smartwatch und eine Gesundheitsüberwachungsvorrichtung 760. In einigen Ausführungsformen kann eine Smartwatch eine Vielfalt von universalrechnenbezogenen Funktionen einschließen. Zum Beispiel kann eine Smartwatch Zugriff auf E-Mail, einen Mobiltelefondienst, einen Benutzerkalender und so weiter bereitstellen. In verschiedenen Ausführungsformen kann eine Gesundheitsüberwachungsvorrichtung eine dedizierte medizinische Vorrichtung sein oder anderweitig eine dedizierte gesundheitsbezogene Funktionalität einschließen. Zum Beispiel kann eine Gesundheitsüberwachungsvorrichtung die Vitalparameter eines Benutzers überwachen, die Nähe eines Benutzers zu anderen Benutzern zum Zweck der epidemiologischen Abstandswahrung, Kontaktverfolgung verfolgen, die Kommunikation im Fall einer Gesundheitsnotlage an einen Notfalldienst bereitstellen und so weiter. In verschiedenen Ausführungsformen kann die vorstehend erwähnte Smartwatch einige oder keine gesundheitsüberwachungsbezogenen Funktionen einschließen. Andere am Körper tragbare Vorrichtungen werden ebenfalls in Betracht gezogen, wie Vorrichtungen, die um den Hals getragen werden, Vorrichtungen, die im menschlichen Körper implantierbar sind, Brillen, die dazu ausgelegt sind, eine Erfahrung einer erweiterten und/oder virtuellen Realität bereitzustellen, und so weiter.
-
Das System 700 kann ferner als Teil eines Cloud-basierten Diensts/von Cloud-basierten Diensten 770 verwendet werden. Zum Beispiel können die zuvor erwähnten Vorrichtungen und/oder andere Vorrichtungen auf Rechenressourcen in der Cloud (d. h. entfernt angeordnete Hardware- und/oder Softwareressourcen) zugreifen. Ferner noch kann das System 700 in einer oder mehreren anderen Vorrichtungen einer Wohnung als den zuvor erwähnten genutzt werden. Zum Beispiel können Geräte innerhalb der Wohnung Zustände überwachen und erkennen, die Aufmerksamkeit erfordern. Zum Beispiel können verschiedene Vorrichtungen innerhalb der Wohnung (z. B. ein Kühlschrank, ein Kühlsystem usw.) den Status der Vorrichtung überwachen und eine Warnung an den Wohnungseigentümer (oder zum Beispiel eine Reparatureinrichtung) bereitstellen, sollte ein bestimmtes Ereignis erkannt werden. Alternativ kann ein Thermostat die Temperatur in der Wohnung überwachen und kann Einstellungen eines Heiz-/Kühlsystems basierend auf einem Verlauf von Reaktionen auf verschiedene Zustände durch den Wohnungseigentümer automatisieren. Ebenfalls in 13 veranschaulicht ist die Anwendung des Systems 700 auf verschiedene Transportmodi. Zum Beispiel kann das System 700 in den Steuer- und/oder Unterhaltungssystemen von Flugzeugen, Zügen, Bussen, Mietautos, Personenkraftwagen, Wasserfahrzeugen von Privatbooten bis zu Kreuzfahrtschiffen, (Miet- oder eigenen) Rollern und so weiter verwendet werden. In verschiedenen Fällen kann das System 700 verwendet werden, um eine automatisierte Führung (z. B. selbstfahrende Fahrzeuge), eine allgemeine Systemsteuerung und etwas anderes bereitzustellen. Diese beliebigen vielen anderen Ausführungsformen sind möglich und werden in Betracht gezogen. Es wird darauf hingewiesen, dass die in 13 veranschaulichten Vorrichtungen und Anwendungen nur veranschaulichend sind und nicht einschränkend sein sollen. Andere Vorrichtungen sind möglich und werden in Betracht gezogen.
-
Computerlesbares Speicherungsmedium
-
Nun Bezug nehmend auf 14, ist ein Blockdiagramm einer Ausführungsform eines computerlesbaren Speichermediums 800 dargestellt. Allgemein ausgedrückt, kann ein computerzugängliches Speichermedium ein beliebiges Speichermedium einschließen, auf das durch einen Computer während der Verwendung zugegriffen werden kann, um Anweisungen und/oder Daten zum Computer bereitzustellen. Beispielsweise kann ein computerzugängliches Speichermedium Speichermedien einschließen wie z. B. magnetische oder optische Medien, z. B. Platten (fest oder portabel), Bänder, CD-ROM, DVD-ROM, CD-R, CD-RW, DVD-R, DVD-RW oder Blu-Ray. Speicherungsmedien können ferner flüchtige oder nichtflüchtige Speichermedien, wie RAM (z. B. synchronen dynamischen RAM (SDRAM), Rambus-DRAM (RDRAM), statischen RAM (SRAM) usw.), ROM oder Flash-Speicher, einschließen. Die Speichermedien können physisch innerhalb des Computers eingeschlossen sein, für den die Speichermedien Anweisungen/Daten bereitstellen. Alternativ dazu können die Speichermedien mit dem Computer verbunden sein. Beispielsweise können die Speichermedien über ein Netzwerk oder eine drahtlose Verbindung wie z. B. Netzwerk-Speicher mit dem Computer verbunden sein. Die Speichermedien können über eine Peripherieschnittstelle wie z. B. den Universal Serial Bus (USB) angeschlossen sein. Allgemein kann das computerzugängliche Speichermedium 800 Daten in einer nichttransitorischen Weise speichern, wobei sich nicht-transitorisch in diesem Kontext darauf beziehen kann, dass die Anweisungen/Daten nicht auf einem Signal übertragen werden. Beispielsweise kann die nicht-transitorische Speicherung flüchtig sein (und die gespeicherten Anweisungen/Daten als Reaktion auf ein Herunterfahren verlieren), oder sie kann nichtflüchtig sein.
-
Das computerzugängliche Speichermedium 800 in 14 kann eine Datenbank 804 speichern, die für das SOC 10 repräsentativ ist. Allgemein kann die Datenbank 804 eine Datenbank sein, welche durch ein Programm gelesen und direkt oder indirekt verwendet werden kann, um die Hardware herzustellen, die das SOC 10 umfasst. Zum Beispiel kann die Datenbank eine Beschreibung auf Verhaltensebene oder eine Beschreibung auf Register-Transfer-Ebene (RTL) der Hardwarefunktionalität in einer Sprache für ein Design auf hoher Ebene (HDL), wie Verilog oder VHDL, sein. Die Beschreibung kann von einem Synthesewerkzeug gelesen werden, das die Beschreibung synthetisieren kann, um eine Netzliste zu erzeugen, die eine Liste von Gattern aus einer Synthesebibliothek umfasst. Die Netzliste umfasst einen Satz von Gattern, welche auch die Funktionalität der Hardware repräsentieren, die das SOC 10 umfasst. Die Netzliste kann dann platziert und geroutet werden, um einen Datensatz zu erzeugen, der geometrische Formen beschreibt, die auf Masken anzuwenden sind. Die Masken können dann in verschiedenen Halbleiter-Fabrikationsschritten verwendet werden, um eine Halbleiterschaltung oder Schaltungen herzustellen, die dem SOC 10 entsprechen. Alternativ kann die Datenbank 804 auf dem computerzugänglichen Speichermedium 800 wie gewünscht die Netzliste (mit der oder ohne die Synthesebibliothek) oder der Datensatz sein.
-
Während das computerzugängliche Speicherungsmedium 800 eine Darstellung des SOC 10 speichert, können andere Ausführungsformen eine Darstellung eines beliebigen Abschnitts des SOC 10, wie gewünscht einschließlich einer beliebigen Teilmenge der in 2 gezeigten Komponenten, tragen. Die Datenbank 804 kann einen beliebigen Abschnitt des Vorstehenden darstellen.
-
Basierend auf dieser Offenbarung kann ein System eine Vielzahl von Cluster-Interrupt-Steuerungen und eine Interrupt-Steuerung umfassen, die mit der Vielzahl von Cluster-Interrupt-Steuerungen gekoppelt ist. Eine jeweilige Cluster-Interrupt-Steuerung der Vielzahl von Cluster-Interrupt-Steuerungen kann einem jeweiligen Prozessor-Cluster zugeordnet sein, der eine Vielzahl von Prozessoren umfasst. Die Interrupt-Steuerung kann konfiguriert sein, um einen Interrupt von einer ersten Interrupt-Quelle zu empfangen und kann basierend auf dem Interrupt konfiguriert sein, um: eine erste Iteration über die Vielzahl von Cluster-Interrupt-Steuerungen durchzuführen, um zu versuchen, den Interrupt zu liefern; und basierend auf Nicht-Acknowledge-Antworten (Nack-Antworten) von der Vielzahl von Cluster-Interrupt-Steuerungen in der ersten Iteration, eine zweite Iteration über die Vielzahl von Cluster-Interrupt-Steuerungen durchzuführen. Eine gegebene Cluster-Interrupt-Steuerung der Vielzahl von Cluster-Interrupt-Steuerungen in der ersten Iteration kann konfiguriert sein, um zu versuchen, den Interrupt an eine Teilmenge der Vielzahl von Prozessoren in dem jeweiligen Prozessor-Cluster zu liefern, die eingeschaltet sind, ohne zu versuchen den Interrupt an diejenigen der jeweiligen Vielzahl von Prozessoren in dem jeweiligen Prozessor-Cluster zu liefern, die nicht in der Teilmenge eingeschlossen sind. In der zweiten Iteration kann die gegebene Cluster-Interrupt-Steuerung konfiguriert sein, um diejenigen der jeweiligen Vielzahl von Prozessoren einzuschalten, die ausgeschaltet waren, und versuchen, den Interrupt an die jeweilige Vielzahl der Prozessoren zu liefern. In einer Ausführungsform, während des Versuchs, den Interrupt über die Vielzahl von Cluster-Interrupt-Steuerungen zu liefern: kann die Interrupt-Steuerung konfiguriert sein, um eine erste Interrupt-Anforderung an eine erste Cluster-Interrupt-Steuerung der Vielzahl von Cluster-Interrupt-Steuerungen durchzusetzen; und basierend auf der Nack-Antwort von der ersten Cluster-Interrupt-Steuerung, kann die Interrupt-Steuerung konfiguriert sein, um eine zweite Interrupt-Anforderung an eine zweite Cluster-Interrupt-Steuerung der Vielzahl von Cluster-Interrupt-Steuerungen durchzusetzen. In einer Ausführungsform kann während des Versuchs, den Interrupt über die Vielzahl von Cluster-Interrupt-Steuerungen zu liefern, basierend auf einer zweiten Nack-Antwort von der zweiten Cluster-Interrupt-Steuerung, die Interrupt-Steuerung konfiguriert sein, um eine dritte Interrupt-Anforderung an eine dritte Cluster-Interrupt-Steuerung der Vielzahl von Cluster-Interrupt-Steuerungen durchzusetzen. In einer Ausführungsform kann während des Versuchs, den Interrupt über die Vielzahl von Cluster-Interrupt-Steuerungen zu liefern und basierend auf einer Acknowledge-Antwort (Ack-Antwort) von der zweiten Cluster-Interrupt-Steuerung und einem Fehlen zusätzlicher anstehender Interrupts, die Interrupt-Steuerung konfiguriert sein, um den Versuch zu beenden. In einer Ausführungsform, während des Versuchs, den Interrupt über die Vielzahl von Cluster-Interrupt-Steuerungen zu liefern: kann die Interrupt-Steuerung konfiguriert sein, um eine Interrupt-Anforderung an eine erste Cluster-Interrupt-Steuerung der Vielzahl von Cluster-Interrupt-Steuerungen durchzusetzen; und basierend auf einer Acknowledge-Antwort (Ack-Antwort) von der ersten Cluster-Interrupt-Steuerung und einem Fehlen zusätzlicher anstehender Interrupts, kann die Interrupt-Steuerung konfiguriert sein, um den Versuch zu beenden. In einer Ausführungsform kann während des Versuchs, den Interrupt über die Vielzahl von Cluster-Interrupt-Steuerungen zu liefern, die Interrupt-Steuerung konfiguriert sein, um Interrupt-Anforderungen an eine oder mehrere Cluster-Interrupt-Steuerungen der Vielzahl von Cluster-Interrupt-Steuerungen, die durch eine Acknowledge-Antwort (Ack-Antwort) von einer ersten Cluster-Interrupt-Steuerung der einen oder mehreren Cluster-Interrupt-Steuerungen abgeschlossen sind, seriell durchzusetzen. In einer Ausführungsform kann die Interrupt-Steuerung konfiguriert sein, um sich in einer programmierbaren Reihenfolge seriell durchzusetzen. In einer Ausführungsform kann die Interrupt-Steuerung konfiguriert sein, um die Interrupt-Anforderung basierend auf der ersten Interrupt-Quelle seriell durchzusetzen. Ein zweiter Interrupt aus einer zweiten Interrupt-Quelle kann zu einer anderen Reihenfolge der seriellen Aktivieren führen. In einer Ausführungsform, während des Versuchs, den Interrupt über die Vielzahl von Cluster-Interrupt-Steuerungen zu liefern: kann die Interrupt-Steuerung konfiguriert sein, um eine Interrupt-Anforderung an eine erste Cluster-Interrupt-Steuerung der Vielzahl von Cluster-Interrupt-Steuerungen durchzusetzen; und die erste Cluster-Interrupt-Steuerung kann konfiguriert sein, um die Prozessor-Interrupt-Anforderungen an die Vielzahl von Prozessoren in dem jeweiligen Prozessor-Cluster, basierend auf der Interrupt-Anforderung an die erste Cluster-Interrupt-Steuerung, seriell durchzusetzen. In einer Ausführungsform ist die erste Cluster-Interrupt-Steuerung konfiguriert, um die serielle Durchsetzung, basierend auf einer Acknowledge-Antwort (Ack-Antwort) von einem ersten Prozessor der Vielzahl von Prozessoren, zu beenden. In einer Ausführungsform kann die erste Cluster-Interrupt-Steuerung konfiguriert sein, um die Ack-Antwort auf die Interrupt-Steuerung basierend auf der Ack-Antwort von dem ersten Prozessor zu übertragen. In einer Ausführungsform kann die erste Cluster-Interrupt-Steuerung konfiguriert sein, um die Nack-Antwort an die Interrupt-Steuerung, basierend auf Nack-Antworten aus der Vielzahl von Prozessoren in dem jeweiligen Cluster, während der seriellen Durchsetzung der Prozessor-Interrupts bereitzustellen. In einer Ausführungsform kann die Interrupt-Steuerung in einer ersten integrierten Schaltung auf einem ersten Halbleitersubstrat eingeschlossen sein, das eine erste Teilmenge der Vielzahl von Cluster-Interrupt-Steuerungen einschließt. Eine zweite Teilmenge der Vielzahl von Cluster-Interrupt-Steuerungen kann in einer zweiten integrierten Schaltung auf einem zweiten separaten Halbleitersubstrat implementiert sein. Die Interrupt-Steuerung kann konfiguriert sein, um die Interrupt-Anforderungen an die erste Teilmenge seriell durchzusetzen, bevor versucht wird, an die zweite Teilmenge zu liefern. In einer Ausführungsform schließt die zweite integrierte Schaltung eine zweite Interrupt-Steuerung ein, und die Interrupt-Steuerung kann konfiguriert sein, um die Interrupt-Anforderung an die zweite Interrupt-Steuerung als Reaktion darauf zu kommunizieren, dass die erste Teilmenge den Interrupt ablehnt. Die zweite Interrupt-Steuerung kann konfiguriert sein, um zu versuchen, den Interrupt an die zweite Teilmenge zu liefern.
-
In einer Ausführungsform umfasst ein Prozessor einen Umordnungspuffer, eine Lade-/Speichereinheit und eine Steuerschaltung, die mit dem Umordnungspuffer und der Lade-/Speichereinheit gekoppelt ist. Der Umordnungspuffer kann konfiguriert sein, um eine Vielzahl von Anweisungsvorgängen zu verfolgen, die Anweisungen entsprechen, die von dem Prozessor abgerufen werden und nicht durch den Prozessor zurückgezogen werden. Die Lade-/Speichereinheit kann konfiguriert sein, um Lade-/Speichervorgänge auszuführen. Die Steuerschaltung kann konfiguriert sein, um eine Acknowledge-Antwort (Ack-Antwort) auf eine Interrupt-Anforderung zu erzeugen, die durch den Prozessor empfangen wird, basierend auf einer Bestimmung, dass der Umordnungspuffer die Anweisungsvorgänge zu einem unterbrechbaren Punkt zurückziehen wird und die Lade-/Speichereinheit die Lade-/Speichervorgänge an den unterbrechbaren Punkt innerhalb des spezifizierten Zeitraums abschließen wird. Die Steuerschaltung kann konfiguriert sein, um eine Nicht-Acknowledge-Antwort (Nack-Antwort) auf die Interrupt-Anforderung zu erzeugen, basierend auf einer Bestimmung, dass mindestens einer von dem Umordnungspuffer und der Lade-/Speichereinheit den unterbrechbaren Punkt innerhalb des spezifizierten Zeitraums nicht erreicht. In einer Ausführungsform kann die Bestimmung die Nack-Antwort basierend auf dem Umordnungspuffer mit mindestens einem Anweisungsvorgang sein, der eine potenzielle Ausführungslatenz größer als ein Schwellenwert aufweist. In einer Ausführungsform kann die Bestimmung die Nack-Antwort basierend auf dem Umordnungspuffer mit mindestens einem Anweisungsvorgang sein, der zu maskierende Interrupts verursacht. In einer Ausführungsform ist die Bestimmung die Nack-Antwort basierend auf der Lade-/Speichereinheit, die mindestens einen ausstehenden Lade-/Speichervorgang an einen Vorrichtungsadressraum aufweist.
-
In einer Ausführungsform umfasst ein Verfahren das Empfangen eines Interrupts von einer ersten Interrupt-Quelle in einer Interrupt-Steuerung. Das Verfahren kann ferner das Durchführen einer ersten Iteration von seriellen Versuchen, den Interrupt an eine Vielzahl von Cluster-Interrupt-Steuerungen zu liefern, umfassen. Eine jeweilige Cluster-Interrupt-Steuerung der Vielzahl von Cluster-Interrupt-Steuerungen, die einem jeweiligen Prozessor-Cluster zugeordnet ist, der eine Vielzahl von Prozessoren umfasst, kann in der ersten Iteration konfiguriert sein, um zu versuchen, den Interrupt an eine Teilmenge der Vielzahl von Prozessoren in dem jeweiligen Prozessor-Cluster zu liefern, die eingeschaltet sind, ohne zu versuchen, den Interrupt an diejenigen der Vielzahl von Prozessoren in dem jeweiligen Prozessor-Cluster zu liefern, die nicht in der Teilmenge eingeschlossen sind. Das Verfahren kann ferner, basierend auf Nicht-Acknowledge-Antworten (Nack-Antworten) von der Vielzahl von Cluster-Interrupt-Steuerungen in der ersten Iteration, das Durchführen einer zweiten Iteration über die Vielzahl von Cluster-Interrupt-Steuerungen durch die Interrupt-Steuerung umfassen. In der zweiten Iteration kann die gegebene Cluster-Interrupt-Steuerung konfiguriert sein, um diejenigen der Vielzahl von Prozessoren einzuschalten, die in dem jeweiligen Prozessor-Cluster ausgeschaltet waren, und versuchen, den Interrupt an die Vielzahl von Prozessoren zu liefern. In einer Ausführungsform wird das serielle Versuchen, den Interrupt an die Vielzahl von Cluster-Interrupt-Steuerungen zu liefern, basierend auf einer Acknowledge-Antwort von einer der Vielzahl von Cluster-Interrupt-Steuerungen beendet.
-
Die vorliegende Offenbarung schließt Bezugnahmen auf „eine“ Ausführungsform oder Gruppen von „Ausführungsformen“ (z. B. „einige Ausführungsformen“ oder „verschiedene Ausführungsformen“) ein. Ausführungsformen sind verschiedene Implementierungen oder Instanzen der offenbarten Konzepte. Bezugnahmen auf „Ausführungsform“, „eine Ausführungsform“, „eine bestimmte Ausführungsform“ und dergleichen beziehen sich nicht notwendigerweise auf die gleiche Ausführungsform. Eine große Anzahl möglicher Ausführungsformen wird in Betracht gezogen, einschließlich der speziell offenbarten, sowie Modifikationen oder Alternativen, die in das Wesen oder den Schutzumfang der Offenbarung fallen.
-
Diese Offenbarung kann potenzielle Vorteile erörtern, die sich aus den offenbarten Ausführungsformen ergeben können. Nicht alle Implementierungen dieser Ausführungsformen weisen notwendigerweise beliebige oder alle potenziellen Vorteile auf. Ob ein Vorteil für eine bestimmte Implementierung erreicht wird, hängt von vielen Faktoren ab, von denen einige außerhalb des Schutzumfangs dieser Offenbarung liegen. Tatsächlich gibt es eine Reihe von Gründen dafür, warum eine Implementierung, die innerhalb des Schutzumfangs der Ansprüche fällt, möglicherweise einige oder alle der offenbarten Vorteile nicht aufweist. Zum Beispiel könnte eine bestimmte Implementierung eine andere Schaltlogik außerhalb des Schutzumfangs der Offenbarung einschließen, die in Verbindung mit einer der offenbarten Ausführungsformen einen oder mehrere der offenbarten Vorteile aufhebt oder verringert. Des Weiteren könnte auch eine suboptimale Designausführung einer bestimmten Implementierung (z. B. Implementierungstechniken oder -werkzeuge) offenbarte Vorteile aufheben oder verringern. Selbst unter der Annahme einer qualifizierten Implementierung kann die Erreichung von Vorteilen weiterhin von anderen Faktoren, wie den Umgebungsumständen, in denen die Implementierung bereitgestellt wird, abhängen. Zum Beispiel können Eingaben, die einer bestimmten Implementierung bereitgestellt werden, verhindern, dass ein oder mehrere Probleme, die in dieser Offenbarung behandelt werden, bei einer bestimmten Gelegenheit auftreten, wodurch der Vorteil seiner Lösung möglicherweise nicht erreicht wird. Aufgrund des Vorhandenseins möglicher Faktoren außerhalb dieser Offenbarung ist es ausdrücklich beabsichtigt, dass alle hierin beschriebenen potenziellen Vorteile nicht als Anspruchseinschränkungen ausgelegt werden sollen, die erfüllt werden müssen, um eine Verletzung nachzuweisen. Vielmehr soll die Identifizierung solcher potenziellen Vorteile den Typ/die Typen von Verbesserung veranschaulichen, der/die für Designer verfügbar sind, die den Nutzen dieser Offenbarung haben. Dass solche Vorteile in einem erlaubenden Sinn beschrieben werden (z. B. unter der Angabe, dass ein bestimmter Vorteil „auftreten kann“), soll keinen Zweifel daran vermitteln, ob solche Vorteile tatsächlich erreicht werden können, sondern es soll stattdessen die technische Realität anerkannt werden, dass die Erreichung solcher Vorteile häufig von zusätzlichen Faktoren abhängt.
-
Sofern nicht anders angegeben, sind Ausführungsformen nicht einschränkend. Das heißt, dass die offenbarten Ausführungsformen den Schutzumfang von Ansprüchen, die basierend auf dieser Offenbarung formuliert werden, nicht einschränken sollen, selbst wenn nur ein einzelnes Beispiel in Bezug auf ein bestimmtes Merkmal beschrieben wird. Die offenbarten Ausführungsformen sollen veranschaulichend und nicht einschränkend sein, sofern in der Offenbarung keine gegenteiligen Aussagen vorhanden sind. Die Anmeldung soll es somit ermöglichen, dass Ansprüche offenbarte Ausführungsformen sowie die Alternativen, Modifikationen und Äquivalente, die für einen Fachmann, der den Nutzen dieser Offenbarung hat, offensichtlich sind, abdecken.
-
Zum Beispiel können Merkmale in dieser Anmeldung auf jede geeignete Weise kombiniert werden. Dementsprechend können während der Weiterverfolgung dieser Anwendung (oder einer Anwendung, welche die Priorität dieser beansprucht) neue Ansprüche auf eine beliebige solche Kombination von Merkmalen formuliert werden. Insbesondere können unter Bezugnahme auf die beiliegenden Ansprüche Merkmale aus abhängigen Ansprüchen mit denen anderer abhängiger Ansprüche kombiniert werden, wo dies geeignet ist, einschließlich Ansprüchen, die von anderen unabhängigen Ansprüchen abhängen. In ähnlicher Weise können Merkmale aus jeweiligen unabhängigen Ansprüchen, wo dies geeignet ist, kombiniert werden.
-
Während die beiliegenden abhängigen Ansprüche derart formuliert sein können, dass jeder von einem einzigen anderen Anspruch abhängt, werden entsprechend auch zusätzliche Abhängigkeiten in Betracht gezogen. Alle Kombinationen von Merkmalen im abhängigen, die mit dieser Offenbarung übereinstimmen, werden in Betracht gezogen und können in dieser oder einer anderen Anmeldung beansprucht werden. Zusammengefasst sind Kombinationen nicht auf diejenigen beschränkt, die in den beiliegenden Ansprüchen speziell aufgezählt sind.
-
Wo dies geeignet ist, wird auch in Betracht gezogen, dass in einem Format oder einem gesetzlichen Typ formulierte Ansprüche (z. B. Einrichtung) entsprechende Ansprüche eines anderen Formats oder gesetzlichen Typs (z. B. Verfahren) unterstützen sollen.
-
Da diese Offenbarung ein rechtliches Dokument ist, können verschiedene Begriffe und Phrasen einer behördlichen und rechtlichen Auslegung unterliegen. Es wird hiermit bekannt gemacht, dass die folgenden Absätze sowie Definitionen, die in der gesamten Offenbarung bereitgestellt werden, beim Bestimmen, wie basierend auf dieser Offenbarung formulierte Ansprüche auszulegen sind, verwendet werden sollen.
-
Bezugnahmen auf eine Singularform eines Elements (d. h. ein Substantiv oder eine Nominalphrase, vor dem/der ein „ein/e/r“ oder „der/die/das“ steht) sollen, sofern der Kontext nicht eindeutig etwas anderes vorschreibt, „ein/e/r oder mehrere“ bedeuten. Eine Bezugnahme auf „ein Element“ in einem Anspruch schließt somit ohne einen Begleitkontext keine zusätzlichen Instanzen des Elements aus. Eine „Vielzahl“ von Elementen bezieht sich auf einen Satz von zwei oder mehr der Elemente.
-
Das Wort „kann/können“ wird hierin in einem erlaubenden Sinn (d. h. das Potenzial aufweisend, in der Lage sein) und nicht in einem obligatorischen Sinn (d. h. muss/müssen) verwendet.
-
Die Begriffe „umfassend“ und „einschließlich“ und Formen davon sind offen und bedeuten „einschließlich, ohne darauf beschränkt zu sein“.
-
Wenn der Begriff „oder“ in dieser Offenbarung in Bezug auf eine Liste von Optionen verwendet wird, wird er im Allgemeinen derart verstanden, dass er in dem einschließenden Sinn verwendet wird, sofern nicht der Kontext etwas anderes vorsieht. Somit ist eine Angabe von „x oder y“ äquivalent zu „x oder y oder beide“ und deckt somit 1) x, aber nicht y, 2) y, aber nicht x, und 3) sowohl x als auch y ab. Andererseits macht eine Phrase, wie „entweder x oder y, aber nicht beide“ deutlich, dass „oder“ im exklusiven Sinn verwendet wird.
-
Eine Angabe von „w, x, y oder z oder eine beliebige Kombination davon“ oder „mindestens eines von ... w, x, y und z“ soll alle Möglichkeiten abdecken, die ein einzelnes Element bis zur Gesamtanzahl von Elementen im Satz beinhalten. Bei dem Satz [w, x, y, z] decken diese Phrasen zum Beispiel jedes einzelne Element des Satzes (z. B. w, aber nicht x, y oder z), beliebige zwei Elemente (z. B. w und x, aber nicht y oder z), beliebige drei Elemente (z. B. w, x und y, aber nicht z) und alle vier Elemente ab. Die Phrase „mindestens eines von ... x, y und z“ bezieht sich somit auf mindestens ein Element des Satzes [w, x, y, z], wodurch alle möglichen Kombinationen in dieser Liste von Elementen abgedeckt werden. Diese Phrase darf nicht derart ausgelegt werden, dass es erforderlich ist, dass mindestens eine Instanz von w, mindestens eine Instanz von x, mindestens eine Instanz von y und mindestens eine Instanz von z vorhanden sind.
-
Verschiedene „Kennzeichnungen“ können in dieser Offenbarung vor Substantiven oder Substantivphrasen stehen. Sofern nicht der Kontext etwas anderes vorsieht, beziehen sich verschiedene Kennzeichnungen, die für ein Merkmal (z. B. „erste Schaltung“, „zweite Schaltung“, „bestimmte Schaltung“, „gegebene Schaltung“ usw.) verwendet werden, auf verschiedene Instanzen des Merkmals. Zusätzlich implizieren die Kennzeichnungen „erste/r/s“, „zweite/r/s“ und „dritte/r/s“, wenn sie auf ein Merkmal angewendet werden, keinen Typ von Sortierung (z. B. räumlich, zeitlich, logisch usw.), sofern nicht anders angegeben.
-
Die Phrase „basierend auf/auf der Grundlage von“ oder wird verwendet, um einen oder mehrere Faktoren zu beschreiben, die eine Bestimmung beeinflussen. Dieser Begriff schließt nicht die Möglichkeit aus, dass zusätzliche Faktoren die Bestimmung beeinflussen können. Das heißt, eine Bestimmung kann ausschließlich auf angegebenen Faktoren basieren oder auf den angegebenen Faktoren sowie anderen, nicht angegebenen Faktoren basieren. Man betrachte die Phrase „A basierend auf B bestimmen“. Diese Phrase gibt an, dass B ein Faktor ist, der verwendet wird, um A zu bestimmen, oder der die Bestimmung von A beeinflusst. Diese Phrase schließt nicht aus, dass die Bestimmung von A auch auf einem anderen Faktor, wie C, basieren kann. Diese Phrase soll auch eine Ausführungsform abdecken, in der A ausschließlich basierend auf B bestimmt wird. Wie hierin verwendet, ist die Phrase „basierend auf/auf der Grundlage von“ gleichbedeutend mit der Phrase „basierend mindestens teilweise auf“.
-
Die Phrasen „als Reaktion auf‟ und „in Reaktion auf“ beschreiben einen oder mehrere Faktoren, die eine Wirkung auslösen. Diese Phrase schließt nicht die Möglichkeit aus, dass zusätzliche Faktoren die Wirkung beeinflussen oder anderweitig auslösen können, entweder gemeinsam mit den angegebenen Faktoren oder unabhängig von den angegebenen Faktoren. Das heißt, eine Wirkung kann ausschließlich als Reaktion auf diese Faktoren erfolgen oder kann als Reaktion auf die angegebenen Faktoren sowie andere, nicht angegebene Faktoren erfolgen. Man betrachte die Phrase „A als Reaktion auf B durchführen“. Diese Phrase gibt an, dass B ein Faktor ist, der die Durchführung von A auslöst oder der ein bestimmtes Ergebnis für A auslöst. Diese Phrase schließt nicht aus, dass ein Durchführen von A auch als Reaktion auf einen anderen Faktor, wie C, erfolgen kann. Diese Phrase schließt auch nicht aus, dass ein Durchführen von A als Reaktion auf B und C gemeinsam erfolgen kann. Diese Phrase soll auch eine Ausführungsform abdecken, in der A ausschließlich basierend auf B durchgeführt wird. Wie hierin verwendet, ist die Phrase „basierend auf‟ gleichbedeutend mit der Phrase „basierend mindestens teilweise auf“. In ähnlicher Weise ist die Phrase „als Reaktion auf‟ gleichbedeutend mit der Phrase „mindestens teilweise als Reaktion auf“.
-
Innerhalb dieser Offenbarung können unterschiedliche Entitäten (die verschiedentlich als „Einheiten“, „Schaltungen“, andere Komponenten usw. bezeichnet werden können) als „konfiguriert“, um eine oder mehrere Aufgaben oder Operationen durchzuführen, beschrieben oder beansprucht werden. Diese Formulierung - [Entität], die konfiguriert ist, um [eine oder mehrere Aufgaben durchzuführen] - wird hierin verwendet, um sich auf eine Struktur (d. h. etwas Physisches) zu beziehen. Insbesondere wird diese Formulierung verwendet, um anzugeben, dass diese Struktur angeordnet ist, um die eine oder die mehreren Aufgaben während des Betriebs durchzuführen. Eine Struktur kann als „konfiguriert, um“ eine Aufgabe durchzuführen, bezeichnet werden, selbst wenn die Struktur aktuell nicht betrieben wird. Somit bezieht sich eine Entität, die als „konfiguriert, um“ eine Aufgabe durchzuführen, beschrieben oder angegeben wird, auf etwas Physisches, wie eine Vorrichtung, eine Schaltung, ein System mit einer Prozessoreinheit und einem Speicher, der Programmanweisungen speichert, die ausführbar sind, um die Aufgabe zu implementieren, usw. Diese Phrase wird hierin nicht verwendet, um auf etwas nicht Greifbares Bezug zu nehmen.
-
In einigen Fällen können verschiedene Einheiten/Schaltungen/Komponenten hierin als Durchführen eines Satzes von Aufgaben oder Vorgängen beschrieben werden. Es versteht sich, dass diese Entitäten „konfiguriert sind, um“ diese Aufgaben/Operationen durchzuführen, selbst wenn dies nicht spezifisch angegeben ist.
-
Der Begriff „konfiguriert, um“ soll nicht „konfigurierbar, um“ bedeuten. Eine unprogrammierte FPGA würde zum Beispiel nicht als „konfiguriert, um“ eine bestimmte Funktion durchzuführen, betrachtet werden. Diese unprogrammierte FPGA kann jedoch „konfigurierbar, um“ diese Funktion durchzuführen, sein. Nach geeigneter Programmierung kann die FPGA dann als „konfiguriert, um“ die bestimmte Funktion durchzuführen, bezeichnet werden.
-
Für Zwecke von US-Patentanmeldungen basierend auf dieser Offenbarung soll sich in einem Anspruch, dass eine Struktur „konfiguriert, um“ eine oder mehrere Aufgaben durchzuführen, ist, ausdrücklich nicht auf die Anwendung von 35 U.S.C. § 112(f) für dieses Anspruchselement berufen werden. Wenn sich der Anmelder während des Erteilungsverfahrens einer US-Patentanmeldung basierend auf dieser Offenbarung auf die Anwendung von Abschnitt 112(f) berufen möchte, gibt er Anspruchselemente unter Verwendung des Konstrukts „Mittel zum“ [Durchführen einer Funktion] an.
-
Verschiedene „Schaltungen“ können in dieser Offenbarung beschrieben werden. Diese Schaltungen oder „Schaltlogik“ bilden Hardware, die verschiedene Typen von Schaltungselementen, wie kombinatorische Logik, getaktete Speicherungsvorrichtungen (z. B. Flip-Flops, Register, Latches usw.), endliche Automaten, Speicher (z. B. Direktzugriffsspeicher, eingebetteten dynamischen Direktzugriffsspeicher), programmierbare logische Anordnungen und so weiter, einschließt. Schaltlogik kann individuell gestaltet oder aus Standardbibliotheken entnommen sein. In verschiedenen Implementierungen kann Schaltlogik, wie es geeignet ist, digitale Komponenten, analoge Komponenten oder eine Kombination von beiden einschließen. Bestimmte Typen von Schaltungen können allgemein als „Einheiten“ (z. B. eine Decodiereinheit, eine arithmetisch-logische Einheit (ALU), eine Funktionseinheit, eine Speicherverwaltungseinheit (MMU) usw.) bezeichnet werden. Solche Einheiten beziehen sich ebenfalls auf Schaltungen oder Schaltlogik.
-
Die offenbarten Schaltungen/Einheiten/Komponenten und andere Elemente, die in den Zeichnungen veranschaulicht und hierin beschrieben sind, schließen somit Hardwareelemente, wie die im vorstehenden Absatz beschriebenen, ein. In vielen Fällen kann die interne Anordnung von Hardwareelementen innerhalb einer bestimmten Schaltung durch Beschreiben der Funktion dieser Schaltung angegeben werden. Zum Beispiel kann eine bestimmte „Decodiereinheit“ als die Funktion des „Verarbeitens eines Opcodes einer Anweisung und Umleitens dieser Anweisung zu einer oder mehreren einer Vielzahl von Funktionseinheiten“ durchführend beschrieben werden, was bedeutet, dass die Decodiereinheit „konfiguriert ist, um“ diese Funktion durchzuführen. Diese Funktionsangabe ist für einen Fachmann auf dem Computergebiet ausreichend, um einen Satz möglicher Strukturen für die Schaltung näher zu bezeichnen.
-
In verschiedenen Ausführungsformen, wie im vorstehenden Absatz erörtert, Schaltungen, Einheiten und andere Elemente, die durch die Funktionen oder Vorgänge definiert sind, zu deren Implementierung sie konfiguriert sind, Die Anordnung und solche Schaltungen/Einheiten/Komponenten in Bezug aufeinander und die Weise, in der sie interagieren, bilden eine Mikroarchitekturdefinition der Hardware, die letztendlich in einer integrierten Schaltung hergestellt oder in eine FPGA programmiert wird, um eine physische Implementierung der Mikroarchitekturdefinition zu bilden. Somit wird die Mikroarchitekturdefinition von einem Fachmann als Struktur erkannt, aus der viele physische Implementierungen abgeleitet werden können, die alle in die breitere Struktur fallen, die durch die Mikroarchitekturdefinition beschrieben wird. Das heißt, dass ein Fachmann, dem die gemäß dieser Offenbarung bereitgestellten Mikroarchitekturdefinition präsentiert wird, ohne unangemessenes Experimentieren und durch Anwendung durchschnittlicher Fähigkeiten die Struktur implementieren kann, indem er die Beschreibung der Schaltungen/Einheiten/Komponenten in einer Hardwarebeschreibungssprache (HDL), wie Verilog oder VHDL, codiert. Die HDL-Beschreibung wird häufig in einer Weise ausgedrückt, die als funktional erscheinen kann. Für einen Fachmann auf diesem Gebiet ist diese HDL-Beschreibung jedoch die Weise, die verwendet wird, um die Struktur einer Schaltung, Einheit oder Komponente auf die nächste Implementierungsdetailebene zu transformieren. Eine solche HDL-Beschreibung kann die Form von Verhaltenscode (der üblicherweise nicht synthetisierbar ist), Register-Transfer-Sprache-Code (RTL-Code) (der im Gegensatz zu Verhaltenscode üblicherweise synthetisierbar ist) oder Strukturcode (z. B. eine Netzliste, die Logikgatter und deren Konnektivität angibt) annehmen. Die HDL-Beschreibung kann anschließend gegenüber einer Bibliothek von Zellen synthetisiert werden, die für eine gegebene Technologie zur Herstellung integrierter Schaltungen gestaltet ist, und kann aus Gründen der Zeittaktung, Energie und anderen Gründen modifiziert werden, um zu einer endgültigen Designdatenbank zu führen, die an eine Gießerei übermittelt wird, um Masken zu erzeugen und letztendlich die integrierte Schaltung herzustellen. Manche Hardware-Schaltungen oder Abschnitte davon können auch in einem schematischen Editor benutzerspezifisch ausgestaltet und zusammen mit synthetisierter Schaltlogik in das Design der integrierten Schaltung eingegliedert werden. Die integrierten Schaltungen können Transistoren und andere Schaltungselemente (z. B. passive Elemente, wie Kondensatoren, Widerstände, Spulen usw.) einschließen und eine Verbindung zwischen den Transistoren und Schaltungselementen herstellen. Manche Ausführungsformen können mehrere integrierte Schaltungen implementieren, die miteinander gekoppelt sind, um die Hardware-Schaltungen zu implementieren, und/oder diskrete Elemente können in manchen Ausführungsformen verwendet werden. Alternativ kann das HDL-Design zu einer programmierbaren Logikanordnung, wie einer anwenderprogrammierbaren Gate-Anordnung (FPGA), synthetisiert werden und kann in der FPGA implementiert werden. Dieses Entkoppeln zwischen dem Design einer Gruppe von Schaltungen und der anschließenden Implementierung auf niedriger Ebene dieser Schaltungen führt üblicherweise zu dem Szenario, in dem der Schaltungs- oder Logikdesigner nie einen bestimmten Satz von Strukturen für die Implementierung auf niedriger Ebene angibt, der über eine Beschreibung dessen hinausgeht, wozu die Schaltung konfiguriert ist, da dieser Prozess auf einer anderen Stufe des Schaltungsimplementierungsprozesses durchgeführt wird.
-
Die Tatsache, dass viele verschiedene Kombinationen auf niedriger Ebene von Schaltungselementen verwendet werden können, um die gleiche Spezifikation einer Schaltung zu implementieren, führt zu einer großen Anzahl von äquivalenten Strukturen für diese Schaltung. Wie angegeben, können diese Schaltungen auf niedriger Ebene gemäß Änderungen in der Herstellungstechnologie, der zur Herstellung der integrierten Schaltung ausgewählten Gießerei, der Bibliothek von Zellen, die für ein bestimmtes Projekt bereitgestellt wird, usw. variieren. In vielen Fällen können die durch verschiedene Designwerkzeuge oder -methodiken zur Herstellung dieser verschiedenen Implementierungen vorgenommenen Auswahlen beliebig sein.
-
Darüber hinaus ist es für eine einzelne Implementierung einer bestimmten Funktionsspezifikation einer Schaltung üblich, für eine gegebene Ausführungsform eine große Anzahl von Vorrichtungen (z. B. Millionen von Transistoren) einzuschließen. Entsprechend macht es das bloße Volumen dieser Informationen undurchführbar, eine vollständige Angabe der Struktur auf niedriger Ebene, die verwendet wird, um eine einzelne Ausführungsform zu implementieren, geschweige denn die enorme Anordnung äquivalenter möglicher Implementierungen bereitzustellen. Aus diesem Grund beschreibt die vorliegende Offenbarung eine Struktur von Schaltungen unter Verwendung der Funktionskurzschrift, die üblicherweise in der Industrie eingesetzt wird.
-
Zahlreiche Variationen und Modifikationen werden für den Fachmann ersichtlich, sobald die vorstehende Offenbarung vollständig verstanden ist. Es ist beabsichtigt, dass die folgenden Ansprüche derart interpretiert werden, dass alle solchen Variationen und Modifikationen eingeschlossen sind.