DE202022002976U1 - Skalierbares System-on-a-Chip - Google Patents

Skalierbares System-on-a-Chip Download PDF

Info

Publication number
DE202022002976U1
DE202022002976U1 DE202022002976.4U DE202022002976U DE202022002976U1 DE 202022002976 U1 DE202022002976 U1 DE 202022002976U1 DE 202022002976 U DE202022002976 U DE 202022002976U DE 202022002976 U1 DE202022002976 U1 DE 202022002976U1
Authority
DE
Germany
Prior art keywords
memory
network
interrupt
cache
integrated circuit
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
DE202022002976.4U
Other languages
English (en)
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Apple Inc
Original Assignee
Apple Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Priority claimed from US17/821,305 external-priority patent/US12007895B2/en
Application filed by Apple Inc filed Critical Apple Inc
Publication of DE202022002976U1 publication Critical patent/DE202022002976U1/de
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1605Handling requests for interconnection or transfer for access to memory bus based on arbitration
    • G06F13/161Handling requests for interconnection or transfer for access to memory bus based on arbitration with latency improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0815Cache consistency protocols
    • G06F12/0831Cache consistency protocols using a bus scheme, e.g. with bus monitoring or watching means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0811Multiuser, multiprocessor or multiprocessing cache systems with multilevel cache hierarchies
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0813Multiuser, multiprocessor or multiprocessing cache systems with a network or matrix configuration
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0815Cache consistency protocols
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0815Cache consistency protocols
    • G06F12/0817Cache consistency protocols using directory methods
    • G06F12/0824Distributed directories, e.g. linked lists of caches
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/109Address translation for multiple virtual address spaces, e.g. segmentation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/12Replacement control
    • G06F12/121Replacement control using replacement algorithms
    • G06F12/128Replacement control using replacement algorithms adapted to multidimensional cache systems, e.g. set-associative, multicache, multiset or multilevel
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1668Details of memory controller
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/20Handling requests for interconnection or transfer for access to input/output bus
    • G06F13/28Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/40Bus structure
    • G06F13/4063Device-to-bus coupling
    • G06F13/4068Electrical coupling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • G06F15/163Interprocessor communication
    • G06F15/173Interprocessor communication using an interconnection network, e.g. matrix, shuffle, pyramid, star, snowflake
    • G06F15/17356Indirect interconnection networks
    • G06F15/17368Indirect interconnection networks non hierarchical topologies
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/78Architectures of general purpose stored program computers comprising a single central processing unit
    • G06F15/7807System on chip, i.e. computer system on a single chip; System in package, i.e. computer system on one or more chips in a single package
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0815Cache consistency protocols
    • G06F12/0831Cache consistency protocols using a bus scheme, e.g. with bus monitoring or watching means
    • G06F12/0833Cache consistency protocols using a bus scheme, e.g. with bus monitoring or watching means in combination with broadcast means (e.g. for invalidation or updating)
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • G06F2212/1024Latency reduction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1048Scalability
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/30Providing cache or TLB in specific location of a processing system
    • G06F2212/305Providing cache or TLB in specific location of a processing system being part of a memory device, e.g. cache DRAM
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/45Caching of specific data in cache memory
    • G06F2212/455Image or video data
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/65Details of virtual memory and virtual address translation
    • G06F2212/657Virtual address space management
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Mathematical Physics (AREA)
  • Computing Systems (AREA)
  • Microelectronics & Electronic Packaging (AREA)
  • Software Systems (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Multi Processors (AREA)
  • Microcomputers (AREA)
  • Image Processing (AREA)

Abstract

System, umfassend:
eine Vielzahl von Prozessorkernen;
eine Vielzahl von Grafikverarbeitungseinheiten;
eine Vielzahl von Peripherievorrichtungen, die sich von den Prozessorkernen und Grafikverarbeitungseinheiten unterscheiden;
eine Vielzahl von Speichersteuerungsschaltungen, die konfiguriert sind, um
eine Schnittstelle zum Systemspeicher zu bilden; und
eine Interconnect-Fabric, die konfiguriert ist, um Kommunikation zwischen den Speichersteuerungsschaltungen und den Prozessorkernen, den Grafikverarbeitungseinheiten und den Peripherievorrichtungen bereitzustellen;
wobei die Prozessorkerne, Grafikverarbeitungseinheiten, Peripherievorrichtungen und Speichersteuerschaltungen konfiguriert sind, um über eine vereinheitlichte Speicherarchitektur zu kommunizieren, wobei eine gegebene Seite innerhalb eines vereinheitlichten Adressraums, der durch die vereinheitlichte Speicherarchitektur definiert ist, unter den Speichersteuerungsschaltungen verteilt ist; und
wobei die Prozessorkerne, Grafikverarbeitungseinheiten, Peripherievorrichtungen, eine oder mehrere Speichersteuerungsschaltungen und eine Interconnect-Fabric in einem System-on-a-Chip (SOC) eingeschlossen sind, das auf einem oder mehreren co-verpackten Halbleiter-Dies integriert ist.

Description

  • HINTERGRUND
  • TECHNISCHES GEBIET
  • Die hierin beschriebenen Ausführungsformen beziehen sich auf digitale Systeme und insbesondere auf ein System mit einem vereinheitlichten Speicher, der für heterogene Akteure in dem System zugänglich ist.
  • BESCHREIBUNG DES STANDS DER TECHNIK
  • Beim Design moderner Rechensysteme ist es zunehmend üblich geworden, eine Vielzahl von Systemhardwarekomponenten auf einem einzigen Silicium-Die zu integrieren, die früher als diskrete Siliciumkomponenten implementiert wurden. Zum Beispiel konnte ein komplettes Computersystem früher einen separat verpackten Mikroprozessor einschließen, der auf einer Rückwandplatine montiert und mit einem Chipsatz gekoppelt war, der eine Schnittstelle zwischen dem Mikroprozessor und anderen Vorrichtungen wie dem Systemspeicher, einem Grafikprozessor und anderen Peripherievorrichtungen bildete. Im Gegensatz dazu hat die Entwicklung der Halbleiterprozesstechnologie die Integration vieler dieser diskreten Vorrichtungen ermöglicht. Das Ergebnis einer solchen Integration wird gemeinhin als „System-on-a-Chip“ (SOC) bezeichnet.
  • Herkömmlicherweise werden SOCs für verschiedene Anwendungen individuell entworfen, ausgelegt und implementiert. Zum Beispiel kann ein SOC für eine Smartwatch-Vorrichtung strenge Anforderungen an den Leistungsverbrauch stellen, weil der Formfaktor einer solchen Vorrichtung die verfügbare Batteriegröße und damit die maximale Verwendungsdauer der Vorrichtung begrenzt. Gleichzeitig kann die geringe Größe einer solchen Vorrichtung die Anzahl der Peripheriegeräte begrenzen, die das SOC unterstützen muss, sowie die Rechenanforderungen der Anwendungen, die das SOC ausführt. Im Gegensatz dazu hätte ein SOC für eine Mobiltelefonanwendung eine größere verfügbare Batterie und damit ein größeres Leistungsbudget, würde aber auch komplexere Peripheriegeräte und höhere Ansprüche an Grafik- und allgemeine Rechenleistung erwarten. Es ist also zu erwarten, dass ein solches SOC größer und komplexer sein dürfte als ein Design für eine kleinere Vorrichtung. Dieser Vergleich kann beliebig auf andere Anwendungen erweitert werden. So ist beispielsweise zu erwarten, dass tragbare Rechenlösungen wie Augmented- und/oder Virtual-Reality-Systeme höhere Rechenanforderungen stellen als weniger komplexe Vorrichtungen und Vorrichtungen für Desktop- und/oder Rack-montierte Computersysteme noch höhere.
  • Der herkömmliche, auf Einzelarchitekturen basierende Ansatz für SOCs lässt kaum Möglichkeiten für die Wiederverwendung von Designs zu, und der Aufwand für das Design wird durch die verschiedenen SOC-Implementierungen verdoppelt.
  • KURZBESCHREIBUNG DER ZEICHNUNGEN
  • Die folgende detaillierte Beschreibung nimmt Bezug auf die begleitenden Zeichnungen, die nun kurz beschrieben werden.
    • 1 ist ein Blockdiagramm einer Ausführungsform eines Systems-on-Chip (SOC).
    • 2 ist ein Blockdiagramm eines Systems, das eine Ausführungsform von mehreren Netzwerkverschaltungsagenten einschließt.
    • 3 ist ein Blockdiagramm einer Ausführungsform eines Netzwerks, das eine Ringtopologie verwendet.
    • 4 ist ein Blockdiagramm einer Ausführungsform eines Netzwerks, das eine Maschentopologie verwendet.
    • 5 ist ein Blockdiagramm einer Ausführungsform eines Netzwerks, das eine Baumtopologie verwendet.
    • 6 ist ein Blockdiagramm einer Ausführungsform eines Systems-on-a-Chip (SOC), das mehrere Netzwerke für eine Ausführungsform aufweist.
    • 7 ist ein Blockdiagramm einer Ausführungsform eines Systems-on-a-Chip (SOC), das eines der unabhängigen Netzwerke veranschaulicht, die in 6 für eine Ausführungsform gezeigt sind.
    • 8 ist ein Blockdiagramm einer Ausführungsform eines Systems-on-a-Chip (SOC), das ein weiteres der unabhängigen Netzwerke veranschaulicht, die in 6 für eine Ausführungsform gezeigt sind.
    • 9 ist ein Blockdiagramm einer Ausführungsform eines Systems-on-a-Chip (SOC), das noch ein weiteres der unabhängigen Netzwerke veranschaulicht, die in 6 für eine Ausführungsform gezeigt sind.
    • 10 ist ein Blockdiagramm einer Ausführungsform eines Multi-Die-Systems, das zwei Halbleiter-Dies einschließt.
    • 11 ist ein Blockdiagramm einer Ausführungsform eines Eingabe/Ausgabe-Clusters (E/A-Clusters).
    • 12 ist ein Blockdiagramm einer Ausführungsform eines Prozessor-Clusters.
    • 13 ist ein Paar von Tabellen, die virtuelle Kanäle und Verkehrstypen und Netzwerke veranschaulichen, die in 6 bis 9 gezeigt sind, in denen sie für eine Ausführungsform verwendet werden.
    • 14 ist ein Flussdiagramm, das eine Ausführungsform des Initiierens einer Transaktion auf einem Netzwerk veranschaulicht.
    • 15 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.
    • 16 ist ein Blockdiagramm einer Ausführungsform eines Systems-on-a-Chip (SOC), das eine Ausführungsform des in 15 gezeigten Systems implementiert.
    • 17 ist ein Blockdiagramm einer Ausführungsform einer Zustandsmaschine, die in einer Ausführungsform der Interrupt-Steuerung implementiert sein kann.
    • 18 ist ein Flussdiagramm, das die Funktionsweise einer Ausführungsform der Interrupt-Steuerung veranschaulicht, um eine weiche oder harte Iteration der Interrupt-Lieferung durchzuführen.
    • 19 ist ein Flussdiagramm, das die Funktionsweise einer Ausführungsform einer Cluster-Interrupt-Steuerung veranschaulicht.
    • 20 ist ein Blockdiagramm einer Ausführungsform eines Prozessors.
    • 21 ist ein Blockdiagramm einer Ausführungsform eines Umordnungspuffers.
    • 22 ist ein Flussdiagramm, das die Funktionsweise einer Ausführungsform einer in 20 gezeigten Interrupt-Acknowledgement-Steuerschaltung veranschaulicht.
    • 23 ist ein Blockdiagramm einer Vielzahl von SOCs, die eine Ausführungsform des in 15 gezeigten Systems implementieren können.
    • 24 ist ein Flussdiagramm, das die Funktionsweise einer Ausführungsform einer primären Interrupt-Steuerung, die in 23 gezeigt ist, veranschaulicht.
    • 25 ist ein Flussdiagramm, das die Funktionsweise einer Ausführungsform einer sekundären Interrupt-Steuerung, die in 23 gezeigt ist, veranschaulicht.
    • 26 ist ein Flussdiagramm, das ein Beispiel eines Verfahrens zum Handhaben von Interrupts veranschaulicht.
    • 27 ist ein Blockdiagramm einer Ausführungsform eines Cache-kohärenten Systems, das als System-on-a-Chip (SOC) implementiert ist.
    • 28 ist ein Blockdiagramm, das eine Ausführungsform eines Dreisprung-Protokolls zur kohärenten Übertragung eines Cache-Blocks veranschaulicht.
    • 29 ist ein Blockdiagramm, das eine Ausführungsform zum Verwalten einer Race zwischen einem Füllvorgang für eine kohärente Transaktion und einem Snoop für eine andere kohärente Transaktion veranschaulicht.
    • 30 ist ein Blockdiagramm, das eine Ausführungsform zum Verwalten einer Race zwischen einem Snoop für eine kohärente Transaktion und einer Bestätigung für eine andere kohärente Transaktion veranschaulicht.
    • 31 ist ein Blockdiagramm eines Abschnitts einer Ausführungsform eines kohärenten Agenten.
    • 32 ist ein Flussdiagramm, das die Funktionsweise einer Ausführungsform zum Verarbeiten einer Anforderung an einer Kohärenzsteuerung veranschaulicht.
    • 33 ist ein Flussdiagramm, das die Funktionsweise einer Ausführungsform eines kohärenten Agenten veranschaulicht, der eine Anforderung an eine Speichersteuerung übertragen hat, Abschlüsse in Bezug auf die Anforderung zu verarbeiten.
    • 34 ist ein Flussdiagramm, das die Funktionsweise einer Ausführungsform eines kohärenten Agenten veranschaulicht, der einen Snoop empfängt.
    • 35 ist ein Blockdiagramm, das eine Kette von kollidierenden Anforderungen an einen Cache-Block gemäß einer Ausführungsform veranschaulicht.
    • 36 ist ein Flussdiagramm, das eine Ausführungsform eines kohärenten Agenten veranschaulicht, der einen Snoop aufnimmt.
    • 37 ist ein Blockdiagramm, das eine Ausführungsform einer nicht-cachefähigen Anforderung veranschaulicht.
    • 38 ist ein Flussdiagramm, das die Funktionsweise einer Ausführungsform einer Kohärenzsteuerung zum Erzeugen von Snoops basierend auf cachefähigen und nicht-cachefähigen Eigenschaften von Anforderungen veranschaulicht.
    • 39 ist eine Tabelle, die eine Vielzahl von Cache-Zuständen gemäß einer Ausführungsform des Kohärenzprotokolls veranschaulicht.
    • 40 ist eine Tabelle, die eine Vielzahl von Nachrichten veranschaulicht, die in einer Ausführungsform des Kohärenzprotokolls verwendet werden können.
    • 41 ist ein Flussdiagramm, das die Funktionsweise einer Ausführungsform einer Kohärenzsteuerung zum Verarbeiten einer Änderung an einer exklusiven bedingten Anforderung veranschaulicht.
    • 42 ist ein Flussdiagramm, das die Funktionsweise einer Ausführungsform einer Kohärenzsteuerung zum Lesen eines Verzeichniseintrags und Erzeugen von Snoops veranschaulicht.
    • 43 ist ein Flussdiagramm, das die Funktionsweise einer Ausführungsform einer Kohärenzsteuerung zum Verarbeiten einer exklusiven datenlosen Anforderung veranschaulicht.
    • 44 ist ein Blockdiagramm, das beispielhafte Elemente eines Systems-on-a-Chip (SOC) gemäß einigen Ausführungsformen veranschaulicht.
    • 45 ist ein Blockdiagramm, das beispielhafte Elemente von Interaktionen zwischen einem E/A-Agenten und einer Speichersteuerung gemäß einigen Ausführungsformen veranschaulicht.
    • 46A ist ein Blockdiagramm, das beispielhafte Elemente eines E/A-Agenten veranschaulicht, der gemäß einigen Ausführungsformen zur Verarbeitung von Schreibtransaktionen konfiguriert ist.
    • 46B ist ein Blockdiagramm, das beispielhafte Elemente eines E/A-Agenten veranschaulicht, der gemäß einigen Ausführungsformen zur Verarbeitung von Lesetransaktionen konfiguriert ist.
    • 47 ist ein Flussdiagramm, das ein Beispiel für die Verarbeitung von Lesetransaktionsanforderungen von einer Peripheriekomponente gemäß einigen Ausführungsformen veranschaulicht.
    • 48 ist ein Flussdiagramm, das ein beispielhaftes Verfahren veranschaulicht, das sich auf die Verarbeitung von Lesetransaktionsanforderungen durch einen E/A-Agenten bezieht.
    • 49 veranschaulicht ein Blockdiagramm einer Ausführungsform eines Systems mit zwei integrierten Schaltungen, die miteinander gekoppelt sind.
    • 50 zeigt ein Blockdiagramm einer Ausführungsform einer integrierten Schaltung mit einer externen Schnittstelle.
    • 51 stellt ein Blockdiagramm eines Systems mit zwei integrierten Schaltungen unter Verwendung eines Schnittstellenwrappers dar, um Stiftbelegungen jeweiliger externer Schnittstellen zu leiten.
    • 52 veranschaulicht ein Blockdiagramm einer Ausführungsform einer integrierten Schaltung mit einer externen Schnittstelle, die Stiftbündel verwendet.
    • 53A stellt zwei Beispiele von zwei integrierten Schaltungen dar, die unter Verwendung komplementärer Schnittstellen miteinander gekoppelt sind.
    • 53B stellt zwei zusätzliche Beispiele von zwei integrierten Schaltungen dar, die miteinander gekoppelt sind.
    • 54 veranschaulicht ein Flussdiagramm eines Beispiels eines Verfahrens zum Übertragen von Daten zwischen zwei gekoppelten integrierten Schaltungen.
    • 55 zeigt ein Flussdiagramm eines Beispiels eines Verfahrens zum Leiten von Signaldaten zwischen einer externen Schnittstelle und On-Chip-Routern innerhalb einer integrierten Schaltung.
    • 56 ist ein Blockdiagramm einer Ausführungsform einer Vielzahl von Systemen auf einem Chip (SOCs), wobei ein gegebenes SOC eine Vielzahl von Speichersteuerungen einschließt.
    • 57 ist ein Blockdiagramm, das eine Ausführungsform von Speichersteuerungen und eine physische/logische Anordnung auf den SOCs veranschaulicht.
    • 58 ist ein Blockdiagramm einer Ausführungsform eines binären Entscheidungsbaums, um eine Speichersteuerung zu bestimmen, die eine bestimmte Adresse bedient.
    • 59 ist ein Blockdiagramm, das eine Ausführungsform einer Vielzahl von Speicherortskonfigurationsregistem veranschaulicht.
    • 60 ist ein Flussdiagramm, das die Funktionsweise einer Ausführungsform der SOCs während des Bootens/Hochfahrens veranschaulicht.
    • 61 ist ein Flussdiagramm, das die Funktionsweise einer Ausführungsform der SOCs zum Leiten einer Speicheranforderung veranschaulicht.
    • 62 ist ein Flussdiagramm, das die Funktionsweise einer Ausführungsform einer Speichersteuerung als Reaktion auf eine Speicheranforderung veranschaulicht.
    • 63 ist ein Flussdiagramm, das die Funktionsweise einer Ausführungsform einer Überwachungssystemoperation zum Bestimmen eines Faltens von Speicher veranschaulicht.
    • 64 ist ein Flussdiagramm, das die Funktionsweise einer Ausführungsform eines Faltens eines Speicher-Slices veranschaulicht.
    • 65 ist ein Flussdiagramm, das die Funktionsweise einer Ausführungsform eines Entfaltens eines Speicher-Slices veranschaulicht.
    • 66 ist ein Flussdiagramm, das ein Beispiel eines Verfahrens zum Falten von Speicher veranschaulicht.
    • 67 ist ein Flussdiagramm, das ein Beispiel eines Verfahrens zum Hashing einer Speicheradresse veranschaulicht.
    • 68 ist ein Flussdiagramm, das ein Beispiel eines Verfahrens zum Bilden einer komprimierten Pipe-Adresse veranschaulicht.
    • 69 ist ein Blockdiagramm einer Ausführungsform eines integrierten Schaltungsdesigns, das vollständige und partielle Instanzen unterstützt.
    • 70-72 sind verschiedene Ausführungsformen von vollständigen und partiellen Instanzen der in 69 gezeigten integrierten Schaltung.
    • 73 ist ein Blockdiagramm einer Ausführungsform der in 69 gezeigten integrierten Schaltung mit lokalen Taktquellen in jedem Teilbereich der integrierten Schaltung.
    • 74 ist ein Blockdiagramm einer Ausführungsform der in 69 gezeigten integrierten Schaltung mit lokalen analogen Pads in jedem Teilbereich der integrierten Schaltung.
    • 75 ist ein Blockdiagramm einer Ausführungsform der in 69 gezeigten integrierten Schaltung mit Blockbereichen an den Ecken jedes Teilbereichs und Bereichen zum Verbinden von „Höckern“, die Bereiche in der Nähe der Kanten jedes Teilbereichs ausschließen.
    • 76 ist ein Blockdiagramm, das eine Ausführungsform eines Stub und einer zugehörigen Schaltungskomponente veranschaulicht.
    • 77 ist ein Blockdiagramm, das eine Ausführungsform eines Paares integrierter Schaltungen und gewisse zusätzliche Details des Paares integrierter Schaltungen veranschaulicht.
    • 78 ist ein Blockdiagramm, das eine Ausführungsform einer integrierten Schaltungsdesignmethodik veranschaulicht.
    • 79 ist ein Blockdiagramm, das eine Prüfstandanordnung zum Prüfen der vollständigen und partiellen Instanzen veranschaulicht.
    • 80 ist ein Blockdiagramm, das eine Prüfstandanordnung zum Prüfen von Komponentenebenen veranschaulicht.
    • 81 ist ein Flussdiagramm, das ein Beispiel eines Designs und eines Herstellungsverfahrens für eine integrierte Schaltung veranschaulicht.
    • 82 ist ein Flussdiagramm, das ein Beispiel eines Verfahrens zum Herstellen integrierter Schaltungen veranschaulicht.
    • 83 ist ein Blockdiagramm einer Ausführungsform eines Systems.
    • 84 ist ein Blockdiagramm einer Ausführungsform 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
  • Ein SOC kann die meisten zur Implementierung eines vollständigen Computersystems erforderlichen Elemente einschließen, auch wenn einige Elemente (z. B. der Systemspeicher) außerhalb des SOC liegen können. Ein SOC kann beispielsweise einen oder mehrere Universalprozessorkerne, eine oder mehrere Grafikverarbeitungseinheiten und eine oder mehrere andere Peripherievorrichtungen (wie anwendungsspezifische Beschleuniger, E/A-Schnittstellen oder andere Arten von Vorrichtungen) einschließen, die sich von den Prozessorkernen und Grafikverarbeitungseinheiten unterscheiden. Das SOC kann ferner eine oder mehrere Speichersteuerungsschaltungen einschließen, die konfiguriert sind, um eine Schnittstelle zum Systemspeicher zu bilden, sowie eine Interconnect-Fabric, die konfiguriert ist, um die Kommunikation zwischen der/den Speichersteuerungsschaltung(en), dem/den Prozessorkern(en), der/den Grafikverarbeitungseinheit(en) und der/den Peripherievorrichtung(en) zu ermöglichen.
  • Die Design-Anforderungen für ein gegebenes SOC werden oftmals durch die Leistungsbeschränkungen und Leistungsanforderungen der jeweiligen Anwendung bestimmt, für die das SOC bestimmt ist. Zum Beispiel kann ein SOC für eine Smartwatch-Vorrichtung strenge Anforderungen an den Leistungsverbrauch stellen, weil der Formfaktor einer solchen Vorrichtung die verfügbare Batteriegröße und damit die maximale Verwendungsdauer der Vorrichtung begrenzt. Gleichzeitig kann die geringe Größe einer solchen Vorrichtung die Anzahl der Peripheriegeräte begrenzen, die das SOC unterstützen muss, sowie die Rechenanforderungen der Anwendungen, die das SOC ausführt. Im Gegensatz dazu hätte ein SOC für eine Mobiltelefonanwendung eine größere verfügbare Batterie und damit ein größeres Leistungsbudget, würde aber auch komplexere Peripheriegeräte und höhere Ansprüche an Grafik- und allgemeine Rechenleistung erwarten. Es ist also zu erwarten, dass ein solches SOC größer und komplexer sein dürfte als ein Design für eine kleinere Vorrichtung.
  • Dieser Vergleich kann beliebig auf andere Anwendungen erweitert werden. So ist beispielsweise zu erwarten, dass tragbare Rechenlösungen wie Augmented- und/oder Virtual-Reality-Systeme höhere Rechenanforderungen stellen als weniger komplexe Vorrichtungen und Vorrichtungen für Desktop- und/oder Rack-montierte Computersysteme noch höhere.
  • Da die Systeme für größere Anwendungen gebaut sind, können mehrere Chips zusammen verwendet werden, um die Leistungsfähigkeit zu skalieren und dadurch ein „System von Chips“ zu bilden. In dieser Patentschrift werden diese Systeme weiterhin als „SOC“ bezeichnet, unabhängig davon, ob es sich um einen einzelnen physischen Chip oder mehrere physische Chips handelt. Die Prinzipien dieser Offenbarung sind gleichermaßen auf SOCs mit mehreren Chips und auf SOCs mit einem Chip anwendbar.
  • Eine Erkenntnis der Erfinder dieser Offenbarung besteht darin, dass die Rechenanforderungen und die entsprechende SOC-Komplexität für die verschiedenen vorstehend erörterten Anwendungen in der Regel von klein bis groß reichen. Wenn ein SOC so ausgelegt werden könnte, dass die physische Komplexität leicht skalierbar ist, könnte ein Kern-SOC-Design leicht auf eine Vielzahl von Anwendungen zugeschnitten werden, während die Wiederverwendbarkeit des Designs genutzt und doppelter Aufwand reduziert werden kann. Ein solches SOC stellt auch eine einheitliche Sicht auf die Funktionsblöcke bereit, z. B. Verarbeitungskerne oder Medienblöcke, wodurch deren Integration in das SOC erleichtert wird, was ferner zur Verringerung des Aufwands beiträgt. Das heißt, dass dasselbe Design eines Funktionsblocks (oder „IP“) im Wesentlichen unverändert in kleinen bis großen SOCs verwendet werden kann. Wenn ein solches SOC-Design auf eine Art und Weise skaliert werden könnte, die für die auf dem SOC ausgeführte Software weitgehend oder vollständig transparent ist, würde zudem die Entwicklung von Softwareanwendungen, die einfach über unterschiedlich ausgestattete Versionen des SOC skaliert werden können, erheblich vereinfacht. Eine Anwendung kann einmal geschrieben werden und arbeitet automatisch korrekt in vielen verschiedenen, wiederum von kleinen bis zu großen Systemen. Wenn dieselbe Software über verschiedene Ressourcenversionen hinweg skaliert, stellt die Software dem Benutzer dieselbe Schnittstelle zur Verfügung: ein weiterer Vorteil der Skalierung.
  • Diese Offenbarung zieht ein solches skalierbares SOC-Design in Betracht. Insbesondere kann ein Kern-SOC-Design einen Satz von Prozessorkernen, Grafikverarbeitungseinheiten, Speichersteuerungsschaltungen, Peripherievorrichtungen und ein für deren Zusammenschaltung konfiguriertes Interconnect-Fabric einschließen. Ferner können die Prozessorkerne, Grafikverarbeitungseinheiten und Peripherievorrichtungen konfiguriert sein, um über eine vereinheitlichte Speicherarchitektur auf den Systemspeicher zuzugreifen. Die vereinheitlichte Speicherarchitektur schließt einen vereinheitlichten Adressraum ein, der es den heterogenen Agenten im System (Prozessoren, Grafikverarbeitungseinheiten, Peripheriegeräten usw.) ermöglicht, einfach und mit hoher Leistungsfähigkeit zusammenzuarbeiten. Das heißt, anstatt einer Grafikverarbeitungseinheit einen privaten Adressraum zuzuweisen und zu verlangen, dass Daten in diesen und aus diesem privaten Adressraum kopiert werden, können die Grafikverarbeitungseinheit, die Prozessorkerne und andere Peripherievorrichtungen im Prinzip gemeinsam auf jede Speicheradresse zugreifen, auf die die Speichersteuerungsschaltungen zugreifen können (in einigen Ausführungsformen vorbehaltlich von Privilegienmodellen oder anderen Sicherheitsmerkmalen, die den Zugriff auf bestimmte Arten von Speicherinhalten beschränken). Zusätzlich stellt die vereinheitlichte Speicherarchitektur dieselbe Speichersemantik zur Verfügung, da die Komplexität des SOC skaliert wird, um die Anforderungen verschiedener Systeme zu erfüllen (z. B. eine gemeinsame Speichersemantik). Die Speichersemantik kann z. B. Speicherordnungseigenschaften, Unterstützung und Attribute der Dienstgüte (Quality of Service, QoS), Definition der Speicherverwaltungseinheit, Cache-Kohärenzfunktionalität usw. einschließen. Der vereinheitlichte Adressraum kann ein virtueller Adressraum sein, der sich vom physischen Adressraum unterscheidet, oder er kann der physische Adressraum sein, oder beides.
  • Während die Architektur dieselbe wie die Skalierung des SOC bleibt, gibt es verschiedene Möglichkeiten der Implementierung. Zum Beispiel können virtuelle Kanäle als Teil der QoS-Unterstützung verwendet werden, aber eine Teilmenge der unterstützten virtuellen Kanäle kann implementiert werden, wenn nicht die gesamte QoS in einem gegebenen System gewährleistet ist. Je nach der für ein gegebenes System erforderlichen Bandbreite und Latenz können verschiedene Implementierungen von Interconnect-Fabrics verwendet werden. Zusätzlich sind einige Merkmale in kleineren Systemen möglicherweise nicht erforderlich (z. B. ist das Adress-Hashing zum Ausgleich des Speicherverkehrs zu den verschiedenen Speichersteuerungen in einem einzelnen Speichersteuerungssystem möglicherweise nicht erforderlich). Der Hashing-Algorithmus ist in Fällen mit einer geringen Anzahl von Speichersteuerungen (z. B. 2 oder 4) nicht unbedingt entscheidend, trägt aber umso mehr zur Systemleistung bei, wenn eine größere Anzahl von Speichersteuerungen verwendet wird.
  • Zusätzlich können einige der Komponenten mit Blick auf die Skalierbarkeit ausgelegt werden. Beispielsweise können die Speichersteuerungen so ausgelegt werden, dass sie durch Hinzufügen zusätzlicher Speichersteuerungen zum Fabric hochskalieren, wobei jede einen Teil des Adressraums, des Speicher-Caches und der Kohärenzverfolgungslogik übernimmt.
  • Insbesondere werden Ausführungsformen eines SOC-Designs offenbart, die sowohl in ihrer Komplexität herunterskaliert als auch hochskaliert werden können. In einem SOC können beispielsweise die Prozessorkerne, die Grafikverarbeitungseinheiten, das Fabric und andere Vorrichtungen so angeordnet und konfiguriert werden, dass die Größe und Komplexität des SOC vor der Herstellung leicht durch „Zerkleinern“ des SOC entlang einer definierten Achse reduziert werden kann, sodass das resultierende Design nur eine Teilmenge der im ursprünglichen Design definierten Komponenten einschließt. Wenn Busse, die sich sonst auf den eliminierten Abschnitt des SOC erstrecken würden, in geeigneter Weise terminiert werden, lässt sich mit relativ geringem Design- und Verifikationsaufwand eine komplexitätsreduzierte Version des ursprünglichen SOC-Designs erhalten. Die vereinheitlichte Speicherarchitektur kann den Einsatz von Anwendungen im Design mit reduzierter Komplexität erleichtern, die in einigen Fällen einfach ohne wesentliche Änderungen funktionieren können.
  • Wie zuvor erwähnt, können Ausführungsformen des offenbarten SOC-Designs so konfiguriert sein, dass sie in ihrer Komplexität hochskaliert werden können. Beispielsweise können mehrere Instanzen des SOC-Designs mit einem einzelnen Die zusammengeschaltet werden, was zu einem System führt, das um ein Vielfaches von 2, 3, 4 oder mehr größere Ressourcen als das Design mit einem einzelnen Die aufweist. Wiederum können die vereinheitlichte Speicherarchitektur und die konsistente SOC-Architektur die Entwicklung und Bereitstellung von Softwareanwendungen erleichtern, die zur Nutzung der zusätzlichen Rechenressourcen, die durch diese Systemkonfigurationen mit mehreren Dies angeboten werden, skaliert werden.
  • 1 ist ein Blockdiagramm einer Ausführungsform eines skalierbaren SOC 10, das mit einem oder mehreren Speichern, wie Speichern 12A-12m, gekoppelt ist. Das SOC 10 kann eine Vielzahl von Prozessor-Clustern 14A-14n einschließen. Die Prozessor-Cluster 14A-14n können einen oder Prozessoren (P) 16 einschließen, die mit einem oder mehreren Caches (z. B. Cache 18) gekoppelt sind. Die Prozessoren 16 können Allzweckprozessoren (z. B. zentrale Verarbeitungseinheiten oder CPUs) sowie andere Arten von Prozessoren wie Grafikverarbeitungseinheiten (GPUs) einschließen. Das SOC 10 kann einen oder mehrere andere Agenten 20A-20p einschließen. Der eine oder die mehreren anderen Agenten 20A-20p können beispielsweise eine Vielzahl von Peripherieschaltungen/-vorrichtungen und/oder eine Brücke wie einen Eingabe/Ausgabe-Agenten (EAA) einschließen, der mit einer oder mehreren Peripherievorrichtungen/- schaltungen gekoppelt ist. Das SOC 10 kann eine oder mehrere Speichersteuerungen 22A-22 m einschließen, die jeweils während der Verwendung mit einer jeweiligen Speichervorrichtung oder -schaltung 12A-12 m gekoppelt sind. In einer Ausführungsform kann jede Speichersteuerung 22A-22 m eine Kohärenzsteuerungsschaltung (kurz: „Kohärenzsteuerung" oder „CC“) einschließen, die mit einem Verzeichnis (Kohärenzsteuerung und Verzeichnis, die/das in 1 nicht gezeigt ist) gekoppelt ist. Zusätzlich ist eine Die-zu-Die-Schaltung (D2D-Schaltung) 26 im SOC 10 gezeigt. Die Speichersteuerungen 22A-22m, die anderen Agenten 20A-20p, die D2D-Schaltung 26 und die Prozessor-Cluster 14A-14n können mit einer Verschaltung 28 gekoppelt sein, um zwischen den verschiedenen Komponenten 22A-22m, 20A-20p, 26 und 14A-14n zu kommunizieren. Wie durch den Namen angegeben, können die Komponenten des SOC 10 in einer Ausführungsform auf einem einzigen „Chip“ einer integrierten Schaltung integriert sein. In anderen Ausführungsformen können verschiedene Komponenten außerhalb des SOC 10 auf anderen Chips oder anderweitig diskreten Komponenten liegen. Es kann ein beliebiges Maß an Integration oder diskreten Komponenten verwendet werden. In einer Ausführungsform können Teilmengen der Prozessor-Cluster 14A-14n und der Speichersteuerungen 22A-22 m in einem von mehreren Chips einer integrierten Schaltung implementiert werden, die miteinander gekoppelt sind, um die in dem SOC 10 von 1 veranschaulichten Komponenten zu bilden.
  • Bei der D2D-Schaltung 26 kann es sich um eine Off-Chip-Verschaltung handeln, die mit der Interconnect-Fabric 28 gekoppelt und konfiguriert ist, um die Interconnect-Fabric 28 mit einer entsprechenden Interconnect-Fabric 28 auf einer anderen Instanz des SOC 10 zu koppeln. Die Interconnect-Fabric 28 und die Off-Chip-Verschaltung 26 stellen eine Schnittstelle bereit, die eine oder mehrere Speichersteuerungsschaltungen, die Prozessorkerne, Grafikverarbeitungseinheiten und Peripherievorrichtungen entweder in einer einzelnen Instanz der integrierten Schaltung oder in zwei oder mehr Instanzen der integrierten Schaltung transparent verbindet. Das heißt, über die D2D-Schaltung 26 erstreckt sich die Interconnect-Fabric 28 über die zwei oder integrierten Schaltungs-Dies, und eine Kommunikation wird transparent zu einem Ort der Quelle und des Ziels auf den integrierten Schaltungs-Dies zwischen einer Quelle und einem Ziel geleitet. Die Interconnect-Fabric 28 erstreckt sich unter Verwendung von Hardwareschaltungen (z. B. der D2D-Schaltung 26) über zwei oder mehr Dies mit integrierter Schaltung, um eine Kommunikation zwischen einer Quelle und einem Ziel automatisch zu leiten, unabhängig davon, ob sich die Quelle und das Ziel auf demselben Die mit integrierter Schaltung befinden oder nicht.
  • Somit unterstützt die D2D-Schaltung 26 die Skalierbarkeit des SOC 10 auf zwei oder mehr Instanzen des SOC 10 in einem System. Wenn zwei oder mehr Instanzen eingeschlossen sind, erstreckt sich die vereinheitlichte Speicherarchitektur, einschließlich des vereinheitlichten Adressraums, transparent für Software, die auf den Prozessorkernen, den Grafikverarbeitungseinheiten oder den Peripherievorrichtungen ausgeführt wird, über die zwei oder mehr Instanzen des Dies mit integrierter Schaltung. Wenn es sich um eine einzelne Instanz des Dies mit integrierter Schaltung in einem System handelt, bildet die vereinheitlichte Speicherarchitektur, einschließlich des vereinheitlichten Adressraums, auf die einzelne Instanz transparent für Software ab. Wenn zwei oder mehr Instanzen des Dies mit integrierter Schaltung in einem System eingeschlossen sind, werden die Prozessorkerne 16, die Grafikverarbeitungseinheiten, die Peripherievorrichtungen 20A-20p und die Interconnect-Fabric 28 des System-Satzes über zwei oder mehr Dies mit integrierter Schaltung, wiederum transparent für die Software, verteilt.
  • Wie vorstehend erwähnt, können die Prozessor-Cluster 14A-14n einen oder mehrere Prozessoren 16 einschließen. Die Prozessoren 16 können als zentrale Verarbeitungseinheiten (CPUs) des SOC 10 dienen. 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. Zusätzlich können die Prozessoren 16 in einem gegebenen Cluster 14A-14n, wie vorstehend erwähnt, GPUs sein und können einen für das Rendern, Schattieren und andere Manipulationen optimierten Grafikanweisungssatz implementieren. Die Cluster 14A-14n können ferner weitere Hardware, wie den Cache 18 und/oder eine Schnittstelle zu den anderen Komponenten des Systems (z. B. eine Schnittstelle zu der Verschaltung 28), einschließen. Andere kohärente Agenten können Prozessoren einschließen, die nicht CPUs oder GPUs sind.
  • 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, Prozessorkerne und/oder Mikroprozessoren, die in Multichip-Modulimplementierungen integriert sind, Prozessoren, die als mehrere integrierte Schaltungen implementiert sind, usw. umfassen. Die Anzahl der Prozessoren 16 in einem gegebenen Cluster 14A-14n kann sich von der Anzahl der Prozessoren 16 in einem anderen Cluster 14A-14n unterscheiden. Im Allgemeinen können ein oder mehrere Prozessoren eingeschlossen sein. Zusätzlich können sich die Prozessoren 16 in der Mikroarchitekturimplementierung, Leistungsfähigkeits- und Leistungseigenschaften usw. unterscheiden. In einigen Fällen können sich die Prozessoren sogar in der Anweisungssatzarchitektur, die sie implementieren, ihrer Funktionalität (z. B. CPU, Prozessoren für die Grafikverarbeitungseinheit (GPU), Mikrocontroller, digitale Signalprozessoren, Bildsignalprozessoren usw.) usw. unterscheiden.
  • Die Caches 18 können eine beliebige Kapazität und Konfiguration aufweisen, wie Satzassoziativ, direkt zugeordnet oder vollständig assoziativ. Die Cache-Block-Größe kann eine beliebige gewünschte Größe (z. B. 32 Bytes, 64 Bytes, 128 Bytes usw.) sein. Der Cache-Block kann die Einheit zur Zuordnung und Aufhebung der Zuordnung in dem Cache 18 sein. Zusätzlich kann der Cache-Block die Einheit sein, über die in dieser Ausführungsform Kohärenz aufrechterhalten wird (z. B. ein aligniertes in der Größe fein auf Kohärenz abgestimmtes Segment des Speicheradressraums). Der Cache-Block kann in einigen Fällen auch als Cache-Zeile bezeichnet werden.
  • Die Speichersteuerungen 22 können allgemein die Schaltlogik zum Empfangen von Speichervorgängen von den anderen Komponenten des SOC 10 und zum Zugreifen auf die Speicher 12A-12 m einschließen, um die Speichervorgänge durchzuführen. Die Speichersteuerungen 22A-22 m können dazu konfiguriert sein, auf jeden beliebigen Typ der Speicher 12A-12 m zuzugreifen. Insbesondere kann es sich bei den Speichern 12A-12 m um jede Art von Speichervorrichtung handeln, die als Direktzugriffsspeicher abgebildet werden kann. Zum Beispiel können die Speicher 12A-12 m ein statischer Direktzugriffsspeicher (SRAM), ein dynamisches RAM (DRAM), wie ein synchroner DRAM (SDRAM), einschließlich Doppeldatenraten-DRAM (DDR-, DDR2-, DDR3-, DDR4-DRAM usw.), ein nichtflüchtiger Speicher, Grafik-DRAM, wie Grafik-DDR-DRAM (GDDR), und Speicher mit hoher Bandbreite (HBM) sein. Versionen mit geringer Leistung/mobile Versionen des DDR DRAM können unterstützt werden (z. B. LPDDR, mDDR usw.). Die Speichersteuerungen 22A-22 m können Warteschlangen für Speicheroperationen zum Ordnen (und potenziellen Neuordnen) der Operationen und zum Vorlegen der Operationen an die Speicher 12A-12 m einschließen. Die Speichersteuerungen 22A-22 m können ferner Datenpuffer einschließen, um Schreibdaten, die auf ein Schreiben in Speicher warten, zu speichern und Daten, die auf eine Rückgabe an die Quelle der Speicheroperation warten (in dem Fall, in dem die Daten nicht von einem Snoop bereitgestellt werden), zu lesen. In einigen Ausführungsformen können die Speichersteuerungen 22A-22 m 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 den Speichern 12A-12 m vermieden wird, wenn erwartet wird, dass bald erneut auf sie zugegriffen wird. In einigen Fällen kann der Speicher-Cache, im Gegensatz zu privaten Caches, wie dem Cache 18 oder Caches in den Prozessoren 16, die nur bestimmte Komponenten bedienen, auch als ein System-Cache bezeichnet werden. Zusätzlich muss sich in einigen Ausführungsformen ein System-Cache nicht innerhalb der Speichersteuerungen 22A-22 m befinden. Somit können eine oder mehrere Cache-Ebenen zwischen den Prozessorkernen, den Grafikverarbeitungseinheiten, den Peripherievorrichtungen und dem Systemspeicher vorhanden sein. Die eine oder mehreren Speichersteuerungsschaltungen 22A-22 m können jeweilige Speicher-Caches einschließen, die zwischen der Interconnect-Fabric und dem Systemspeicher angeordnet sind, wobei die jeweiligen Speicher-Caches eine der einen oder mehreren Cache-Ebenen sind.
  • Andere Agenten 20A-20p können im Allgemeinen verschiedene zusätzliche HardwareFunktionalität einschließen, die in dem SOC C10 enthalten sind (z. B. „Peripheriegeräte“, „Peripherievorrichtungen“ oder „Peripherieschaltungen“). Zum Beispiel können die Peripheriegeräte Videoperipheriegeräte, wie einen Bildsignalprozessor, der zum Verarbeiten von Bilderfassungsdaten von einer Kamera oder einem anderen Bildsensor konfiguriert ist, Video-Encoder/-Decoder, Skalierer, Rotatoren, Mischer usw. einschließen. Die Peripheriegeräte können Audioperipheriegeräte, wie Mikrofone, Lautsprecher, Schnittstellen für Mikrofone und Lautsprecher, Audioprozessoren, digitale Signalprozessoren, Mischer usw. einschließen. Die Peripheriegeräte können Schnittstellensteuerungen für verschiedene Schnittstellen außerhalb des SOC 10 einschließen, einschließlich Schnittstellen, wie Universal Serial Bus (USB), Peripheral Component Interconnect (PCI), einschließlich PCI Express (PCIe), serielle und parallele Ports usw. Die Peripheriegeräte können Netzwerkperipheriegeräte, wie Medienzugriffssteuerungen (MACs), einschließen. Jeder beliebige Satz von Hardware kann eingeschlossen sein. Die anderen Agenten 20A-20p können auch Brücken zu einem Satz von Peripheriegeräten in einer Ausführungsform, wie der nachstehend beschriebene EAA, einschließen. In einer Ausführungsform schließen die Peripherievorrichtungen eine oder mehrere von folgenden ein: eine Audioverarbeitungsvorrichtung, eine Videoverarbeitungsvorrichtung, eine Beschleunigerschaltung für maschinelles Lernen, eine Matrixarithmetik-Beschleunigerschaltung, eine Kameraverarbeitungsschaltung, eine Display-Pipeline-Schaltung, eine nichtflüchtige Speichersteuerung, eine Peripheral Component Interconnect-Steuerung, einen Sicherheitsprozessor oder eine serielle Bussteuerung.
  • Die Zwischenverbindung 28 kann jede beliebige Kommunikationszwischenverbindung und jedes beliebige Protokoll zum Kommunizieren zwischen den Komponenten des SOC 10 sein. Die Zwischenverbindung 28 kann busgestützt sein, einschließlich gemeinsamer Buskonfigurationen, Crossbar-Konfigurationen und hierarchischer Busse mit Brücken. Die Zwischenverbindung 28 kann auch paketbasiert oder über eine Schaltung geschaltet sein und kann hierarchisch mit Brücken, Crossbar-, Punkt-zu-Punkt- oder anderen Zwischenverbindungen sein. Die Zwischenverbindung 28 kann in einer Ausführungsform mehrere unabhängige Kommunikationsstrukturen einschließen.
  • Wenn, in einer Ausführungsform, zwei oder mehr Instanzen des Dies mit integrierter Schaltung in einem System eingeschlossen sind, kann das System ferner mindestens eine Interposer-Vorrichtung umfassen, die konfiguriert ist, um Busse der Interconnect-Fabric über die zwei oder die Dies mit integrierter Schaltung zu koppeln. In einer Ausführungsform umfasst ein gegebenes Die mit integrierter Schaltung eine Leistungsverwaltungsschaltung, die konfiguriert ist, um einen lokalen Leistungszustand des gegebenen Dies mit integrierter Schaltung zu verwalten. Wenn, in einer Ausführungsform, zwei oder mehr Instanzen des Dies mit integrierter Schaltung in einem System eingeschlossen sind, sind die jeweiligen Leistungsverwalter konfiguriert, um den lokalen Leistungszustand des Dies mit integrierter Schaltung zu verwalten, wobei mindestens einer der zwei oder mehr Dies mit integrierter Schaltung eine andere Leistungsverwalterschaltung einschließt, die konfiguriert ist, um die Leistungsverwalterschaltungen zu synchronisieren.
  • Im Allgemeinen kann die Anzahl jeder der Komponenten 22A-22m, 20A-20p und 14A-14n von Ausführungsform zu Ausführungsform variieren, und es kann eine beliebige Anzahl verwendet werden. Wie durch die nachgestellten „m“, „p“ und „n“ angegeben, kann sich die Anzahl eines Komponententyps von der Anzahl eines anderen Komponententyps unterscheiden. Die Anzahl eines gegebenen Typs kann jedoch auch die gleiche sein wie die Anzahl eines anderen Typs. Während das System von 1 mit mehreren Speichersteuerungen 22A-22 m veranschaulicht ist, sind zusätzlich auch Ausführungsformen mit einer Speichersteuerung 22A-22 m denkbar.
  • Das Konzept des skalierbaren SOC-Designs ist zwar einfach zu erklären, aber die Ausführung ist eine Herausforderung. Zur Unterstützung dieser Bemühung wurden zahlreiche Innovationen entwickelt, die im Folgenden ausführlicher beschrieben werden. Insbesondere schließen die 2 bis 14 weitere Details von Ausführungsformen der Kommunikations-Fabric 28 ein. 15 bis 26 veranschaulichen Ausführungsformen einer skalierbaren Interrupt-Struktur. 27 bis 43 veranschaulichen Ausführungsformen eines skalierbaren Cache-Kohärenz-Mechanismus, der unter kohärenten Agenten im System, einschließlich der Prozessor-Cluster 14A-14n, sowie einer oder mehrerer Verzeichnis/Kohärenz-Steuerschaltung oder -schaltungen implementiert werden kann. In einer Ausführungsform sind die Verzeichnis- und Kohärenz-Steuerschaltungen auf eine Vielzahl von Speichervorrichtungen 22A-22 m verteilt, wobei jede Verzeichnis- und Kohärenz-Steuerschaltung konfiguriert ist, um die Cache-Kohärenz für Abschnitte des Adressraums zu verwalten, der auf die Speichervorrichtungen 12A-12 m abgebildet ist, mit denen eine gegebene Speichersteuerung gekoppelt ist. 44 bis 48 zeigen Ausführungsformen einer EAA-Brücke für eine oder mehrere Peripherieschaltungen. 49 bis 55 veranschaulichen weitere Details von Ausführungsformen der D2D-Schaltung 26. 56 bis 68 veranschaulichen Ausführungsformen von Hashing-Schemata, um den Adressraum über auf eine Vielzahl von Speichersteuerungen 22A-22 m zu verteilen. 69 bis 82 veranschaulichen Ausführungsformen einer Designmethodik, die mehrere Tapeouts des skalierbaren SOC 10 für verschiedene Systeme auf Grundlage derselben Designdatenbank unterstützt.
  • Die verschiedenen nachstehend beschriebenen Ausführungsformen und die vorstehend beschriebenen Ausführungsformen können in jeder gewünschten Kombination verwendet werden, um Ausführungsformen dieser Offenbarung zu bilden. Insbesondere kann eine beliebige Teilmenge der Ausführungsformmerkmale aus jeder der Ausführungsformen kombiniert werden, um Ausführungsformen zu bilden, die nicht alle in einer gegebenen Ausführungsform beschriebenen Merkmale und/oder nicht alle Ausführungsformen einschließen. Alle diese Ausführungsformen sind in Betracht gezogene Ausführungsformen eines skalierbaren SOC, wie hierin beschrieben.
  • Fabric
  • 2 bis 14 veranschaulichen weitere Ausführungsformen der Interconnect-Fabric 28. Basierend auf dieser Beschreibung wird ein System in Betracht gezogen, das eine Vielzahl von Prozessorkernen; eine Vielzahl von Grafikverarbeitungseinheiten, eine Vielzahl von Peripherievorrichtungen, die sich von den Prozessorkernen und Grafikverarbeitungseinheiten unterscheiden; eine oder mehrere Speichersteuerungsschaltungen, die konfiguriert sind, um eine Schnittstelle zum Systemspeicher zu bilden; und eine Interconnect-Fabric umfasst, die konfiguriert ist, um Kommunikation zwischen der einen oder mehreren Speichersteuerungsschaltungen und den Prozessorkernen, Grafikverarbeitungseinheiten und Peripherievorrichtungen bereitzustellen; wobei die Interconnect-Fabric mindestens zwei Netzwerke mit heterogenen Betriebseigenschaften umfasst. In einer Ausführungsform umfasst die Interconnect-Fabric mindestens zwei Netzwerke mit heterogenen Interconnect-Topologien. Die mindestens zwei Netzwerke können ein kohärentes Netzwerk einschließen, das die Prozessorkerne und die eine oder die mehreren Speichersteuerungsschaltungen miteinander verbindet. Insbesondere verbindet das kohärente Netzwerk kohärente Agenten, wobei ein Prozessorkern ein kohärenter Agent sein kann, oder ein Prozessorcluster ein kohärenter Agent sein kann. Die mindestens zwei Netzwerke können ein Netzwerk mit gelockerter Sortierung einschließen, das mit den Grafikverarbeitungseinheiten und der einen oder mehreren Speichersteuerungsschaltungen gekoppelt ist. In einer Ausführungsform schließen die Peripherievorrichtungen eine Teilmenge von Vorrichtungen ein, wobei die Teilmenge eine oder mehrere von einer Beschleunigerschaltung für maschinelles Lernen oder eine Massenmedienvorrichtung mit gelockerter Sortierung einschließt, und wobei das Netzwerk mit gelockerter Sortierunga ferner mit der Teilmenge von Vorrichtungen an die eine oder mehrere Speichersteuerungsschaltungen gekoppelt ist. Die mindestens zwei Netzwerke können ein Eingabe-Ausgabe-Netzwerk einschließen, das gekoppelt ist, um die Peripherievorrichtungen und die eine oder mehrere Speichersteuerungsschaltungen miteinander zu verbinden. Die Peripherievorrichtungen schließen eine oder mehrere Echtzeitvorrichtungen ein.
  • In einer Ausführungsform umfassen die mindestens zwei Netzwerke ein erstes Netzwerk, das eine oder mehrere Eigenschaften umfasst, um die Latenz im Vergleich zu einem zweiten Netzwerk der mindestens zwei Netzwerke zu reduzieren. Zum Beispiel können die eine oder die mehreren Eigenschaften eine kürzere Route als das zweite Netzwerk über den Oberflächenbereich der integrierten Schaltung umfassen. Die eine oder mehrere Eigenschaften können eine Verdrahtung für die erste Verschaltung in Metallschichten umfassen, die niedrigere Latenzeigenschaften bereitstellen als die Verdrahtung für die zweite Verschaltung.
  • In einer Ausführungsform umfassen die mindestens zwei Netzwerke ein erstes Netzwerk, das eine oder mehrere Eigenschaften umfasst, um die Bandbreite im Vergleich zu einem zweiten Netzwerk der mindestens zwei Netzwerke zu erhöhen. Zum Beispiel umfassen die eine oder die mehreren Eigenschaften eine breitere Verschaltung im Vergleich zum zweiten Netzwerk. Die eine oder mehrere Eigenschaften umfassen eine Verdrahtung in Metallschichten, die von der Oberfläche eines Substrats, auf dem das System implementiert ist, weiter entfernt sind als die Verdrahtung für das zweite Netzwerk.
  • In einer Ausführungsform schließen die von den mindestens zwei Netzwerken verwendeten Interconnect-Topologien mindestens eine von einer Sterntopologie, einer Maschentopologie, einer Ringtopologie, einer Baumtopologie, einer Fat-Tree-Topologie, einer Hypercube-Topologie oder einer Kombination von einer oder mehreren dieser Topologien ein. In einer anderen Ausführungsform sind die mindestens zwei Netzwerke physisch und logisch unabhängig. In einer weiteren Ausführungsform sind die mindestens zwei Netzwerke in einer ersten Betriebsart physisch getrennt, wobei ein erstes Netzwerk der mindestens zwei Netzwerke und ein zweites Netzwerk der mindestens zwei Netzwerke virtuell sind und in einer zweiten Betriebsart ein einziges physisches Netzwerk gemeinsam nutzen.
  • In einer Ausführungsform ist ein SOC auf einem Halbleiter-Die integriert. Das SOC umfasst eine Vielzahl von Prozessorkernen; eine Vielzahl von Grafikverarbeitungseinheiten; eine Vielzahl von Peripherievorrichtungen; eine oder mehrere Speichersteuerungsschaltungen, und eine Interconnect-Fabric, die konfiguriert ist, um Kommunikation zwischen der einen oder mehreren Speichersteuerungsschaltungen und den Prozessorkernen, Grafikverarbeitungseinheiten und Peripherievorrichtungen bereitzustellen; wobei die Interconnect-Fabric mindestens ein erstes Netzwerk und ein zweites Netzwerk umfasst, wobei das erste Netzwerk eine oder mehrere Eigenschaften umfasst, um die Latenzzeit im Vergleich zu einem zweiten Netzwerk der mindestens zwei Netzwerke zu reduzieren. Zum Beispiel umfassen die eine oder mehrere Eigenschaften eine kürzere Route für das erste Netzwerk über eine Oberfläche des Halbleiter-Dies als eine Route für das zweite Netzwerk. In einem anderen Beispiel umfassen die eine oder mehrere Eigenschaften eine Verdrahtung in Metallschichten, die niedrigere Latenzeigenschaften aufweisen als die Verdrahtungsschichten, die für das zweite Netzwerk verwendet werden. In einer Ausführungsform umfasst das zweite Netzwerk eine oder mehrere zweite Eigenschaften, um die Bandbreite im Vergleich zu dem ersten Netzwerk zu erhöhen. Zum Beispiel können die eine oder die mehreren zweiten Eigenschaften eine breitere Verschaltung im Vergleich zum zweiten Netzwerk umfassen (z. B. mehr Drähte pro Verschaltung als im ersten Netzwerk). Die eine oder die mehreren zweiten Eigenschaften können eine Verdrahtung in Metallschichten umfassen, die dichter sind als die für das erste Netzwerk verwendeten Verdrahtungsschichten.
  • In einer Ausführungsform kann ein System-on-a-Chip (SOC) eine Vielzahl unabhängiger Netzwerke einschließen. Die Netzwerke können physisch unabhängig (z. B. dedizierte Drähte und andere Schaltlogik aufweisen, die das Netzwerk bilden) und logisch unabhängig (z. B. können durch Agenten im SOC bereitgestellte Kommunikationen logisch definiert werden, um auf einem ausgewählten Netzwerk der Vielzahl von Netzwerken übertragen zu werden, und können nicht durch eine Übertragung auf anderen Netzwerken beeinflusst werden) sein. In einigen Ausführungsformen können Netzwerkschalter eingeschlossen sein, um Pakete auf einem gegebenen Netzwerk zu übertragen. Die Netzwerkschalter können physisch Teil des Netzwerks sein (z. B. können dedizierte Netzwerkschalter für jedes Netzwerk vorhanden sein). In anderen Ausführungsformen kann ein Netzwerkschalter zwischen physisch unabhängigen Netzwerken geteilt werden und kann somit sicherstellen, dass eine Kommunikation, die auf einem der Netzwerke empfangen wird, auf diesem Netzwerk bleibt.
  • Durch Bereitstellen von physisch und logisch unabhängigen Netzwerken kann eine hohe Bandbreite über eine parallele Kommunikation auf den verschiedenen Netzwerken erreicht werden. Zusätzlich kann ein anderer Verkehr auf verschiedenen Netzwerken übertragen werden, und somit kann ein gegebenes Netzwerk für einen gegebenen Verkehrstyp optimiert werden. Zum Beispiel können Prozessoren, wie zentrale Verarbeitungseinheiten (CPUs), in einem SOC für eine Speicherlatenz empfindlich sein und können Daten zwischenspeichern, die voraussichtlich zwischen den Prozessoren und dem Speicher kohärent sind. Entsprechend kann ein CPU-Netzwerk bereitgestellt werden, auf dem die CPUs und die Speichersteuerungen in einem System Agenten sind. Das CPU-Netzwerk kann optimiert werden, um eine niedrige Latenz bereitzustellen. Zum Beispiel können in einer Ausführungsform virtuelle Kanäle für Anforderungen mit niedriger Latenz und Massenanforderungen vorhanden sein. Die Anforderungen mit niedriger Latenz können beim Weiterleiten in der Fabric und durch die Speichersteuerungen im Vergleich zu den Massenanforderungen bevorzugt sein. Das CPU-Netzwerk kann auch eine Cache-Kohärenz unterstützen, wobei Nachrichten und Protokolle definiert sind, um kohärent zu kommunizieren. Ein anderes Netzwerk kann ein Eingabe/Ausgabe-Netzwerk (E/A-Netzwerk) sein. Dieses Netzwerk kann durch verschiedene Peripherievorrichtungen („Peripheriegeräte“) verwendet werden, um mit Speicher zu kommunizieren. Das Netzwerk kann die von den Peripheriegeräten benötigte Bandbreite unterstützen und kann auch eine Cache-Kohärenz unterstützen. E/A-Verkehr kann jedoch manchmal eine deutlich höhere Latenz als CPU-Verkehr aufweisen. Durch Trennen des E/A-Verkehrs vom CPU-zu-Speicher-Verkehr kann der CPU-Verkehr weniger durch den E/A-Verkehr beeinflusst werden. Die CPUs können auch als Agenten auf dem E/A-Netzwerk eingeschlossen sein, um die Kohärenz zu verwalten und mit den Peripheriegeräten zu kommunizieren. Noch ein weiteres Netzwerk kann in einer Ausführungsform ein Netzwerk mit gelockerter Sortierung sein. Die CPU- und E/A-Netzwerke können beide Sortierungsmodelle unter den Kommunikationen auf diesen Netzwerken unterstützen, die das von den CPUs und Peripheriegeräten erwartete Sortieren bereitstellen. Das Netzwerk mit gelockerter Sortierung kann jedoch nichtkohärent sein und kann möglicherweise nicht so viele Sortierungsbeschränkungen durchsetzen. Das Netzwerk mit gelockerter Sortierung kann durch Grafikverarbeitungseinheiten (GPUs) verwendet werden, um mit Speichersteuerungen zu kommunizieren. Somit können die GPUs eine dedizierte Bandbreite in den Netzwerken aufweisen und können nicht durch das Sortieren, das die CPUs und/oder Peripheriegeräte erfordern, beschränkt sein. Andere Ausführungsformen können wie gewünscht eine beliebige Teilmenge der vorstehenden Netzwerke und/oder beliebige zusätzliche Netzwerke einsetzen.
  • Ein Netzwerkschalter kann eine Schaltung sein, die konfiguriert ist, um Kommunikationen auf einem Netzwerk zu empfangen und die Kommunikationen auf dem Netzwerk in Richtung des Ziels der Kommunikation weiterzuleiten. Zum Beispiel kann eine durch einen Prozessor bereitgestellte Kommunikation an eine Speichersteuerung übertragen werden, die den Speicher steuert, der der Adresse der Kommunikation zugeordnet ist. Bei jedem Netzwerkschalter kann die Kommunikation vorwärts in Richtung der Speichersteuerung übertragen werden. Wenn die Kommunikation ein Lesevorgang ist, kann die Speichersteuerung die Daten zurück an die Quelle kommunizieren und kann jeder Netzwerkschalter die Daten auf dem Netzwerk in Richtung der Quelle weiterleiten. In einer Ausführungsform kann das Netzwerk eine Vielzahl von virtuellen Kanälen unterstützen. Der Netzwerkschalter kann Ressourcen einsetzen, die für jeden virtuellen Kanal (z. B. Puffer) dediziert sind, sodass Kommunikationen auf den virtuellen Kanälen logisch unabhängig bleiben können. Der Netzwerkschalter kann auch eine Arbitrierungsschaltlogik einsetzen, um zwischen gepufferten Kommunikationen auszuwählen, die auf dem Netzwerk weitergeleitet werden sollen. Virtuelle Kanäle können Kanäle sein, die physisch ein Netzwerk teilen, die jedoch auf dem Netzwerk logisch unabhängig sind (z. B. blockieren Kommunikationen in einem virtuellen Kanal nicht den Fortschritt von Kommunikationen auf einem anderen virtuellen Kanal).
  • Ein Agent kann im Allgemeinen eine beliebige Vorrichtung (z. B. Prozessor, Peripheriegerät, Speichersteuerung usw.) sein, die Kommunikationen auf einem Netzwerk bereitstellen und/oder aufnehmen kann. Ein Quellagent erzeugt eine Kommunikation (stellt diese bereit) und ein Zielagent empfängt die Kommunikation (nimmt diese auf). Ein gegebener Agent kann ein Quellagent für einige Kommunikationen und ein Zielagent für andere Kommunikationen sein.
  • Nun Bezug nehmend auf die Figuren ist 2 ein generisches Diagramm, das physisch und logisch unabhängige Netzwerke veranschaulicht. 3 bis 5 sind Beispiele verschiedener Netzwerktopologien. 6 ist ein Beispiel eines SOC mit einer Vielzahl physisch und logisch unabhängiger Netzwerke. 7 bis 9 veranschaulichen die verschiedenen Netzwerke von 6 zusätzlicher Klarheit halber getrennt. 10 ist ein Blockdiagramm eines Systems, einschließlich zweier Halbleiter-Dies, das eine Skalierbarkeit der Netzwerke auf mehrere Instanzen des SOC veranschaulicht. 11 und 12 sind beispielhafte Agenten, die detaillierter gezeigt sind. 13 zeigt verschiedene virtuelle Kanäle und Kommunikationstypen und welche Netzwerke in 6 auf die die virtuellen Kanäle und Kommunikationstypen anwendbar sind. 14 ist ein Flussdiagramm, das ein Verfahren veranschaulicht. Die nachstehende Beschreibung stellt weitere Details basierend auf den Zeichnungen bereit.
  • 2 ist ein Blockdiagramm eines Systems, das eine Ausführungsform von mehreren Netzwerkverschaltungsagenten einschließt. In 1 sind Agenten A10A, A10B und A10C veranschaulicht, obwohl in verschiedenen Ausführungsformen eine beliebige Anzahl von Agenten eingeschlossen sein kann. Die Agenten A10A-A10B sind mit einem Netzwerk A12A gekoppelt, und die Agenten A10A und A10C sind mit einem Netzwerk A12B gekoppelt. Eine beliebige Anzahl von Netzwerken A12A-A12B kann ebenfalls in verschiedenen Ausführungsformen eingeschlossen sein. Das Netzwerk 12A schließt eine Vielzahl von Netzwerkschaltern, einschließlich Netzwerkschaltern A14A, A14AB, A14AM und A14AN (zusammen Netzwerkschalter A14A), ein; und in ähnlicher Weise schließt das Netzwerk 12B eine Vielzahl von Netzwerkschaltern, einschließlich Netzwerkschaltern A14BA, A14BB, A14BM und A14BN (zusammen Netzwerkschalter A14B), ein. Unterschiedliche Netzwerke A12A-A12B können eine unterschiedliche Anzahl von Netzwerkschaltern A14A, 12A-A12B einschließen, die physisch getrennte Verbindungen („Drähte“, „Busse“ oder „Verschaltung“) einschließen, veranschaulicht durch verschiedene Pfeile in 2.
  • Da jedes Netzwerk A12A-A12B seine eigene(n) physisch und logisch getrennte(n) Verschaltung und Netzwerkschalter aufweist, sind die Netzwerke A12A-A12B physisch und logisch getrennt. Eine Kommunikation im Netzwerk A12A ist von einer Kommunikation im Netzwerk A12B unbeeinflusst und umgekehrt. Selbst die Bandbreite an der Verschaltung in den jeweiligen Netzwerken A12A-A12B ist getrennt und unabhängig.
  • Optional kann ein Agent A10A-A10C eine Netzwerkschnittstellenschaltung (Bezugszeichen A16A bis A16C) einschließen oder damit gekoppelt sein. Einige Agenten A10A-A10C können die Netzwerkschnittstellen A16A-A16C einschließen oder damit gekoppelt sein, während andere Agenten A10A-A10C die Netzwerkschnittstellen A16A bis A16C nicht einschließen können oder nicht damit gekoppelt sein können. Die Netzwerkschnittstellen A16A-A16C können konfiguriert sein, um Verkehr auf den Netzwerken A12A-A12B für die entsprechenden Agenten A10A-A10C zu übertragen und zu empfangen. Die Netzwerkschnittstellen A16A-A16C können konfiguriert sein, um Kommunikationen, die durch die entsprechenden Agenten A10A-A10C ausgegeben werden, umzuwandeln oder zu modifizieren, um dem Protokoll/Format der Netzwerke A12A-A12B zu entsprechen, und um Modifikationen zu entfernen oder empfangene Kommunikationen in das Protokoll/Format, das durch die Agenten A10A-A10C verwendet wird, umzuwandeln. Somit können die Netzwerkschnittstellen A16A-A16C für die Agenten A10A-A10C verwendet werden, die nicht speziell dafür ausgelegt sind, mit den Netzwerken A12A-A12B direkt verbunden zu werden. In einigen Fällen kann ein Agent A10A-A10C auf mehr als einem Netzwerk kommunizieren (z. B. kommuniziert der Agent A10A auf beiden Netzwerken A12A-A12B in 1). Die entsprechende Netzwerkschnittstelle A16A kann konfiguriert sein, um durch den Agenten A10A an die Netzwerke A12A-A12B ausgegebenen Verkehr danach zu trennen, welchem Netzwerk A12A-A12B jede Kommunikation zugewiesen ist; und die Netzwerkschnittstelle A16A kann konfiguriert sein, um von den Netzwerken A12A-A12B empfangenen Verkehr für den entsprechenden Agenten A10A zu kombinieren. Ein beliebiger Mechanismus zum Bestimmen, welches Netzwerk A12A-A12B eine gegebene Kommunikation tragen soll, kann verwendet werden (z. B. basierend auf dem Typ der Kommunikation, dem Zielagenten A10B-A10C für die Kommunikation, einer Adresse usw. in verschiedenen Ausführungsformen).
  • Da die Netzwerkschnittstellenschaltungen optional sind und viele nicht für Agenten benötigt werden, die die Netzwerke A12A-A12B direkt unterstützen, werden die Netzwerkschnittstellenschaltungen der Einfachheit halber aus den übrigen Zeichnungen weggelassen. Es versteht sich jedoch, dass die Netzwerkschnittstellenschaltungen in einer beliebigen der veranschaulichten Ausführungsformen durch einen beliebigen Agenten oder eine beliebige Teilmenge von Agenten oder sogar alle der Agenten eingesetzt werden können.
  • In einer Ausführungsform kann das System von 2 als ein SOC implementiert sein, und die in 2 veranschaulichten Komponenten können auf einem einzelnen Halbleitersubstrat-Die gebildet sein. Die im SOC eingeschlossene Schaltlogik kann die Vielzahl von Agenten A10C und die Vielzahl von Netzwerkschaltern A14A-A14B, die mit der Vielzahl von Agenten A10A-A10C gekoppelt sind, einschließen. Die Vielzahl von Netzwerkschaltern A14A-A14B sind miteinander verbunden, um eine Vielzahl von physischen und logisch unabhängigen Netzwerken A12A-A12B zu bilden.
  • Da die Netzwerke A12A-A12B physisch und logisch unabhängig sind, können verschiedene Netzwerke verschiedene Topologien aufweisen. Zum Beispiel kann ein gegebenes Netzwerk einen Ring, eine Masche, einen Baum, einen Stern, einen vollständig verbundenen Satz von Netzwerkschaltern (z. B. einen Schalter, der mit jedem anderen Schalter im Netzwerk direkt verbunden ist), einen geteilten Bus mit mehreren Agenten, die mit dem Bus gekoppelt sind, usw. oder Hybride einer oder mehrerer der Topologien aufweisen. Jedes Netzwerk A12A-A12B kann eine Topologie einsetzen, die zum Beispiel die für dieses Netzwerk gewünschten Bandbreiten- und Latenzattribute bereitstellt oder ein beliebiges gewünschtes Attribut für das Netzwerk bereitstellt. Somit kann das SOC allgemein ein erstes Netzwerk, das gemäß einer ersten Topologie aufgebaut ist, und ein zweites Netzwerk, das gemäß einer zweiten Topologie, die sich von der ersten Topologie unterscheidet, aufgebaut ist, einschließen.
  • 3 bis 5 veranschaulichen beispielhafte Topologien. 3 ist ein Blockdiagramm einer Ausführungsform eines Netzwerks, das eine Ringtopologie verwendet, um die Agenten A10A-A10C zu koppeln. Im Beispiel von 3 ist der Ring aus den Netzwerkschaltern A14AA-A14AH gebildet. Der Agent 10A ist mit dem Netzwerkschalter A14AA gekoppelt; der Agent A10B ist mit dem Netzwerkschalter A14AB gekoppelt; und der Agent A10C ist mit dem Netzwerkschalter A14AE gekoppelt.
  • In einer Ringtopologie kann jeder Netzwerkschalter A14AA-A14AH mit zwei anderen Netzwerkschaltern A14AA-A14AH verbunden sein, und die Schalter bilden einen Ring, sodass ein beliebiger Netzwerkschalter A14AA-A14AH einen beliebigen anderen Netzwerkschalter im Ring erreichen kann, indem er eine Kommunikation auf dem Ring in Richtung des anderen Netzwerkschalters überträgt. Eine gegebene Kommunikation kann einen oder mehrere Zwischennetzwerkschalter im Ring passieren, um den Zielnetzwerkschalter zu erreichen. Wenn ein gegebener Netzwerkschalter A14AA-A14AH eine Kommunikation von einem benachbarten Netzwerkschalter A14AA-A14AH auf dem Ring empfängt, kann der gegebene Netzwerkschalter die Kommunikation untersuchen, um zu bestimmen, dass in einem Agenten A10A-A10C, mit dem der gegebene Netzwerkschalter gekoppelt ist, das Ziel der Kommunikation ist. Wenn dies der Fall ist, kann der gegebene Netzwerkschalter die Kommunikation beenden und die Kommunikation an den Agenten weiterleiten. Wenn nicht, kann der gegebene Netzwerkschalter die Kommunikation an den nächsten Netzwerkschalter auf dem Ring weiterleiten (z. B. den anderen Netzwerkschalter A14AA-A14AH, der zu dem gegebenen Netzwerkschalter benachbart ist und nicht der benachbarte Netzwerkschalter ist, von dem der gegebene Netzwerkschalter die Kommunikation empfangen hat). Ein zu einem gegebenen Netzwerkschalter benachbarter Netzwerkschalter kann ein Netzwerkschalter sein, an den der gegebene Netzwerkschalter eine Kommunikation direkt übertragen kann, ohne dass sich die Kommunikation durch beliebige Zwischennetzwerkschalter bewegt.
  • 4 ist ein Blockdiagramm einer Ausführungsform eines Netzwerks, das eine Maschentopologie verwendet, um die Agenten A10A-A10P zu koppeln. Wie in 4 gezeigt, kann das Netzwerk die Netzwerkschalter A14AA-A14AH einschließen. Jeder Netzwerkschalter A14AA-A14AH ist mit zwei oder mehr anderen Netzwerkschaltern gekoppelt. Zum Beispiel ist der Netzwerkschalter A14AA mit den Netzwerkschaltern A14AB und A14AE gekoppelt; ist der Netzwerkschalter A14AB mit den Netzwerkschaltern A14AA, A14AF und A14AC gekoppelt; usw., wie in 4 veranschaulicht. Somit können verschiedene Netzwerkschalter in einem Maschennetzwerk mit verschiedenen Anzahlen anderer Netzwerkschalter gekoppelt sein. Des Weiteren, während die Ausführungsform von 4 eine relativ symmetrische Struktur aufweist, können andere Maschennetzwerke z. B. abhängig von den verschiedenen Verkehrsmustern, die voraussichtlich im Netzwerk vorherrschen, asymmetrisch sein. An jedem Netzwerkschalter A14AA-A14AH können ein oder mehrere Attribute einer empfangenen Kommunikation verwendet werden, um den benachbarten Netzwerkschalter A14AA-A14AH zu bestimmen, an den der empfangende Netzwerkschalter A14AA-A14AH die Kommunikation überträgt (sofern nicht ein Agent A10A-A10P, mit dem der empfangende Netzwerkschalter A14AA-A14AH gekoppelt ist, das Ziel der Kommunikation ist, wobei in diesem Fall der empfangende Netzwerkschalter A14AA-A14AH die Kommunikation auf dem Netzwerk beenden und diese an den Zielagenten A10A-A10P bereitstellen kann). Zum Beispiel können in einer Ausführungsform die Netzwerkschalter A14AA-A14AH bei der Systeminitialisierung programmiert werden, um Kommunikationen basierend auf verschiedenen Attributen umzuleiten.
  • In einer Ausführungsform können Kommunikationen basierend auf dem Zielagenten umgeleitet werden. Die Umleitungen können konfiguriert sein, um die Kommunikationen durch die geringste Anzahl von Netzwerkschaltern (den „kürzesten Pfad) zwischen dem Quell- und Zielagenten zu transportieren, die in der Maschentopologie unterstützt werden kann. Alternativ können verschiedene Kommunikationen für einen gegebenen Quellagenten zu einem gegebenen Zielagenten verschiedene Wege durch die Masche nehmen. Zum Beispiel können latenzempfindliche Kommunikationen über einen kürzeren Pfad übertragen werden, während weniger kritische Kommunikationen einen anderen Pfad nehmen können, um ein Verbrauchen von Bandbreite auf dem kurzen Pfad zu vermeiden, wobei der andere Pfad während der Verwendung zum Beispiel weniger stark belastet sein kann.
  • 4 kann ein Beispiel einer teilweise verbundenen Masche sein: mindestens einige Kommunikationen können einen oder mehrere Zwischennetzwerkschalter in der Masche passieren. Ein vollständig verbundenes Netzwerk kann eine Verbindung von jedem Netzwerkschalter zu jedem anderen Netzwerkschalter aufweisen, und somit kann jede Kommunikation übertragen werden, ohne dass Zwischennetzwerkschalter durchquert werden. In verschiedenen Ausführungsformen kann ein beliebiger Grad an Verbindung miteinander verwendet werden.
  • 5 ist ein Blockdiagramm einer Ausführungsform eines Netzwerks, das eine Baumtopologie verwendet, um die Agenten A10A-A10E zu koppeln. Die Netzwerkschalter A14A-A14AG sind in diesem Beispiel miteinander verbunden, um den Baum zu bilden. Der Baum ist eine Form eines hierarchischen Netzwerks, in dem Randnetzwerkschalter (z. B. A14A, A14AB, A14AC, A14AD und A14AG in 5), die mit den Agenten A10A-A10E koppeln, und Zwischennetzwerkschalter (z. B. A14AE und A14AF in 5), die nur mit anderen Netzwerkschaltern koppeln, vorhanden sind. Ein Baumnetzwerk kann z. B. verwendet werden, wenn ein bestimmter Agent häufig ein Ziel für Kommunikationen ist, die durch andere Agenten ausgegeben werden, oder häufig ein Quellagent für Kommunikationen ist. Somit kann zum Beispiel das Baumnetzwerk von 5 für den Agenten A10E verwendet werden, der eine Hauptquelle oder ein Hauptziel für Kommunikationen ist. Zum Beispiel kann der Agent A10E eine Speichersteuerung sein, die häufig ein Ziel für Speichertransaktionen wäre.
  • Es gibt viele andere mögliche Topologien, die in anderen Ausführungsformen verwendet werden können. Zum Beispiel weist eine Sterntopologie einen Quell-/Zielagenten in der „Mitte“ eines Netzwerks auf, und andere Agenten können direkt oder durch eine Reihe von Netzwerkschaltern mit dem mittleren Agenten koppeln. Wie eine Baumtopologie kann eine Sterntopologie in einem Fall verwendet werden, in dem der mittlere Agent häufig eine Quelle oder ein Ziel von Kommunikationen ist. Es kann eine geteilte Bustopologie verwendet werden, und Hybride von zwei oder mehr einer beliebigen der Topologien können verwendet werden.
  • 6 ist ein Blockdiagramm einer Ausführungsform eines Systems-on-a-Chip (SOC) 20, das mehrere Netzwerke für eine Ausführungsform aufweist. Zum Beispiel kann das SOC A20 eine Instanz des SOC 10 in 1 sein. In der Ausführungsform von 6 schließt das SOC 20 eine Vielzahl von Prozessor-Clustern (P-Clustern) A22A-A22B, eine Vielzahl von Eingabe/Ausgabe-Clustern (E/A-Clustern) A24A-A24D, eine Vielzahl von Speichersteuerungen A26A-A26D und eine Vielzahl von Grafikverarbeitungseinheiten (GPUs) A28A-A28D ein. Wie durch den Namen (SOC) impliziert, können die in 6 veranschaulichten Komponenten (außer den Speichern A30A-A30D in dieser Ausführungsform) auf einem einzelnen Halbleiter-Die oder „Chip“ integriert sein. Andere Ausführungsformen können jedoch zwei oder mehr Dies einsetzen, die auf eine beliebige gewünschte Weise gekoppelt oder gehäust sind. Zusätzlich, während spezifische Anzahlen von P-Clustern A22A-A22B, E/A-Clustern A24-A24D, Speichersteuerungen A26A-A26D und GPUs A28A-A28D im Beispiel von 6 gezeigt sind, können die Anzahl und Anordnung einer beliebigen der vorstehenden Komponenten variiert werden und können mehr oder weniger als die in 6 gezeigte Anzahl sein. Die Speicher A30A-A30D sind mit dem SOC A20 und genauer mit den Speichersteuerungen A26A-A26D gekoppelt, wie in 6 gezeigt.
  • In der veranschaulichten Ausführungsform schließt das SOC A20 drei physisch und logisch unabhängige Netzwerke, die aus einer Vielzahl von Netzwerkschaltern A32, A34 und A36 gebildet sind, wie in 6 gezeigt, und eine Verschaltung dazwischen, die als Pfeile zwischen den Netzwerkschaltern und anderen Komponenten veranschaulicht ist, ein. Andere Ausführungsformen können mehr oder weniger Netzwerke einschließen. Die Netzwerkschalter A32, A34 und A36 können zum Beispiel Instanzen von Netzwerkschaltern sein, die den Netzwerkschaltern A14A-A14B ähnlich sind, wie vorstehend in Bezug auf 2 bis 5 beschrieben. Die Vielzahl von Netzwerkschaltern A32, A34 und A36 sind mit der Vielzahl von P-Clustern A22A-A22B, der Vielzahl von GPUs A28A-A28D, der Vielzahl von Speichersteuerungen A26-A25B und der Vielzahl von E/A-Clustern A24A-A24D gekoppelt, wie in 6 gezeigt. Die P-Cluster A22A-A22B, die GPUs A28A-A28BA28B, die Speichersteuerungen A26A-A26B und die E/A-Cluster A24A-A24D können alle Beispiele von Agenten sein, die auf den verschiedenen Netzwerken des SOC A20 kommunizieren. Andere Agenten können wie gewünscht eingeschlossen sein.
  • In 6 ist ein Netzwerk einer zentralen Verarbeitungseinheit (CPU) aus einer ersten Teilmenge der Vielzahl von Netzwerkschaltern (z. B. den Netzwerkschaltern A32) und einer Verschaltung dazwischen, die als kurze/lange gestrichelte Linien veranschaulicht ist, wie Bezugszeichen A38, gebildet. Das CPU-Netzwerk koppelt die P-Cluster A22A-A22B und die Speichersteuerungen 26A-A26D. Ein E/A-Netzwerk wird aus einer zweiten Teilmenge der Vielzahl von Netzwerkschaltern (z. B. den Netzwerkschaltern A34) und einer Verschaltung dazwischen, die als durchgezogene Linien veranschaulicht ist, wie Bezugszeichen A40, gebildet. Das E/A-Netzwerk koppelt die P-Cluster A22A-A22B, die E/A-Cluster A24A-A24D und die Speichersteuerungen A26A-A26B. Ein Netzwerk mit gelockerter Sortierung wird aus einer dritten Teilmenge der Vielzahl von Netzwerkschaltern (z. B. den Netzwerkschaltern A36) und einer Verschaltung dazwischen, die als kurze gestrichelte Linien veranschaulicht ist, wie Bezugszeichen 42, gebildet. Das Netzwerk mit gelockerter Sortierung koppelt die GPUs 2A8A-A28D und die Speichersteuerungen A26A-A26D. In einer Ausführungsform kann das Netzwerk mit gelockerter Sortierung außerdem auch ausgewählte der E/A-Cluster A24A-A24D koppeln. Wie vorstehend erwähnt, sind das CPU-Netzwerk, das E/A-Netzwerk und das Netzwerk mit gelockerter Sortierung voneinander unabhängig (z. B. logisch und physisch unabhängig). In einer Ausführungsform unterstützen das Protokoll auf dem CPU-Netzwerk und das E/A-Netzwerk eine Cache-Kohärenz (z. B. sind die Netzwerke kohärent). Das Netzwerk mit gelockerter Sortierung unterstützt möglicherweise keine Cache-Kohärenz (z. B. ist das Netzwerk nichtkohärent). Das Netzwerk mit gelockerter Sortierung weist im Vergleich zum CPU-Netzwerk und zum E/A-Netzwerk auch reduzierte Sortierungsbeschränkungen auf. Zum Beispiel wird in einer Ausführungsform für jedes Netzwerk ein Satz von virtuellen Kanälen und Unterkanälen innerhalb der virtuellen Kanäle definiert. Für die CPU- und E/A-Netzwerke können Kommunikationen, die zwischen dem gleichen Quell- und Zielagenten und im gleichen virtuellen Kanal und Unterkanal sind, sortiert werden. Für das Netzwerk mit gelockerter Sortierung können Kommunikationen zwischen dem gleichen Quell- und Zielagenten sortiert werden. In einer Ausführungsform können nur Kommunikationen an die gleiche Adresse (bei einer gegebenen Granularität, wie einem Cache-Block) zwischen dem gleichen Quell- und Zielagenten sortiert werden. Da auf dem Netzwerk mit gelockerter Sortierung eine weniger strenge Sortierung durchgesetzt wird, kann im Durchschnitt eine höhere Bandbreite erreicht werden, weil es zum Beispiel Transaktionen ermöglicht werden kann, in anderer Reihenfolge abgeschlossen zu werden, wenn jüngere Transaktionen vor älteren Transaktionen zum Abschluss bereit sind.
  • Die Verschaltung zwischen den Netzwerkschaltern A32, A34 und A36 kann in verschiedenen Ausführungsformen eine beliebige Form und Konfiguration aufweisen. Zum Beispiel kann die Verschaltung in einer Ausführungsform in unidirektionalen Punkt-zu-Punkt-Links (z. B. Bussen oder seriellen Links) bestehen. Pakete können auf den Links übertragen werden, wobei das Paketformat Daten einschließen kann, die den virtuellen Kanal und Unterkanal, in dem sich ein Paket bewegt, eine Speicheradresse, Quell- und Zielagenten-Kennungen, Daten (falls zutreffend) usw. angeben. Mehrere Pakete können eine gegebene Transaktion bilden. Eine Transaktion kann eine vollständige Kommunikation zwischen einem Quellagenten und einem Zielagenten sein. Zum Beispiel kann eine Lesetransaktion in Abhängigkeit vom Protokoll ein Leseanforderungspaket vom Quellagenten zum Zielagenten, ein oder mehrere Kohärenznachrichtenpakete unter Zwischenspeicherungsagenten und dem Zielagenten und/oder Quellagenten, wenn die Transaktion kohärent ist, ein Datenantwortpaket vom Zielagenten zum Quellagenten und möglicherweise ein Abschlusspaket vom Quellagenten zum Zielagenten einschließen. Eine Schreibtransaktion kann ein Schreibanforderungspaket vom Quellagenten zum Zielagenten, ein oder mehrere Kohärenznachrichtenpakete wie bei der Lesetransaktion, wenn die Transaktion kohärent ist, und möglicherweise ein Abschlusspaket vom Zielagenten zum Quellagenten einschließen. Die Schreibdaten können in einer Ausführungsform im Schreibanforderungspaket eingeschlossen sein oder können in einem getrennten Schreibdatenpaket vom Quellagenten an den Zielagenten übertragen werden.
  • Die Anordnung von Agenten in 6 kann in einer Ausführungsform die physische Anordnung von Agenten auf dem Halbleiter-Die, das den SOC A20 bildet, angeben. Das heißt, dass 6 als der Oberflächenbereich des Halbleiter-Dies betrachtet werden kann und sich die Orte verschiedener Komponenten in 6 ihren physischen Orten mit dem Bereich annähern können. Somit können zum Beispiel die E/A-Cluster A24A-A24D im Halbleiter-Die-Bereich angeordnet sein, der durch die Oberseite des SOC A20 (wie in 6 ausgerichtet) dargestellt ist. Die P-Cluster A22A-A22B können im Bereich, der durch den Abschnitt des SOC A20 unterhalb und zwischen der Anordnung der E/A-Cluster A24A-A24D dargestellt ist, wie in 6 ausgerichtet angeordnet sein. Die GPUs A24A-A28D können zentral angeordnet sein und sich in Richtung des durch die Unterseite des SOC A20 dargestellten Bereichs wie in 6 ausgerichtet erstrecken. Die Speichersteuerungen A26A-A26D können auf den Bereichen, die durch die rechte und die linke Seite des SOC A20 dargestellt sind, wie in 6 ausgerichtet angeordnet sein.
  • In einer Ausführungsform kann das SOC A20 dazu ausgelegt sein, direkt mit einer oder mehreren anderen Instanzen des SOC A20 zu koppeln, wodurch ein gegebenes Netzwerk auf den Instanzen als logisch ein Netzwerk gekoppelt wird, auf dem ein Agent auf einem Die in der gleichen Weise, in der der Agent innerhalb eines anderen Agenten auf dem gleichen Die kommuniziert, logisch über das Netzwerk mit einem Agenten auf einem anderen Die kommunizieren kann. Während die Latenz verschieden sein kann, kann die Kommunikation auf die gleiche Weise durchgeführt werden. Somit, wie in 6 veranschaulicht, erstrecken sich die Netzwerke zur Unterseite des SOC A20, wie in 6 ausgerichtet. Schnittstellenschaltlogik (z. B. Serialisierer/Deserialisierer-Schaltungen (SERDES-Schaltungen)), die in 6 nicht gezeigt ist, kann verwendet werden, um über die Die-Grenze hinweg mit einem anderen Die zu kommunizieren. Somit können die Netzwerke auf zwei oder mehr Halbleiter-Dies skalierbar sein. Zum Beispiel können die zwei oder mehr Halbleiter-Dies als ein einzelnes System konfiguriert sein, in dem das Vorhandensein mehrerer Halbleiter-Dies für Software, die auf dem einzelnen System ausgeführt wird, transparent ist. In einer Ausführungsform können die Verzögerungen als ein Gesichtspunkt von Softwaretransparenz für das Multi-Die-System in einer Kommunikation von Die zu Die minimiert werden, sodass eine Die-zu-Die-Kommunikation im Vergleich zu einer Intra-Die-Kommunikation in der Regel keine signifikante zusätzliche Latenz aufweist. In anderen Ausführungsformen können die Netzwerke geschlossene Netzwerke sein, die nur intra-Die kommunizieren.
  • Wie vorstehend erwähnt, können verschiedene Netzwerke verschiedene Topologien aufweisen. In der Ausführungsform von 6 implementieren die CPU- und E/A-Netzwerke zum Beispiel eine Ringtopologie, und die gelockerte Sortierung kann eine Maschentopologie implementieren. In anderen Ausführungsformen können jedoch andere Topologien verwendet werden. 7, 8 und 9 veranschaulichen Abschnitte des SOC A30, die die verschiedenen Netzwerke einschließen: CPU (7), E/A (8) und gelockerte Sortierung (9). Wie in 7 und 8 zu sehen ist, bilden die Netzwerkschalter A32 bzw. A34 einen Ring, wenn sie mit den entsprechenden Schaltern auf einem anderen Die gekoppelt sind. Wenn nur ein einzelnes Die verwendet wird, kann eine Verbindung zwischen den beiden Netzwerkschaltern A32 oder A34 an der Unterseite des SOC A20 hergestellt werden, wie in 7 und 8 ausgerichtet (z. B. über eine externe Verbindung an den Stiften des SOC A20). Alternativ können die zwei Netzwerkschalter A32 oder A34 an der Unterseite Links zwischeneinander aufweisen, die in einer Konfiguration mit einem einzelnen Die verwendet werden können, oder das Netzwerk kann mit einer Daisy-Chain-Topologie arbeiten.
  • In ähnlicher Weise ist in 9 die Verbindung der Netzwerkschalter A36 in einer Maschentopologie zwischen den GPUs A28A-A28D und den Speichersteuerungen A26A-A26D gezeigt. Wie zuvor erwähnt, können in einer Ausführungsform auch einer oder mehrere der E/A-Cluster A24A-A24D mit dem Netzwerk mit gelockerter Sortierung gekoppelt sein. Zum Beispiel können die E/A-Cluster A24A-A24D, die Videoperipheriegeräte (z. B. eine Anzeigesteuerung, einen Speicherskalierer/-rotator, einen Videocodierer/-decodierer usw.) einschließen, Zugriff auf das Netzwerk mit gelockerter Sortierung für Videodaten haben.
  • Die Netzwerkschalter A36 nahe der Unterseite des SOC A30, wie in 9 ausgerichtet, können Verbindungen einschließen, die zu einer anderen Instanz des SOC A30 umgeleitet werden können, wodurch es dem Maschennetzwerk ermöglicht wird, sich über mehrere Dies zu erstrecken, wie vorstehend in Bezug auf die CPU- und E/A-Netzwerke erörtert. In einer Konfiguration mit einem einzelnen Die können die Pfade, die sich aus dem Die heraus erstrecken, nicht verwendet werden. 10 ist ein Blockdiagramm eines Zwei-Die-Systems, in dem sich jedes Netzwerk über die zwei SOC-Dies A20A-A20B erstreckt, wodurch Netzwerke gebildet werden, die logisch gleich sind, obwohl sie sich über zwei Dies erstrecken. Die Netzwerkschalter A32, A34 und A36 wurden der Einfachheit halber in 10 entfernt, und das Netzwerk mit gelockerter Sortierung wurde auf eine Linie vereinfacht, kann jedoch in einer Ausführungsform eine Masche sein. Das E/A-Netzwerk A44 ist als durchgezogene Linie gezeigt, das CPU-Netzwerk A46 ist als eine alternierende lange und kurze gestrichelte Linie gezeigt und das Netzwerk mit gelockerter Sortierung A48 ist als gestrichelte Linie gezeigt. Die Ringstruktur der Netzwerke A44 und A46 ist auch in 10 ersichtlich. Während zwei Dies in 10 gezeigt sind, können andere Ausführungsformen mehr als zwei Dies einsetzen. Die Netzwerke können in verschiedenen Ausführungsformen per Daisy-Chain miteinander verbunden sein, mit Punkt-zu-Punkt-Links zwischen jedem Die-Paar vollständig verbunden sein oder eine beliebige andere Verbindungsstruktur aufweisen.
  • In einer Ausführungsform kann die physische Trennung des E/A-Netzwerks vom CPU-Netzwerk das System dabei unterstützen, einen Speicherzugriff mit niedriger Latenz durch die Prozessor-Cluster A22A-A22B bereitzustellen, da der E/A-Datenverkehr auf das E/A-Netzwerk verlagert werden kann. Die Netzwerke verwenden die gleichen Speichersteuerungen für einen Speicherzugriff, sodass die Speichersteuerungen dazu ausgelegt sein können, den Speicherverkehr vom CPU-Netzwerk bis zu einem gewissen Grad gegenüber dem Speicherverkehr vom E/A-Netzwerk zu begünstigen. Die Prozessor-Cluster A22-A22B können ebenfalls Teil des E/A-Netzwerks sein, um auf Vorrichtungsplatz in den E/A-Clustern A24A-A24D zuzugreifen (z. B. mit programmierten Eingabe/Ausgabe-Transaktionen (PIO-Transaktionen)).
  • Speichertransaktionen, die durch die Prozessor-Cluster A22A-A22B initiiert werden, können jedoch über das CPU-Netzwerk übertragen werden. Somit können die CPU-Cluster A22A-A22B Beispiele eines Agenten sein, der mit mindestens zwei der Vielzahl von physisch und logisch unabhängigen Netzwerken gekoppelt ist. Der Agent kann konfiguriert sein, um eine zu übertragende Transaktion zu erzeugen und einen der mindestens zwei der Vielzahl von physisch und logisch unabhängigen Netzwerken auszuwählen, auf denen die Transaktion basierend auf einem Typ der Transaktion (z. B. Speicher oder PIO) übertragen werden soll.
  • Verschiedene Netzwerke können verschiedene Anzahlen von physischen Kanälen und/oder virtuellen Kanälen einschließen. Zum Beispiel kann das E/A-Netzwerk mehrere Anforderungskanäle und Abschlusskanäle aufweisen, während das CPU-Netzwerk einen Anforderungskanal und einen Abschlusskanal aufweisen kann (oder umgekehrt). Die Anforderungen, die auf einem gegebenen Anforderungskanal übertragen werden, wenn mehr als einer vorhanden ist, können auf eine beliebige gewünschte Weise bestimmt werden (z. B. durch einen Typ der Anforderung, durch eine Priorität der Anforderung, um Bandbreite über die physischen Kanäle auszugleichen, usw.). In ähnlicher Weise können die E/A- und CPU-Netzwerke einen virtuellen Snoop-Kanal einschließen, um Snoop-Anforderungen zu übertragen, aber das Netzwerk mit gelockerter Sortierung schließt den virtuellen Snoop-Kanal unter Umständen nicht ein, da es in dieser Ausführungsform nichtkohärent ist.
  • 11 ist ein Blockdiagramm einer Ausführungsform eines Eingabe/Ausgabe-Clusters (E/A-Clusters) A24A, das detaillierter veranschaulicht ist. Andere E/A-Cluster A24B-A24D können ähnlich sein. In der Ausführungsform von 11 schließt der E/A-Cluster A24A Peripheriegeräte A50 und A52, eine Peripheriegeräteschnittstellensteuerung A54, eine lokale Verschaltung A56 und eine Brücke A58 ein. Das Peripheriegerät A52 kann mit einer externen Komponente A60 gekoppelt sein. Die Peripheriegeräteschnittstellensteuerung A54 kann mit einer Peripheriegeräteschnittstelle A62 gekoppelt sein. Die Brücke A58 kann mit einem Netzwerkschalter A34 (oder mit einer Netzwerkschnittstelle, die mit dem Netzwerkschalter A34 koppelt) gekoppelt sein.
  • Die Peripheriegeräte A50 und A52 können einen beliebigen Satz zusätzlicher Hardwarefunktionalität (z. B. über CPUs, GPUs und Speichersteuerungen hinaus) einschließen, der in dem SOC A20 eingeschlossen ist. Zum Beispiel können die Peripheriegeräte A50 und A52 Videoperipheriegeräte einschließen, wie einen Bildsignalprozessor, der konfiguriert ist, um Bilderfassungsdaten von einer Kamera oder einem anderen Bildsensor, Videocodierer/-decodierern, Skalierern, Rotatoren, Mixern, einer Anzeigesteuerung usw. zu verarbeiten. Die Peripheriegeräte können Audioperipheriegeräte, wie Mikrofone, Lautsprecher, Schnittstellen zu Mikrofonen und Lautsprechern, Audioprozessoren, Digitalsignalprozessoren, Mischer usw., einschließen. Die Peripheriegeräte können Netzwerkperipheriegeräte, wie Medienzugriffssteuerungen (MACs), einschließen. Die Peripheriegeräte können andere Typen von Speichersteuerungen, wie nichtflüchtige Speichersteuerungen, einschließen. Einige Peripheriegeräte A52 können eine chipinterne Komponente und eine chip externe Komponente A60 einschließen. Die Peripheriegeräteschnittstellensteuerung A54 kann Schnittstellensteuerungen für verschiedene Schnittstellen A62 einschließen, die außerhalb des SOC A20 sind, einschließlich Schnittstellen, wie Universal Serial Bus (USB), Peripheral Component Interconnect (PCI), einschließlich PCI Express (PCIe), serieller und paralleler Anschlüsse usw.
  • Die lokale Verschaltung A56 kann eine Verschaltung sein, auf der die verschiedenen Peripheriegeräte A50, A52 und A54 kommunizieren. Die lokale Verschaltung A56 kann sich von der in 6 gezeigten systemweiten Verschaltung (z. B. der CPU, E/A und gelockerten Netzwerken) unterscheiden. Die Brücke A58 kann konfiguriert sein, um Kommunikationen auf der lokalen Verschaltung in Kommunikationen auf der systemweiten Verschaltung umzuwandeln und umgekehrt. Die Brücke A58 kann in einer Ausführungsform mit einem der Netzwerkschalter A34 gekoppelt sein. Die Brücke A58 kann auch ein Sortieren unter den von den Peripheriegeräten A50, A52 und A54 ausgegebenen Transaktionen verwalten. Zum Beispiel kann die Brücke A58 ein Cache-Kohärenz-Protokoll verwenden, das auf den Netzwerken unterstützt wird, um das Sortieren der Transaktionen für die Peripheriegeräte A50, A52 und A54 usw. sicherzustellen. Verschiedene Peripheriegeräte A50, A52 und A54 können verschiedene Sortierungsanforderungen aufweisen, und die Brücke A58 kann konfiguriert sein, um sich an die verschiedenen Anforderungen anzupassen. Die Brücke A58 kann in einigen Ausführungsformen auch verschiedene leistungssteigernde Merkmale implementieren. Zum Beispiel kann die Brücke A58 Daten für eine gegebene Anforderung vorabrufen. Die Brücke A58 kann eine kohärente Kopie eines Cache-Blocks (z. B. im exklusiven Zustand) erfassen, an die eine oder mehrere Transaktionen von den Peripheriegeräten A50, A52 und A54 gerichtet sind, um zu ermöglichen, dass die Transaktionen lokal abgeschlossen werden, und um ein Sortieren durchzusetzen. Die Brücke A58 kann spekulativ eine exklusive Kopie eines oder mehrerer Cache-Blöcke erfassen, auf die nachfolgende Transaktionen gerichtet sind, und kann den Cache-Block verwenden, um die nachfolgenden Transaktionen abzuschließen, wenn der exklusive Zustand erfolgreich beibehalten wird, bis die nachfolgenden Transaktionen abgeschlossen werden können (z. B. nachdem Sortierungsbeschränkungen mit früheren Transaktionen erfüllt werden). Somit können in einer Ausführungsform mehrere Anforderungen innerhalb eines Cache-Blocks von der zwischengespeicherten Kopie bedient werden. Verschiedene Details sind in den vorläufigen US-Patentanmeldungen mit den laufenden Nrn. 63/170,868 , eingereicht am 5. April 2021, 63/175,868 , eingereicht am 16. April 2021, und 63/175,877 , eingereicht am 16. April 2021, zu finden. Diese Patentanmeldungen werden hierin durch Bezugnahme in ihrer Gesamtheit aufgenommen. Insoweit als ein beliebiges des aufgenommenen Materials mit dem hierin ausdrücklich dargelegten Material in Widerspruch steht, hat das hierin ausdrücklich dargelegte Material Vorrang.
  • 12 ist ein Blockdiagramm einer bestimmten Ausführungsform eines Prozessor-Clusters A22A. Andere Ausführungsformen können ähnlich sein. In der Ausführungsform von 12 schließt der Prozessor-Cluster A22A einen oder mehrere Prozessoren A70 ein, die mit einem Last-Level-Cache (LLC) A72 gekoppelt sind. Der LLC A72 kann eine Schnittstellenschaltlogik zur Verbindung mit den Netzwerkschaltern A32 und A34 einschließen, um Transaktionen auf dem CPU-Netzwerk und dem E/A-Netzwerk, wie es geeignet ist, zu übertragen.
  • Die Prozessoren A70 können eine beliebige Schaltlogik und oder einen beliebigen Mikrocode einschließen, die/der konfiguriert ist, um Anweisungen auszuführen, die in einer durch die Prozessoren A70 implementierten Anweisungssatzarchitektur definiert sind. Die Prozessoren A70 können eine beliebige Mikroarchitekturimplementierung, eine beliebige Leistung und beliebige Leistungseigenschaften usw. aufweisen. Zum Beispiel können Prozessoren In-order-Ausführung, Out-of-order-Ausführung, superskalar, superpipelined usw. sein.
  • Der LLC A72 und alle Caches innerhalb der Prozessoren A70 können eine beliebige Kapazität und Konfiguration aufweisen, wie Set-assoziativ, direkt zugeordnet oder vollständig assoziativ. Die Cache-Block-Größe kann eine beliebige gewünschte Größe (z. B. 32 Bytes, 64 Bytes, 128 Bytes usw.) sein. Der Cache-Block kann die Einheit einer Zuordnung und Aufhebung der Zuordnung in dem LLC A70 sein. Zusätzlich kann der Cache-Block die Einheit sein, über die in dieser Ausführungsform eine Kohärenz beibehalten wird. Der Cache-Block kann in einigen Fällen auch als Cache-Zeile bezeichnet werden. In einer Ausführungsform kann ein verteiltes, verzeichnisbasiertes Kohärenzschema mit einem Kohärenzpunkt an jeder Speichersteuerung A26 im System implementiert werden, wobei der Kohärenzpunkt für Speicheradressen gilt, die der an der Speichersteuerung zugeordnet sind. Das Verzeichnis kann den Zustand von Cache-Blöcken verfolgen, die in einem beliebigen kohärenten Agenten zwischengespeichert werden. Das Kohärenzschema kann auf viele Speichersteuerungen über möglicherweise mehrere Halbleiter-Dies skalierbar sein. Zum Beispiel kann das Kohärenzschema eines oder mehrere der folgenden Merkmale einsetzen: genaues Verzeichnis für Snoop-Filtern und Race-Auflösung an kohärenten und Speicheragenten; Sortierungspunkt (Zugriffsreihenfolge), am Speicheragenten bestimmt, Serialisierungspunkt migriert zwischen kohärenten Agenten und Speicheragenten; sekundäre Sammlung des Abschlusses (Invalidierungsbestätigung) an anforderndem kohärentem Agenten, mit Abschlusszählung verfolgt, die durch einen Speicheragenten bereitgestellt wird; Fill/Snoop- und Snoop/Victim-Ack Race-Auflösung, an kohärentem Agenten durch Verzeichniszustand gehandhabt, der durch den Speicheragenten bereitgestellt wird; Distinkte primäre/sekundäre geteilte Zustände zur Unterstützung der Race-Auflösung und zum Begrenzen von In-Flight-Snoops auf die gleiche Adresse/das gleiche Ziel; Absorption in Konflikt stehender Snoops an einem kohärenten Agenten, um ein Deadlock zu vermeiden, ohne zusätzliche Nack-/Konflikt-/Wiederholungsnachrichten oder Aktionen; Serialisierungsminimierung (eine zusätzliche Nachrichtenlatenz pro Accessor zur Übertragung der Inhaberschaft durch eine Konfliktkette); Nachrichtenminimierung (Nachrichten direkt zwischen relevanten Agenten und keine zusätzlichen Nachrichten, um Konflikte/Races handzuhaben (z. B. keine Nachrichten zurück an einen Speicheragenten); Store-conditional ohne Überinvalidierung bei Fehler durch Race; Exklusive Inhaberschaftsanforderung mit Absicht, die gesamte Cache-Leitung mit minimierter Datenübertragung (nur im schmutzigen Fall) und zugehörigen Cache-/Verzeichniszuständen zu modifizieren; Distinkte Snoop-back und Snoopforward-Nachrichtstypen, um sowohl zwischenspeicherbare als auch nichtzwischenspeicherbare Ströme handzuhaben (z. B. 3-Sprung- und 4-Sprung-Protokolle). Zusätzliche Details sind in der vorläufigen US-Patentanmeldung mit der laufenden Nr. 63/077,371 , eingereicht am 11. September 2020, zu finden. Diese Patentanmeldung wird hierin durch Bezugnahme in ihrer Gesamtheit aufgenommen. Insoweit als ein beliebiges des aufgenommenen Materials mit dem hierin ausdrücklich dargelegten Material in Widerspruch steht, hat das hierin ausdrücklich dargelegte Material Vorrang.
  • 13 ist ein Paar von Tabellen A80 und A82, die virtuelle Kanäle und Verkehrstypen und die Netzwerke veranschaulichen, die in 6 bis 9 gezeigt sind, in denen sie für eine Ausführungsform verwendet werden. Wie in Tabelle A80 gezeigt, können die virtuellen Kanäle den virtuellen Massenkanal, den virtuellen Kanal mit niedriger Latenz (LLT), die Echtzeit (virtueller RT-Kanal) und den virtuellen Kanal für Nicht-DRAM-Nachrichten (VCP) einschließen. Der virtuelle Massenkanal kann der standardmäßige virtuelle Kanal für Speicherzugriffe sein. Der virtuelle Massenkanal kann zum Beispiel eine geringere Dienstgüte als die virtuellen LLT- und RT-Kanäle empfangen. Der virtuelle LLT-Kanal kann für Speichertransaktionen verwendet werden, für die eine niedrige Latenz für einen Hochleistungsbetrieb benötigt wird. Der virtuelle RT-Kanal kann für Speichertransaktionen verwendet werden, die Latenz- und/oder Bandbreitenanforderungen für einen korrekten Betrieb aufweisen (z. B. Videoströme). Der VCP-Kanal kann verwendet werden, um Verkehr zu trennen, der nicht auf Speicher gerichtet ist, um eine Beeinflussung von Speichertransaktionen zu verhindern.
  • In einer Ausführungsform können die virtuellen Masse- und LLT-Kanäle auf allen drei Netzwerken (CPU, E/A und gelockerte Sortierung) unterstützt werden. Der virtuelle RT-Kanal kann auf dem E/A-Netzwerk unterstützt werden, aber nicht auf den CPU-Netzwerken oder Netzwerken mit gelockerter Sortierung. In ähnlicher Weise kann der virtuelle VCP-Kanal auf dem E/A-Netzwerk unterstützt werden, aber nicht auf den CPU-Netzwerken oder Netzwerken mit gelockerter Sortierung. In einer Ausführungsform kann der virtuelle VCP-Kanal auf dem CPU-Netzwerk und Netzwerk mit gelockerter Sortierung nur für Transaktionen unterstützt werden, die auf die Netzwerkschalter auf diesem Netzwerk (z. B. zur Konfiguration) gerichtet sind, und kann somit nicht während des normalen Betriebs verwendet werden. Somit können, wie Tabelle A80 veranschaulicht, verschiedene Netzwerke verschiedene Anzahlen von virtuellen Kanälen unterstützen.
  • Tabelle A82 veranschaulicht verschiedene Verkehrstypen und welche Netzwerke diesen Verkehrstyp tragen. Die Verkehrstypen können kohärenten Speicherverkehr, nichtkohärenten Speicherverkehr, Echtzeitspeicherverkehr (RT-Speicherverkehr) und VCP-Verkehr (Nichtspeicher-Verkehr) einschließen. Die CPU- und E/A-Netzwerke können beide kohärenten Verkehr tragen. In einer Ausführungsform kann kohärenter Speicherverkehr, der durch die Prozessor-Cluster A22A-A22B bereitgestellt wird, auf dem CPU-Netzwerk getragen werden, während das E/A-Netzwerk kohärenten Speicherverkehr tragen kann, der durch die E/A-Cluster A24A-A24D bereitgestellt wird. Nichtkohärenter Speicherverkehr kann auf dem Netzwerk mit gelockerter Sortierung getragen werden, und der RT- und VCP-Verkehr können auf dem E/A-Netzwerk getragen werden.
  • 14 ist ein Flussdiagramm, das ein Beispiel eines Verfahrens zum Initiieren einer Transaktion auf einem Netzwerk veranschaulicht. In einer Ausführungsform kann ein Agent eine zu übertragende Transaktion erzeugen (Block A90). Die Transaktion soll auf einem von einer Vielzahl von physisch und logisch unabhängigen Netzwerken übertragen werden. Ein erstes Netzwerk der Vielzahl von physisch und logisch unabhängigen Netzwerken ist gemäß einer ersten Topologie aufgebaut, und ein zweites Netzwerk der Vielzahl von physisch und logisch unabhängigen Netzwerken ist gemäß einer zweiten Topologie, die sich von der ersten Topologie unterscheidet, aufgebaut. Eines der Vielzahl von physisch und logisch unabhängigen Netzwerken wird ausgewählt, auf dem die Transaktion basierend auf einem Typ der Transaktion übertragen werden soll (Block A92). Zum Beispiel können die Prozessor-Cluster A22A-A22B kohärenten Speicherverkehr auf dem CPU-Netzwerk und PIO-Verkehr auf dem E/A-Netzwerk übertragen. In einer Ausführungsform kann der Agent basierend auf einem oder mehreren Attributen der Transaktion, die von dem Typ abweicht, einen virtuellen Kanal einen virtuellen Kanal einer Vielzahl von virtuellen Kanälen auswählen, die auf dem ausgewählten Netzwerk der Vielzahl von physisch und logisch unabhängigen Netzwerken unterstützt werden (Block A94). Zum Beispiel kann eine CPU den virtuellen LLT-Kanal für eine Teilmenge von Speichertransaktionen (z. B. die ältesten Speichertransaktionen, die Cache-Misses sind, oder eine Anzahl von Cache-Misses bis zu einer Schwellenanzahl, wonach der Massenkanal ausgewählt werden kann) auswählen. Eine GPU kann basierend auf der Dringlichkeit, mit der die Daten benötigt werden, zwischen den virtuellen LLT- und Massenkanälen auswählen. Videovorrichtungen können den virtuellen RT-Kanal nach Bedarf verwenden (z. B. kann die Anzeigesteuerung Rahmendatenlesevorgänge auf dem virtuellen RT-Kanal ausgeben). Der virtuelle VCP-Kanal kann für Transaktionen ausgewählt werden, die keine Speichertransaktionen sind. Der Agent kann ein Transaktionspaket auf dem ausgewählten Netzwerk und dem virtuellen Kanal übertragen. In einer Ausführungsform können Transaktionspakete in verschiedenen virtuellen Kanälen verschiedene Pfade durch die Netzwerke annehmen. In einer Ausführungsform können Transaktionspakete verschiedene Pfade basierend auf einem Typ des Transaktionspakets (z. B. Anforderung gegenüber Antwort) annehmen. In einer Ausführungsform können verschiedene Pfade sowohl für verschiedene virtuelle Kanäle als auch für verschiedene Typen von Transaktionen unterstützt werden. Andere Ausführungsformen können ein oder mehrere zusätzliche Attribute von Transaktionspaketen einsetzen, um einen Pfad durch das Netzwerk für diese Pakete zu bestimmen. Auf andere Weise betrachtet, bilden die Netzwerkschalter das Netzwerk, können Pakete, die sich basierend auf dem virtuellen Kanal, dem Typ oder beliebigen anderen Attributen unterscheiden, umleiten. Ein anderer Pfad kann sich auf das Durchqueren mindestens eines Segments zwischen Netzwerkschaltern beziehen, das nicht auf dem anderen Pfad durchquert wird, obwohl sich die Transaktionspakete unter Verwendung der verschiedenen Pfade von einer gleichen Quelle zu einem gleichen Ziel bewegen. Die Verwendung verschiedener Pfade kann einen Lastausgleich in den Netzwerken und/oder eine reduzierte Latenz für die Transaktionen bereitstellen.
  • In einer Ausführungsform umfasst ein System eine Vielzahl von Prozessor-Clustern, eine Vielzahl von Speichersteuerungen, eine Vielzahl von Grafikverarbeitungseinheiten, eine Vielzahl von Agenten und eine Vielzahl von Netzwerkschaltern, die mit der Vielzahl von Prozessor-Clustern, der Vielzahl von Grafikverarbeitungseinheiten, der Vielzahl von Speichersteuerungen und der Vielzahl von Agenten gekoppelt sind. Ein gegebener Prozessor-Cluster umfasst einen oder mehrere Prozessoren. Die Speichersteuerungen sind konfiguriert, um den Zugriff auf Speichervorrichtungen zu steuern. Eine erste Teilmenge der Vielzahl von Netzwerkschaltern ist miteinander verbunden, um ein Netzwerk einer zentralen Verarbeitungseinheit (CPU) zwischen der Vielzahl von Prozessor-Clustern und der Vielzahl von Speichersteuerungen zu bilden. Eine zweite Teilmenge der Vielzahl von Netzwerkschaltern ist miteinander verbunden, um ein Eingabe/Ausgabe-Netzwerk (E/A-Netzwerk) zwischen der Vielzahl von Prozessor-Clustern, der Vielzahl von Agenten und der Vielzahl von Speichersteuerungen zu bilden. Eine dritte Teilmenge der Vielzahl von Netzwerkschaltern ist miteinander verbunden, um ein Netzwerk mit gelockerter Sortierung zwischen der Vielzahl von Grafikverarbeitungseinheiten, ausgewählten der Vielzahl von Agenten und der Vielzahl von Speichersteuerungen zu bilden. Das CPU-Netzwerk, das E/A-Netzwerk und das Netzwerk mit gelockerter Sortierung sind voneinander unabhängig. Das CPU-Netzwerk und das E/A-Netzwerk sind kohärent. Das Netzwerk mit gelockerter Sortierung ist nichtkohärent und weist im Vergleich zum CPU-Netzwerk und zum E/A-Netzwerk reduzierte Sortierungsbeschränkungen auf. In einer Ausführungsform weist mindestens eines vom CPU-Netzwerk, vom E/A-Netzwerk und vom Netzwerk mit gelockerter Sortierung eine Anzahl von physischen Kanälen auf, die sich von einer Anzahl von physischen Kanälen auf einem anderen vom CPU-Netzwerk, vom E/A-Netzwerk und vom Netzwerk mit gelockerter Sortierung unterscheidet. In einer Ausführungsform ist das CPU-Netzwerk ein Ringnetzwerk. In einer Ausführungsform ist das E/A-Netzwerk ein Ringnetzwerk. In einer Ausführungsform ist das Netzwerk mit gelockerter Sortierung ein Maschennetzwerk. In einer Ausführungsform umfasst ein erster Agent der Vielzahl von Agenten einen E/A-Cluster, der eine Vielzahl von Peripherievorrichtungen umfasst. In einer Ausführungsform umfasst der E/A-Cluster ferner eine Brücke, die mit der Vielzahl von Peripherievorrichtungen gekoppelt ist und ferner mit einem ersten Netzwerkschalter in der zweiten Teilmenge gekoppelt ist. In einer Ausführungsform umfasst das System ferner eine Netzwerkschnittstellenschaltung, die konfiguriert ist, um Kommunikationen von einem gegebenen Agenten in Kommunikationen für ein gegebenes Netzwerk eines CPU-Netzwerks, des E/A-Netzwerks und des Netzwerks mit gelockerter Sortierung umzuwandeln, wobei die Netzwerkschnittstellenschaltung mit einem der Vielzahl von Netzwerkschaltern im gegebenen Netzwerk gekoppelt ist.
  • In einer Ausführungsform umfasst ein System-on-a-Chip (SOC) einen Halbleiter-Die, auf dem eine Schaltlogik gebildet ist. Die Schaltlogik umfasst eine Vielzahl von Agenten und eine Vielzahl von Netzwerkschaltern, die mit der Vielzahl von Agenten gekoppelt sind.
  • Die Vielzahl von Netzwerkschaltern sind miteinander verbunden, um eine Vielzahl von physisch und logisch unabhängigen Netzwerken zu bilden. Ein erstes Netzwerk der Vielzahl von physisch und logisch unabhängigen Netzwerken ist gemäß einer ersten Topologie aufgebaut, und ein zweites Netzwerk der Vielzahl von physisch und logisch unabhängigen Netzwerken ist gemäß einer zweiten Topologie, die sich von der ersten Topologie unterscheidet, aufgebaut. In einer Ausführungsform ist die erste Topologie eine Ringtopologie. In einer Ausführungsform ist die zweite Topologie eine Maschentopologie. In einer Ausführungsform wird eine Kohärenz auf dem ersten Netzwerk durchgesetzt. In einer Ausführungsform ist das zweite Netzwerk ein Netzwerk mit gelockerter Sortierung. In einer Ausführungsform implementiert mindestens eines der Vielzahl von physisch und logisch unabhängigen Netzwerken eine erste Anzahl von physischen Kanälen und implementiert mindestens ein anderes der Vielzahl von physisch und logisch unabhängigen Netzwerken eine zweite Anzahl von physischen Kanälen, wobei sich die erste Anzahl von der zweiten Anzahl unterscheidet. In einer Ausführungsform schließt das erste Netzwerk einen oder mehrere erste virtuelle Kanäle ein und schließt das zweite Netzwerk einen oder mehrere zweite virtuelle Kanäle ein. Mindestens einer von dem einen oder den mehreren ersten virtuellen Kanälen unterscheidet sich von dem einen oder den mehreren zweiten virtuellen Kanälen. In einer Ausführungsform umfasst das SOC ferner eine Netzwerkschnittstellenschaltung, die konfiguriert ist, um Kommunikationen von einem gegebenen Agenten der Vielzahl von Agenten in Kommunikationen für ein gegebenes Netzwerk der Vielzahl von physisch und logisch unabhängigen Netzwerken umzuwandeln. Die Netzwerkschnittstellenschaltung ist mit einem der Vielzahl von Netzwerkschaltern im gegebenen Netzwerk gekoppelt. In einer Ausführungsform ist ein erster Agent der Vielzahl von Agenten mit mindestens zwei der Vielzahl von physisch und logisch unabhängigen Netzwerken gekoppelt. Der erste Agent ist konfiguriert, um eine zu übertragende Transaktion zu erzeugen. Der erste Agent ist konfiguriert, um eines der mindestens zwei der Vielzahl von physisch und logisch unabhängigen Netzwerke, auf denen die Transaktion basierend auf einem Typ der Transaktion übertragen werden soll, auszuwählen. In einer Ausführungsform ist eines der mindestens zwei Netzwerke ein E/A-Netzwerk, auf dem E/A-Transaktionen übertragen werden.
  • Gemäß einem Beispiel umfasst ein Verfahren ein Erzeugen einer Transaktion in einem Agenten, der mit einer Vielzahl von physisch und logisch unabhängigen Netzwerken gekoppelt ist, wobei ein erstes Netzwerk der Vielzahl von physisch und logisch unabhängigen Netzwerken gemäß einer ersten Topologie aufgebaut ist und ein zweites Netzwerk der Vielzahl von physisch und logisch unabhängigen Netzwerken gemäß einer zweiten Topologie, die sich von der ersten Topologie unterscheidet, aufgebaut ist; und ein Auswählen von einem der Vielzahl von physisch und logisch unabhängigen Netzwerken, auf denen die Transaktion basierend auf einem Typ der Transaktion übertragen werden soll. In einem Beispiel umfasst das Verfahren ferner ein Auswählen, basierend auf einem oder mehreren Attributen der Transaktion, die von dem Typ abweicht, eines virtuellen Kanals einer Vielzahl von virtuellen Kanälen, die auf dem einen der Vielzahl von physisch und logisch unabhängigen Netzwerken unterstützt werden.
  • Interrupts
  • 15 bis 26 veranschaulichen verschiedene Ausführungsformen einer skalierbaren Interrupt-Struktur. Zum Beispiel kann in einem System mit zwei oder mehr Dies mit integrierter Schaltung ein gegebenes Die mit integrierter Schaltung eine lokale Interrupt-Verteilungsschaltung einschließen, um die Interrupts auf die Prozessorkerne in dem gegebenen Dies mit integrierter Schaltung zu verteilen. Mindestens einer der zwei oder mehr Dies mit integrierter Schaltung kann eine globale Interrupt-Verteilungsschaltung einschließen, wobei die lokalen Interrupt-Verteilungsschaltungen und die globale Interrupt-Verteilungsschaltung ein Mehrebenen-Interrupt-Verteilungsschema implementieren. In einer Ausführungsform ist die globale Interrupt-Verteilungsschaltung konfiguriert, um eine Interrupt-Anforderung an die lokalen Interrupt-Verteilungsschaltungen in einer Sequenz zu übertragen, und wobei die lokalen Interrupt-Verteilungsschaltungen konfiguriert sind, um die Interrupt-Anforderung an lokale Interrupt-Ziele in einer Sequenz zu übertragen, bevor sie auf die Interrupt-Anforderung von der globalen Interrupt-Verteilungsschaltung antworten.
  • 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.
  • Unter Bezugnahme auf 15 ist ein Blockdiagramm einer Ausführungsform eines Abschnitts eines Systems B10, das eine Interrupt-Steuerung 20 einschließt, die mit einer Vielzahl von Cluster-Interrupt-Steuerungen B24A-B24n gekoppelt ist, gezeigt. Jede der Vielzahl von Cluster-Interrupt-Steuerungen B24A-B24n ist mit einer jeweiligen Vielzahl von Prozessoren B30 (z. B. einem Prozessor-Cluster) gekoppelt. Die Interrupt-Steuerung B20 ist mit einer Vielzahl von Interrupt-Quellen B32 gekoppelt.
  • Wenn mindestens ein Interrupt durch die Interrupt-Steuerung B20 empfangen wurde, kann die Interrupt-Steuerung B20 konfiguriert sein, um zu versuchen, den Interrupt zu liefern (z. B. an einen Prozessor B30, 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 B10 kann die Interrupt-Steuerung B20 versuchen, Interrupts durch die Cluster-Interrupt-Steuerungen B24A-B24n zu liefern. Jede Cluster-Steuerung B24A-B24n ist einem Prozessor-Cluster zugeordnet und kann versuchen, den Interrupt an Prozessoren B30 in den jeweiligen mehreren Prozessoren zu liefern, die den Cluster bilden.
  • Insbesondere kann die Interrupt-Steuerung B20 konfiguriert sein, um zu versuchen, den Interrupt in einer Vielzahl von Iterationen über die Cluster-Interrupt-Steuerungen B24AB24n zu liefern. Die Schnittstelle zwischen der Interrupt-Steuerung B20 und jeder Interrupt-Steuerung B24A-B24n 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 B24A-B24n kann auf die weichen und harten Iterationen mit einer Ack-Antwort reagieren (was angibt, dass ein Prozessor B30 in dem Prozessor-Cluster, welcher der gegebenen Cluster-Interrupt-Steuerung B24A-B24n zugeordnet ist, den Interrupt angenommen hat und mindestens einen Interrupt verarbeiten wird) oder einer Nack-Antwort (was angibt, dass die Prozessoren 3B0 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 B24A-B24n können ebenso eine Anforderungs-/Ack-/Nack-Struktur mit den Prozessoren B30 verwenden und versuchen, den Interrupt an einen bestimmten Prozessor B30 zu liefern. Basierend auf der Anforderung von der Cluster-Interrupt-Steuerung B24A-B24n kann der gegebene Prozessor B30 konfiguriert sein, um zu bestimmen, ob der gegebene Prozessor B30 in der Lage ist, die aktuelle Befehlsausführung innerhalb eines vorbestimmten Zeitraums zu unterbrechen. Wenn der gegebene Prozessor B30 in der Lage ist, innerhalb des Zeitraums zu unterbrechen, kann der gegebene Prozessor B30 konfiguriert sein, um eine Ack-Antwort durchzusetzen. Wenn der gegebene Prozessor B30 nicht in der Lage ist zu unterbrechen, kann der gegebene Prozessor B30 konfiguriert sein, um eine Nack-Antwort durchzusetzen. Die Cluster-Interrupt-Steuerung B24A-B24n kann konfiguriert sein, um die Ack-Antwort an die Interrupt-Steuerung B20 durchzusetzen, wenn mindestens ein Prozessor die Ack-Antwort an die Cluster-Interrupt-Steuerung B24A-B24n durchsetzt, und kann konfiguriert sein, um die Nack-Antwort durchzusetzen, wenn die Prozessoren B30 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 B24A-B24n oder dem Prozessor B30, 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 B24A-B24n24n und der Interrupt-Steuerung B20 in einer Ausführungsform auf größere Anzahlen von Prozessoren in einem System B10 (z. B. mehreren Prozessor-Cluster) skalierbarer sein.
  • Eine Iteration über die Cluster-Interrupt-Steuerungen B24A-B24n kann einen Versuch einschließen, den Interrupt durch mindestens eine Teilmenge der Cluster-Interrupt-Steuerungen B24A-B24n bis zu allen der Cluster-Interrupt-Steuerungen B24A-B24n zu liefern. Eine Iteration kann auf jede gewünschte Weise erfolgen. Zum Beispiel kann in einer Ausführungsform die Interrupt-Steuerung B20 konfiguriert sein, um die Interrupt-Anforderungen an jeweilige Cluster-Interrupt-Steuerungen B24A-B24n seriell durchzusetzen, die durch eine Ack-Antwort von einer der Cluster-Interrupt-Steuerungen B24A-B24n (und einem Fehlen zusätzlicher anstehender Interrupts, in einer Ausführungsform) oder durch eine Nack-Antwort von allen Cluster-Interrupt-Steuerungen B24A-B24n abgeschlossen werden. Das heißt, die Interrupt-Steuerung kann eine der Cluster-Interrupt-Steuerungen B24A-B24n auswählen und eine Interrupt-Anforderung an die ausgewählte Cluster-Interrupt-Steuerung B24A-B24n durchsetzen (z. B. durch Durchsetzung der weichen oder harten Anforderung, je nachdem, welche Iteration durchgeführt wird). Die ausgewählte Cluster-Interrupt-Steuerung B24A-B24n kann mit einer Ack-Antwort antworten, welche die Iteration beenden kann. Wenn andererseits die ausgewählte Cluster-Interrupt-Steuerung B24A-B24n die Nack-Antwort durchsetzt, kann die Interrupt-Steuerung konfiguriert sein, um eine andere Cluster-Interrupt-Steuerung B24A-B24n auszuwählen und kann die weiche oder harte Anforderung an die ausgewählte Cluster-Interrupt-Steuerung B24A-B24n durchsetzen. Die Auswahl und Durchsetzung kann fortgesetzt werden, bis entweder eine Ack-Antwort empfangen wird oder jede der Cluster-Interrupt-Steuerungen B24A-B24n ausgewählt wurde und die Nack-Antwort durchgesetzt hat. Andere Ausführungsformen können eine Iteration über die Cluster-Interrupt-Steuerungen B24A-B24n auf andere Weise durchführen. Zum Beispiel kann die Interrupt-Steuerung B20 konfiguriert sein, um eine Interrupt-Anforderung an eine Teilmenge von zwei oder mehr Cluster-Interrupt-Steuerungen B24A-B24n gleichzeitig durchzusetzen, mit anderen Teilmengen fortzufahren, wenn jede Cluster-Interrupt-Steuerung B24A-B24n 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 B24A-B24n 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 B24A-B24n versuchen, den Interrupt an eine Teilmenge der Vielzahl von Prozessoren B30 zu liefern, die der gegebenen Cluster-Interrupt-Steuerung B24A-B24n zugeordnet sind. Die Teilmenge kann die Prozessoren B30 sein, die eingeschaltet sind, wobei die gegebene Cluster-Interrupt-Steuerung B24A-B24n nicht versuchen kann, den Interrupt an die Prozessoren B30 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 B24A-B24n24n versucht, den Interrupt zu liefern. Somit können die ausgeschalteten Prozessoren B30 in der weichen Iteration ausgeschaltet bleiben.
  • Basierend auf einer Nack-Antwort von jeder Cluster-Interrupt-Steuerung B24A-B24n während der weichen Iteration kann die Interrupt-Steuerung B20 eine harte Iteration durchführen. Bei der harten Iteration können die ausgeschalteten Prozessoren B30 in einem gegebenen Prozessor-Cluster durch die jeweilige Cluster-Interrupt-Steuerung B24A-B24n eingeschaltet werden, und die jeweilige Interrupt-Steuerung B24A-B24n kann versuchen, den Interrupt an jeden Prozessor B30 in dem Prozessor-Cluster zu liefern. Insbesondere, wenn ein Prozessor B30 eingeschaltet wurde, um die harte Iteration durchzuführen, kann der Prozessor B30 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 B24A-B24n 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 B24A-B24n kann versuchen, Interrupts in jeder gewünschten Weise zu liefern. Zum Beispiel kann die gegebene Cluster-Interrupt-Steuerung B24A-B24n die Interrupt-Anforderungen an die jeweiligen Prozessoren B30 in dem Prozessor-Cluster seriell durchsetzen, die durch eine Ack-Antwort von einem der jeweiligen Prozessoren B30 oder durch eine Nack-Antwort von jedem der jeweiligen Prozessoren B30, an welche die gegebene Cluster-Interrupt-Steuerung B24A-B24n versuchen soll den Interrupt zu liefern, beendet werden. Das heißt, die gegebene Cluster-Interrupt-Steuerung B24A-B4n kann einen der jeweiligen Prozessoren B30 auswählen und eine Interrupt-Anforderung an den ausgewählten Prozessor B30 durchsetzen (z. B. durch Aktivieren der Anforderung an den ausgewählten Prozessor B30). Der ausgewählte Prozessor B30 kann mit einer Ack-Antwort anworten, was den Versuch beenden kann. Wenn andererseits der ausgewählte Prozessor B30 die Nack-Antwort durchsetzt, kann die gegebene Cluster-Interrupt-Steuerung B24A-B24n konfiguriert sein, um einen anderen Prozessor B30 auszuwählen und kann die Interrupt-Anforderung an den ausgewählten Prozessor B30 durchsetzen.
  • Die Auswahl und Durchsetzung kann fortgesetzt werden, bis entweder eine Ack-Antwort empfangen wird oder jeder der Prozessoren B30 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 B30 gleichzeitig oder an die Prozessoren B30 parallel mit dem Potenzial für unechte Interrupts durchsetzen, wie vorstehend erwähnt. Die gegebene Cluster-Interrupt-Steuerung B24A-B24n kann auf die Interrupt-Steuerung B20 mit einer Ack-Antwort, basierend auf dem Empfangen einer Ack-Antwort von einem der Prozessoren B30, reagieren oder kann auf die Interrupt-Steuerung B20 mit einer Nack-Antwort reagieren, wenn jeder der Prozessoren B30 mit einer Nack-Antwort geantwortet hat.
  • Die Reihenfolge, in der die Interrupt-Steuerung B20 Interrupt-Anforderungen an die Cluster-Interrupt-Steuerungen B24A-B24n 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 B32 zu einer Reihenfolge führen, und Interrupts von einer anderen Interrupt-Quelle B32 können zu einer anderen Reihenfolge führen). Zum Beispiel können in einer Ausführungsform die Vielzahl von Prozessoren B30 in einem Cluster von der Vielzahl von Prozessoren B30 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 B32 können jede Hardwareschaltlogik sein, die konfiguriert ist, um einen Interrupt durchzusetzen, um zu bewirken, dass ein Prozessor B30 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 16 beschrieben. Der Interrupt ist asynchron zu dem Code, der vom Prozessor B30 ausgeführt wird, wenn der Prozessor B30 den Interrupt empfängt. Im Allgemeinen kann der Prozessor B30 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 3B2 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 B32 an die Interrupt-Steuerung B20 übertragen werden. Zum Beispiel können dedizierte Interrupt-Drähte zwischen Interrupt-Quellen und der Interrupt-Steuerung B20 bereitgestellt werden. Eine gegebene Interrupt-Quelle B32 kann ein Signal auf ihrem dedizierten Draht durchsetzen, um einen Interrupt an die Interrupt-Steuerung B20 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 B10 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 B32 und nachrichtensignalisierten Interrupts aus anderen Interrupt-Quellen B32 kann verwendet werden.
  • Die Interrupt-Steuerung B20 kann die Interrupts empfangen und sie als anstehende Interrupts in der Interrupt-Steuerung B20 aufzeichnen. Interrupts von verschiedenen Interrupt-Quellen B32 können durch die Interrupt-Steuerung B20 gemäß verschiedenen programmierbaren Prioritäten priorisiert werden, die durch das Betriebssystem oder einen anderen Steuercode angeordnet sind.
  • Unter Bezugnahme auf 16 ist ein Blockdiagramm einer Ausführungsform des Systems B10, das als System auf einem Chip (SOC) B10 implementiert ist, gezeigt, das mit einem Speicher B12 gekoppelt ist. In einer Ausführungsform kann das SOC B10 eine Instanz des in 1 gezeigten SOC 10 sein. Wie durch den Namen impliziert, können die Komponenten des SOC B10 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 B10 als ein Beispiel verwendet. In der veranschaulichten Ausführungsform schließen die Komponenten des SOC B10 eine Vielzahl von Prozessor-Clustern B14A-B14n, die Interrupt-Steuerung B20, eine oder mehrere Peripheriekomponenten B18 (genauer „Peripheriegeräte“), eine Speichersteuerung B22 und eine Kommunikationsstruktur B27 ein. Die Komponenten BB14A-14n, B18, B20 und B22 können alle mit der Kommunikationsstruktur B27 gekoppelt sein. Die Speichersteuerung B22 kann während der Verwendung mit dem Speicher B12 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 B14A-B14n die jeweilige Vielzahl von Prozessoren (P) B30 und die jeweiligen Cluster-Interrupt-Steuerungen (ICs) B24A-B24n einschließen, wie in 16 gezeigt. Die Prozessoren B30 können die zentrale Verarbeitungseinheiten (CPU(s)) des SOC B10 bilden. In einer Ausführungsform können ein oder mehrere Prozessor-Cluster B14AB14n nicht als CPUs verwendet werden.
  • Die Peripheriegeräte B18 können in einer Ausführungsform Peripheriegeräte einschließen, die Beispiele für Interrupt-Quellen BB32 sind. Somit können eine oder mehrere Peripheriegeräte B18 dedizierte Drähte zu der Interrupt-Steuerung B20 aufweisen, um Interrupts an die Interrupt-Steuerung B20 zu übertragen. Andere Peripheriegeräte B18 können nachrichtensignalisierte Interrupts verwenden, die über die Kommunikationsstruktur B27 übertragen werden. In einigen Ausführungsformen können eine oder mehrere off-SOC-Vorrichtungen (in 16 nicht gezeigt) auch Interrupt-Quellen sein. Die gepunktete Linie von der Interrupt-Steuerung B20 zum off-Chip veranschaulicht das Potenzial für die off-SOC-Interrupt-Quellen.
  • Die harte/weiche/erzwungene Ack-/Nack-Schnittstellen zwischen den in 15 gezeigten Cluster-ICs B24A-B24n sind in 16 über die Pfeile zwischen den Cluster-ICs B24A-B24n und der Interrupt-Steuerung B20 veranschaulicht. In ähnlicher Weise werden die Req Ack-/Nack-Schnittstellen zwischen den Prozessoren B30 und den Cluster-ICs B24A-B24n in 1 durch die Pfeile zwischen den Cluster-ICs B24A-B24n und den Prozessoren B30 in den jeweiligen Clustern B14A-B14n veranschaulicht.
  • Wie vorstehend erwähnt, können die Prozessor-Cluster B14A-B14n einen oder mehrere Prozessoren B30 einschließen, die als CPU des SOC B10 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-on-a-Chip (SOC B10) 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 B22 kann allgemein die Schaltlogik zum Empfangen von Speichervorgängen von den anderen Komponenten des SOC B10 und zum Zugreifen auf den Speicher B12 einschließen, um die Speichervorgänge durchzuführen. Die Speichersteuerung B22 kann konfiguriert sein, um auf jeden beliebigen Typ von Speicher B12 zuzugreifen. Beispielsweise kann der Speicher B12 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 B22 kann Warteschlangen für Speichervorgänge zum Ordnen (und potenziellen Umordnen) der Operationen und zum Vorlegen der Operationen an den Speicher B12 einschließen. Die Speichersteuerung B22 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 B22 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 B12 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 B22 befinden.
  • Die Peripheriegeräte B18 können ein beliebiger Satz von in dem SOC B10 eingeschlossener zusätzlicher Hardwarefunktionalität sein. Zum Beispiel können die Peripheriegeräte 18 Videoperipheriegeräte einschließen, wie 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 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 B10 einschließen, einschließlich Schnittstellen, wie Universal Serial Bus (USB), Peripheral Component Interconnect (PCI), einschließlich PCI Express (PCIe), serielle und parallele Ports usw. Die Verbindung zur externen Vorrichtung in 15 wird durch einen gestrichelten Pfeil veranschaulicht, der sich extern zu dem SOC B10 erstreckt. Die Peripherieeinheiten können Netzwerkperipherieeinheiten, wie beispielsweise „Media Access Controller“ (MACs) einschließen. Jeder beliebige Satz von Hardware kann eingeschlossen sein.
  • Die Kommunikationsstruktur B27 kann jede beliebige Kommunikationsverbindung und jedes beliebige Protokoll zum Kommunizieren zwischen den Komponenten des SOC B10 sein. Die Kommunikationsstruktur B27 kann busgestützt sein, einschließlich gemeinsam genutzter Buskonfigurationen, Crossbar-Konfigurationen und hierarchischen Bussen mit Brücken. Die Kommunikationsstruktur B27 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 B10 (und die Anzahl von Teilkomponenten für die in 16 gezeigten, wie die Prozessoren B30 in jedem Prozessor-Cluster B14A-B14n von Ausführungsform zu Ausführungsform) schwanken kann. Zusätzlich kann sich die Anzahl von Prozessoren B30 in einem Prozessor-Cluster B14A-B14n von der Anzahl von Prozessoren B30 in einem anderen Prozessor-Cluster B14A-B14n unterscheiden. Es kann mehr oder weniger von jeder Komponente/Teilkomponente geben als die in 16 gezeigte Anzahl.
  • 17 ist ein Blockdiagramm, das eine Ausführungsform einer Zustandsmaschine veranschaulicht, die in einer Ausführungsform durch die Interrupt-Steuerung B20 implementiert werden kann. Bei der dargestellten Ausführungsform schließen die Zustände einen Ruhezustand B40, einen weichen Zustand B42, einen harten Zustand B44, einen erzwungenen Zustand B46 und einen Warteableitzustand B48 ein.
  • Im Ruhezustand B40 können keine Interrupts anstehen. Im Allgemeinen kann die Zustandsmaschine aus einem der anderen Zustände in den Ruhezustand B40 zurückkehren, wenn keine Interrupts anstehen, wie in 17 gezeigt. Wenn mindestens ein Interrupt empfangen wurde, kann die Interrupt-Steuerung B20 in den weichen Zustand B42 übergehen. Die Interrupt-Steuerung B20 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 B46 ü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 B20 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 B42 kann die Interrupt-Steuerung B20 konfiguriert sein, um eine weiche Iteration des Versuchens einen Interrupt zu liefern, zu initialisieren. Wenn eine der Cluster-Interrupt-Steuerungen B24A-B24n die Ack-Antwort während der weichen Iteration überträgt und mindestens ein Interrupt anstehend ist, kann die Interrupt-Steuerung B20 in den Warteableitzustand B48 übergehen. Der Warteableitzustand B48 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 B20 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 B20 konfiguriert sein, um in den erzwungenen Zustand B46 ü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 B20 konfiguriert sein, um in den weichen Zustand B42 zurückzukehren und die weiche Iteration fortzusetzen.
  • Wenn die weiche Iteration mit Nack-Antworten von jeder Cluster-Interrupt-Steuerung B24A-B24n abschließt (und mindestens ein Interrupt anstehend bleibt), kann die Interrupt-Steuerung B20 so konfiguriert sein, um in den harten Zustand B44 überzugehen und eine harte Iteration einzuleiten. Wenn eine Cluster-Interrupt-Steuerung B24A-B24n die Ack-Antwort während der harten Iteration bereitstellt und mindestens ein anstehender Interrupt vorhanden ist, kann die Interrupt-Steuerung B20 in den Warteableitzustand B48 übergehen, ähnlich wie in der vorstehende Erörterung. Wenn die harte Iteration mit Nack-Antworten von jeder Cluster-Interrupt-Steuerung B24A-B24n abschließt und mindestens ein anstehender Interrupt vorhanden ist, kann die Interrupt-Steuerung B20 konfiguriert sein, um in den erzwungenen Zustand B46 überzugehen und eine erzwungene Iteration einzuleiten. Die Interrupt-Steuerung B20 kann im erzwungenen Zustand B46 verbleiben, bis keine anstehenden Interrupts mehr vorhanden sind.
  • 18 ist ein Flussdiagramm, das die Funktionsweise einer Ausführungsform der Interrupt-Steuerung B20 veranschaulicht, wenn eine weiche oder harte Iteration durchgeführt wird (z. B. in den Zuständen B42 oder B44 in 17). 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 B20 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 B20 kann konfiguriert sein, um den in 18 veranschaulichten Vorgang zu implementieren.
  • Die Interrupt-Steuerung kann konfiguriert sein, um eine Cluster-Interrupt-Steuerung B24A-B24n (Block B50) auszuwählen. Jeder Mechanismus zum Auswählen der Cluster-Interrupt-Steuerung B24A-B24n aus der Vielzahl von Interrupt-Steuerungen B24A-B24n kann verwendet werden. Zum Beispiel kann eine programmierbare Reihenfolge des Clusters von Interrupt-Steuerungen B24A-B24n angeben, welcher Cluster von Interrupt-Steuerungen B24A-B24n 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 B24A-B24n auszuwählen (z. B. die Cluster-Interrupt-Steuerung B24A-B24n, 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 B24A-B24n, 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 B20 kann konfiguriert sein, um die Interrupt-Anforderung (hart oder weich, abhängig von der aktuellen Iteration) an die ausgewählte Cluster-Interrupt-Steuerung B24A-B24n (Block B52) zu übertragen. Zum Beispiel kann die Interrupt-Steuerung B20 ein hartes oder weiches Interrupt-Anforderungssignal an die ausgewählte Cluster-Interrupt-Steuerung B24A-B24n durchsetzen. Wenn die ausgewählte Cluster-Interrupt-Steuerung B24A-B24n eine Ack-Antwort an die Interrupt-Anforderung bereitstellt (Entscheidungsblock B54, „Ja“-Zweig), kann die Interrupt-Steuerung B20 so konfiguriert sein, um in den Warteableitzustand B48 überzugehen, um dem Prozessor B30 in dem Prozessor-Cluster 14A-14n, welcher der ausgewählten Cluster-Interrupt-Steuerung B24A-B24n zugeordnet ist, zu ermöglichen, einen oder mehrere anstehende Interrupts zu bedienen (Block B56). Wenn die ausgewählte Cluster-Interrupt-Steuerung eine Nack-Antwort (Entscheidungsblock B58, „Ja“-Zweig) bereitstellt und mindestens eine Cluster-Interrupt-Steuerung B24A-B24n vorhanden ist, die in der aktuellen Iteration nicht ausgewählt wurde (Entscheidungsblock B60, „Ja“-Zweig), kann die Interrupt-Steuerung B20 konfiguriert sein, um die nächste Cluster-Interrupt-Steuerung B24A-B24n gemäß dem implementierten Auswahlmechanismus (Block B62) auszuwählen und zu Block B52 zurückzukehren, um die Interrupt-Anforderung an die ausgewählte Cluster-Interrupt-Steuerung B24A-B24n durchzusetzen. Somit kann die Interrupt-Steuerung B20 in dieser Ausführungsform konfiguriert sein, um seriell zu versuchen, die Interrupt-Steuerung an die Vielzahl von Cluster-Interrupt-Steuerungen B24A-B24n während einer Iteration über die Vielzahl von Cluster-Interrupt-Steuerungen B24A-B24n zu liefern. Wenn die ausgewählte Cluster-Interrupt-Steuerung B24A-B24n die Nack-Antwort (Entscheidungsblock B58, „Ja“-Zweig) bereitstellt und keine weiteren auszuwählenden Cluster-Interrupt-Steuerungen B24A-B24n vorhanden sind (z. B. alle Cluster-Interrupt-Steuerungen B24A-B24n ausgewählt wurden), kann die Cluster-Interrupt-Steuerung B20 so konfiguriert sein, um in den nächsten Zustand in der Zustandsmaschine überzugehen (z. B. in den harten Zustand B44, wenn die aktuelle Iteration die weiche Iteration ist, oder in den erzwungenen Zustand B46, wenn die aktuelle Iteration die harte Iteration ist)(Block B64). Wenn eine Antwort noch nicht für die Interrupt-Anforderung empfangen wurde (Entscheidungsblöcke B54 und B58, „Nein“-Zweige), kann die Interrupt-Steuerung B20 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 B20 konfiguriert sein, um sich in den erzwungenen Zustand B46 zu bewegen. Alternativ kann der Zeitgeber-Ablauf nur im Warteableitzustand B48 in Betracht gezogen werden.
  • 19 ist ein Flussdiagramm, das die Funktionsweise einer Ausführungsform einer Cluster-Interrupt-Steuerung B24A-B24n basierend auf einer Interrupt-Anforderung von der Interrupt-Steuerung B20 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 B24A-B24n 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 B24A-B24n kann konfiguriert sein, um den in 19 veranschaulichten Vorgang zu implementieren.
  • Wenn die Interrupt-Anforderung eine harte oder erzwungene Anforderung ist (Entscheidungsblock B70, „Ja“-Zweig), kann die Cluster-Interrupt-Steuerung B24AB24n konfiguriert sein, um alle heruntergefahrenen (z. B. schlafenden) Prozessoren B30 hochzufahren (Block B72). Wenn die Interrupt-Anforderung eine erzwungene Interrupt-Anforderung ist (Entscheidungsblock B74, „Ja“-Zweig), kann die Cluster-Interrupt-Steuerung B24A-B24n konfiguriert sein, um alle Prozessoren B30 parallel zu unterbrechen (Block B76). Ack/Nack wird im erzwungenen Fall möglicherweise nicht angewendet, sodass die Cluster-Interrupt-Steuerung B24A-B24n die Durchsetzung der Interrupt-Anforderungen fortsetzen kann, bis mindestens ein Prozessor den Interrupt annimmt. Alternativ kann die Cluster-Interrupt-Steuerung B24A-B24n 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 B20 übertragen.
  • Wenn die Interrupt-Anforderung eine harte Anforderung ist (Entscheidungsblock B74, „Nein“-Zweig) oder eine weiche Anforderung (Entscheidungsblock B70, „Nein“-Zweig) ist, kann die Cluster-Interrupt-Steuerung konfiguriert sein, um einen eingeschalteten Prozessor B30 auszuwählen (Block B78). Jeder Auswahlmechanismus kann, ähnlich den vorstehend erwähnten Mechanismen, zum Auswählen von Cluster-Interrupt-Steuerungen B24A-B24n durch die Interrupt-Steuerung B20 (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 B24AB24n kann konfiguriert sein, um die Interrupt-Anforderung an den ausgewählten Prozessor B30 durchzusetzen, welcher die Anforderung an den Prozessor 30 (Block B80) überträgt. Wenn der ausgewählte Prozessor B30 die Ack-Antwort (Entscheidungsblock B82, „Ja“-Zweig) bereitstellt, kann die Cluster-Interrupt-Steuerung B24A-B24n konfiguriert sein, um die Ack-Antwort an die Interrupt-Steuerung B20 bereitzustellen (Block B84) und den Versuch zu beenden, den Interrupt innerhalb des Prozessor-Clusters zu liefern. Wenn der ausgewählte Prozessor B30 die Nack-Antwort (Entscheidungsblock B86, „Ja“-Zweig) bereitstellt und mindestens ein eingeschaltet Prozessor B30 vorhanden ist, der noch nicht ausgewählt wurde (Entscheidungsblock B88, „Ja“-Zweig), kann die Cluster-Interrupt-Steuerung B24A-B24n 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 B30 (Block B80) durchzusetzen. Somit kann die Cluster-Interrupt-Steuerung B24A-B24n seriell versuchen, den Interrupt an die Prozessoren B30 in dem Prozessor-Cluster zu liefern. Wenn es keine auszuwählenden eingeschalteten Prozessoren mehr gibt (Entscheidungsblock B88, „Nein“-Zweig), kann die Cluster-Interrupt-Steuerung B24A-B24n konfiguriert sein, um die Nack-Antwort an die Interrupt-Steuerung B20 bereitzustellen (Block B92). Wenn der ausgewählte Prozessor B30 noch keine Antwort bereitgestellt hat (Entscheidungsblöcke B82 und B86, „Nein“-Zweige), kann die Cluster-Interrupt-Steuerung B24A-B24n konfiguriert sein, um auf die Antwort zu warten.
  • In einer Ausführungsform kann in einer harten Iteration, wenn ein Prozessor B30 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 B30, der von einem ausgeschalteten Zustand eingeschaltet wurden, sobald wie nach der Initialisierung des Prozessors praktisch möglich, zu demaskieren. Die Cluster-Interrupt-Steuerung B24A-B24n 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.
  • 20 ist ein ausführlicheres Blockdiagramm einer Ausführungsform eines Prozessors B30. In der veranschaulichten Ausführungsform schließt der Prozessor B30 eine Abruf- und Decodiereinheit B100 (einschließlich eines Anweisungszwischenspeichers oder ICache, B102), eine Map-Dispatch-Rename-Einheit (MDR-Einheit) B106 (einschließlich einer Prozessor-Interrupt-Acknowledgement-Steuerschaltung (Int Ack-Steuerschaltung) B126 und eines Umordnungspuffers B108), eine oder mehrere Reservierungsstationen B110, eine oder mehrere Ausführungseinheiten B112, eine Registerdatei B114, einen Datencache (DCache) B104, eine Lade-/Speichereinheit (LSU) B118, eine Reservierungsstation (RS) für die Lade-/Speichereinheit B116 und eine Kernschnittstelleneinheit (CIF) B122, ein. Die Abruf- und Decodiereinheit B100 ist mit der MDR-Einheit B106 gekoppelt, die mit den Reservierungsstationen B110, der Reservierungsstation B116 und der LSU B118 gekoppelt ist. Die Reservierungsstationen B110 sind mit den Ausführungseinheiten B28 gekoppelt. Die Registerdatei B114 ist mit den Ausführungseinheiten B112 und der LSU B118 gekoppelt. Die LSU B118 ist außerdem mit dem DCache B104 gekoppelt, der mit der CIF B122 und der Registerdatei B114 gekoppelt ist. Die LSU B118 schließt eine Speicherwarteschlange B120 (STQ B120) und eine Lastwarteschlange (LDQ B124) ein. Die CIF B122 ist mit der Prozessor-Int-Ack-Steuerschaltung B126 gekoppelt, um eine Interrupt-Anforderung (Int Req) zu übermitteln, die an den Prozessor B30 durchgesetzt wurde, und um eine Ack-/Nack-Antwort von der Prozessor-Int-Ack-Steuerschaltung B126 an den Interrupt-Anforderer zu übermitteln (z. B. eine Cluster-Interrupt-Steuerung B24A-B24n).
  • Die Prozessor-Int-Ack-Steuerschaltung B126 kann konfiguriert sein, um zu bestimmen, ob der Prozessor B30 eine Interrupt-Anforderung annehmen kann, die an den Prozessor B30 übertragen wurde, und kann basierend auf der Bestimmung eine Ack- und Nack-Angabe an die CIF B122 bereitstellen. Wenn der Prozessor B30 die Ack-Antwort bereitstellt, ist der Prozessor B30 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 B126 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 B108 die Anweisungsvorgänge zu einem unterbrechbaren Punkt zurückziehen wird und die LSU B118 die Lade-/Speichervorgänge an dem unterbrechbaren Punkt innerhalb des spezifizierten Zeitraums abschließen wird. Wenn festgestellt wird, dass mindestens einer von dem Umordnungspuffer B108 und der LSU B118 den unterbrechbaren Punkt innerhalb der angegebenen Zeitspanne nicht erreichen (oder möglicherweise nicht erreichen), kann die Prozessor-Int-Ack-Steuerschaltung B126 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 B126 konfiguriert sein, um den Inhalt des Umordnungspuffers B108 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 B126 in der Lage sein kann zu bestimmen, dass die Nack-Antwort basierend auf dem Zustand innerhalb der MDR-Einheit B106 erzeugt wird. Zum Beispiel schließt der Umordnungspuffer B108 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 B126 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 B30 Interrupts annimmt. Die Nack-Antwort kann erzeugt werden, wenn die Prozessor-Int-Ack-Steuerschaltung B126 erkennt, dass Interrupts in dem Prozessor maskiert sind (was in einer Ausführungsform in der MDR-Einheit B106 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 B126 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 B126 keine Nack-Antwort erkennt, die auf der Untersuchung des Reorder-Puffers B108 und des Prozessorzustands in der MDR-Einheit B106 basiert, kann die Prozessor-Int Ack-Steuerschaltung B126 mit der LSU B118 verbunden werden, um zu bestimmen, ob es Last-/Speichervorgänge mit langer Latenz gibt (z. B. an die CIF B122 oder außerhalb des Prozessors B30), 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 B118 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 B106 verwendeten Schwellenwert, unterscheiden kann oder gleich sein kann), kann dann die Prozessor-Int-Ack-Steuerschaltung B126 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 B118 einen Zeiger auf den Umordnungspuffer B108 bereitstellen, der einen ältesten Lade-/Speicher-Vorgang identifiziert, welchen die LSU B118 verpflichtet ist abzuschließen (z. B. von der LDQ B124 oder der STQ B120 gestartet wurde, oder anderweitig nicht spekulativ in der LSU B118 ist). Der Zeiger kann als „wahrer Lade-/Speicher- (LS-) nicht spekulativer (NS) Zeiger“ bezeichnet werden. Der MDR B106/Umordnungspuffer B108 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 B126 bestimmen, dass die Nack-Antwort erzeugt werden soll. Andernfalls kann die Ack-Antwort erzeugt werden.
  • Die Abruf- und Decodiereinheit B100 kann konfiguriert sein, um Anweisungen zur Ausführung durch den Prozessor B30 abzurufen und die Anweisungen zur Ausführung in Vorgängen zu decodieren. Insbesondere kann die Abruf- und Decodiereinheit B100 konfiguriert sein, um Anweisungen zwischenzuspeichern, die zuvor aus dem Speicher (durch die CIF B122) in den ICache B102 abgerufen wurden, und kann konfiguriert sein, um einen spekulativen Pfad von Anweisungen für den Prozessor B30 abzurufen. Die Abruf- und Decodiereinheit B100 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 B30 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 B106 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 B110 und B116 senden. Die Operationen können von den Architekturregistern, die in den entsprechenden Anweisungen verwendet werden, auf physische Register in der Registerdatei B114 abgebildet werden. Das heißt, die Registerdatei B114 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 B30 implementiert wird. Die MDR-Einheit B106 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 B106 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 B108 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 B108 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 B28 und der LSU B118 eine dezentrale Ablaufplanung verwendet, z. B. in den Reservierungsstationen B116 und B110. Andere Ausführungsformen können eine zentrale Ablaufplanung implementieren, falls gewünscht.
  • Die LSU B118 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 dem DCache B104, 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/FehlerBestimmung 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 B116 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 B116 empfangen werden, was in den Daten angezeigt werden kann, die von der Reservierungsstation B116 von der MDR-Einheit B106 für den entsprechenden Vorgang empfangen werden. Andere Operanden können über eine Ausführung von Operationen durch andere Ausführungseinheiten B440 oder sogar über eine Ausführung früherer Lade-Ops verfügbar werden. Die Operanden können von der Reservierungsstation B116 gesammelt werden oder können aus einer Registerdatei B114 beim Ausgeben aus der Reservierungsstation B116 gelesen werden, wie in 20 gezeigt.
  • In einer Ausführungsform kann die Reservierungsstation B116 konfiguriert sein, um Lade-/Speichervorgänge außerhalb der Reihenfolge auszugeben (von ihrer ursprünglichen Reihenfolge in der Codefolge, die durch den Prozessor B30 ausgeführt wird, als „Programmreihenfolge“ bezeichnet), wenn die Operanden verfügbar werden. Um sicherzustellen, dass Platz in der LDQ B124 oder der STQ B120 für ältere Vorgänge vorhanden ist, die durch jüngere Vorgänge in der Reservierungsstation B116 umgangen werden, kann die MDR-Einheit B106 eine Schaltlogik einschließen, die LDQ B124 oder STQ B120 Einträge zu Vorgängen vorbelegt, die an die Lade-/Speichereinheit B118 übertragen werden. Wenn kein verfügbarer LDQ-Eintrag für einen Ladevorgang vorhanden ist, der in der MDR-Einheit B106 verarbeitet wird, kann die MDR-Einheit B106 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 B106, 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 B116 Vorgänge in der Programmreihenfolge ausgeben und die LRQ B46-/STQ B120-Zuweisung kann beim Ausgeben von der Reservierungsstation B116 auftreten.
  • Die LDQ B124 kann Ladevorgänge von der anfänglichen Ausführung bis zum Zurückziehen durch die LSU B118 verfolgen. Die LDQ B124 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 B124 eine Umleitung für den entsprechenden Ladevorgang signalisieren. Eine Umleitung kann bewirken, dass der Prozessor B30 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 B100 wieder abgerufen und erneut verarbeitet werden, um wieder ausgeführt zu werden.
  • Wenn eine Lade-/Speicheradressenoperation von der Reservierungsstation B116 ausgegeben wird, kann die LSU B118 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 B118 kann konfiguriert sein, um einen Zugang zum DCache B104 zu erzeugen. Für Ladevorgänge, die in dem DCache B104 auftreffen, können Daten spekulativ von dem DCache B104 an den Zieloperanden des Ladevorgangs weitergeleitet werden (z. B. ein Register in der Registerdatei B114), es sei denn, die Adresse trifft auf eine vorhergehende Operation in dem STQ B120 (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 B28 befinden. Die Ausführungseinheiten B28 können in solchen Fällen die weitergeleiteten Daten anstelle der Datenausgabe aus der Registerdatei B114 umgehen. Wenn die Speicherdaten zur Weiterleitung auf einem STQ-Treffer verfügbar sind, können die von dem STQ B120 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 B104 kann in der STQ B120 oder LDQ B124 zur späteren Verarbeitung protokolliert werden.
  • Die LSU B118 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 B116 kann eine beliebige Anzahl von Ladevorgängen an die Anzahl von Lade-Pipelines im gleichen Taktzyklus ausgeben. Die LSU B118 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 B116 kann Speicheradressenoperationen und Speicherdatenoperationen ausgeben unabhängig und parallel zu den Speicher-Pipelines. Die Speicher-Pipelines können mit der STQ B120 gekoppelt sein, die so konfiguriert sein kann, dass sie Speichervorgänge hält, die ausgeführt, aber nicht verpflichtend wurden.
  • Die CIF B122 kann für die Kommunikation mit dem Rest eines Systems verantwortlich sein, einschließlich des Prozessors B30, im Namen des Prozessors B30. Zum Beispiel kann die CIF B122 konfiguriert sein, um Daten für DCache-Fehler B104 und ICache-Fehler B102 anzufordern. Wenn die Daten zurückgegeben werden, kann die CIF B122 die Cachefüllung an den entsprechenden Cache signalisieren. Für das Füllen des DCaches kann die CIF B122 auch die LSU B118 informieren. Die LDQ B124 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 B104 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 B104 als ein Cache-Treffer wiedergegeben werden. Die CIF B122 kann auch modifizierte Cache-Zeilen zurückschreiben, die durch den DCache B104 freigegeben wurden, Daten für nicht cachebare Speicher zusammenfügen usw.
  • Die Ausführungseinheiten B112 können in verschiedenen Ausführungsformen beliebige Arten von Ausführungseinheiten einschließen. Zum Beispiel können die Ausführungseinheiten B112 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 B112 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 B28, welche die Operation ausführt, variieren.
  • Es sei angemerkt, dass in verschiedenen Ausführungsformen eine beliebige Anzahl und Art der Ausführungseinheiten B112 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 B102 und der DCache B104 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 B104/ICache B102 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.
  • 21 ist ein Blockdiagramm einer Ausführungsform eines Umordnungspuffers B108. 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 21 sind mehrere Zeiger veranschaulicht. Der Zurückziehzeiger B130 kann auf die älteste nicht zurückgezogene Operation im Prozessor B30 zeigen. Das heißt, Operationen vor der Operation an dem Zurückziehzeiger B130 wurden aus dem Umordnungspuffer B108 zurückgezogen, der architektonische Zustand des Prozessors B30 wurde aktualisiert, um die Ausführung der zurückgezogenen Operationen widerzuspiegeln, usw. Der Auflösungszeiger B132 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 B130 und dem Auflösungszeiger B132 können in dem Umordnungspuffer B108 verpflichtende Vorgänge sein. Das heißt, die Ausführung der Anweisungen, welche die Operationen erzeugt haben, wird auf den Auflösungszeiger B132 (in Abwesenheit externer Interrupts) abgeschlossen. Der jüngste Zeiger B134 kann auf die letzte abgerufene und versandte Operation von der MDR-Einheit B106 zeigen. Die Operationen zwischen dem Auflösungszeiger B132 und dem jüngsten Zeiger B134 sind spekulativ und können aufgrund von Ausnahmen, Zweig-Fehlprognosen usw. geräumt werden.
  • Der wahre LS-NS-Zeiger B136 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 B106 kann versuchen, den Auflösungszeiger B132 zurück zu dem wahren LS-NS-Zeiger B136 zu bewegen. Es können verpflichtende Operationen in dem Umordnungspuffer B108 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 B126 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 B30 „rückgängig“ gemacht zu werden, und das Vorhandensein solcher Operationen zwischen dem Auflösungszeiger und dem wahren LS-NS-Zeiger B136 kann die Prozessor-Int-Ack-Steuerung B126 veranlassen, die Nack-Antwort zu erzeugen. Wenn der Umordnungspuffer B108 beim Bewegen des Auflösungszeigers zurück zu dem wahren LS-NS-Zeiger B136 erfolgreich ist, kann die Prozessor-Int-Ack-Steuerschaltung B126 konfiguriert sein, um die Ack-Antwort zu erzeugen.
  • 22 ist ein Flussdiagramm, das die Funktionsweise einer Ausführungsform der Prozessor-Int-Ack-Steuerschaltung B126 basierend auf dem Empfang einer Interrupt-Anforderung durch den Prozessor B30 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 B126 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 B126 kann dafür konfiguriert sein, die in 22 veranschaulichte Operation zu implementieren.
  • Die Prozessor-Int-Ack-Steuerschaltung B126 kann konfiguriert sein, um zu bestimmen, ob überhaupt Nack-Bedingungen vorhanden sind, die in der MDR-Einheit B106 erfasst wurden (Entscheidungsblock B140). 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 B106 erfasst werden. Wenn dies so ist (Entscheidungsblock B140, „Ja“-Zweig), kann die Prozessor-Int-Ack-Steuerschaltung B126 konfiguriert sein, um die Nack-Antwort zu erzeugen (Block B142). Wenn nicht (Entscheidungsblock B140, „Nein“-Zweig), kann die Prozessor-Int-Ack-Steuerschaltung B126 mit der LSU kommunizieren, um Nack-Bedingungen und/oder den wahren LS-NS-Zeiger anzufordern (Block B144). Wenn die LSU B118 eine Nack-Bedingung erkennt (Entscheidungsblock B146, „Ja“-Zweig), kann die Prozessor-Int-Ack-Steuerschaltung B126 konfiguriert sein, um die Nack-Antwort zu erzeugen (Block B142). Wenn die LSU B118 keine Nack-Bedingung erkennt (Entscheidungsblock B146, „Nein“-Zweig), kann die Prozessor-Int-Ack-Steuerschaltung B126 konfiguriert sein, um den wahren LS-NS-Zeiger von der LSU B118 (Block B148) zu empfangen, und kann versuchen, den Auflösungszeiger in dem Umordnungspuffer B108 zurück zu dem wahren LS-NS-Zeiger zu bewegen (Block B150). 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 B152, „Nein“-Zweig), kann die Prozessor-Int-Ack-Steuerschaltung B126 konfiguriert sein, um die Nack-Antwort zu erzeugen (Block B142). Andernfalls (Entscheidungsblock B152, „Ja“-Zweig) kann die Prozessor-Int-Ack-Steuerschaltung B126 konfiguriert sein, um die Ack-Antwort zu erzeugen (Block B154). Die Prozessor-Int-Ack-Steuerschaltung B126 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 B156). Die Prozessor-Int-Ack-Steuerschaltung B126 kann dann konfiguriert sein, um den Interrupt anzunehmen (Block B158). Das heißt, der Prozessor B30 kann beginnen, den Interrupt-Code abzurufen (z. B. von einer vorbestimmten Adresse, die den Interrupts gemäß der Anweisungssatzarchitektur zugeordnet ist, die durch den Prozessor B30 implementiert wird).
  • In einer anderen Ausführungsform kann das SOC B10 eines der SOCs in einem System sein. Insbesondere können in einer Ausführungsform mehrere Instanzen des SOC B10 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.
  • 23 ist ein Blockdiagram, das eine Ausführungsform eines Systems veranschaulicht, welches die mehreren Instanzen des SOC B10 einschließt. Zum Beispiel können das SOC B10A, das SOC B10B usw. bis zum SOC B10q in einem System miteinander gekoppelt sein. Jedes SOC B10A-B10q schließt eine Instanz der Interrupt-Steuerung B20 (z. B. Interrupt-Steuerung B20A, Interrupt-Steuerung B20B und Interrupt-Steuerung B20q in 23) ein. Eine Interrupt-Steuerung, in diesem Beispiel Interrupt-Steuerung B20A, kann als primäre Interrupt-Steuerung für das System dienen. Andere Interrupt-Steuerungen B20B bis B20q können als sekundäre Interrupt-Steuerungen dienen.
  • Die Schnittstelle zwischen der primären Interrupt-Steuerung B20A und der sekundären Steuerung B20B ist in 23 detaillierter gezeigt, und die Schnittstelle zwischen der primären Interrupt-Steuerung B20A und anderen sekundären Interrupts-Steuerungen, wie der Interrupt-Steuerung B20q, kann ähnlich sein. In der Ausführungsform von 23 ist die sekundäre Steuerung B20B konfiguriert, um Interrupt-Informationen bereitzustellen, die Interrupts identifizieren, die von Interrupt-Quellen auf dem SOC B10B (oder externen Vorrichtungen, die mit dem SOC B10B gekoppelt sind, in 23 nicht gezeigt) als Ints B160 ausgegeben werden. Die primäre Interrupt-Steuerung B20A ist konfiguriert, um harte, weiche und erzwungene Iterationen an die sekundäre Interrupt-Steuerung B20B (Referenznummer B162) zu signalisieren und ist konfiguriert, um Ack-/Nack-Antworten von der Interrupt-Steuerung B20B (Referenznummer B164) zu empfangen. Die Schnittstelle kann auf beliebige Weise implementiert sein. Zum Beispiel können dedizierte Drähte zwischen dem SOC B10A und dem SOC B10B gekoppelt sein, um Referenznummern B160, B162 und/oder B164 zu implementieren. In einer anderen Ausführungsform können Nachrichten zwischen der primären Interrupt-Steuerung B20A und den sekundären Interrupt-Steuerungen B20B-B20q über eine allgemeine Schnittstelle zwischen den SOCs B10A-B10q ausgetauscht werden, die auch für andere Kommunikationen verwendet wird. In einer Ausführungsform können programmierte Eingabe-/Ausgabeschreibvorgänge (PlO-Schreibvorgänge) mit den Interrupt-Daten, harten /weichen /erzwungenen Anforderungen, bzw. Ack-/Nack-Antworten als Daten verwendet werden.
  • Die primäre Interrupt-Steuerung B20A kann konfiguriert sein, um die Interrupts aus verschiedenen Interrupt-Quellen zu sammeln, die auf dem SOC B10A, einem der anderen SOCs B10B-B10q, welche off-Chip-Vorrichtungen sein können, oder einer beliebigen Kombination davon, sein können. Die sekundären Interrupt-Steuerungen B20B-B20q können konfiguriert sein, um Interrupts an die primäre Interrupts-Steuerung B20A (Ints in 23) zu übertragen, wodurch die Interrupt-Quelle zu der primären Interrupt-Steuerung B20A identifiziert wird. Die primäre Interrupt-Steuerung B20A kann auch für die Gewährleistung der Lieferung von Interrupts verantwortlich sein. Die sekundären Interrupt-Steuerungen B20B-B20q können konfiguriert sein, dass sie die Richtung von der primären Interrupt-Steuerung B20A übernehmen, wodurch die weichen, harten und erzwungenen Iterationsanforderungen von der primären Interrupt-Steuerung B20A empfangen werden und die Iterationen über die Cluster-Interrupt-Steuerungen B24AB24n durchgeführt werden, die auf dem entsprechenden SOC B10B-B10q verkörpert sind. Basierend auf den Ack-/Nack-Antworten aus den Cluster-Interrupt-Steuerungen B24A-B24n können die sekundären Interrupt-Steuerungen B20B-B20q Ack-/Nack-Antworten bereitstellen. In einer Ausführungsform kann die primäre Interrupt-Steuerung B20A seriell versuchen, Interrupts über die sekundären Interrupt-Steuerungen B20B-B20q in den weichen und harten Iterationen zu liefern und kann parallel zu den sekundären Interrupt-Steuerungen B20B-B20q in die erzwungene Iteration liefern.
  • In einer Ausführungsform kann die primäre Interrupt-Steuerung B20A konfiguriert sein, um eine gegebene Iteration an einer Teilmenge der Cluster-Interrupt-Steuerungen durchzuführen, die in demselben SOC B10A wie die primäre Interrupts-Steuerung B20A integriert ist, bevor die gegebene Iteration an Teilmengen der Cluster-Interrupt-Steuerungen auf anderen SOCs B10B-B10q (mit Hilfe der sekundären Interrupt-Steuerungen B20B-B20q) auf anderen SOCs B10B-B10q durchgeführt wird. Das heißt, die primäre Interrupt-Steuerung B20A kann seriell versuchen, den Interrupt durch die Cluster-Interrupt-Steuerungen auf dem SOC B10A zu liefern, und kann dann mit den sekundären Interrupt-Steuerungen B20B-B20q kommunizieren. Die Versuche, durch die sekundären Interrupt-Steuerungen B20B-B20q zu liefern, können auch seriell durchgeführt werden. Die Reihenfolge der Versuche durch die sekundären Interrupts-Steuerungen B20B-B20q 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 B20A und die sekundären Interrupt-Steuerungen B20B-B20q die Software von der Existenz der mehreren SOCs B10A-B10q weitgehend isolieren. Das heißt, die SOCs B10A-B10q 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 B20A-B20q, wie vorstehend erörtert, zu konfigurieren, aber ansonsten können die Interrupt-Steuerungen B20A-B20q die Lieferung von Interrupts über mehrere mögliche SOCs B10A-B10q 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 B20A und die sekundären Interrupt-Steuerungen B20B-B20q 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 B10A-B10q sowohl die primäre Interrupt-Steuerschaltung als auch die sekundäre Interrupt-Steuerschaltung aufweisen, die in ihrer Interrupt-Steuerung B20A-B20q implementiert sind. Eine Interrupt-Steuerung (z. B. Interrupt-Steuerung B20A) kann als primär während der Herstellung des Systems (z. B. über Sicherungen auf den SOCs B10A-B10q oder Pin-Laschen auf einem oder mehreren Pins der SOCs B10A-B10q) bezeichnet werden. Alternativ können die primären und sekundären Bezeichnungen während der Initialisierung (oder Boot) des Systems vorgenommen werden.
  • 24 ist ein Flussdiagramm, das die Funktionsweise einer Ausführungsform der primären Interrupt-Steuerung B20A 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 B20A 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 B20A kann dafür konfiguriert sein, die in 24 veranschaulichte Operation zu implementieren.
  • Die primäre Interrupt-Steuerung B20A kann konfiguriert sein, um eine weiche Iteration über die Cluster-Interrupt-Steuerungen durchzuführen, die auf dem lokalen SOC B10A integriert sind (Block B170). Zum Beispiel kann die weiche Iteration dem Flussdiagramm von 18 ähnlich sein. Wenn die lokale weiche Iteration zu einer Ack-Antwort führt (Entscheidungsblock B172, „Ja“-Zweig), kann der Interrupt erfolgreich geliefert werden und die primäre Interrupt-Steuerung B20A kann konfiguriert sein, um in den Ruhezustand B40 zurückzukehren (unter der Annahme, dass keine anstehenden Interrupts mehr vorhanden sind). Wenn die lokale weiche Iteration zu einer Nack-Antwort führt (Entscheidungsblock B172, „Nein“-Zweig), kann die primäre Interrupt-Steuerung B20A konfiguriert sein, um einen der anderen SOCs B10B-B10q unter Verwendung einer beliebigen gewünschten Reihenfolge auszuwählen wie vorstehend erwähnt (Block B174). Die primäre Interrupt-Steuerung B20A kann konfiguriert sein, um eine weiche Iterationsanforderung an die sekundäre Interrupt-Steuerung B20B-B20q auf dem ausgewählten SOC B10B-B10q durchzusetzen (Block B176). Wenn die sekundäre Interrupt-Steuerung B20B-B20q eine Ack-Antwort bereitstellt (Entscheidungsblock B192, „Ja“-Zweig), kann der Interrupt erfolgreich geliefert werden und die primäre Interrupt-Steuerung B20A kann konfiguriert sein, um in den Ruhezustand B40 zurückzukehren (unter der Annahme, dass keine anstehenden Interrupts mehr vorhanden sind). Wenn die sekundäre Interrupt-Steuerung B20B-B20q eine Nack-Antwort bereitstellt (Entscheidungsblock B178, „Nein“-Zweig) und mehr SOCs B10B-B10q vorhanden sind, die noch nicht in der weichen Iteration ausgewählt wurden (Entscheidungsblock B180, „Ja“-Zweig), kann die primäre Interrupt-Steuerung B20A konfiguriert sein, um das nächste SOC B10B-B10q gemäß dem implementierten Reihenfolgemechanismus auszuwählen (Block B182) und kann konfiguriert sein, um die weiche Iterationsanforderung an die sekundäre Interrupt-Steuerung B20B-B20q auf dem ausgewählten SOC zu übertragen (Block B176) und die Verarbeitung fortzusetzen. Andererseits kann, wenn jedes SOC B10B-B10q ausgewählt wurde, die weiche Iteration abgeschlossen sein, da der serielle Versuch, den Interrupt über die sekundären Interrupt-Steuerungen B20B-B20q zu liefern, abgeschlossen ist.
  • Basierend auf dem Abschluss der weichen Iteration über die sekundären Interrupt-Steuerungen B20B-B20q, ohne den Interrupt erfolgreich zu liefern (Entscheidungsblock B180, „Nein“-Zweig), kann die primäre Interrupt-Steuerung B20A konfiguriert sein, um eine harte Iteration über die lokalen Cluster-Interrupt-Steuerungen durchzuführen, die auf dem lokalen SOC B10A integriert sind (Block B184). Zum Beispiel kann die weiche Iteration dem Flussdiagramm von 18 ähnlich sein. Wenn die lokale harte Iteration zu einer Ack-Antwort führt (Entscheidungsblock B186, „Ja“-Zweig), kann der Interrupt erfolgreich geliefert werden und die primäre Interrupt-Steuerung B20A kann konfiguriert sein, um in den Ruhezustand B40 zurückzukehren (unter der Annahme, dass keine anstehenden Interrupts mehr vorhanden sind). Wenn die lokale harte Iteration zu einer Nack-Antwort führt (Entscheidungsblock B186, „Nein“-Zweig), kann die primäre Interrupt-Steuerung B20A konfiguriert sein, um eines der anderen SOCs B10B-B10q unter Verwendung einer beliebigen gewünschten Reihenfolge auszuwählen, wie vorstehend erwähnt (Block B188). Die primäre Interrupt-Steuerung B20A kann konfiguriert sein, um eine harte Iterationsanforderung an die sekundäre Interrupt-Steuerung B20B-B20q auf dem ausgewählten SOC B10B-B10q durchzusetzen (Block B190). Wenn die sekundäre Interrupt-Steuerung B20B-B20q eine Ack-Antwort bereitstellt (Entscheidungsblock B192, „Ja“-Zweig), kann der Interrupt erfolgreich geliefert werden und die primäre Interrupt-Steuerung B20A kann konfiguriert sein, um in den Ruhezustand B40 zurückzukehren (unter der Annahme, dass keine anstehenden Interrupts mehr vorhanden sind). Wenn die sekundäre Interrupt-Steuerung B20B-B20q eine Nack-Antwort bereitstellt (Entscheidungsblock B192, „Nein“-Zweig) und mehr SOCs B10B-B10q vorhanden sind, die noch nicht in der harten Iteration ausgewählt wurden (Entscheidungsblock B194, „Ja“-Zweig), kann die primäre Interrupt-Steuerung B20A konfiguriert sein, um das nächste SOC B10B-B10q gemäß dem implementierten Reihenfolgemechanismus auszuwählen (Block B196) und kann konfiguriert sein, um die harte Iterationsanforderung an die sekundäre Interrupt-Steuerung B20B-B20q auf dem ausgewählten SOC zu übertragen (Block B190) und die Verarbeitung fortzusetzen. Andererseits kann, wenn jedes SOC B10B-B10q ausgewählt wurde, die harte Iteration abgeschlossen sein, da der serielle Versuch, den Interrupt über die sekundären Interrupt-Steuerungen B20B-B20q zu liefern, abgeschlossen ist (Entscheidungsblock B194, „Nein“-Zweig). Die primäre Interrupt-Steuerung B20A kann mit einer erzwungenen Iteration fortfahrend konfiguriert sein (Block B198). Die erzwungene Iteration kann lokal durchgeführt werden oder kann parallel oder seriell über das lokale SOC B10A und die anderen SOCs B10B-B10q 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 B20 konfiguriert sein, um sich zur erzwungenen Iteration zu bewegen. Alternativ kann der Zeitgeber-Ablauf nur im Warteableitzustand B48 in Betracht gezogen werden, wie bereits vorstehend erörtert.
  • 25 ist ein Flussdiagramm, das die Funktionsweise einer Ausführungsform einer sekundären Interrupt-Steuerung B20B-B20q 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 B20B-B20q 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 B20B-B20q kann dafür konfiguriert sein, die in 25 veranschaulichte Operation zu implementieren.
  • Wenn eine Interrupt-Quelle in dem entsprechenden SOC B10B-B10q (oder mit dem SOC B10B-B10q gekoppelt) einen Interrupt an die sekundäre Interrupt-Steuerung B20B-B20q bereitstellt (Entscheidungsblock 200, „Ja“-Zweig), kann die sekundäre Interrupt-Steuerung B20B-B20q konfiguriert sein, um den Interrupt an die primäre Interrupt-Steuerung B20A zur Handhabung zusammen mit anderen Interrupts von anderen Interrupt-Quellen zu übertragen (Block B202).
  • Wenn die primäre Interrupt-Steuerung B20A eine Iterationsanforderung (Entscheidungsblock B204, „Ja“-Zweig) übertragen hat, kann die sekundäre Interrupt-Steuerung B20B-B20q konfiguriert sein, um die angeforderte Iteration (hart, weich oder erzwungen) über die Cluster-Interrupt-Steuerungen in dem lokalen SOC B10B-B10q durchzuführen (Block B206). Zum Beispiel können die harten und weichen Iterationen der 18 ähnlich sein, und die erzwungene kann parallel zu den Cluster-Interrupt-Steuerungen im lokalen SOC B10B-B10q durchgeführt werden. Wenn die Iteration zu einer Ack-Antwort führt (Entscheidungsblock B208, „Ja“-Zweig), kann die sekundäre Interrupt-Steuerung B20B-B20q konfiguriert sein, um eine Ack-Antwort an die primäre Interrupt-Steuerung B20A zu übertragen (Block B210). Wenn die Iteration zu einer Nack-Antwort führt (Entscheidungsblock B208, „Nein“-Zweig), kann die sekundäre Interrupt-Steuerung B20B-B20q konfiguriert sein, um eine Nack-Antwort an die primäre Interrupt-Steuerung B20A zu übertragen (Block B212).
  • 26 ist ein Flussdiagramm, das ein Beispiel 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 26 veranschaulichte Operation zu implementieren.
  • Eine Interrupt-Steuerung B20 kann einen Interrupt von einer Interrupt-Quelle empfangen (Block B220). In Ausführungsformen, die primäre und sekundäre Interrupt-Steuerungen B20A-B20q aufweisen, kann der Interrupt in jeder Interrupt-Steuerung B20A-B20q empfangen und der primären Interrupt-Steuerung B20A als Teil des Empfangens des Interrupts von der Interrupt-Quelle bereitgestellt werden. Die Interrupt-Steuerung B20 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 B222). 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 B20 beendet werden (Entscheidungsblock B224, „Ja“-Zweig und Block B226). Andererseits kann (Entscheidungsblock B224, „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 B228). 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 B20 beendet werden (Entscheidungsblock B230, „Ja“-Zweig und Block B232). Andererseits kann (Entscheidungsblock B230, „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 B234).
  • 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 eine Beispiel 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.
  • Kohärenz
  • Unter Bezugnahme auf 27 bis 43 sind verschiedene Ausführungsformen eines Cache-Kohärenzmechanismus, der in Ausführungsformen des SOC 10 implementiert werden kann, gezeigt. In einer Ausführungsform kann der Kohärenzmechanismus eine Vielzahl von Verzeichnissen einschließen, die konfiguriert sind, um einen Kohärenzzustand von Teilmengen des vereinheitlichten Speicheradressraums zu verfolgen. Die Vielzahl von Verzeichnissen ist im System verteilt. In der Ausführungsform wird die Vielzahl von Verzeichnissen auf die Speichersteuerungen verteilt. In einer Ausführungsform umfasst eine gegebene Speichersteuerung der einen oder mehreren Speichersteuerungsschaltungen ein Verzeichnis, das konfiguriert ist, um eine Vielzahl von Cache-Blöcken zu verfolgen, die Daten in einem Abschnitt des Systemspeichers entsprechen, zu dem die gegebene Speichersteuerung eine Schnittstelle hat, wobei das Verzeichnis konfiguriert ist, um zu verfolgen, welche einer Vielzahl von Caches in dem System einen gegebenen Cache-Block der Vielzahl von Cache-Blöcken zwischenspeichert, wobei das Verzeichnis in Bezug auf Speicheranforderungen, die in dem Verzeichnis bestellt und verarbeitet worden sind, präzise ist, selbst für den Fall, dass die Speicheranforderungen in dem System noch nicht abgeschlossen sind. In einer Ausführungsform ist die gegebene Speichersteuerung konfiguriert, um auf Grundlage einer Speicheranforderung für den gegebenen Cache-Block einen oder mehrere Kohärenzerhaltungsbefehle für den gegebenen Cache-Block auszugeben, wobei der eine oder die mehreren Kohärenzerhaltungsbefehle einen Cache-Zustand für den gegebenen Cache-Block in einem entsprechenden Cache der Vielzahl von Caches einschließen, wobei der entsprechende Cache konfiguriert ist, um die Verarbeitung eines gegebenen Kohärenzerhaltungsbefehls auf Grundlage des Cache-Zustands in dem entsprechenden Cache zu verzögern, der nicht mit dem Cache-Zustand in dem gegebenen Kohärenzerhaltungsbefehl übereinstimmt. In einer Ausführungsform ist ein erster Cache konfiguriert, um den gegebenen Cache-Block in einem gemeinsam genutzten Primärzustand zu speichern, und ein zweiter Cache ist konfiguriert, um den gegebenen Cache-Block in einem gemeinsam genutzten Sekundärzustand zu speichern, und wobei die gegebene Speichersteuerung konfiguriert ist, um den ersten Cache zu veranlassen, den gegebenen Cache-Block an einen Anforderer auf Grundlage der Speicheranforderung und des gemeinsam genutzten Primärzustands im ersten Cache zu übertragen. In einer Ausführungsform ist die gegebene Speichersteuerung konfiguriert, um einen von einem ersten Kohärenzerhaltungsbefehl und einem zweiten Kohärenzerhaltungsbefehl an einen ersten Cache der Vielzahl von Caches auf Grundlage einer Art einer ersten Speicheranforderung auszugeben, wobei der erste Cache konfiguriert ist, um einen ersten Cache-Block an einen Anforderer weiterzuleiten, der die erste Speicheranforderung auf Grundlage des ersten Kohärenzerhaltungsbefehls ausgegeben hat, und wobei der erste Cache konfiguriert ist, um den ersten Cache-Block auf Grundlage des zweiten Kohärenzerhaltungsbefehls an die gegebene Speichersteuerung zurückzugeben.
  • Es wird ein skalierbares Cache-Kohärenzprotokoll für ein System beschrieben, das eine Vielzahl von kohärenten Agenten einschließt, die mit einer oder mehreren Speichersteuerungen gekoppelt sind. Ein kohärenter Agent kann im Allgemeinen jede Schaltlogik einschließen, die einen Cache zum Zwischenspeichern von Speicherdaten einschließt oder die anderweitig einen oder mehrere Cache-Blöcke in Besitz nehmen kann und die Cache-Blöcke potenziell lokal modifizieren kann. Die kohärenten Agenten nehmen an dem Cache-Kohärenzprotokoll teil, um sicherzustellen, dass Modifikationen, die durch einen kohärenten Agenten vorgenommen werden, für andere Agenten sichtbar sind, die anschließend dieselben Daten lesen, und dass Modifikationen, die in einer bestimmten Reihenfolge durch zwei oder mehr kohärente Agenten vorgenommen werden (wie an einem Ordnungspunkt im System bestimmt, wie der Speichersteuerung für den Speicher, in dem der Cache-Block gespeichert ist), in dieser Reihenfolge in jedem der kohärenter Agenten beobachtet werden.
  • Das Cache-Kohärenzprotokoll kann einen Satz von Nachrichten oder Befehlen spezifizieren, die zwischen Agenten und Speichersteuerungen (oder Kohärenzsteuerungen innerhalb der Speichersteuerungen) übertragen werden können, um kohärente Transaktionen abzuschließen. Die Nachrichten können Anforderungen, Snoops, Snoop-Antworten und Abschlüsse einschließen. Eine „Anforderung“ ist eine Nachricht, die eine Transaktion initiiert, und spezifiziert den angeforderten Cache-Block (z. B. mit einer Adresse des Cache-Blocks) und den Zustand, in dem der Anforderer den Cache-Block empfangen soll (oder den minimalen Zustand, in einigen Fällen kann ein permissiverer Zustand bereitgestellt werden). Ein „Snoop“ oder eine „Snoop-Nachricht“, wie hierin verwendet, bezeichnet eine Nachricht, die an einen kohärenten Agenten übertragen wird, um eine Zustandsänderung in einem Cache-Block anzufordern, und wenn der kohärente Agent eine exklusive Kopie des Cache-Blocks aufweist oder anderweitig für den Cache-Block zuständig ist, kann auch anfordern, dass der Cache-Block durch den kohärenten Agenten bereitgestellt wird. Eine Snoop-Nachricht kann ein Beispiel für einen Kohärenzerhaltungsbefehl sein, bei dem es sich um einen beliebigen Befehl handeln kann, der an einen spezifischen kohärenten Agenten übermittelt wird, um einen Wechsel des kohärenten Zustands der Cache-Zeile im spezifischen Kohärenzagenten zu bewirken. Ein weiterer Begriff, der ein Beispiel für einen Kohärenzerhaltungsbefehl ist, ist eine Sonde. Der Kohärenzerhaltungsbefehl soll sich nicht auf einen Broadcast-Befehl beziehen, der an alle Kohärenzagenten gesendet wird, wie er z. B. manchmal in gemeinsam genutzten Bussystemen verwendet wird. Der Begriff „snoop“ wird im Folgenden als Beispiel verwendet, aber es versteht sich, dass er sich im Allgemeinen auf einen Kohärenzerhaltungsbefehl bezieht. Ein „Abschluss“ oder eine „Snoop-Antwort“ kann eine Nachricht von dem kohärenten Agenten sein, die angibt, dass die Zustandsänderung vorgenommen wurde und die Kopie des Cache-Blocks bereitstellt, soweit zutreffend. In einigen Fällen kann ein Abschluss auch von einer Quelle der Anforderung für bestimmte Anforderungen bereitgestellt werden.
  • Ein „Zustand“ oder „Cache-Zustand“ kann im Allgemeinen einen Wert bezeichnen, der angibt, ob eine Kopie eines Cache-Blocks in einem Cache gültig ist oder nicht, und kann auch andere Attribute des Cache-Blocks angeben. Zum Beispiel kann der Zustand angeben, ob der Cache-Block in Bezug auf die Kopie in Speicher modifiziert ist oder nicht. Der Zustand kann einen Grad des Besitzes des Cache-Blocks angeben (z. B., ob der Agent, der den Cache aufweist, den Cache-Block modifizieren darf, ob der Agent dafür zuständig ist oder nicht, den Cache-Block bereitzustellen oder den Cache-Block an die Speichersteuerung zurückzugeben, wenn er aus dem Cache freigegeben wird, usw.). Der Zustand kann auch das mögliche Vorhandensein des Cache-Blocks in anderen kohärenten Agenten angeben (z. B. kann der „gemeinsame“ Zustand angeben, dass eine Kopie des Cache-Blocks in einem oder mehreren anderen cachefähigen Agenten gespeichert werden kann).
  • Eine Vielfalt von Merkmalen kann in verschiedenen Ausführungsformen des Cache-Kohärenzprotokolls enthalten sein. Zum Beispiel kann/können die Speichersteuerung(en) jeweils eine Kohärenzsteuerung und ein Verzeichnis für Cache-Blöcke implementieren, die dem Speicher entsprechen, der durch diese Speichersteuerung gesteuert wird. Das Verzeichnis kann die Zustände der Cache-Blöcke in der Vielzahl von cachefähigen Agenten verfolgen, was es der Kohärenzsteuerung ermöglicht, zu bestimmen, welche cachefähigen Agenten zu „snoopen“ sind, um den Zustand des Cache-Blocks zu ändern und möglicherweise eine Kopie des Cache-Blocks bereitzustellen. Das heißt, Snoops müssen nicht basierend auf einer an der Cache-Steuerung empfangenen Anforderung an alle cachefähigen Agenten gesendet werden, sondern die Snoops können vielmehr an die Agenten übertragen werden, die eine Kopie des Cache-Blocks aufweisen, der von der Anforderung betroffen ist. Sobald die Snoops erzeugt wurden, kann das Verzeichnis aktualisiert werden, um den Zustand des Cache-Blocks in jedem kohärenten Agenten zu berücksichtigen, nachdem die Snoops verarbeitet wurden und die Daten der Quelle der Anforderung bereitgestellt wurden. Somit kann das Verzeichnis für die nächste Anforderung präzise sein, die für denselben Cache-Block verarbeitet wird. Snoops können minimiert werden, wodurch der Verkehr auf der Zwischenverbindung zwischen den kohärenten Agenten und der Speichersteuerung im Vergleich zu einer Broadcast-Lösung reduziert wird. In einer Ausführungsform kann ein „3-Sprung“-Protokoll unterstützt werden, bei dem einer der Cache-kohärenten Agenten eine Kopie des Cache-Blocks an die Quelle der Anforderung bereitstellt, oder wenn kein zwischenspeichernder Agent vorhanden ist, die Speichersteuerung die Kopie bereitstellt. Somit werden die Daten in drei „Sprüngen“ (oder Nachrichten, die über die Schnittstelle übertragen werden) bereitgestellt: die Anforderung von der Quelle an die Speichersteuerung, der Snoop an den kohärenten Agenten, der auf die Anforderung antworten wird, und der Abschluss mit dem Cache-Datenblock von dem kohärenten Agenten an die Quelle der Anforderung. In Fällen, in denen keine zwischengespeicherte Kopie vorhanden ist, kann es zwei Sprünge geben: die Anforderung von der Quelle an die Speichersteuerung und den Abschluss mit den Daten von der Speichersteuerung an die Quelle. Es kann zusätzliche Nachrichten geben (z. B. Abschlüsse von anderen Agenten, die angeben, dass eine angeforderte Zustandsänderung vorgenommen wurde, wenn mehrere Snoops für eine Anforderung vorhanden sind), aber die Daten selbst können in den drei Sprüngen bereitgestellt werden. Im Gegensatz dazu sind viele Cache-Kohärenzprotokolle Viersprung-Protokolle, bei denen der kohärente Agent auf einen Snoop antwortet, indem er den Cache-Block an die Speichersteuerung zurückgibt, und die Speichersteuerung den Cache-Block an die Quelle weiterleitet. In einer Ausführungsform können Viersprung-Abläufe zusätzlich zu Dreisprung-Abläufen durch das Protokoll unterstützt werden.
  • In einer Ausführungsform kann eine Anforderung für einen Cache-Block von der Kohärenzsteuerung gehandhabt werden, und das Verzeichnis kann aktualisiert werden, nachdem die Snoops (und/oder ein Abschluss von der Speichersteuerung für den Fall, dass keine zwischengespeicherte Kopie vorhanden ist) erzeugt wurden. Eine weitere Anforderung für denselben Cache-Block kann dann bedient werden. Somit können Anforderungen für denselben Cache-Block unter Umständen nicht serialisiert werden, wie es bei einigen anderen Cache-Kohärenzprotokollen der Fall ist. Es kann verschiedene Bedingungen für Races geben, die auftreten, wenn mehrere Anforderungen an einen Cache-Block ausstehen, da Nachrichten, die sich auf die nachfolgende Anforderung beziehen, vor Nachrichten, die sich auf die vorherige Anforderung beziehen, bei einem gegebenen kohärenten Agenten ankommen können (wobei sich „nachfolgende“ und „vorherige“ auf die Anforderungen beziehen, wie sie an der Kohärenzsteuerung in der Speichersteuerung geordnet sind). Um Agenten das Sortieren der Anforderungen zu ermöglichen, können die Nachrichten (z. B. Snoops und Abschlüsse) einen erwarteten Cache-Zustand am empfangenden Agenten einschließen, wie durch das Verzeichnis angegeben, wenn die Anforderung verarbeitet wurde. Wenn somit ein empfangender Agent den Cache-Block nicht in dem in einer Nachricht angegebenen Zustand aufweist, kann der empfangende Agent die Verarbeitung der Nachricht verzögern, bis sich der Cache-Zustand in den erwarteten Zustand ändert. Die Änderung in den erwarteten Zustand kann über Nachrichten erfolgen, die sich auf die vorherige Anforderung beziehen. Eine zusätzliche Beschreibung der Bedingungen für Races und die Verwendung des erwarteten Cache-Zustands zu deren Auflösung werden nachstehend in Bezug auf 29-30 und 32-34 bereitgestellt.
  • In einer Ausführungsform können die Cache-Zustände einen primären gemeinsamen und einen sekundären gemeinsamen Zustand einschließen. Der primäre gemeinsame Zustand kann für einen kohärenten Agenten gelten, der für das Übertragen einer Kopie des Cache-Blocks an einen anfordernden Agenten zuständig ist. Die sekundären gemeinsamen Agenten brauchen unter Umständen während der Verarbeitung einer gegebenen Anforderung (z. B. eines Lesevorgangs für den Cache-Block, der in den gemeinsamen Zustand zurückkehren darf) nicht berücksichtigt werden. Zusätzliche Details zu den primären und sekundären gemeinsamen Zuständen werden in Bezug auf 40 und 42 beschrieben.
  • In einer Ausführungsform können mindestens zwei Typen von Snoops unterstützt werden: Snoop-Vorwärts und Snoop-Rückwärts. Die Snoop-Vorwärts-Nachrichten können verwendet werden, um zu bewirken, dass ein kohärenter Agent einen Cache-Block an den anfordernden Agenten weiterleitet, während die Snoop-Rückwärts-Nachrichten verwendet werden können, um zu bewirken, dass der kohärente Agent den Cache-Block an die Speichersteuerung zurückgibt. In einer Ausführungsform können auch Snoop-Invalidierungs-Nachrichten unterstützt werden (und können auch Vorwärts- und Rückwärts-Varianten einschließen, um ein Ziel für Abschlüsse zu spezifizieren). Die Snoop-Invalidierungs-Nachricht bewirkt, dass der Cache-kohärente Agent den Cache-Block invalidiert. Die Unterstützung von Snoop-Vorwärts- und Snoop-Rückwärts-Abläufen kann zum Beispiel sowohl cachefähiges (Snoop-Vorwärts-) als auch für nichtcachefähiges (Snoop-Rückwärts-) Verhalten unterstützen. Snoop-Vorwärts kann verwendet werden, um die Anzahl von Nachrichten zu minimieren, wenn ein Cache-Block einem Cache-Agenten bereitgestellt wird, da der Cache-Agent den Cache-Block speichern und die darin enthaltenen Daten möglicherweise verwenden kann. Andererseits kann ein nicht-kohärenter Agent unter Umständen nicht den gesamten Cache-Block speichern, und somit kann das Zurückkopieren in Speicher sicherstellen, dass der volle Cache-Block in der Speichersteuerung erfasst wird. Somit können die Snoop-Vorwärts- und Snoop-Rückwärts-Varianten oder -Typen basierend auf den Fähigkeiten eines anfordernden Agenten (z. B. basierend auf der Identität des anfordernden Agenten) und/oder basierend auf einem Anforderungstyp (z. B. cachefähig oder nicht-cachefähig) ausgewählt werden. Zusätzliche Details bezüglich Snoop-Vorwärts- und Snoop-Rückwärts-Nachrichten werden nachstehend in Bezug auf 37, 38 und 40 bereitgestellt. Verschiedene andere Merkmale sind in den übrigen Figuren veranschaulicht und werden nachstehend ausführlicher beschrieben.
  • 27 ist ein Blockdiagramm einer Ausführungsform eines Systems, das ein System-ona-Chip (SOC) 10 einschließt, das mit einem oder mehreren Speichern, wie Speichern C12A-C12m, gekoppelt ist. Das SOC C10 kann zum Beispiel ein Beispiel für das in 1 gezeigte SOC 10 sein. Das SOC C10 kann eine Vielzahl von kohärenten Agenten (CAs) C14A-C14n einschließen. Die kohärenten Agenten können einen oder Prozessoren (P) C16 einschließen, die mit einem oder mehreren Caches (z. B. Cache C18) gekoppelt sind. Das SOC C10 kann einen oder mehrere nicht-kohärente Agenten (NCAs) C20A-C20p einschließen. Das SOC C10 kann eine oder mehrere Speichersteuerungen C22A-C22 m einschließen, die jeweils während der Verwendung mit einem jeweiligen Speicher C12A-C12 m gekoppelt sind. Jede Speichersteuerung C22A-C22 m kann eine Kohärenzsteuerungsschaltung C24 (kurz „Kohärenzsteuerung“ oder „CC“) einschließen, die mit einem Verzeichnis C26 gekoppelt ist. Die Speichersteuerungen C22A-C22m, die nicht-kohärenten Agenten C20A-C20p und die kohärenten Agenten C14A-C14n können mit einer Verschaltung C28 gekoppelt sein, um zwischen den verschiedenen Komponenten C22A-C22m, C20A-C20p und C14A-C14n zu kommunizieren. Wie durch den Namen angegeben, können die Komponenten des SOC C10 in einer Ausführungsform auf einem einzigen „Chip“ einer integrierten Schaltung integriert sein. In anderen Ausführungsformen können verschiedene Komponenten außerhalb des SOC C10 auf anderen Chips oder anderweitig diskreten Komponenten liegen. Es kann ein beliebiges Maß an Integration oder diskreten Komponenten verwendet werden. In einer Ausführungsform können Teilmengen der kohärenten Agenten C 14A-C 14n und der Speichersteuerungen C22A-C22 m in einem von mehreren Chips einer integrierten Schaltung implementiert werden, die miteinander gekoppelt sind, um die in dem SOC C10 von 27 veranschaulichten Komponenten zu bilden.
  • Die Kohärenzsteuerung C24 kann den Speichersteuerabschnitt des Cache-Kohärenzprotokolls implementieren. Im Allgemeinen kann die Kohärenzsteuerung C24 dazu konfiguriert sein, Anforderungen von der Verschaltung C28 (z. B. durch eine oder mehrere nicht gezeigte Warteschlangen in den Speichersteuerungen C22A-C22m) zu empfangen, die auf Cache-Blöcke gerichtet sind, die dem Speicher C12A-C12 m zugeordnet sind, mit dem die Speichersteuerung C22A-C22 m gekoppelt ist. Das Verzeichnis kann eine Vielzahl von Einträgen umfassen, von denen jeder den Kohärenzzustand eines jeweiligen Cache-Blocks in dem System verfolgen kann. Der Kohärenzzustand kann z. B. einen Cache-Zustand des Cache-Blocks in den verschiedenen kohärenten Agenten C14A-C14N (z. B. in den Caches C18 oder in anderen Caches, wie Caches in den nicht gezeigten Prozessoren C16) einschließen. Somit kann die Kohärenzsteuerung C24 basierend auf dem Verzeichniseintrag für den Cache-Block, der einer gegebenen Anforderung und dem Typ der gegebenen Anforderung entspricht, konfiguriert sein, um zu bestimmen, welche kohärenten Agenten C14A-C14n Snoops empfangen sollen, und den Typ von Snoops (z. B. Snoop-Invalidierung, gemeinsamer Snoop, Ändern in gemeinsam, Ändern in eigen, Ändern in ungültig usw.) zu bestimmen. Die Kohärenzsteuerung C24 kann auch unabhängig bestimmen, ob ein Snoop-Vorwärts oder Snoop-Rückwärts übertragen wird. Die kohärenten Agenten C14A-C14n können die Snoops empfangen, die Snoops verarbeiten, um den Zustand des Cache-Blocks in den kohärenten Agenten C14A-C14n zu aktualisieren, und eine Kopie des Cache-Blocks (falls durch den Snoop spezifiziert) an den anfordernden kohärenten Agenten C14A-C14n oder die Speichersteuerung C22A-C22m, die den Snoop übertragen hat, bereitzustellen. Weitere Details werden weiter unten bereitgestellt.
  • Wie vorstehend erwähnt, können die kohärenten Agenten C14A-C14n einen oder mehrere Prozessoren C16 einschließen. Die Prozessoren C16 können als zentrale Verarbeitungseinheiten (CPUs) des SOC C10 dienen. 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. Die kohärenten Agenten C14A-C14n können ferner weitere Hardware, wie den Cache C18 und/oder eine Schnittstelle zu den anderen Komponenten des Systems (z. B. eine Schnittstelle zu der Verschaltung C28), einschließen. Andere kohärente Agenten können Prozessoren einschließen, die nicht CPUs sind. Ferner noch können andere kohärente Agenten unter Umständen keine Prozessoren einschließen (z. B. können eine Schaltlogik mit fester Funktion, wie eine Anzeigesteuerung, oder eine andere periphere Schaltlogik, eine Schaltlogik mit fester Funktion mit Prozessorunterstützung über einen eingebetteten Prozessor oder Prozessoren usw. kohärente Agenten sein).
  • 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-on-a-Chip (SOC C10) implementiert sind, oder andere Ebenen der Integration einbeziehen. Prozessoren können ferner diskrete Mikroprozessoren, Prozessorkerne und/oder Mikroprozessoren, die in Multichip-Modulimplementierungen integriert sind, Prozessoren, die als mehrere integrierte Schaltungen implementiert sind, usw. umfassen. Die Anzahl der ProzessorenC16 in einem gegebenen kohärenten Agenten C14A-C14n kann sich von der Anzahl der Prozessoren C16 in einem anderen kohärenten Agenten C14A-C14n unterscheiden. Im Allgemeinen können ein oder mehrere Prozessoren eingeschlossen sein. Zusätzlich können sich die Prozessoren C16 in der Mikroarchitekturimplementierung, Leistungsfähigkeits- und Leistungseigenschaften usw. unterscheiden. In einigen Fällen können sich die Prozessoren sogar in der Anweisungssatzarchitektur, die sie implementieren, ihrer Funktionalität (z. B. CPU, Prozessoren für die Grafikverarbeitungseinheit (GPU), Mikrocontroller, digitale Signalprozessoren, Bildsignalprozessoren usw.) usw. unterscheiden.
  • Die Caches C18 können eine beliebige Kapazität und Konfiguration aufweisen, wie Satzassoziativ, direkt zugeordnet oder vollständig assoziativ. Die Cache-Block-Größe kann eine beliebige gewünschte Größe (z. B. 32 Bytes, 64 Bytes, 128 Bytes usw.) sein. Der Cache-Block kann die Einheit zur Zuordnung und Aufhebung der Zuordnung in dem Cache C18 sein. Zusätzlich kann der Cache-Block die Einheit sein, über die in dieser Ausführungsform Kohärenz aufrechterhalten wird (z. B. ein aligniertes in der Größe fein auf Kohärenz abgestimmtes Segment des Speicheradressraums). Der Cache-Block kann in einigen Fällen auch als Cache-Zeile bezeichnet werden.
  • Zusätzlich zu der Kohärenzsteuerung C24 und dem Verzeichnis C26 können die Speichersteuerungen C22A-C22 m im Allgemeinen die Schaltlogik zum Empfangen von Speicheroperationen von den anderen Komponenten des SOC C10 und zum Zugreifen auf die Speicher C12A-C12 m einschließen, um die Speicheroperationen abzuschließen. Die Speichersteuerungen C22A-C22 m können dazu konfiguriert sein, auf jeden beliebigen Typ der Speicher C12A-C12 m zuzugreifen. Zum Beispiel können die Speicher C12A-C12 m ein statischer Direktzugriffsspeicher (SRAM), ein dynamisches RAM (DRAM), wie ein synchroner DRAM (SDRAM), einschließlich Doppeldatenraten-DRAM (DDR-, DDR2-, DDR3-, DDR4-DRAM usw.), ein nichtflüchtiger Speicher, Grafik-DRAM, wie Grafik-DDR-DRAM (GDDR), und Speicher mit hoher Bandbreite (HBM) sein. Versionen mit geringer Leistung/mobile Versionen des DDR DRAM können unterstützt werden (z. B. LPDDR, mDDR usw.). Die Speichersteuerungen C22A-C22 m können Warteschlangen für Speicheroperationen zum Ordnen (und potenziellen Neuordnen) der Operationen und zum Vorlegen der Operationen an die Speicher C12A-C12 m einschließen. Die Speichersteuerungen C22A-C22 m können ferner Datenpuffer einschließen, um Schreibdaten, die auf ein Schreiben in Speicher warten, zu speichern und Daten, die auf eine Rückgabe an die Quelle der Speicheroperation warten (in dem Fall, in dem die Daten nicht von einem Snoop bereitgestellt werden), zu lesen. In einigen Ausführungsformen können die Speichersteuerungen C22A-C22 m 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 den Speichern C12A-C12 m vermieden wird, wenn erwartet wird, dass bald erneut auf sie zugegriffen wird. In einigen Fällen kann der Speicher-Cache, im Gegensatz zu privaten Caches, wie dem Cache C18 oder Caches in den Prozessoren C16, die nur bestimmte Komponenten bedienen, auch als ein System-Cache bezeichnet werden. Zusätzlich muss sich in manchen Ausführungsformen ein System-Cache nicht innerhalb der Speichersteuerung C22 befinden.
  • Die nicht-kohärenten Agenten C20A-C20p können im Allgemeinen verschiedene zusätzliche Hardwarefunktionalität einschließen, die in dem SOC C10 enthalten ist (z. B. „Peripheriegeräte“). Zum Beispiel können die Peripheriegeräte Videoperipheriegeräte, wie einen Bildsignalprozessor, der zum Verarbeiten von Bilderfassungsdaten von einer Kamera oder einem anderen Bildsensor konfiguriert ist, GPUs, Video-Encoder/-Decoder, Skalierer, Rotatoren, Mischer usw. einschließen. Die Peripheriegeräte können Audioperipheriegeräte, wie Mikrofone, Lautsprecher, Schnittstellen für Mikrofone und Lautsprecher, Audioprozessoren, digitale Signalprozessoren, Mischer usw. einschließen. Die Peripheriegeräte können Schnittstellensteuerungen für verschiedene Schnittstellen außerhalb des SOC C10 einschließen, einschließlich Schnittstellen, wie Universal Serial Bus (USB), Peripheral Component Interconnect (PCI), einschließlich PCI Express (PCIe), serielle und parallele Ports usw. Die Peripheriegeräte können Netzwerkperipheriegeräte, wie Medienzugriffssteuerungen (MACs), einschließen. Jeder beliebige Satz von Hardware kann eingeschlossen sein. Die nicht-kohärenten Agenten C20A-C20p können in einer Ausführungsform auch Brücken zu einem Satz von Peripheriegeräten einschließen.
  • Die Verschaltung C28 kann jede beliebige Kommunikationszwischenverbindung und jedes beliebige Protokoll zum Kommunizieren zwischen den Komponenten des SOC C10 sein. Die Verschaltung C28 kann busgestützt sein, einschließlich gemeinsamer Buskonfigurationen, Crossbar-Konfigurationen und hierarchischer Busse mit Brücken. Die Verschaltung C28 kann auch paketbasiert oder über eine Schaltung geschaltet sein und kann hierarchisch mit Brücken, Crossbar-, Punkt-zu-Punkt- oder anderen Verschaltungen sein. Die Verschaltung C28 kann in einer Ausführungsform mehrere unabhängige Kommunikationsstrukturen einschließen.
  • Im Allgemeinen kann die Anzahl jeder der Komponenten C22A-C22m, C20A-C20p und C 14A-C 14n von Ausführungsform zu Ausführungsform variieren, und es kann eine beliebige Anzahl verwendet werden. Wie durch die nachgestellten „m“, „p“ und „n“ angegeben, kann sich die Anzahl eines Komponententyps von der Anzahl eines anderen Komponententyps unterscheiden. Die Anzahl eines gegebenen Typs kann jedoch auch die gleiche sein wie die Anzahl eines anderen Typs. Obwohl das System von 27 mit mehreren Speichersteuerungen C22A-C22 m veranschaulicht ist, werden zusätzlich auch Ausführungsformen mit einer Speichersteuerung C22A-C22 m in Betracht gezogen und können das hierin beschriebene Cache-Kohärenzprotokoll implementieren.
  • Als Nächstes unter Bezugnahme auf 28 ist ein Blockdiagramm gezeigt, das eine Vielzahl von kohärenten Agenten C12A-C12D und die Speichersteuerung C22A veranschaulicht, die eine kohärente Transaktion für eine cachefähige exklusive Leseanforderung (CRdEx) gemäß einer Ausführungsform des skalierbaren Cache-Kohärenzprotokolls durchführen. Eine exklusive Leseanforderung kann eine Anforderung für eine exklusive Kopie des Cache-Blocks sein, sodass beliebige andere Kopien dieser kohärenten Agenten C14A-C14D invalidiert werden, und der Anforderer, wenn die Transaktion abgeschlossen ist, über die einzige gültige Kopie verfügt. Der Speicher C12A-C12m, der die Speicherstellen aufweist, die dem Cache-Block zugewiesen sind, weist Daten an der Stelle auf, die dem Cache-Block in dem Speicher C12A-C12 m zugewiesen ist, aber diese Daten werden auch „veraltet“ sein, wenn der Anforderer die Daten modifiziert. Die exklusive Leseanforderung kann z. B. so verwendet werden, dass der Anforderer die Fähigkeit aufweist, den Cache-Block zu modifizieren, ohne eine zusätzliche Anforderung in dem Cache-Kohärenzprotokoll zu übertragen. Weitere Anforderungen können verwendet werden, wenn keine exklusive Kopie benötigt wird (z. B. kann eine gemeinsame Leseanforderung, CRdSh, verwendet werden, wenn eine beschreibbare Kopie durch den Anforderer nicht unbedingt benötigt wird). Das „C“ in der Bezeichnung „CRdEx“ kann sich auf „cachefähig“ beziehen. Andere Transaktionen können von nicht-kohärenten Agenten (z. B. den Agenten C20A-C20p in 27) ausgegeben werden, und solche Transaktionen können mit „NC“ (z. B. NCRd) bezeichnet werden. Eine zusätzliche Erörterung von Anforderungstypen und anderen Nachrichten in einer Transaktion wird weiter unten in Bezug auf 40 für eine Ausführungsform bereitgestellt, und eine weitere Erörterung von Cache-Zuständen wird weiter unten in Bezug auf 39 für eine Ausführungsform bereitgestellt.
  • In dem Beispiel von 28 kann der kohärente Agent C14A eine Transaktion initiieren, indem er die exklusive Leseanforderung an die Speichersteuerung C22A überträgt (die die Speicherstellen steuert, die der Adresse in der exklusiven Leseanforderung zugewiesen sind). Die Speichersteuerung C22A (und insbesondere die Kohärenzsteuerung C24 in der Speichersteuerung C22A) kann einen Eintrag in dem Verzeichnis C26 lesen und bestimmen, dass der kohärente Agent C14D den Cache-Block in dem primären gemeinsamen Zustand (P) aufweist und somit der kohärente Agent sein kann, der den Cache-Block dem anfordernden kohärenten Agenten C14D bereitstellen soll. Die Kohärenzsteuerung C24 kann eine Snoop-Vorwärts-Nachricht (SnpFwd[st]-Nachricht) an den kohärenten Agenten C14D erzeugen und kann die Snoop-Vorwärts-Nachricht an den kohärenten Agenten C14D ausgeben. Die Kohärenzsteuerung C24 kann eine Kennung des aktuellen Zustands in dem kohärenten Agenten, der den Snoop empfängt, gemäß dem Verzeichnis C26 einschließen. Zum Beispiel ist in diesem Fall der aktuelle Zustand „P“ in dem kohärenten Agenten C14D gemäß dem Verzeichnis C26. Basierend auf dem Snoop kann der kohärente Agent C14D auf den Cache zugreifen, in dem der Cache-Block gespeichert ist, und einen Füllabschluss (Füllvorgang in 28) mit Daten, die dem Cache-Block entsprechen, erzeugen. Der kohärente Agent C14D kann den Füllabschluss an den kohärenten Agenten C14A übertragen. Dementsprechend implementiert das System ein „3-Sprung“-Protokoll zum Liefern der Daten an den Anforderer: CRdEx, SnpFwd[st] und Fill. Wie durch „[st]“ in der SnpFwd[st]-Nachricht angegeben, kann die Snoop-Vorwärts-Nachricht auch mit dem Zustand des Cache-Blocks codiert werden, zu dem der kohärente Agent nach dem Verarbeiten des Snoops übergehen soll. Es kann unterschiedliche Variationen der Nachricht geben, oder der Zustand kann in verschiedenen Ausführungsformen als ein Feld in der Nachricht übertragen werden. In dem Beispiel von 28 kann der neue Zustand des Cache-Blocks in dem kohärenten Agenten ungültig sein, da die Anforderung eine exklusive Leseanforderung ist. Andere Anforderungen können einen neuen Zustand gemeinsamer Nutzung ermöglichen.
  • Zusätzlich kann die Kohärenzsteuerung C24 aus dem Verzeichniseintrag für den Cache-Block bestimmen, dass die kohärenten Agenten C14B-C14C den Cache-Block in dem sekundären gemeinsamen Zustand (S) aufweisen. Somit können Snoops an jeden kohärenten Agenten ausgegeben werden: (i) der eine zwischengespeicherte Kopie des Cache-Blocks aufweist und (ii) bei dem sich der Zustand des Blocks in dem kohärenten Agenten basierend auf der Transaktion ändern soll. Da der kohärente Agent C14A eine exklusive Kopie erhält, müssen die gemeinsamen Kopien invalidiert werden, und somit kann die Kohärenzsteuerung C24 Snoop-Invalidierungs-Nachrichten (SnpInvFw-Nachrichten) für die kohärenten Agenten C14B-C14C erzeugen und kann die Snoops an die kohärenten Agenten C14B-C14C ausgeben. Die Snoop-Invalidierungs-Nachrichten schließen Kennungen ein, die angeben, dass der aktuelle Zustand in den kohärenten Agenten C14B-C14C gemeinsam ist. Die kohärenten Agenten C14B-C14C können die Snoop-Invalidierungs-Anforderungen verarbeiten und Bestätigungs-Abschlüsse (Ack-Abschlüsse) an den kohärenten Agenten C14A bereitstellen. Es ist zu beachten, dass in dem veranschaulichten Protokoll Nachrichten von den „snoopenden“ Agenten an die Kohärenzsteuerung C24 in dieser Ausführungsform nicht implementiert sind. Die Kohärenzsteuerung C24 kann den Verzeichniseintrag basierend auf der Ausgabe der Snoops aktualisieren und die nächste Transaktion verarbeiten. Somit können, wie zuvor erwähnt, Transaktionen an denselben Cache-Block in dieser Ausführungsform unter Umständen nicht serialisiert werden. Die Kohärenzsteuerung C24 kann das Starten von zusätzlichen Transaktionen zu demselben Cache-Block zulassen und sich auf die aktuelle Zustandsangabe in den Snoops stützen, um zu identifizieren, welche Snoops zu welchen Transaktionen gehören (z. B. erkennt die nächste Transaktion an denselben Cache-Block die Cache-Zustände, die der abgeschlossenen vorherigen Transaktion entsprechen). In der veranschaulichten Ausführungsform ist die Snoop-Invalidierungs-Nachricht eine SnpInvFw-Nachricht, da der Abschluss an den initiierenden kohärenten Agenten C14A als Teil des Dreisprung-Protokolls gesendet wird. In einer Ausführungsform wird auch ein Viersprung-Protokoll für bestimmte Agenten unterstützt. In einer solchen Ausführungsform kann eine SnpInvBk-Nachricht verwendet werden, um anzugeben, dass der „snoopende“ Agent den Abschluss an die Kohärenzsteuerung C24 zurückübertragen soll.
  • Somit können die Cache-Zustandskennungen in den Snoops es den kohärenten Agenten ermöglichen, Races zwischen den Nachrichten aufzulösen, die unterschiedliche Transaktionen an denselben Cache-Block bilden. Das heißt, die Nachrichten können außerhalb der Reihenfolge empfangen werden, in der die entsprechenden Anforderungen von der Kohärenzsteuerung verarbeitet wurden. Die Reihenfolge, in der die Kohärenzsteuerung C24 Anforderungen an denselben Cache-Block durch das Verzeichnis C26 verarbeitet, kann die Reihenfolge der Anforderungen definieren. Das heißt, die Kohärenzsteuerung C24 kann der Ordnungspunkt für Transaktionen sein, die in einer gegebenen Speichersteuerung C22A-C22 m empfangen werden. Die Serialisierung der Nachrichten kann andererseits in den kohärenten Agenten C14A-C14n basierend auf dem aktuellen Cache-Zustand verwaltet werden, der jeder Nachricht und dem Cache-Zustand in den kohärenten Agenten C14A-C14n entspricht. Ein gegebener kohärenter Agent kann auf den Cache-Block innerhalb des kohärenten Agenten basierend auf einem Snoop zugreifen und kann dazu konfiguriert sein, den in dem Snoop spezifizierten Cache-Zustand mit dem Cache-Zustand, der aktuell in dem Cache vorliegt, zu vergleichen. Wenn die Zustände nicht übereinstimmen, gehört der Snoop zu einer Transaktion, die nach einer anderen Transaktion angeordnet ist, die den Cache-Zustand in dem Agenten in den Zustand ändert, der in dem Snoop spezifiziert ist. Somit kann der „snoopende“ Agent dazu konfiguriert sein, die Verarbeitung des Snoops basierend auf dem ersten Zustand, der nicht mit dem zweiten Zustand übereinstimmt, zu verzögern, bis der zweite Zustand als Reaktion auf eine andere Kommunikation in Bezug auf eine andere Anforderung als die erste Anforderung in den ersten Zustand geändert wird. Zum Beispiel kann sich der Zustand basierend auf einem Füllabschluss ändern, der von dem „snoopenden“ Agenten von einer anderen Transaktion empfangen wird usw.
  • In einer Ausführungsform können die Snoops einen Abschlusszählwert (Cnt) einschließen, der die Anzahl der Abschlüsse angibt, die der Transaktion entsprechen, sodass der Anforderer bestimmen kann, wann alle der mit einer Transaktion zusammenhängenden Abschlüsse empfangen wurden. Die Kohärenzsteuerung C24 kann den Abschlusszählwert basierend auf den Zuständen bestimmen, die in dem Verzeichniseintrag für den Cache-Block angegeben sind. Der Abschlusszählwert kann zum Beispiel die Anzahl von Abschlüssen minus eins sein (z. B. 2 im Beispiel von 2, da drei Abschlüsse vorliegen). Diese Implementierung kann es ermöglichen, den Abschlusszählwert als Initialisierung für einen Abschlusszähler für die Transaktion zu verwenden, wenn ein anfänglicher Abschluss für die Transaktion vom anfordernden Agenten empfangen wird (z. B. wurde er bereits dekrementiert, um den Empfang des Abschlusses zu berücksichtigen, der den Abschlusszählwert überträgt). Sobald der Zählwert initialisiert wurde, können weitere Abschlüsse für die Transaktion bewirken, dass der anfordernde Agent den Abschlusszähler aktualisiert (z. B. den Zähler dekrementiert). In anderen Ausführungsformen kann der tatsächliche Abschlusszählwert bereitgestellt werden und kann durch den Anforderer dekrementiert werden, um den Abschlusszählwert zu initialisieren. Im Allgemeinen kann der Abschlusszählwert ein beliebiger Wert sein, der die Anzahl der Abschlüsse identifiziert, die der Anforderer beobachten soll, bevor die Transaktion vollständig abgeschlossen ist. Das heißt, der anfordernde Agent kann die Anforderung basierend auf dem Abschlusszähler abschließen.
  • 29 und 30 veranschaulichen beispielhafte Bedingungen für Races, die bei Transaktionen an denselben Cache-Block auftreten können, und die Verwendung des aktuellen Cache-Zustands für einen gegebenen Agenten, wie in dem Verzeichnis zu dem Zeitpunkt berücksichtigt, zu dem die Transaktion in der Speichersteuerung verarbeitet wird (auch als „erwarteter Cache-Zustand“ bezeichnet), und den aktuellen Cache-Zustand in dem gegebenen Agenten (z. B. wie in dem Cache/den Caches oder Puffern des gegebenen Agenten, die Cache-Daten vorübergehend speichern können, berücksichtigt). In 29 und 30 sind kohärente Agenten als CA0 und CA1 aufgeführt, und die Speichersteuerung, die dem Cache-Block zugeordnet ist, ist als MC gezeigt. Die vertikalen Linien 30, 32 und 34 für CA0, CA1 und MC veranschaulichen die Quelle verschiedener Nachrichten (Basis eines Pfeils) und das Ziel der Nachrichten (Kopf eines Pfeils) entsprechend Transaktionen. Die Zeit verläuft in 29 und 30 von oben nach unten. Eine Speichersteuerung kann einem Cache-Block zugeordnet sein, wenn der Speicher, an den die Speichersteuerung gekoppelt ist, die Speicherstellen einschließt, die der Adresse des Cache-Blocks zugewiesen sind.
  • 29 veranschaulicht eine Bedingung für Races zwischen einem Füllabschluss für eine Transaktion und einem Snoop für eine andere Transaktion an denselben Cache-Block. In dem Beispiel von 29 initiiert CA0 eine exklusive Lesetransaktion mit einer CRdEx-Anforderung an die MC (Pfeil 36). CA1 initiiert ebenfalls eine exklusive Lesetransaktion mit einer CRdEx-Anforderung (Pfeil 38). Die CA0-Transaktion wird von der MC zuerst verarbeitet, wobei die CA0-Transaktion wie vor der CA1-Anforderung angeordnet aufgebaut wird. In diesem Beispiel gibt das Verzeichnis an, dass es keine zwischengespeicherten Kopien des Cache-Blocks im System gibt, und somit antwortet die MC auf die CA0-Anforderung mit einem Füllvorgang im exklusiven Zustand (FillE, Pfeil 40). Die MC aktualisiert den Verzeichniseintrag des Cache-Blocks mit dem exklusiven Zustand für CA0.
  • Die MC wählt den CRdEx-Bezug von CA1 für die Verarbeitung aus und erkennt, dass CA0 den Cache-Block im exklusiven Zustand aufweist. Dementsprechend kann die MC eine Snoop-Vorwärts-Anforderung an CA0 erzeugen, die anfordert, dass CA0 den Cache-Block in seinem/seinen Cache(s) invalidiert und den Cache-Block an CA1 bereitstellt (SnpFwdI). Die Snoop-Vorwärts-Anforderung schließt auch die Kennung des E-Zustands für den Cache-Block in CA0 ein, da dies der Cache-Zustand ist, der in dem Verzeichnis für CA0 berücksichtigt wird. Die MC kann den Snoop ausgeben (Pfeil 42) und kann das Verzeichnis aktualisieren, um anzugeben, dass CA1 eine exklusive Kopie aufweist und die CA0 keine gültige Kopie mehr aufweist.
  • Der Snoop und der Füllabschluss können CA0 in jeder zeitlichen Reihenfolge erreichen. Die Nachrichten können sich in verschiedenen virtuellen Kanälen bewegen, und/oder andere Verzögerungen in der Zwischenverbindung können ermöglichen, dass die Nachrichten in jeder Reihenfolgen ankommen. In dem veranschaulichten Beispiel kommt der Snoop vor dem Füllabschluss bei CA0 an. Da jedoch der erwartete Zustand im Snoop (E) nicht mit dem aktuellen Zustand des Cache-Blocks in CA0 (I) übereinstimmt, kann CA0 die Verarbeitung des Snoops verzögern. Anschließend kann der Füllabschluss bei CA0 ankommen. CA0 kann den Cache-Block in einen Cache schreiben und den Zustand auf exklusiv (E) einstellen. CA0 kann es auch ermöglicht werden, mindestens eine Operation an dem Cache-Block durchzuführen, um das Vorwärts-Fortschreiten der Aufgabe in CA0 zu unterstützen, und diese Operation kann den Zustand zu modifiziert (M) ändern. In dem Cache-Kohärenzprotokoll kann das Verzeichnis C26 den Zustand M unter Umständen nicht separat verfolgen (er kann z. B. als E behandelt werden), kann aber den Zustand E als einen erwarteten Zustand in einem Snoop zuordnen. CA0 kann einen Füllabschluss mit einem Zustand modifiziert (FillM, Pfeil 44) an CA1 ausgeben. Dementsprechend wurde die Bedingung für Races zwischen dem Snoop und dem Füllabschluss für die beiden Transaktionen korrekt gehandhabt.
  • Während im Beispiel von 29 die CRdEx-Anforderung von CA1 nach der CRdEx-Anforderung von CA0 ausgegeben wird, kann die CRdEx-Anforderung von CA1 vor der CRdEx-Anforderung von CA0 ausgegeben werden, und die CRdEx-Anforderung von CA0 kann weiterhin vor der CRdEx-Anforderung von CA1 durch die MC angeordnet werden, da die MC der Ordnungspunkt für Transaktionen ist.
  • 30 veranschaulicht eine Bedingung für Races zwischen einem Snoop für eine kohärente Transaktion und einem Abschluss für eine andere kohärente Transaktion an denselben Cache-Block. In 30 initiiert CA0 eine Rückschreibtransaktion (CWB), um einen modifizierten Cache-Block in Speicher zu schreiben (Pfeil 46), obwohl der Cache-Block tatsächlich als exklusiv in dem Verzeichnis verfolgt werden kann, wie vorstehend erwähnt. Die CWB kann übertragen werden, z. B., wenn CA0 den Cache-Block von seinen Caches freigibt, aber der Cache-Block sich in dem modifizierten Zustand befindet.
  • CA1 initiiert eine gemeinsame Lesetransaktion (CRdS) für denselben Cache-Block (Pfeil 48). Die CA1-Transaktion wird vor der CA0-Transaktion durch die MC angeordnet, die den Verzeichniseintrag für den Cache-Block liest und bestimmt, dass CA0 den Cache-Block im exklusiven Zustand aufweist. Die MC gibt eine Snoop-Vorwärts-Anforderung an CA0 aus und fordert eine Änderung in den sekundären gemeinsamen Zustand an (SnpFwdS, Pfeil 50). Die Kennung im Snoop gibt einen aktuellen Cache-Zustand exklusiv (E) in CA0 an. Die MC aktualisiert den Verzeichniseintrag, um anzugeben, dass CA0 den Cache-Block in dem sekundären gemeinsamen Zustand aufweist und CA1 die Kopie im primären gemeinsamen Zustand aufweist (da eine zuvor exklusive Kopie an CA1 bereitgestellt wird).
  • Die MC verarbeitet die CWB-Anforderung von CA0, wobei der Verzeichniseintrag für den Cache-Block erneut gelesen wird. Die MC gibt einen Ack-Abschluss aus, wodurch angegeben wird, dass der aktuelle Cache-Zustand sekundär gemeinsam (S) in CA0 mit der Kennung des Cache-Zustands im Ack-Abschluss ist (Pfeil 52). Basierend auf dem erwarteten Zustand sekundär gemeinsam, der nicht mit dem aktuellen Zustand modifiziert übereinstimmt, kann CA0 das Verarbeiten des Ack-Abschlusses verzögern. Das Verarbeiten des Ack-Abschlusses würde es CA0 ermöglichen, den Cache-Block zu verwerfen, und er würde dann nicht die Kopie des Cache-Blocks zur Bereitstellung an CA1 als Reaktion auf die später angekommene SnpFwdS-Anforderung aufweisen. Wenn die SnpFwdS-Anforderung empfangen wird, kann CA0 einen Füllabschluss (Pfeil 54) an CA1 bereitstellen, wodurch der Cache-Block in dem primären gemeinsamen Zustand (P) bereitgestellt wird. CA0 kann auch den Zustand des Cache-Blocks in CA0 in sekundär gemeinsam (S) ändern. Die Zustandsänderung stimmt mit dem erwarteten Zustand für den Ack-Abschluss überein, und somit kann CA0 den Cache-Block invalidieren und die CWB-Transaktion abschließen.
  • 31 ist ein detaillierteres Blockdiagramm einer Ausführungsform eines Abschnitts einer Ausführungsform eines kohärenten Agenten C14A. Andere kohärente Agenten C14B-C14n können ähnlich sein. In der veranschaulichten Ausführungsform kann der kohärente Agent C14A eine Anforderungssteuerschaltung C60 und einen Anforderungspuffer C62 einschließen. Der Anforderungspuffer C62 ist mit der Anforderungssteuerschaltung C60 gekoppelt, und sowohl der Anforderungspuffer C62 als auch die Anforderungssteuerschaltung C60 sind mit dem Cache C18 und/oder den Prozessoren C16 und der Verschaltung C28 gekoppelt.
  • Der Anforderungspuffer C62 kann dazu konfiguriert sein, eine Vielzahl von Anforderungen zu speichern, die von dem Cache C18/den Prozessoren C16 für kohärente Cache-Blöcke erzeugt werden. Das heißt, der Anforderungspuffer C62 kann Anforderungen speichern, die Transaktionen auf der Verschaltung C28 initiieren. Ein Eintrag des Anforderungspuffers C62 ist in 31 veranschaulicht, und andere Einträge können ähnlich sein. Der Eintrag kann ein Gültig-Feld (V-Feld) C63, ein Anforderungsfeld (Anf.-Feld) C64, ein Zählwert gültig-Feld (CV-Feld) C66 und ein Abschlusszählwertfeld (CompCnt-Feld) C68 einschließen. Das Gültig-Feld C63 kann eine gültige Angabe speichern (z. B. ein Gültig-Bit), das angibt, ob der Eintrag gültig ist oder nicht (z. B. Speichern einer ausstehenden Anforderung). Das Anforderungsfeld C64 kann Daten speichern, die die Anforderung (z. B. den Anforderungstyp, die Adresse des Cache-Blocks, ein Tag oder eine andere Kennung für die Transaktion usw.) definieren. Das Zählwert gültig-Feld C66 kann eine Gültig-Angabe für das Abschlusszählwertfeld C68 speichern, was angibt, dass das Abschlusszählwertfeld C68 initialisiert wurde. Die Anforderungssteuerschaltung C68 kann das Zählwert gültig-Feld C66 verwenden, wenn sie einen von der Verschaltung C28 für die Anforderung empfangenen Abschluss verarbeitet, um zu bestimmen, ob die Anforderungssteuerschaltung C68 das Feld mit dem im Abschluss enthaltenen Abschlusszählwert initialisieren soll (Zählwertfeld nicht gültig) oder den Abschlusszählwert aktualisieren soll, wie durch Dekrementieren des Abschlusszählwerts (Zählwertfeld gültig). Das Abschlusszählwertfeld C68 kann den aktuellen Abschlusszählwert speichern.
  • Die Anforderungssteuerschaltung C60 kann Anforderungen von dem Cache C18/den Prozessoren C16 empfangen und kann den Anforderungen Anforderungspuffereinträge in dem Anforderungspuffer C62 zuordnen. Die Anforderungssteuerschaltung C60 kann die Anforderungen in dem Puffer C62 verfolgen, wobei sie bewirkt, dass die Anforderungen auf der Verschaltung C28 übertragen werden (z. B. gemäß einem Arbitrierungsschema einer beliebigen Art) und empfangene Abschlüsse in der Anforderung verfolgt, um die Transaktion abzuschließen und den Cache-Block an den Cache C18/die Prozessoren C16 weiterzuleiten.
  • Nun unter Bezugnahme auf 32 wird ein Flussdiagramm gezeigt, das die Funktionsweise einer Ausführungsform einer Kohärenzsteuerung C24 in den Speichersteuerungen C22A-C22 m basierend auf dem Empfangen einer zu verarbeitenden Anforderung veranschaulicht. Die Operation von 32 kann durchgeführt werden, wenn die Anforderung unter den empfangenen Dienstanforderungen in der Speichersteuerung C22A-C22 m über einen beliebigen gewünschten Arbitrierungsalgorithmus ausgewählt wurde. 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 in kombinatorischer Logik in der Kohärenzsteuerung C24 parallel durchgeführt werden. Blöcke, Kombinationen von Blöcken und/oder das Flussbild als Ganzes können über mehrere Taktzyklen geleitet werden. Die Kohärenzsteuerung C24 kann dazu konfiguriert sein, die in 32 gezeigte Operation zu implementieren.
  • Die Kohärenzsteuerung C24 kann dazu konfiguriert sein, den Verzeichniseintrag aus dem Verzeichnis C26 basierend auf der Adresse der Anforderung zu lesen. Die Kohärenzsteuerung C24 kann dazu konfiguriert sein, basierend auf dem Typ der Anforderung (z. B. dem Zustand, der durch den Anforderer für den Cache-Block angefordert wird) und dem aktuellen Zustand des Cache-Blocks in verschiedenen kohärenten Agenten C14A-C14n, wie in dem Verzeichniseintrag angegeben, zu bestimmen, welche Snoops erzeugt werden sollen (Block C70). Außerdem kann die Kohärenzsteuerung C24 basierend auf dem aktuellen Zustand für den kohärenten Agenten C14A-C14n, der den Snoop wie im Verzeichnis angegeben empfängt, den aktuellen Zustand erzeugen, der in jedem Snoop enthalten sein soll. Die Kohärenzsteuerung C24 kann dazu konfiguriert sein, den aktuellen Zustand in den Snoop einzufügen (Block C72). Die Kohärenzsteuerung C24 kann auch dazu konfiguriert sein, den Abschlusszählwert zu erzeugen und den Abschlusszählwert in jeden Snoop einzufügen (Block C74). Wie zuvor erwähnt, kann der Abschlusszählwert die Anzahl der Abschlüsse minus eins in einer Ausführungsform oder die Gesamtzahl der Abschlüsse sein. Die Anzahl der Abschlüsse kann die Anzahl von Snoops und in dem Fall, in dem die Speichersteuerung C22A-C22 m den Cache-Block bereitstellt, der Füllabschluss aus der Speichersteuerung C22A-C22 m sein. In den meisten Fällen, in denen es einen Snoop für eine cachefähige Anforderung gibt, kann einer der gesnoopten kohärenten Agenten C14A-C14n den Cache-Block bereitstellen, und somit kann die Anzahl der Abschlüsse die Anzahl von Snoops sein. In Fällen, in denen kein kohärenter Agent C14A-C14n eine Kopie des Cache-Blocks (keine Snoops) aufweist, kann die Speichersteuerung zum Beispiel den Füllabschluss bereitstellen. Die Kohärenzsteuerung C24 kann dazu konfiguriert sein, die Snoops zur Übertragung in die kohärenten Agenten C14A-C14n einzureihen (Block C76). Nachdem die Snoops erfolgreich eingereiht sind, kann die Kohärenzsteuerung C24 dazu konfiguriert sein, den Verzeichniseintrag zu aktualisieren, um den Abschluss der Anforderung zu berücksichtigen (Block C78). Zum Beispiel können die Aktualisierungen die im Verzeichniseintrag verfolgten Cache-Zustände ändern, um den von den Snoops angeforderten Cache-Zuständen zu entsprechen, die Agentenkennung zu ändern, die angibt, welcher Agent die Kopie des Cache-Blocks an den kohärenten Agenten C14A-C14n bereitstellen soll, der bei Abschluss der Transaktion den Cache-Block in einem exklusiven, modifizierten, eigenen oder primären gemeinsamen Zustand usw. aufweist.
  • Nun unter Bezugnahme auf 33 ist ein Flussdiagramm gezeigt, das die Funktionsweise einer Ausführungsform der Anforderungssteuerschaltung C60 in einem kohärenten Agenten C14A-C14n basierend auf dem Empfangen eines Abschlusses für eine Anforderung veranschaulicht, die in dem Anforderungspuffer C62 aussteht. 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 in kombinatorischer Logik in der Anforderungssteuerschaltung C60 parallel durchgeführt werden. Blöcke, Kombinationen von Blöcken und/oder das Flussbild als Ganzes können über mehrere Taktzyklen geleitet werden. Die Anforderungssteuerschaltung C60 kann dazu konfiguriert sein, die in 33 gezeigte Operation zu implementieren.
  • Die Anforderungssteuerschaltung C60 kann dazu konfiguriert sein, auf den Anforderungspuffereintrag in dem Anforderungspuffer C62 zuzugreifen, der der Anforderung zugeordnet ist, die dem empfangenen Abschluss zugeordnet ist. Wenn das Zählwert gültig-Feld C66 angibt, dass der Abschlusszählwert gültig ist (Entscheidungsblock C80, „Ja“-Zweig), kann die Anforderungssteuerschaltung C60 dazu konfiguriert sein, den Zählwert in dem Anforderungszählwertfeld C68 zu dekrementieren (Block C82). Wenn der Zählwert null ist (Entscheidungsblock C84, „Ja“-Zweig), ist die Anforderung abgeschlossen, und die Anforderungssteuerschaltung C60 kann dazu konfiguriert sein, eine Abschlussangabe (und den empfangenen Cache-Block, soweit zutreffend) an den Cache C18 und/oder die Prozessoren C16, die die Anforderung erzeugt haben, weiterzuleiten (Block C86). Der Abschluss kann bewirken, dass der Zustand des Cache-Blocks aktualisiert wird. Wenn der neue Zustand des Cache-Blocks nach dem Aktualisieren mit dem erwarteten Zustand in einem ausgesetzten Snoop konsistent ist (Entscheidungsblock C88, „Ja“-Zweig), kann die Anforderungssteuerschaltung C60 dazu konfiguriert sein, den ausgesetzten Snoop zu verarbeiten (Block C90). Zum Beispiel kann die Anforderungssteuerschaltung C60 dazu konfiguriert sein, den Snoop zu dem Cache C18/den Prozessoren C16 zu leiten, um den Abschluss zu erzeugen, der dem ausgesetzten Snoop entspricht (und um den Zustand des Cache-Blocks zu ändern, wie durch den Snoop angegeben).
  • Der neue Zustand kann mit dem erwarteten Zustand konsistent sein, wenn der neue Zustand derselbe wie der erwartete Zustand ist. Zusätzlich kann der neue Zustand mit dem erwarteten Zustand konsistent sein, wenn der erwartete Zustand der Zustand ist, der durch das Verzeichnis C26 für den neuen Zustand verfolgt wird. Zum Beispiel wird der modifizierte Zustand in einer Ausführungsform in dem Verzeichnis C26 als exklusiver Zustand verfolgt, und somit ist der modifizierte Zustand konsistent mit einem erwarteten Zustand exklusiv. Der neue Zustand kann modifiziert werden, wenn der Zustand in einem Füllabschluss bereitgestellt wird, der durch einen anderen kohärenten Agenten C14A-C14n übertragen wurde, der zum Beispiel den Cache-Block als exklusiv aufwies und den Cache-Block lokal modifiziert hat.
  • Wenn das Zählwert gültig-Feld C66 angibt, dass der Abschlusszählwert gültig ist (Entscheidungsblock C80), und der Abschlusszählwert nach dem Dekrementieren nicht null ist (Entscheidungsblock C84, „Nein“-Zweig), ist die Anforderung nicht abgeschlossen und bleibt somit in dem Anforderungspuffer C62 ausgesetzt (und ein eventuell ausgesetzter Snoop, der darauf wartet, dass die Anforderung abgeschlossen wird, kann ausgesetzt bleiben). Wenn das Zählwert gültig-Feld C66 angibt, dass der Abschlusszählwert nicht gültig ist (Entscheidungsblock C80, „Nein“-Zweig), kann die Anforderungssteuerschaltung C60 dazu konfiguriert sein, das Abschlusszählwertfeld C68 mit dem im Abschluss bereitgestellten Abschlusszählwert zu initialisieren (Block C92). Die Anforderungssteuerschaltung C60 kann weiterhin dazu konfiguriert sein, zu überprüfen, ob der Abschlusszählwert null ist (wenn z. B. nur ein Abschluss für eine Anforderung vorhanden ist, kann der Abschlusszählwert im Abschluss null sein) (Entscheidungsblock C84), und die Verarbeitung kann wie vorstehend erörtert fortgesetzt werden.
  • 34 ist ein Flussdiagramm, das die Funktionsweise einer Ausführungsform eines kohärenten Agenten C14A-C14n basierend auf dem Empfangen eines Snoops 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 in kombinatorischer Logik in dem kohärenten Agenten C14A-C14n parallel durchgeführt werden. Blöcke, Kombinationen von Blöcken und/oder das Flussbild als Ganzes können über mehrere Taktzyklen geleitet werden. Der kohärente Agent C14A-C14n kann dazu konfiguriert sein, die in 34 gezeigte Operation zu implementieren.
  • Der kohärente Agent C14A-C14n kann dazu konfiguriert sein, den erwarteten Zustand in dem Snoop gegenüber dem Zustand in dem Cache C18 zu überprüfen (Entscheidungsblock C100). Wenn der erwartete Zustand nicht mit dem aktuellen Zustand des Cache-Blocks konsistent ist (Entscheidungsblock C100, „Nein“-Zweig), dann ist ein Abschluss ausstehend, der den aktuellen Zustand des Cache-Blocks in den erwarteten Zustand ändert. Der Abschluss entspricht einer Transaktion, die vor der Transaktion, die dem Snoop entspricht, angeordnet war. Dementsprechend kann der kohärente Agent C14A-C14n dazu konfiguriert sein, den Snoop auszusetzen, wodurch die Verarbeitung des Snoops verzögert wird, bis sich der aktuelle Zustand in den erwarteten Zustand ändert, der in dem Snoop angegeben ist (Block C102). Der ausgesetzte Snoop kann in einer Ausführungsform in einem Puffer gespeichert werden, der speziell für die ausgesetzten Snoops bereitgestellt ist. Alternativ kann der ausgesetzte Snoop in einen Eintrag in dem Anforderungspuffer C62 aufgenommen werden, der eine kollidierende Anforderung speichert, wie nachstehend in Bezug auf 36 ausführlicher erörtert.
  • Wenn der erwartete Zustand mit dem aktuellen Zustand konsistent ist (Entscheidungsblock C100, „Ja“-Zweig), kann der kohärente Agent C14A-C14n dazu konfiguriert sein, die Zustandsänderung basierend auf dem Snoop zu verarbeiten (Block C104). Das heißt, der Snoop kann die gewünschte Zustandsänderung angeben. Der kohärente Agent C14A-C14n kann dazu konfiguriert sein, einen Abschluss zu erzeugen (z. B. einen Füllvorgang, wenn der Snoop eine Snoop-Vorwärts-Anforderung ist, eine Rückwärts-Kopieren-Snoop-Antwort, wenn der Snoop eine Snoop-Rückwärts-Anforderung ist, oder eine Bestätigung (vorwärts oder rückwärts, basierend auf dem Snoop-Typ), wenn der Snoop eine Zustandsänderungsanforderung ist). Der kohärente Agent kann dazu konfiguriert sein, einen Abschluss mit dem Abschlusszählwert aus dem Snoop zu erzeugen (Block C106) und den Abschluss für die Übertragung an den anfordernden kohärenten Agenten C14A-C14n einzureihen (Block C108).
  • Unter Verwendung des hierin beschriebenen Cache-Kohärenzalgorithmus kann ein Cache-Block durch eine Kette von kollidierenden Anforderungen mit geringem Nachrichten-Bandbreiten-Overhead von einem kohärenten Agenten C14A-C14n an einen anderen übertragen werden. Zum Beispiel ist 35 ein Blockdiagramm, das die Übertragung eines Cache-Blocks unter 4 kohärenten Agenten CA0 bis CA3 veranschaulicht. Ähnlich wie in 29 und 30 sind kohärente Agenten als CA0 und CA3 aufgeführt, und die Speichersteuerung, die dem Cache-Block zugeordnet ist, ist als MC gezeigt. Die vertikalen Linien 110, 112, 114, 116 und 118 für CA0, CA1, CA2, CA3 bzw. MC veranschaulichen die Quelle verschiedener Nachrichten (Basis eines Pfeils) und das Ziel der Nachrichten (Kopf eines Pfeils), die Transaktionen entsprechen. Die Zeit verläuft in 35 von oben nach unten. Zu der Zeit, die dem oberen Bereich von 35 entspricht, weist der kohärente Agent CA3 den Cache-Block auf, der in den Transaktionen im modifizierten Zustand beteiligt ist (im Verzeichnis 26 als exklusiv verfolgt). Die Transaktionen in 35 sind alle an denselben Cache-Block.
  • Der kohärente Agent CA0 initiiert eine exklusive Lesetransaktion mit einer CRdEx-Anforderung an die Speichersteuerung (Pfeil 120). Die kohärenten Agenten CA1 und CA2 initiieren ebenfalls exklusive Lesetransaktionen (Pfeile 122 bzw. 124). Wie durch die Köpfe der Pfeile 120, 122 und 124 an der Linie 118 angegeben, ordnet die Speichersteuerung MC die Transaktionen als CA0, dann CA1 und dann zuletzt CA2. Der Verzeichniszustand für die Transaktion von CA0 ist CA3 im exklusiven Zustand, und somit wird Snoop-Vorwärts und Invalidieren (SnpFwdI) mit einem aktuellen Cache-Zustand exklusiv übertragen (Pfeil 126). Der kohärente Agent CA3 empfängt den Snoop und leitet einen FillM-Abschluss mit den Daten an den kohärenten Agenten CA0 weiter (Pfeil 128). In ähnlicher Weise ist der Verzeichniszustand für die Transaktion von CA1 der kohärente Agent CA0 im exklusiven Zustand (von der vorhergehenden Transaktion zu CA0), und somit gibt die Speichersteuerung MC einen SnpFwdI an den kohärenten Agenten CA0 mit einem aktuellen Cache-Zustand E aus (Pfeil 130), und der Verzeichniszustand für die Transaktion von CA2 ist der kohärente Agent CA1 mit einem aktuellen Cache-Zustand E (Pfeil 132). Sobald der kohärente Agent CA0 Gelegenheit hatte, mindestens eine Speicheroperation auf dem Cache-Block durchzuführen, antwortet der kohärente Agent CA0 mit einem FillM-Abschluss an den kohärenten Agenten CA1 (Pfeil 134). In ähnlicher Weise antwortet, sobald der kohärente Agent CA1 Gelegenheit hatte, mindestens eine Speicheroperation auf dem Cache-Block durchzuführen, der kohärente Agent CA1 auf seinen Snoop mit einem FillM-Abschluss an den kohärenten Agenten CA2 (Pfeil 136). Während die Reihenfolge und die Zeitsteuerung der verschiedenen Nachrichten variieren können (z. B. ähnlich den in 29 und 30 gezeigten Bedingungen für Races), kann sich der Cache-Block im Allgemeinen mit einer zusätzlichen Nachricht (dem FillM-Abschluss) bewegen, wenn sich kollidierende Anforderungen auflösen.
  • In einer Ausführungsform kann aufgrund der vorstehend erwähnten Bedingungen für Races ein Snoop vor dem Füllabschluss empfangen werden, der von ihm gesnoopt werden soll (erkannt durch den Snoop, der den erwarteten Cache-Zustand überträgt). Zusätzlich kann der Snoop empfangen werden, bevor Ack-Abschlüsse erfasst werden und der Füllabschluss verarbeitet werden kann. Die Ack-Abschlüsse ergeben sich aus Snoops und hängen somit von dem Fortschritt in dem virtuellen Kanal ab, der Snoops überträgt. Dementsprechend können kollidierende Snoops (verzögertes Warten auf den erwarteten Cache-Zustand) interne Puffer füllen und in die Struktur zurück Druck ausüben, was eine Blockierung verursachen könnte. In einer Ausführungsform können die kohärenten Agenten C14A-C14n dazu konfiguriert sein, einen Snoop-Vorwärts und eine Snoop-Invalidierung in eine ausstehende Anforderung in dem Anforderungspuffer aufzunehmen, anstatt einen separaten Eintrag zuzuordnen. Nicht kollidierende Snoops oder kollidierende Snoops, die den Punkt erreichen werden, an dem sie ohne weitere Abhängigkeit von einer Zwischenverbindung verarbeitet werden können, können dann die kollidierenden Snoops umgehen und die Blockierung vermeiden. Die Aufnahme eines Snoop-Vorwärts und einer Snoop-Invalidierung kann ausreichend sein, da, wenn ein Snoop-Vorwärts erfolgt, die Weiterleitungszuständigkeit an das Ziel übertragen wird. Somit erfolgt kein weiterer Snoop-Vorwärts, bis der Anforderer seine aktuelle Anforderung abschließt und nach Abschluss des vorherigen Snoop-Vorwärts eine weitere neue Anforderung ausgibt. Wenn eine Snoop-Invalidierung erfolgt, ist der Anforderer gemäß dem Verzeichnis ungültig und empfängt wiederum keine weitere Invalidierung, bis er die vorherige Invalidierung verarbeitet, den Cache-Block erneut anfordert und eine neue Kopie erhält.
  • Somit kann der kohärente Agent C14A-C14n dazu konfiguriert sein, dazu beizutragen, eine Vorwärts-Fortschreiten sicherzustellen und/oder eine Blockierung zu verhindern, indem er einen Snoop erkennt, der von dem kohärenten Agenten an einem Cache-Block empfangen wird, für den der kohärente Agent eine ausstehende Anforderung aufweist, die vor dem Snoop angeordnet wurde. Der kohärente Agent kann dazu konfiguriert sein, den zweiten Snoop in die ausstehende Anforderung (z. B. in den Anforderungspuffereintrag, in dem die Anforderung gespeichert ist) aufzunehmen. Der kohärente Agent kann den aufgenommenen Snoop nach Abschluss der ausstehenden Anforderung verarbeiten. Wenn zum Beispiel der aufgenommene Snoop eine Snoop-Vorwärts-Anforderung ist, kann der kohärente Agent dazu konfiguriert sein, den Cache-Block nach Abschluss der ausstehenden Anforderung an einen anderen kohärenten Agenten weiterzuleiten, der in dem Snoop-Vorwärts-Snoop angegeben ist (und kann den Cache-Zustand in den durch die Snoop-Vorwärts-Anforderung angegebenen Zustand ändern). Wenn der aufgenommene Snoop eine Snoop-Invalidierungs-Anforderung ist, kann der kohärente Agent den Cache-Zustand aktualisieren und einen Bestätigungsabschluss nach Abschluss der ausstehenden Anforderung übertragen. Das Aufnehmen des Snoops in eine kollidierende Anforderung kann z. B. durch Einschließen zusätzlicher Speicherung in jeden Anforderungspuffereintrag für Daten, die den aufgenommenen Snoop beschreiben, implementiert werden.
  • 36 ist ein Flussdiagramm, das die Funktionsweise einer Ausführungsform eines kohärenten Agenten C14A-C14n basierend auf dem Empfangen eines Snoops 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 in kombinatorischer Logik in dem kohärenten Agenten C14A-C14n parallel durchgeführt werden. Blöcke, Kombinationen von Blöcken und/oder das Flussbild als Ganzes können über mehrere Taktzyklen geleitet werden. Der kohärente Agent C14A-C14n kann dazu konfiguriert sein, die in 36 gezeigte Operation zu implementieren. Zum Beispiel kann die in 36 veranschaulichte Operation Teil des Erkennens eines Snoops mit erwartetem Cache-Zustand sein, der nicht mit dem erwarteten Cache-Zustand konsistent ist und ausgesetzt ist (Entscheidungsblock C100 und Block C102 in 34).
  • Der kohärente Agent C14A-C14n kann dazu konfiguriert sein, die Adresse eines Snoops, der wegen Fehlens eines konsistenten Cache-Zustands ausgesetzt werden soll, mit Adressen von ausstehenden Anforderungen (oder ausgesetzten Anforderungen) in dem Anforderungspuffer C62 zu vergleichen. Wenn ein Adresskonflikt erkannt wird (Entscheidungsblock C140, „Ja“-Zweig), kann der Anforderungspuffer C62 den Snoop in den Puffereintrag aufnehmen, der der ausgesetzten Anforderung zugewiesen ist, für die der Adresskonflikt erkannt wird (Block C142). Wenn kein Adresskonflikt mit einer ausgesetzten Anforderung vorliegt (Entscheidungsblock C140, „Nein“-Zweig), kann der kohärente Agent C14A-C14n dazu konfiguriert sein, eine separate Pufferstelle (z. B. in dem Anforderungspuffer C62 oder einem anderen Puffer in dem kohärenten Agenten C14A-C14n) für den Snoop zuzuordnen, und kann dazu konfiguriert sein, Daten zu speichern, die den Snoop im Puffereintrag beschreiben (Block C144).
  • Wie zuvor erwähnt, kann das Cache-Kohärenzprotokoll sowohl cachefähige als auch nicht-cachefähige Anforderungen in einer Ausführungsform unterstützen, während die Kohärenz der beteiligten Daten aufrechterhalten wird. Die nicht-cachefähigen Anforderungen können zum Beispiel von nicht-kohärenten Agenten C20A-C20p ausgegeben werden, und die nicht-kohärenten Agenten C20A-C20p weisen möglicherweise nicht die Fähigkeit auf, Cache-Blöcke kohärent zu speichern. In einer Ausführungsform kann es einem kohärenten Agenten C14A-C14n möglich sein, auch eine nicht-cachefähige Anforderung auszugeben, und der kohärente Agent kann unter Umständen keine Cache-Daten zwischenspeichern, die als Reaktion auf eine solche Anforderung bereitgestellt werden. Dementsprechend wäre eine Snoop-Vorwärts-Anforderung für eine nicht-cachefähige Anforderung nicht geeignet, z. B. in dem Fall, dass die Daten, die ein gegebener nicht-kohärenter Agent C20A-C20p anfordert, sich in einem modifizierten Cache-Block in einem der kohärenten Agenten C14A-C14n befinden und an den gegebenen nicht-kohärenten Agenten C20A-C20p mit der Erwartung weitergeleitet würden, dass der modifizierte Cache-Block durch den gegebenen nicht-kohärenten Agenten C20A-C20p beibehalten würde.
  • Um kohärente nicht-cachefähige Transaktionen zu unterstützen, kann eine Ausführungsform des skalierbaren Cache-Kohärenzprotokolls mehrere Arten von Snoops einschließen. Zum Beispiel können in einer Ausführungsform die Snoops eine Snoop-Vorwärts-Anforderung und eine Snoop-Rückwärts-Anforderung einschließen. Wie zuvor erwähnt, kann die Snoop-Vorwärts-Anforderung bewirken, dass der Cache-Block an den anfordernden Agenten weitergeleitet wird. Die Snoop-Rückwärts-Anforderung kann andererseits bewirken, dass der Cache-Block an die Speichersteuerung zurückübertragen wird. In einer Ausführungsform kann eine Snoop-Invalidierungs-Anforderung auch unterstützt werden, um den Cache-Block zu invalidieren (mit Vorwärts- und Rückwärtsversionen, um die Abschlüsse zu leiten).
  • Insbesondere kann die Speichersteuerung C22A-C22m, die eine Anforderung empfängt (und noch genauer die Kohärenzsteuerung C24 in der Speichersteuerung C22A-C22m), dazu konfiguriert sein, einen Eintrag zu lesen, der einem Cache-Block entspricht, der durch die Adresse in der Anforderung von dem Verzeichnis C26 identifiziert wird. Die Speichersteuerung C22A-C22 m kann dazu konfiguriert sein, einen Snoop an einen gegebenen Agenten der kohärenten Agenten C14A-C14 m auszugeben, der eine zwischengespeicherte Kopie des Cache-Blocks gemäß dem Eintrag aufweist. Der Snoop gibt basierend darauf, dass die erste Anforderung einem ersten Typ (z. B. einer cachefähigen Anforderung) entspricht, an, dass der gegebene Agent den Cache-Block an eine Quelle der Anforderung übertragen soll. Der Snoop gibt basierend darauf, dass die erste Anforderung einem zweiten Typ (z. B. einer nicht-cachefähigen Anforderung) entspricht, an, dass der gegebene Agent den ersten Cache-Block an die Speichersteuerung übertragen soll. Die Speichersteuerung C22A-C22n kann dazu konfiguriert sein, basierend auf dem Empfangen des Cache-Blocks von dem gegebenen Agenten mit einem Abschluss an die Quelle der Anforderung zu antworten. Zusätzlich kann, wie bei anderen kohärenten Anforderungen, die Speichersteuerung C22A-C22n dazu konfiguriert sein, den Eintrag in dem Verzeichnis C26 zu aktualisieren, um den Abschluss der nicht-cachefähigen Anforderung basierend auf dem Ausgeben einer Vielzahl von Snoops für die nicht-cachefähige-Anforderung zu berücksichtigen.
  • 37 ist ein Blockdiagramm, das ein Beispiel einer nicht-cachefähigen Transaktion veranschaulicht, die in einer Ausführungsform kohärent verwaltet wird. 37 kann ein Beispiel eines 4-Sprung-Protokolls sein, um gesnoopte Daten durch die Speichersteuerung an den Anforderer zu leiten. Ein nicht-kohärenter Agent ist als NCA0 aufgeführt, ein kohärenter Agent ist als CA1 und die Speichersteuerung, die dem Cache-Block zugeordnet ist, ist als MC aufgeführt. Die vertikalen Linien 150, 152 und 154 für NCA0, CA1 und MC veranschaulichen die Quelle verschiedener Nachrichten (Basis eines Pfeils) und das Ziel der Nachrichten (Kopf eines Pfeils), die Transaktionen entsprechen. Die Zeit verläuft in 37 von oben nach unten.
  • Zu der Zeit, die dem oberen Bereich von 37 entspricht, weist der kohärente Agent CA1 den Cache-Block im exklusiven Zustand (E) auf. NCA0 gibt eine nicht-cachefähige Leseanforderung (NCRd) an die MC aus (Pfeil 156). Die MC bestimmt aus dem Verzeichnis 26, dass CA1 den Cache-Block aufweist, der die von der NCRd angeforderten Daten im exklusiven Zustand enthält, und erzeugt eine Snoop-Rückwärts-Anforderung (SnpBkI(E)) an CA1 (Pfeil 158). CA1 stellt eine Rückwärts-Kopieren-Snoop-Antwort (CpBkSR) mit dem Cache-Datenblock an die MC bereit (Pfeil 160). Wenn die Daten modifiziert werden, kann die MC den Speicher mit den Daten aktualisieren und kann die Daten für die nicht-cachefähige Leseanforderung an NCA0 in einer nicht-cachefähigen Leseantwort (NCRdRsp) bereitstellen (Pfeil 162), wodurch die Anforderung abgeschlossen ist. In einer Ausführungsform kann es mehr als einen Typ von NCRd-Anforderung geben: Anforderungen, die einen Cache-Block in einem gesnoopten kohärenten Agenten invalidieren, und Anforderungen, die es dem gesnoopten kohärenten Agenten ermöglichen, den Cache-Block beizubehalten. Die vorstehende Erörterung veranschaulicht die Invalidierung. In anderen Fällen kann der gesnoopte Agent den Cache-Block in demselben Zustand beibehalten.
  • Eine nicht-cachefähige Schreibanforderung kann auf ähnliche Weise durchgeführt werden, wobei die Snoop-Rückwärts-Anforderung verwendet wird, um den Cache-Block zu erhalten, und der Cache-Block mit den nicht-cachefähigen Schreibdaten modifiziert wird, bevor der Cache-Block in Speicher geschrieben wird. Eine nicht-cachefähige Schreibantwort kann weiterhin bereitgestellt werden, um den nicht-cachefähigen Agenten (NCA0 in 37) zu informieren, dass der Schreibvorgang abgeschlossen ist.
  • 38 ist ein Flussdiagramm, das die Funktionsweise einer Ausführungsform einer Speichersteuerung C22A-C22 m (und insbesondere einer Kohärenzsteuerung C24 in der Speichersteuerung C22A-C22 m in einer Ausführungsform) als Reaktion auf eine Anforderung veranschaulicht, wobei eine cachefähige und eine nicht-cachefähige Operation veranschaulicht wird. Die in 38 veranschaulichte Operation kann zum Beispiel eine detailliertere Veranschaulichung eines Abschnitts der in 32 gezeigten Operation sein. 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 in kombinatorischer Logik in der Kohärenzsteuerung C24 parallel durchgeführt werden. Blöcke, Kombinationen von Blöcken und/oder das Flussbild als Ganzes können über mehrere Taktzyklen geleitet werden. Die Kohärenzsteuerung C24 kann dazu konfiguriert sein, die in 38 gezeigte Operation zu implementieren.
  • Die Kohärenzsteuerung C24 kann dazu konfiguriert sein, das Verzeichnis basierend auf der Adresse in der Anforderung zu lesen. Wenn die Anforderung ein Verzeichnistreffer ist (Entscheidungsblock C170, „Ja“-Zweig), existiert der Cache-Block in einem oder mehreren Caches in den kohärenten Agenten C14A-C14n. Wenn die Anforderung nichtcachefähig ist (Entscheidungsblock C172, „Ja“-Zweig), kann die Kohärenzsteuerung C24 dazu konfiguriert sein, eine Snoop-Rückwärts-Anforderung an den kohärenten Agenten C14A-C14n, der für das Bereitstellen einer Kopie des Cache-Blocks zuständig ist (und Snoop-Invalidierungs-Anforderungen an gemeinsame Agenten (Rückwärtsvariante), falls zutreffend - Block C174), auszugeben. Die Kohärenzsteuerung C24 kann dazu konfiguriert sein, das Verzeichnis zu aktualisieren, sodass es die Snoops berücksichtigt, die abgeschlossen werden (z. B. Invalidieren des Cache-Blocks in den kohärenten Agenten C14A-C14n - Block C176). Die Kohärenzsteuerung C24 kann dazu konfiguriert sein, auf die Rückwärts-Kopieren-Snoop-Antwort (Entscheidungsblock C178, „Ja“-Zweig) sowie beliebige Ack-Snoop-Antworten von den gemeinsamen kohärenten Agenten C14A-C14n zu warten, und kann dazu konfiguriert sein, den nicht-cachefähigen Abschluss für den anfordernden Agenten (NCRdRsp oder NCWrRsp, je nachdem, was zutrifft) zu erzeugen (Block C180). Die Daten können auch durch die Speichersteuerung C22A-C22 m in Speicher geschrieben werden, wenn der Cache-Block modifiziert wird.
  • Wenn die Anforderung cachefähig ist (Entscheidungsblock C172, „Nein“-Zweig), kann die Kohärenzsteuerung C24 dazu konfiguriert sein, eine Snoop-Vorwärts-Anforderung an den kohärenten Agenten C14A-C14n, der für die Weiterleitung des Cache-Blocks zuständig ist (Block C182), sowie gegebenenfalls andere Snoops an andere Cachekohärente Agenten C14A-C14n zu erzeugen. Die Kohärenzsteuerung C24 kann das Verzeichnis C24 aktualisieren, um den Abschluss der Transaktion zu berücksichtigen (Block C184).
  • Wenn die Anforderung kein Treffer in dem Verzeichnis C26 ist (Entscheidungsblock C170, „Nein“-Zweig), gibt es keine zwischengespeicherten Kopien des Cache-Blocks in den kohärenten Agenten C14A-C14n. In diesem Fall können keine Snoops erzeugt werden, und die Speichersteuerung C22A-C22 m kann dazu konfiguriert sein, einen Füllabschluss (für eine cachefähige Anforderung) oder einen nicht-cachefähigen Abschluss (für eine nicht-cachefähige Anforderung) zu erzeugen, um die Daten bereitzustellen oder die Anforderung abzuschließen (Block C186). Im Falle einer cachefähigen Anforderung kann die Kohärenzsteuerung C24 das Verzeichnis C26 aktualisieren, um einen Eintrag für den Cache-Block zu erstellen, und kann den anfordernden kohärenten Agenten C14A-C14n initialisieren, sodass er eine Kopie des Cache-Blocks in dem von dem kohärenten Agenten C14A-C14n angeforderten Cache-Zustand aufweist (Block C188).
  • 39 ist eine Tabelle C190, die beispielhafte Cache-Zustände veranschaulicht, die in einer Ausführungsform der kohärente Agenten C14A-C14n implementiert sein können. Andere Ausführungsformen können unterschiedliche Cache-Zustände, eine Teilmenge der gezeigten und anderer Cache-Zustände, eine Obermenge der gezeigten und anderer Cache-Zustände usw. verwenden. Der modifizierte Zustand (M) oder „schmutzige exklusive“ Zustand kann ein Zustand in einem kohärenten Agenten C14A-C14n sein, der die einzige zwischengespeicherte Kopie des Cache-Blocks aufweist (die Kopie ist exklusiv), und die Daten in der zwischengespeicherten Kopie wurden in Bezug auf die entsprechenden Daten in Speicher modifiziert (z. B. ist mindestens ein Datenbyte von einem entsprechenden Byte im Speicher verschieden). Modifizierte Daten können auch als schmutzige Daten bezeichnet werden. Der eigene Zustand (O) oder „schmutzige gemeinsame“ Zustand kann ein Zustand in einem kohärenten Agenten C14A-C14n sein, der eine modifizierte Kopie des Cache-Blocks aufweist, aber die Kopie mit mindestens einem anderen kohärenten Agenten C14A-C14n gemeinsam genutzt haben kann (obwohl es möglich ist, dass der andere kohärente Agent C14A-C14n anschließend den gemeinsamen Cache-Block freigegeben hat). Der andere kohärente Agent C14A-C14n würde den Cache-Block in dem sekundären gemeinsamen Zustand aufweisen. Der exklusive Zustand (E) oder „saubere exklusive“ Zustand kann ein Zustand in einem kohärenten Agenten C14A-C14n sein, der die einzige zwischengespeicherte Kopie des Cache-Blocks aufweist, aber die zwischengespeicherte Kopie weist die gleichen Daten wie die entsprechenden Daten in Speicher auf. Der exklusive datenlose Zustand (EnD-Zustand) oder „saubere exklusive, datenlose“ Zustand kann ein Zustand in einem kohärenten Agenten C14A-C14n ähnlich dem exklusiven (E) Zustand sein, außer dass der Cache-Datenblock nicht an den kohärenten Agenten geliefert wird. Ein solcher Zustand kann in einem Fall verwendet werden, in dem der kohärente Agent C14A-C14n jedes Byte in dem Cache-Block modifizieren soll, und somit kann es keinen Nutzen oder Kohärenzgrund geben, um die vorherigen Daten in dem Cache-Block zu liefern. Der EnD-Zustand kann eine Optimierung zum Reduzieren des Verkehrs auf der Verschaltung C28 sein und möglicherweise nicht in anderen Ausführungsformen implementiert sein. Der primäre gemeinsame Zustand (P-Zustand) oder „saubere gemeinsame primäre“ Zustand kann der Zustand in einem kohärenten Agenten C14A-C14n sein, der eine gemeinsame Kopie des Cache-Blocks aufweist, aber auch dafür zuständig ist, den Cache-Block basierend auf einer Snoop-Vorwärts-Anforderung an einen anderen kohärenten Agenten weiterzuleiten. Der sekundäre gemeinsame Zustand (S-Zustand) oder „saubere gemeinsame sekundäre“ Zustand kann ein Zustand in einem kohärenten Agenten C14A-C14n sein, der eine gemeinsame Kopie des Cache-Blocks aufweist, aber nicht für das Bereitstellen des Cache-Blocks zuständig ist, wenn ein anderer kohärenter Agent C14A-C14n den Cache-Block in einem primären gemeinsamen Zustand aufweist. In einigen Ausführungsformen kann, wenn kein kohärenter Agent C14A-C14n den Cache-Block in dem primären gemeinsamen Zustand aufweist, die Kohärenzsteuerung C24 einen sekundären gemeinsamen Agenten auswählen, um den Cache-Block bereitzustellen (und kann eine Snoop-Vorwärts-Anforderung an den ausgewählten kohärenten Agenten senden). In anderen Ausführungsformen kann die Kohärenzsteuerung C24 bewirken, dass die Speichersteuerung C22A-C22 m den Cache-Block an einen Anforderer bereitstellt, wenn kein kohärenter Agent C14A-C14n im primären gemeinsamen Zustand vorhanden ist. Der Ungültig-Zustand (I) kann ein Zustand in einem kohärenten Agenten C14A-C14n sein, der keine zwischengespeicherte Kopie des Cache-Blocks aufweist. Der kohärente Agent C14A-C14n im ungültigen Zustand kann unter Umständen zuvor keine Kopie angefordert haben oder kann eine Kopie aufweisen und sie basierend auf einem Snoop oder basierend auf dem Freigeben des Cache-Blocks invalidiert haben, um einen anderen Cache-Block zwischenzuspeichern.
  • 40 ist eine Tabelle C192, die verschiedene Nachrichten veranschaulicht, die in einer Ausführungsform des skalierbaren Cache-Kohärenzprotokolls verwendet werden können. Es können alternative Nachrichten in anderen Ausführungsformen, Teilmengen der veranschaulichten Nachrichten und zusätzlichen Nachrichten, Obermengen der veranschaulichten Nachrichten und zusätzlichen Nachrichten usw. vorhanden sein. Die Nachrichten können eine Transaktionskennung übertragen, die die Nachrichten von der gleichen Transaktion (z. B. anfängliche Anforderung, Snoops, Abschlüsse) verbindet. Die anfänglichen Anforderungen und Snoops können die Adresse des Cache-Blocks übertragen, der von der Transaktion betroffen ist. Einige andere Nachrichten können ebenfalls die Adresse übertragen. In einigen Ausführungsformen können alle Nachrichten die Adresse übertragen.
  • Cachefähige Lesetransaktionen können mit einer cachefähigen Leseanforderungsnachricht (CRd) initiiert werden. Es kann verschiedene Versionen der CRd-Anforderung geben, um verschiedene Cache-Zustände anzufordern. Zum Beispiel kann CRdEx den exklusiven Zustand anfordern, CRdS kann den sekundären gemeinsamen Zustand anfordern usw. Der Cache-Zustand, der tatsächlich als Reaktion auf eine cachefähige Leseanforderung bereitgestellt wird, kann mindestens so permissiv wie der Anforderungszustand sein und kann noch permissiver sein. Zum Beispiel kann CRdEx einen Cache-Block im exklusiven oder modifizierten Zustand empfangen. CRdS kann den Block in primären gemeinsamen, exklusiven, eigenen oder modifizierten Zuständen empfangen. In einer Ausführungsform kann eine opportunistische CRd-Anforderung implementiert werden und kann der permissivst-mögliche Zustand (der andere Kopien des Cache-Blocks nicht invalidiert) gewährt werden (z. B. exklusiv, wenn kein anderer kohärenter Agent eine eigene oder primäre gemeinsame zwischengespeicherte Kopie aufweist, wenn es zwischengespeicherte Kopien gibt, usw.).
  • Die Nachricht der Änderung in exklusiv (CtoE) kann von einem kohärenten Agenten verwendet werden, der eine Kopie des Cache-Blocks in einem Zustand aufweist, der keine Modifikation zulässt (z. B. eigen, primär gemeinsam, sekundär gemeinsam), und der kohärente Agent versucht, den Cache-Block zu modifizieren (z. B. benötigt der kohärente Agent exklusiven Zugriff, um den Cache-Block in modifiziert zu ändern). In einer Ausführungsform kann eine bedingte CtoE-Nachricht für eine bedingte Speicheranweisung verwendet werden. Die bedingte Speicheranweisung ist Teil eines Paares aus Ladereservierung/Speicherbedingung, bei dem der Ladevorgang eine Kopie eines Cache-Blocks erhält und eine Reservierung für den Cache-Block setzt. Der kohärente Agent C14A-C14n kann den Zugriff auf den Cache-Block durch andere Agenten überwachen und kann das Speichern bedingt ausführen, basierend darauf, ob der Cache-Block nicht durch einen anderen kohärenten Agenten C14A-C14n zwischen dem Ladevorgang und dem Speichervorgang modifiziert wurde oder nicht (erfolgreich speichern, wenn der Cache-Block nicht modifiziert wurde, nicht speichern, wenn der Cache-Block modifiziert wurde). Zusätzliche Details werden nachstehend bereitgestellt.
  • In einer Ausführungsform kann die Nachricht zum exklusiven Lesen nur von Daten im Cache (CRdE-Donly) verwendet werden, wenn ein kohärenter Agent C14A-C14n den gesamten Cache-Block modifizieren soll. Wenn der Cache-Block nicht in einem anderen kohärenten Agenten C14A-C14n modifiziert wird, kann der anfordernde kohärente Agent C14A-C14n den EnD-Cache-Zustand verwenden und alle Bytes des Blocks modifizieren, ohne dass die vorherigen Daten in dem Cache-Block an den Agenten übertragen werden. Wenn der Cache-Block modifiziert wird, kann der modifizierte Cache-Block an den anfordernden kohärenten Agenten C14A-C14n übertragen werden, und der anfordernde kohärente Agent C14A-C14n kann den Cache-Zustand M verwenden.
  • Nicht-cachefähige Transaktionen können mit nicht-cachefähigen Lese- und nicht-cachefähigen Schreibnachrichten (NCRd- und NCWr-Nachrichten) initiiert werden.
  • Snoop-Vorwärts und Snoop-Rückwärts (SnpFwd bzw. SnpBk) können für Snoops wie zuvor beschrieben verwendet werden. Es kann Nachrichten geben, um verschiedene Zustände in dem empfangenden kohärenten Agenten C14A-C14n nach dem Verarbeiten des Snoops (z. B. ungültig oder gemeinsam) anzufordern. Es kann auch eine Snoop-Vorwärts-Nachricht für die CRdE-Donly-Anforderung geben, die Weiterleiten, wenn der Cache-Block modifiziert wird, aber andernfalls kein Weiterleiten, und Invalidierung bei dem Empfänger anfordert. In einer Ausführungsform kann es auch Anforderungen für nur invalidierenden Snoop-Vorwärts und Snoop-Rückwärts geben (z. B. Snoops, die den Empfänger veranlassen, zu invalidieren und an den Anforderer bzw. die Speichersteuerung bestätigen, ohne die Daten zurückzugeben), die als SnpInvFw und SnpInvBk in Tabelle C192 gezeigt sind.
  • Abschlussnachrichten können die Füllnachricht (Fill) und die Bestätigungsnachricht (Ack) einschließen. Die Füllnachricht kann den Zustand des Cache-Blocks spezifizieren, der von dem Anforderer nach dem Abschluss angenommen werden soll. Die cachefähige Writeback-Nachricht (CWB-Nachricht) kann verwendet werden, um einen Cache-Block an die Speichersteuerung C22A-C22 m zu übertragen (z. B. basierend auf dem Freigeben des Cache-Blocks aus dem Cache). Die Rückwärts-Kopieren-Snoop-Antwort (CpBkSR) kann verwendet werden, um einen Cache-Block an die Speichersteuerung C22A-C22 m zu übertragen (z. B. basierend auf einer Snoop-Rückwärts-Nachricht). Der nicht-cachefähige Schreibabschluss (NCWrRsp) und der nicht-cachefähige Leseabschluss (NCRdRsp) können verwendet werden, um nicht-cachefähige Anforderungen abzuschließen.
  • 41 ist ein Flussdiagramm, das die Funktionsweise einer Ausführungsform der Kohärenzsteuerung C24 basierend auf dem Empfangen einer Nachricht einer bedingten Änderung in exklusiv (CtoECond-Nachricht) veranschaulicht. Zum Beispiel kann 41 in einer Ausführungsform eine detailliertere Beschreibung eines Abschnitts von Block C70 in 32 sein. 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 in kombinatorischer Logik in der Kohärenzsteuerung C24 parallel durchgeführt werden. Blöcke, Kombinationen von Blöcken und/oder das Flussbild als Ganzes können über mehrere Taktzyklen geleitet werden. Die Kohärenzsteuerung C24 kann dazu konfiguriert sein, die in 41 gezeigte Operation zu implementieren.
  • Die CtoECond-Nachricht kann durch einen kohärenten Agenten C14A-14n (die „Quelle“) basierend auf der Ausführung einer bedingten Speicheranweisung ausgegeben werden. Die bedingte Speicheranweisung kann lokal in der Quelle fehlschlagen, wenn die Quelle eine Kopie des Cache-Blocks vor der Speicherbedingungsanweisung verliert (die Kopie ist z. B. nicht länger gültig). Wenn die Quelle noch eine gültige Kopie aufweist (z. B. im Zustand sekundär oder primär gemeinsam oder im Zustand eigen), ist es bei Ausführung der bedingten Speicheranweisung weiterhin möglich, dass eine andere Transaktion vor der Nachricht der Änderung in exklusiv von der Quelle angeordnet wird, die die Quelle veranlasst, ihre zwischengespeicherte Kopie zu invalidieren. Die gleiche Transaktion, die die zwischengespeicherte Kopie invalidiert, bewirkt auch, dass die bedingte Speicheranweisung in der Quelle fehlschlägt. Um Invalidierungen des Cache-Blocks und eine Übertragung des Cache-Blocks an die Quelle, an der die bedingte Speicheranweisung fehlschlagen wird, zu vermeiden, kann die CtoECond-Nachricht von der Quelle bereitgestellt und verwendet werden.
  • Die CtoECond-Nachricht kann so definiert werden, dass sie mindestens zwei mögliche Ergebnisse aufweist, wenn sie von der Kohärenzsteuerung C24 geordnet wird. Wenn die Quelle noch eine gültige Kopie des Cache-Blocks aufweist, wie in dem Verzeichnis C26 zu der Zeit angegeben, zu der die CtoECond-Nachricht geordnet und verarbeitet wird, kann CtoECond ähnlich einer CtoE-Nachricht ohne Bedingung fortfahren: Ausgeben von Snoops und Erhalten des exklusiven Zustands für den Cache-Block. Wenn die Quelle keine gültige Kopie des Cache-Blocks aufweist, kann die Kohärenzsteuerung C24 die CtoE-Transaktion fehlschlagen lassen, wobei sie einen Ack-Abschluss mit der Angabe, dass CtoE fehlgeschlagen ist, an die Quelle zurückgibt. Die Quelle kann die CtoE-Transaktion basierend auf dem Ack-Abschluss beenden.
  • Wie in 41 veranschaulicht, kann die Kohärenzsteuerung C24 dazu konfiguriert sein, den Verzeichniseintrag für die Adresse zu lesen (Block C194). Wenn die Quelle eine gültige Kopie des Cache-Blocks behält (z. B. in einem gemeinsamen Zustand) (Entscheidungsblock C196, „Ja“-Zweig), kann die Kohärenzsteuerung C24 dazu konfiguriert sein, Snoops basierend auf den Cache-Zuständen im Verzeichniseintrag zu erzeugen (z. B. Snoops, um den Cache-Block zu invalidieren, sodass sich die Quelle in den exklusiven Zustand ändern kann) (Block C198). Wenn die Quelle keine gültige Kopie des Cache-Blocks beibehält (Entscheidungsblock C196, „Nein“-Zweig), kann die Cache-Steuerung C24 dazu konfiguriert sein, einen Bestätigungsabschluss an die Quelle zu übertragen, die das Fehlschlagen der CtoECond-Nachricht angibt (Block C200). Die CtoE-Transaktion kann somit beendet werden.
  • Nun unter Bezugnahme auf 42 ist ein Flussdiagramm gezeigt, das die Funktionsweise einer Ausführungsform der Kohärenzsteuerung C24 veranschaulicht, um einen Verzeichniseintrag zu lesen und Snoops zu bestimmen (z. B. mindestens einen Abschnitt von Block C70 in 32 in einer Ausführungsform). 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 in kombinatorischer Logik in der Kohärenzsteuerung C24 parallel durchgeführt werden. Blöcke, Kombinationen von Blöcken und/oder das Flussbild als Ganzes können über mehrere Taktzyklen geleitet werden. Die Kohärenzsteuerung C24 kann dazu konfiguriert sein, die in 42 gezeigte Operation zu implementieren.
  • Wie in 42 veranschaulicht, kann die Kohärenzsteuerung C24 dazu konfiguriert sein, den Verzeichniseintrag für die Adresse der Anforderung zu lesen (Block C202). Basierend auf den Cache-Zuständen im Verzeichniseintrag kann die Kohärenzsteuerung C24 dazu konfiguriert sein, Snoops zu erzeugen. Zum Beispiel kann die Kohärenzsteuerung C24, basierend darauf, dass der Cache-Zustand in einem der Agenten mindestens primär gemeinsam ist (Entscheidungsblock C204, „Ja“-Zweig), dazu konfiguriert sein, einen SnpFwd-Snoop an den primären gemeinsamen Agenten zu übertragen, wodurch angegeben wird, dass der primäre gemeinsame Agent den Cache-Block an den anfordernden Agenten übertragen soll. Für andere Agenten (z. B. in dem sekundären gemeinsamen Zustand) kann die Kohärenzsteuerung C24 dazu konfiguriert sein, nur invalidierende Snoops (SnpInv) zu erzeugen, die angeben, dass die anderen Agenten den Cache-Block nicht an den anfordernden Agenten übertragen sollen (Block C206). In einigen Fällen (z. B. eine CRdS-Anforderung, die eine gemeinsame Kopie des Cache-Blocks anfordert), müssen die anderen Agenten keinen Snoop empfangen, da sie den Zustand nicht ändern müssen. Ein Agent kann einen Cache-Zustand aufweisen, der mindestens primär gemeinsam ist, wenn es sich um einen Cache-Zustand handelt, der mindestens so permissiv wie primär gemeinsam ist (z. B. primär gemeinsam, eigen, exklusiv oder modifiziert in der Ausführungsform von 39).
  • Wenn kein Agent einen Cache-Zustand aufweist, der mindestens primär gemeinsam ist (Entscheidungsblock C204, „Nein“-Zweig), kann die Kohärenzsteuerung C24 dazu konfiguriert sein, zu bestimmen, ob ein oder mehrere Agenten den Cache-Block in dem sekundären gemeinsamen Zustand aufweisen (Entscheidungsblock 208). Wenn dies der Fall ist (Entscheidungsblock C208, „Ja“-Zweig), kann die Kohärenzsteuerung C24 dazu konfiguriert sein, einen der Agenten mit einem sekundären gemeinsamen Zustand auszuwählen und kann eine SnpFwd-Anforderungsanweisung übertragen, der ausgewählte Agent zum Weiterleiten an den Cache-Block an den anfordernden Agenten. Die Kohärenzsteuerung C24 kann dazu konfiguriert sein, SnpInv-Anforderungen für andere Agenten in dem sekundären gemeinsamen Zustand zu erzeugen, die angeben, dass die anderen Agenten den Cache-Block nicht an den anfordernden Agenten übertragen sollen (Block C210). Wie vorstehend aufgeführt, können SnpInv-Nachrichten möglicherweise nicht erzeugt und übertragen werden, wenn die anderen Agenten den Zustand nicht ändern müssen.
  • Wenn kein Agent den Cache-Zustand sekundär gemeinsam aufweist (Entscheidungsblock C208, „Nein“-Zweig), kann die Kohärenzsteuerung C24 dazu konfiguriert sein, einen Füllabschluss zu erzeugen, und kann dazu konfiguriert sein, die Speichersteuerung zu veranlassen, den Cache-Block zur Übertragung an den Anforderungsagenten zu lesen (Block C212).
  • 43 ist ein Flussdiagramm, das die Funktionsweise einer Ausführungsform der Kohärenzsteuerung C24 veranschaulicht, um einen Verzeichniseintrag zu lesen und Snoops (z. B. mindestens einen Abschnitt von Block C70 in 32 in einer Ausführungsform) als Reaktion auf eine CRdE-Donly-Anforderung zu bestimmen. 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 in kombinatorischer Logik in der Kohärenzsteuerung C24 parallel durchgeführt werden. Blöcke, Kombinationen von Blöcken und/oder das Flussbild als Ganzes können über mehrere Taktzyklen geleitet werden. Die Kohärenzsteuerung C24 kann dazu konfiguriert sein, die in 43 gezeigte Operation zu implementieren.
  • Wie vorstehend erwähnt, kann die CRdE-Donly-Anforderung von einem kohärenten Agenten C14A-C14n verwendet werden, der alle Bytes in einem Cache-Block modifizieren soll. Somit kann die Kohärenzsteuerung C24 andere Agenten veranlassen, den Cache-Block zu invalidieren. Wenn ein Agent den Cache-Block modifiziert hat, kann der Agent den modifizierten Cache-Block an den Anforderungsagenten liefern. Andernfalls können die Agenten den Cache-Block unter Umständen nicht liefern.
  • Die Kohärenzsteuerung C24 kann dazu konfiguriert sein, den Verzeichniseintrag für die Adresse der Anforderung zu lesen (Block C220). Basierend auf den Cache-Zuständen im Verzeichniseintrag kann die Kohärenzsteuerung C24 dazu konfiguriert sein, Snoops zu erzeugen. Wenn insbesondere ein gegebener Agent eine modifizierte Kopie des Cache-Blocks aufweisen kann (z. B. weist der gegebene Agent den Cache-Block im exklusiven oder primären Zustand auf) (Block C222, „Ja“-Zweig), kann die Cache-Steuerung C24 einen Snoop-Vorwärts nur schmutzig (SnpFwdDonly) an den Agenten erzeugen, um den Cache-Block an den Anforderungsagenten zu übertragen (Block C224). Wie vorstehend erwähnt, kann die SnpFwdDonly-Anforderung bewirken, dass der empfangende Agent den Cache-Block überträgt, wenn die Daten modifiziert werden, ansonsten den Cache-Block aber nicht überträgt. In beiden Fällen kann der empfangende Agent den Cache-Block invalidieren. Der empfangende Agent kann einen Füllabschluss übertragen, wenn die Daten modifiziert werden, und den modifizierten Cache-Block bereitstellen. Andernfalls kann der empfangende Agent einen Ack-Abschluss übertragen. Wenn kein Agent eine modifizierte Kopie aufweist (Entscheidungsblock C222, „Nein“-Zweig), kann die Kohärenzsteuerung C24 dazu konfiguriert sein, eine Snoop-Invalidierung (Snplnv) für jeden Agenten zu erzeugen, der eine zwischengespeicherte Kopie des Cache-Blocks aufweist. (Block C226). In einer anderen Ausführungsform kann die Kohärenzsteuerung C24 unter Umständen keine Weiterleitung der Daten anfordern, selbst wenn der Cache-Block modifiziert ist, da der Anforderer den gesamten Cache-Block modifizieren soll. Das heißt, die Kohärenzsteuerung C24 kann bewirken, dass der Agent, der die modifizierte Kopie aufweist, die Daten invalidiert, ohne die Daten weiterzuleiten.
  • Basierend auf dieser Offenbarung kann ein System eine Vielzahl von kohärenten Agenten umfassen, wobei ein gegebener Agent der Vielzahl von kohärenten Agenten einen oder mehrere Caches zum Zwischenspeichern von Speicherdaten umfasst. Das System kann ferner eine Speichersteuerung umfassen, die mit einer oder mehreren Speichervorrichtungen gekoppelt ist, wobei die Speichersteuerung ein Verzeichnis einschließt, das dazu konfiguriert ist, zu verfolgen, welcher der Vielzahl von kohärenten Agenten Kopien einer Vielzahl von Cache-Blöcken in den Speichervorrichtungen und Zustände der zwischengespeicherten Kopien in der Vielzahl von kohärenten Agenten zwischenspeichert. Basierend auf einer ersten Anforderung für einen ersten Cache-Block durch einen ersten Agenten der Vielzahl von kohärenten Agenten kann die Speichersteuerung konfiguriert sein zum: Lesen eines Eintrags, der dem ersten Cache-Block entspricht, aus dem Verzeichnis, Ausgeben eines Snoops an einen zweiten Agenten der Vielzahl von kohärenten Agenten, der eine zwischengespeicherte Kopie des ersten Cache-Blocks gemäß dem Eintrag aufweist, und Einschließen einer Kennung eines ersten Zustands des ersten Cache-Blocks in dem zweiten Agenten in den Snoop. Basierend auf dem Snoop kann der zweite Agent konfiguriert sein zum: Vergleichen des ersten Zustands mit einem zweiten Zustand des ersten Cache-Blocks in dem zweiten Agenten und Verzögern der Verarbeitung des Snoops basierend auf dem ersten Zustand, der nicht mit dem zweiten Zustand übereinstimmt, bis der zweite Zustand als Reaktion auf eine andere Kommunikation in Bezug auf eine andere Anforderung als die erste Anforderung in den ersten Zustand geändert wird. In einer Ausführungsform kann die Speichersteuerung konfiguriert sein zum: Bestimmen eines Abschlusszählwerts, der eine Anzahl von Abschlüssen angibt, die der erste Agent für die erste Anforderung empfangen wird, wobei die Bestimmung auf den Zuständen von dem Eintrag basiert; und Einschließen des Abschlusszählwerts in eine Vielzahl von Snoops basierend auf der ersten Anforderung, die den Snoop einschließt, der an den zweiten Agenten ausgegeben wird. Der erste Agent kann konfiguriert sein zum: Initialisieren eines Abschlusszählers mit dem Abschlusszählwert basierend auf dem Empfangen eines anfänglichen Abschlusses von einem der Vielzahl von kohärenten Agenten, Aktualisieren des Abschlusszählers basierend auf dem Empfangen eines nachfolgenden Abschlusses aus einem anderen der Vielzahl von kohärenten Agenten und Abschließen der ersten Anforderung basierend auf dem Abschlusszähler. In einer Ausführungsform kann die Speichersteuerung dazu konfiguriert sein, die Zustände im Eintrag des Verzeichnisses zu aktualisieren, um den Abschluss der ersten Anforderung basierend auf der Ausgabe einer Vielzahl von Snoops basierend auf der ersten Anforderung zu berücksichtigen. In einer Ausführungsform kann der erste Agent dazu konfiguriert sein, einen zweiten Snoop zu erkennen, der von dem ersten Agenten an dem ersten Cache-Block empfangen wird, wobei der erste Agent dazu konfiguriert sein kann, den zweiten Snoop in die erste Anforderung aufzunehmen. In einer Ausführungsform kann der erste Agent dazu konfiguriert sein, den zweiten Snoop nach Abschluss der ersten Anforderung zu verarbeiten. In einer Ausführungsform kann der erste Agent dazu konfiguriert sein, den ersten Cache-Block an einen dritten Agenten weiterzuleiten, der im zweiten Snoop nach Abschluss der ersten Anforderung angegeben ist. In einer Ausführungsform kann ein dritter Agent dazu konfiguriert sein, eine Anforderung der bedingten Änderung in den exklusiven Zustand basierend auf einer bedingten Speicheranweisung an einen zweiten Cache-Block zu erzeugen, der in einem gültigen Zustand am dritten Agenten vorliegt. Die Speichersteuerung kann dazu konfiguriert sein, basierend auf einem zweiten Eintrag in das Verzeichnis, der dem zweiten Cache-Block zugeordnet ist, zu bestimmen, ob der dritte Agent eine gültige Kopie des zweiten Cache-Blocks beibehält, und die Speichersteuerung kann dazu konfiguriert sein, basierend auf einer Bestimmung, dass der dritte Agent die gültige Kopie des zweiten Cache-Blocks nicht mehr beibehält, einen Abschluss an den dritten Agenten zu übertragen, der ein Fehlschlagen angibt, und die Anforderung einer bedingten Änderung in exklusiv zu beenden. In einer Ausführungsform kann die Speichersteuerung dazu konfiguriert sein, basierend auf einer Bestimmung, dass der dritte Agent die gültige Kopie des zweiten Cache-Blocks beibehält, einen oder mehrere Snoops an andere der Vielzahl von kohärenten Agenten auszugeben, wie durch den zweiten Eintrag angegeben. In einer Ausführungsform gibt der Snoop basierend darauf, dass der erste Zustand primär gemeinsam ist, an, dass der zweite Agent den ersten Cache-Block an den ersten Agenten übertragen soll, und wobei der Snoop , basierend darauf, dass der erste Zustand sekundär gemeinsam ist, angibt, dass der zweite Agent den ersten Cache-Block nicht übertragen soll. In einer Ausführungsform gibt der Snoop an, dass der zweite Agent den ersten Cache-Block selbst in dem Fall übertragen soll, dass der erste Zustand sekundär gemeinsam ist.
  • In einer anderen Ausführungsform umfasst ein System eine Vielzahl von kohärenten Agenten, wobei ein gegebener Agent der Vielzahl von kohärenten Agenten einen oder mehrere Caches zum Zwischenspeichern von Speicherdaten umfasst. Das System umfasst ferner eine Speichersteuerung, die mit einer oder mehreren Speichervorrichtungen gekoppelt ist. Die Speichersteuerung kann ein Verzeichnis einschließen, das dazu konfiguriert ist, zu verfolgen, welcher der Vielzahl von kohärenten Agenten Kopien einer Vielzahl von Cache-Blöcken in den Speichervorrichtungen und Zustände der zwischengespeicherten Kopien in der Vielzahl von kohärenten Agenten zwischenspeichert. Basierend auf einer ersten Anforderung für einen ersten Cache-Block durch einen ersten Agenten der Vielzahl von kohärenten Agenten kann die Speichersteuerung konfiguriert sein zum: Lesen eines Eintrags aus dem Verzeichnis, der dem ersten Cache-Block entspricht, und Ausgeben eines Snoops an einen zweiten Agenten der Vielzahl von kohärenten Agenten, der eine zwischengespeicherte Kopie des ersten Cache-Blocks gemäß dem Eintrag aufweist. Der Snoop kann basierend darauf, dass der Eintrag angibt, dass der zweite Agent den ersten Cache-Block in mindestens einem primären gemeinsamen Zustand aufweist, angeben, dass der zweite Agent den ersten Cache-Block an den ersten Agenten übertragen soll. Der Snoop gibt basierend darauf, dass sich ein anderer Agent, der den ersten Cache-Block aufweist, in mindestens dem primären gemeinsamen Zustand befindet, an, dass der zweite Agent den ersten Cache-Block nicht an den ersten Agenten übertragen soll. In einer Ausführungsform befindet sich der erste Agent in einem sekundären gemeinsamen Zustand für den ersten Cache-Block, wenn sich der andere Agent in dem primären gemeinsamen Zustand befindet. In einer Ausführungsform gibt der Snoop basierend darauf, dass sich der andere Agent, der den ersten Cache-Block aufweist, in mindestens dem primären gemeinsamen Zustand befindet, an, dass der erste Agent den ersten Cache-Block invalidieren soll. In einer Ausführungsform ist die Speichersteuerung dazu konfiguriert, basierend darauf, dass der andere Agent den ersten Cache-Block in dem primären gemeinsamen Zustand aufweist und die erste Anforderung eine Anforderung für eine gemeinsame Kopie des ersten Cache-Blocks ist, keinen Snoop an den zweiten Agenten auszugeben. In einer Ausführungsform kann die erste Anforderung für einen exklusiven Zustand für den ersten Cache-Block sein, und der erste Agent soll eine Gesamtheit des ersten Cache-Blocks modifizieren. Der Snoop kann angeben, dass der zweite Agent den ersten Cache-Block übertragen soll, wenn sich der erste Cache-Block in einem modifizierten Zustand in dem zweiten Agenten befindet. In einer Ausführungsform gibt der Snoop an, dass der zweite Agent den ersten Cache-Block invalidieren soll, wenn sich der erste Cache-Block in dem zweiten Agent nicht in einem modifizierten Zustand befindet.
  • In einer anderen Ausführungsform umfasst ein System eine Vielzahl von kohärenten Agenten, wobei ein gegebener Agent der Vielzahl von kohärenten Agenten einen oder mehrere Caches zum Zwischenspeichern von Speicherdaten umfasst. Das System umfasst ferner eine Speichersteuerung, die mit einer oder mehreren Speichervorrichtungen gekoppelt ist. Die Speichersteuerung kann ein Verzeichnis einschließen, das dazu konfiguriert ist, zu verfolgen, welcher der Vielzahl von kohärenten Agenten Kopien einer Vielzahl von Cache-Blöcken in den Speichervorrichtungen und Zustände der zwischengespeicherten Kopien in der Vielzahl von kohärenten Agenten zwischenspeichert. Basierend auf einer ersten Anforderung für einen ersten Cache-Block kann die Speichersteuerung konfiguriert sein zum: Lesen eines Eintrags aus dem Verzeichnis, der dem ersten Cache-Block entspricht, und Ausgeben eines Snoops an einen zweiten Agenten der Vielzahl von kohärenten Agenten, der eine zwischengespeicherte Kopie des ersten Cache-Blocks gemäß dem Eintrag aufweist. Der Snoop kann basierend auf einem Attribut, das der ersten Anforderung mit einem ersten Wert zugeordnet ist, angeben, dass der zweite Agent den ersten Cache-Block an eine Quelle der ersten Anforderung übertragen soll, und der Snoop gibt basierend darauf, dass das Attribut einen zweiten Wert aufweist, an, dass der zweite Agent den ersten Cache-Block an die Speichersteuerung übertragen soll. In einer Ausführungsform ist das Attribut ein Anforderungstyp, der erste Wert ist cachefähig und der zweite Wert ist nichtcachefähig. In einer anderen Ausführungsform ist das Attribut eine Quelle der ersten Anforderung. In einer Ausführungsform kann die Speichersteuerung dazu konfiguriert sein, basierend auf dem Empfangen des ersten Cache-Blocks von dem zweiten Agenten an die Quelle der ersten Anforderung zu antworten. In einer Ausführungsform ist die Speichersteuerung dazu konfiguriert, die Zustände im Eintrag des Verzeichnisses zu aktualisieren, um den Abschluss der ersten Anforderung basierend auf der Ausgabe einer Vielzahl von Snoops basierend auf der ersten Anforderung zu berücksichtigen.
  • EAA
  • 44 bis 48 veranschaulichen verschiedene Ausführungsformen eines Eingabe/Ausgabe-Agenten (EAA), der in verschiedenen Ausführungsformen des SOC eingesetzt werden kann. Der EAA kann zwischen einer gegebenen Peripherievorrichtung und der Interconnect-Fabric eingefügt werden. Der EAA-Agent kann konfiguriert sein, um die Kohärenzprotokolle der Interconnect-Fabric in Bezug auf die gegebene Peripherievorrichtung durchzusetzen. In einer Ausführungsform stellt der EAV die Reihenfolge der Anforderungen von der gegebenen Peripherievorrichtung durch Verwendung der Kohärenzprotokolle sicher. In einer Ausführungsform ist der EAA konfiguriert, um ein Netzwerk aus zwei oder mehr Peripherievorrichtungen mit der Interconnect-Fabric zu koppeln.
  • In vielen Fällen implementiert ein Computersystem ein Daten/Cache-Kohärenzprotokoll, in dem eine kohärente Darstellung der Daten innerhalb des Computersystems sichergestellt ist. Folglich werden Änderungen an gemeinsam genutzten Daten normalerweise rechtzeitig im gesamten Computersystem verbreitet, um eine kohärente Darstellung sicherzustellen. Ein Computersystem schließt in der Regel auch Peripheriegeräte, wie Eingabe-/Ausgabevorrichtungen (E/A-Vorrichtungen), ein oder bildet mit diesen eine Schnittstelle. Diese Peripheriegeräte sind jedoch nicht konfiguriert, um das vom Computersystem implementierte Cache-Kohärenzprotokoll zu verstehen oder effizient zu verwenden. Zum Beispiel verwenden Peripheriegeräte häufig Regeln in spezifischer Reihenfolge für ihre Transaktionen (die weiter unten erörtert werden), die strenger sind als das Cache-Kohärenzprotokoll. Viele Peripheriegeräte haben auch keine Caches - d. h. es sind keine Vorrichtungen zur Zwischenspeicherung. Infolgedessen kann es für Peripheriegeräte angemessen länger dauern, um Abschlussbestätigungen für ihre Transaktionen zu empfangen, da diese nicht in einem lokalen Cache abgeschlossen werden. Diese Offenbarung behandelt u.a. diese technischen Probleme, die damit zusammenhängen, dass Peripheriegeräte nicht in der Lage sind, das Cache-Kohärenzprotokoll richtig zu verwenden und keine Caches aufweisen.
  • Die vorliegende Offenbarung beschreibt verschiedene Techniken zur Implementierung eines E/A-Agenten, der konfiguriert ist, um Peripheriegeräte mit einer kohärenten Fabric zu verbinden und Kohärenzmechanismen zur Verarbeitung von Transaktionen zu implementieren, die diesen E/A-Vorrichtungen zugeordnet sind. In verschiedenen Ausführungsformen, die nachstehend beschrieben werden, schließt ein System-on-a-Chip (SOC) Speicher, Speichersteuerungen und einen mit Peripheriegeräten gekoppelten E/A-Agenten ein. Der E/A-Agent ist konfiguriert, um Lese- und Schreibtransaktionsanforderungen von den Peripheriegeräten zu empfangen, die auf spezifizierte Speicheradressen abzielen, deren Daten in Cache-Zeilen des SOC gespeichert sein können. (Eine Cache-Zeile kann auch als Cache-Block bezeichnet werden.) In verschiedenen Ausführungsformen schreiben die spezifischen Ordnungsregeln der Peripheriegeräte vor, dass die Lese-/Schreibtransaktionen seriell abgeschlossen werden (z. B. nicht in der Reihenfolge, in der sie empfangen werden). Infolgedessen ist in einer Ausführungsform der E/A-Agent konfiguriert, eine Lese-/Schreibtransaktion abzuschließen, bevor er die nächste Lese-/Schreibtransaktion gemäß ihrer Ausführungsreihenfolge einleitet. Um diese Transaktionen jedoch auf leistungsfähigere Weise durchzuführen, ist in verschiedenen Ausführungsformen der E/A-Agent konfiguriert, um die ausschließliche Berechtigung an den Cache-Zeilen zu erhalten, auf die er abzielt, sodass die Daten dieser Cache-Zeilen nicht in einem gültigen Zustand in anderen Caching-Agenten (z. B. einem Prozessorkern) des SOC zwischengespeichert werden. Anstatt zu warten, bis eine erste Transaktion abgeschlossen ist, bevor er mit der Arbeit an einer zweiten Transaktion beginnt, kann der E/A-Agent präventiv die exklusive Berechtigung für die Cache-Zeile(n) erhalten, auf die die zweite Transaktion abzielt. Als Teil des Erhaltens einer exklusiven Berechtigung empfängt der E/A-Agent Daten für diese Cache-Zeilen und speichert die Daten innerhalb eines lokalen Caches des E/A-Agenten. Wenn die erste Transaktion abgeschlossen ist, kann der E/A-Agent anschließend die zweite Transaktion in seinem lokalen Cache abschließen, ohne eine Anforderung für die Daten dieser Cache-Zeilen senden und auf die Rückgabe der Daten warten zu müssen. Wie nachstehend ausführlicher erörtert, kann der E/A-Agent je nach Art der zugeordneten Transaktion die exklusive Leseberechtigung oder die exklusive Schreibberechtigung erhalten.
  • In einigen Fällen könnte der E/A-Agent eine exklusive Berechtigung einer Cache-Zeile verlieren, bevor der E/A-Agent die entsprechende Transaktion durchgeführt hat. Zum Beispiel kann der E/A-Agent einen Snoop empfangen, der den E/A-Agenten veranlasst, die exklusive Berechtigung für die Cache-Zeile aufzugeben, einschließlich der Invalidierung der im E/A-Agenten gespeicherten Daten für die Cache-Zeile. Ein „Snoop“ oder eine „Snoop-Anforderung“, wie hierin verwendet, bezieht sich auf eine Nachricht, die an eine Komponente übertragen wird, um eine Zustandsänderung für eine Cache-Zeile anzufordern (z. B. um Daten der Cache-Zeile ungültig zu machen, die innerhalb eines Caches der Komponente gespeichert sind) und, wenn diese Komponente eine exklusive Kopie der Cache-Zeile aufweist oder anderweitig für die Cache-Zeile verantwortlich ist, kann die Nachricht auch anfordern, dass die Cache-Zeile durch die Komponente bereitgestellt wird. In verschiedenen Ausführungsformen kann, wenn eine Schwellenanzahl verbleibender unverarbeiteter Transaktionen vorliegt, die auf die Cache-Zeile gerichtet sind, der E/A-Agent eine exklusive Berechtigung der Cache-Zeile erneut erfassen. Wenn zum Beispiel drei unbearbeitete Schreibtransaktionen auf die Cache-Zeile abzielen, kann der E/A-Agent die exklusive Berechtigung für diese Cache-Zeile erneut erfassen. Dies kann die übermäßig langsame Serialisierung der verbleibenden Transaktionen, die auf eine bestimmte Cache-Zeile abzielen, verhindern. Größere oder kleinere Anzahlen von unverarbeiteten Transaktionen können als Schwellenwert in verschiedenen Ausführungsformen verwendet werden.
  • Diese Techniken können sich gegenüber früheren Ansätzen vorteilhaft erweisen, da sie es ermöglichen, die Ordnungsregeln der Peripheriegeräte beizubehalten und gleichzeitig die negativen Auswirkungen dieser Ordnungsregeln durch die Implementierung von Kohärenzmechanismen teilweise oder ganz zu negieren. Insbesondere kann das Paradigma zum Durchführen von Transaktionen in einer bestimmten Reihenfolge gemäß den Reihenfolgeregeln, in denen eine Transaktion abgeschlossen wird, bevor die Arbeit an der nächsten auftretenden Transaktion beginnt, übermäßig langsam sein. Als ein Beispiel kann das Lesen der Daten für eine Cache-Zeile in einen Cache mehr als 500 Taktzyklen dauern. Somit wird, wenn die nächste auftretende Transaktion nicht gestartet wird, bis die vorherige Transaktion abgeschlossen ist, jede Transaktion mindestens 500 Taktzyklen dauern, um abgeschlossen zu werden, was zu einer hohen Anzahl von Taktzyklen führt, die verwendet werden, um einen Satz von Transaktionen zu verarbeiten. Durch präventives Erhalten der exklusiven Berechtigung der relevanten Cache-Zeilen, wie in der vorliegenden Offenbarung offenbart, kann die hohe Anzahl von Taktzyklen für jede Transaktion vermieden werden. Wenn zum Beispiel der E/A-Agent einen Satz von Transaktionen verarbeitet, kann der E/A-Agent präventiv beginnen, die Daten vor dem Abschluss der ersten Transaktion zwischenzuspeichern. Infolgedessen können die Daten für eine zweite Transaktion zwischengespeichert werden und zur Verfügung stehen, wenn die erste Transaktion abgeschlossen ist, sodass der E/A-Agent in der Lage ist, die zweite Transaktion kurz darauf abzuschließen. Somit braucht ein Abschnitt von Transaktionen möglicherweise nicht z. B. über 500 Taktzyklen, um abgeschlossen zu werden. Eine beispielhafte Anwendung dieser Techniken wird nun beginnend mit 44 erörtert.
  • Nun Bezug nehmend auf 44 ist ein Blockdiagramm eines beispielhaften System-ona-Chip (SOC) D100 veranschaulicht. In einer Ausführungsform kann das SOC D100 eine Ausführungsform des in 1 gezeigten SOC 10 sein. Wie durch den Namen impliziert, sind die Komponenten des SOC D100 auf einem einzigen Halbleitersubstrat als ein „Chip“ mit einer integrierten Schaltung integriert. In einigen Ausführungsformen werden die Komponenten aber auf zwei oder mehr diskreten Chips in einem Rechensystem implementiert. In der veranschaulichten Ausführungsform schließt das SOC D100 einen Caching-Agenten D110, Speichersteuerungen D120A und D120B, die mit dem Speicher DD130A bzw. 130B gekoppelt sind, und ein Eingabe/Ausgabe-Cluster (E/A-Cluster) D140 ein. Die Komponenten D110, D120 und D140 sind durch eine Verschaltung D105 miteinander gekoppelt. Wie außerdem gezeigt, schließt der Caching-Agent D110 einen Prozessor D112 und einen Cache D114 ein, während der E/A-Cluster D140 einen E/A-Agenten D142 und ein Peripheriegerät D144 einschließt. In verschiedenen Ausführungsformen wird das SOC D100 anders als gezeigt implementiert. Zum Beispiel kann das SOC D100 eine Anzeigesteuerung, eine Leistungsverwaltungsschaltung usw. einschließen, und die Speicher D130A und D130B können im SOC D100 eingeschlossen sein. Als weiteres Beispiel kann der E/A-Cluster D140 mehrere Peripheriegeräte D144 aufweisen, von denen eines oder mehrere extern zum SOC D100 sein können. Dementsprechend ist zu beachten, dass die Anzahl der Komponenten des SOC D100 (und auch die Anzahl der Teilkomponenten) zwischen den Ausführungsformen variieren kann. Es kann mehr oder weniger von jeder Komponente/Teilkomponente geben als die in 44 gezeigte Anzahl.
  • Ein Caching-Agent D110 ist in verschiedenen Ausführungsformen jede Schaltlogik, die einen Cache zum Zwischenspeichern von Speicherdaten einschließt oder die anders die Steuerung von Cache-Zeilen übernehmen und möglicherweise die Daten dieser Cache-Zeilen lokal aktualisieren kann. Caching-Agenten D110 können an einem Cache-Kohärenzprotokoll teilnehmen, um sicherzustellen, dass Aktualisierungen an Daten, die von einem Caching-Agenten D110 vorgenommen werden, für die anderen Caching-Agenten D110, die diese Daten anschließend lesen, sichtbar sind, und dass Aktualisierungen, die in einer bestimmten Reihenfolge von zwei oder mehr Caching-Agenten D110 vorgenommen werden (wie an einem Ordnungspunkt innerhalb des SOC D100 bestimmt, wie Speichersteuerungen D120A-B), in dieser Reihenfolge von Caching-Agenten D110 beobachtet werden. Die Caching-Agenten D110 können zum Beispiel Verarbeitungseinheiten (z. B. CPUs, GPUs usw.), eine Schaltlogik mit fester Funktion und eine Schaltlogik mit Prozessorunterstützung über einen eingebetteten Prozessor (oder Prozessoren) einschließen. Da der E/A-Agent D142 einen Satz von Caches einschließt, kann der E/A-Agent D142 als eine Art Caching-Agent D110 betrachtet werden. Der E/A-Agent D142 unterscheidet sich jedoch von anderen Caching-Agenten D110 aus mindestens dem Grund, dass der E/A-Agent D142 als cache-fähige Entität dient, die konfiguriert ist, um Daten für andere, separate Entitäten (z. B. Peripheriegeräte, wie eine Anzeige, eine USB-verbundene Vorrichtung usw.) zwischenzuspeichern, die keine eigenen Caches aufweisen. Zusätzlich kann der E/A-Agent D142 eine relativ kleine Anzahl von Cache-Zeilen vorübergehend zwischenspeichern, um die Latenz des Peripheriespeicherzugriffs zu verbessern, aber kann proaktiv Cache-Zeilen zurückziehen, sobald die Transaktionen abgeschlossen sind.
  • In der veranschaulichten Ausführungsform ist der Caching-Agent D110 eine Verarbeitungseinheit, die einen Prozessor D112 aufweist, der als CPU des SOC D100 dienen kann. Ein Prozessor D125 schließt in verschiedenen Ausführungsformen eine beliebige Schaltlogik und/oder einen beliebigen Mikrocode ein, die/der konfiguriert ist, um Anweisungen auszuführen, die in einer durch diesen Prozessor D125 implementierten Anweisungssatzarchitektur definiert sind. Der Prozessor D112 kann einen oder mehrere Prozessorkerne, die auf einer integrierten Schaltung mit anderen Komponenten des SOC D100 implementiert sind, einbeziehen. Diese einzelnen Prozessorkerne des Prozessors D125 können einen gemeinsamen Last-Level-Cache (z. B. einen L2-Cache) teilen, während sie ihre eigenen jeweiligen Caches (z. B. einen L0-Cache und/oder einen L1-Cache) zum Speichern von Daten und Programmanweisungen einschließen. Der Prozessor D125 kann die Hauptsteuersoftware des Systems, wie ein Betriebssystem, ausführen. Allgemein kann durch die CPU ausgeführte Software die anderen Komponenten des Systems steuern, um die gewünschte Funktionalität des Systems zu verwirklichen. Der Prozessor D112 kann ferner andere Software, wie Anwendungsprogramme, ausführen und daher als Anwendungsprozessor bezeichnet werden. Der Caching-Agent D110 kann ferner Hardware einschließen, die konfiguriert ist, um zwischen dem Caching-Agent D110 und den anderen Komponenten des SOC D100 eine Schnittstelle zu bilden (z. B. eine Schnittstelle mit Verschaltung D105).
  • Der Cache D114 ist in verschiedenen Ausführungsformen ein Speicherarray, das Einträge einschließt, die zum Speichern von Daten oder Programmanweisungen konfiguriert sind. Daher kann der Cache D114 ein Daten-Cache oder ein Anweisungs-Cache oder ein gemeinsam genutzter Anweisungs-/Daten-Cache sein. Der Cache D114 kann ein assoziatives Speicherungsarray (z. B. vollständig assoziatives oder satzassoziatives, wie ein satzassoziativer 4-Wege-Cache) oder ein Direct-Mapped-Speicherungsarray sein und kann eine beliebige Speicherkapazität aufweisen. In verschiedenen Ausführungsformen sind Cache-Zeilen (oder alternativ „Cache-Blöcke“) die Einheit der Zuweisung und Nichtzuweisung innerhalb des Cache DD114 und können von jeder gewünschten Größe (z. B. 32 Bytes, 64 Bytes, 128 Bytes usw.) sein. Während des Betriebs des Caching-Agenten D110 können Informationen von den anderen Komponenten des Systems in den Cache D114 gezogen und von Prozessorkernen des Prozessors D112 verwendet werden. Wenn ein Prozessorkern beispielsweise einen Ausführungspfad durchläuft, kann der Prozessorkern veranlassen, dass Programmanweisungen aus dem Speicher D130A-B in den Cache D114 geholt werden, und dann kann der Prozessorkern sie aus dem Cache D114 holen und sie ausführen. Auch während des Betriebs des Caching-Agenten D110 können Informationen aus dem Cache D114 über die Speichersteuerungen D120A-B in den Speicher (z. B. den Speicher D130A-B) geschrieben werden.
  • Eine Speichersteuerung D120 schließt in verschiedenen Ausführungsformen eine Schaltlogik ein, die konfiguriert ist, um von den anderen Komponenten des SOC D100 Speicheranforderungen (z. B. Lade-/Speicheranforderungen, Anweisungsabrufanforderungen usw.) zu empfangen, um Speicheroperationen, wie ein Zugreifen auf Daten aus dem Speicher D130, durchzuführen. Die Speichersteuerungen D120 können konfiguriert sein, um auf jeden beliebigen Typ von Speicher D130 zuzugreifen. Der Speicher D110 kann unter Verwendung verschiedener physischer Speichermedien, wie Festplattenspeicherung, Diskettenspeicherung, Wechseldatenträgerspeicherung, Flash-Speicher, Direktzugriffsspeicher (RAM-SRAM, EDO-RAM, SDRAM, DDR-SDRAM, RAMBUS-RAM usw.), Nur-Lese-Speicher (PROM, EEPROM usw.) usw. implementiert werden. Speicher, der dem SOC D100 zur Verfügung steht, ist nicht auf eine primäre Speicherung, wie den Speicher D110, beschränkt. Vielmehr kann das SOC D100 ferner andere Formen einer Speicherung, wie Cache-Speicher (z. B. L1-Cache, L2-Cache usw.), in dem Caching-Agenten D110 einschließen. In einigen Ausführungsformen schließen die Speichersteuerungen D120 Warteschlangen zum Speichern und Ordnen von Speichervorgängen ein, die dem Speicher D130 präsentiert werden sollen. Die Speichersteuerungen D120 können auch Datenpuffer einschließen, um Schreibdaten zu speichern, die in den Speicher D130 geschrieben werden sollen, und Lesedaten, die an die Quelle einer Speicheroperation zurückgeschickt werden sollen, wie der Caching-Agent D110.
  • Wie in Bezug auf 45 ausführlicher erörtert, können die Speichersteuerungen D120 verschiedene Komponenten zur Erhaltung der Cache-Kohärenz innerhalb des SOC D100 einschließen, einschließlich Komponenten, die den Standort der Daten von Cache-Zeilen im SOC D100 verfolgen. Als solche werden in verschiedenen Ausführungsformen Anforderungen für Cache-Zeilendaten durch Speichersteuerungen D120 geleitet, die auf die Daten von anderen Caching-Agenten D110 und/oder Speicher D130A-B zugreifen können. Zusätzlich zum Zugriff auf die Daten können die Speichersteuerungen D120 bewirken, dass Snoop-Anforderungen an Caching-Agenten D110 und E/A-Agenten DD142 ausgegeben werden, die die Daten in ihrem lokalen Cache speichern. Infolgedessen können die Speichersteuerungen 120 diese Caching-Agenten D110 und E/A-Agenten D142 veranlassen, die Daten ungültig zu machen und/oder aus ihren Caches zu räumen, um die Kohärenz innerhalb des Systems sicherzustellen. Dementsprechend verarbeiten die Speichersteuerungen D120 in verschiedenen Ausführungsformen exklusive Cache-Zeilen-Berechtigungsanforderungen, in denen Speichersteuerungen D120 einer Komponente eine exklusive Berechtigung einer Cache-Zeile gewähren, während die Snoop-Anforderung verwendet wird, um sicherzustellen, dass die Daten nicht in anderen Caching-Agenten D110 und E/A-Agenten D142 zwischengespeichert werden.
  • Der E/A-Cluster D140 schließt in verschiedenen Ausführungsformen eine oder mehrere Peripherievorrichtungen D144 (oder einfach Peripheriegeräte D144) ein, die zusätzliche Hardwarefunktionen und den E/A-Agenten D142 bereitstellen können. Die Peripheriegeräte D144 können zum Beispiel Video-Peripheriegeräte (z. B. GPUs, Mischer, Videocodierer/-decodierer, Skalierer, Anzeigesteuerungen usw.) und Audio-Peripheriegeräte (z. B. Mikrofone, Lautsprecher, Schnittstellen zu Mikrofonen und Lautsprechern, digitale Signalprozessoren, Audioprozessoren, Mischpulte usw.) einschließen. Die Peripheriegeräte D144 können Schnittstellensteuerungen für verschiedene Schnittstellen außerhalb des SOC D100 (z. B. Universal Serial Bus (USB), Peripheral Component Interconnect (PCI) und PCI Express (PCIe), serielle und parallele Ports usw.) einschließen. Die Verschaltung mit externen Komponenten ist durch den gestrichelten Pfeil in 44 veranschaulicht, der sich außerhalb des SOC D100 erstreckt. Die Peripheriegeräte D144 können auch Netzwerkperipheriegeräte, wie Medienzugriffssteuerungen (MACs), einschließen. Obwohl nicht gezeigt, schließt das SOC D100 in verschiedenen Ausführungsformen mehrere E/A-Cluster D140 mit jeweiligen Sätzen von Peripheriegeräten D144 ein. Als Beispiel könnte das SOC D100 einen ersten E/A-Cluster 140 mit externen Anzeige-Peripheriegeräten D144, einen zweiten E/A-Cluster D140 mit USB-Peripheriegeräten D144 und einen dritten E/A-Cluster D140 mit Videocodierer-Peripheriegeräten D144 einschließen. Jeder dieser E/A-Cluster D140 kann seinen eigenen E/A-Agenten D142 einschließen.
  • Der E/A-Agent D142 schließt in verschiedenen Ausführungsformen eine Schaltlogik ein, die konfiguriert ist, um ihre Peripheriegeräte D144 mit der Verschaltung D105 zu überbrücken und um Kohärenzmechanismen zum Verarbeiten von Transaktionen zu implementieren, die diesen Peripheriegeräten D144 zugeordnet sind. Wie in Bezug auf 45 ausführlicher erörtert, kann der E/A-Agent D142 Transaktionsanforderungen vom Peripheriegerät D144 empfangen, um Daten in Cachezeilen zu lesen und/oder zu schreiben, die dem Speicher D130A-B zugeordnet sind. Als Reaktion auf diese Anforderungen kommuniziert der E/A-Agent D142 in verschiedenen Ausführungsformen mit den Speichersteuerungen D120, um die exklusive Berechtigung für die Ziel-Cache-Zeilen zu erhalten. Dementsprechend können die Speichersteuerungen D120 dem E/A-Agenten D142 eine exklusive Berechtigung gewähren, was die Bereitstellung von Cache-Zeilendaten für den E/A-Agenten D142 und das Senden von Snoop-Anforderungen an andere Caching-Agenten D110 und E/A-Agenten D142 beinhalten kann. Nachdem der E/A-Agent D142 die exklusive Berechtigung für eine Cache-Zeile erhalten hat, kann er mit dem Abschließen von Transaktionen beginnen, die auf die Cache-Zeile abzielen. Als Reaktion auf das Abschließen einer Transaktion kann der E/A-Agent D142 eine Bestätigung an das anfordernde Peripheriegerät 144 senden, dass die Transaktion abgeschlossen wurde. In einigen Ausführungsformen erhält der E/A-Agent D142 keine exklusive Berechtigung für Anforderungen mit gelockerter Sortierung, die nicht in einer spezifischen Reihenfolge abgeschlossen werden müssen.
  • Die Verschaltung D105 ist in verschiedenen Ausführungsformen eine beliebige kommunikationsbasierte Verschaltung und/oder ein Protokoll zum Kommunizieren zwischen den Komponenten des SOC D100. Zum Beispiel kann die Verschaltung D105 den Prozessor D112 innerhalb des Caching-Agenten D110 aktivieren, um mit dem Peripheriegerät D144 innerhalb des E/A-Clusters D140 zu interagieren. In verschiedenen Ausführungsformen ist die Verschaltung D105 busbasiert, einschließlich gemeinsam genutzter Buskonfigurationen, Crossbar-Konfigurationen und hierarchischer Busse mit Brücken. Die Verschaltung D105 kann paketbasiert und hierarchisch sein mit Brücken, Crossbar-, Punkt-zu-Punkt- oder anderen Verschaltungen.
  • Nun Bezug nehmend auf 45 ist ein Blockdiagramm von beispielhaften Elementen der Interaktionen gezeigt, an denen ein Caching-Agent D110, eine Speichersteuerung D120, ein E/A-Agent D142 und Peripheriegeräte D144 beteiligt sind. In der veranschaulichten Ausführungsform schließt die Speichersteuerung 120 eine Kohärenzsteuerung D210 und ein Verzeichnis D220 ein. In einigen Fällen kann die veranschaulichte Ausführungsform anders als gezeigt implementiert sein. Zum Beispiel können mehrere Caching-Agenten D110, mehrere Speichersteuerungen D120 und/oder mehrere E/A-Agenten D142 vorhanden sein.
  • Wie bereits erwähnt, kann die Speichersteuerung D120 die Cache-Kohärenz innerhalb des SOC D100 aufrechterhalten, einschließlich der Verfolgung des Standorts der Cache-Zeilen im SOC D100. Dementsprechend ist die Kohärenzsteuerung D210 in verschiedenen Ausführungsformen konfiguriert, um den Speichersteuerungsabschnitt des Cache-Kohärenzprotokolls zu implementieren. Das Cache-Kohärenzprotokoll kann Nachrichten oder Befehle spezifizieren, die zwischen Caching-Agenten D110, E/A-Agenten D142 und Speichersteuerungen D120 (oder Kohärenzsteuerungen D210) übertragen werden können, um kohärente Transaktionen abzuschließen. Solche Nachrichten können Transaktionsanforderungen D205, Snoops D225 und Snoop-Antworten D227 (oder alternativ „Abschlüsse“) einschließen. Eine Transaktionsanforderung D205 ist in verschiedenen Ausführungsformen eine Nachricht, die eine Transaktion initiiert, und spezifiziert die/den angeforderte/n Cache-Zeile/-Block (z. B. mit einer Adresse dieser Cache-Zeile) und den Zustand, in dem der Anforderer diese Cache-Zeile empfangen soll (oder den minimalen Zustand, in einigen Fällen kann ein permissiverer Zustand bereitgestellt werden). Eine Transaktionsanforderung D205 kann eine Schreibtransaktion sein, bei der der Anforderer versucht, Daten in eine Cache-Zeile zu schreiben, oder eine Lesetransaktion, bei der der Anforderer versucht, die Daten einer Cache-Zeile zu lesen. Zum Beispiel kann eine Transaktionsanforderung D205 eine Anforderung für einen nicht gelockert sortierten dynamischen Direktzugriffsspeicher (DRAM) festlegen. In einigen Ausführungsformen ist die Kohärenzsteuerung D210 außerdem konfiguriert, um Speicheranforderungen D222 an den Speicher D130 auszugeben, um im Namen von Komponenten des SOC D100 auf Daten aus dem Speicher D130 zuzugreifen und Speicherantworten D224 zu empfangen, die angeforderte Daten einschließen können.
  • Wie dargestellt, empfängt E/A-Agent D142 Transaktionsanforderungen D205 von den Peripheriegeräten D144. Der E/A-Agent D142 kann eine Reihe von Schreibtransaktionsanforderungen D205, eine Reihe von Lesetransaktionsanforderungen D205 oder eine Kombination von Lese- und Schreibtransaktionsanforderungen D205 von einem gegebenen Peripheriegerät D144 empfangen. Zum Beispiel kann der E/A-Agent D142 innerhalb eines gesetzten Zeitintervalls vier Lesetransaktionsanforderungen D205 vom Peripheriegerät D144A und drei Schreibtransaktionsanforderungen D205 vom Peripheriegerät D144B empfangen. In verschiedenen Ausführungsformen müssen die von einem Peripheriegerät D144 empfangenen Transaktionsanforderungen D205 in einer bestimmten Reihenfolge abgeschlossen werden (z. B. in der Reihenfolge, in der sie von einem Peripheriegerät D144 empfangen werden). Anstatt zu warten, bis eine Transaktionsanforderung D205 abgeschlossen ist, bevor die Arbeit an der nächsten Transaktionsanforderung D205 in der Reihenfolge beginnt, führt der E/A-Agent D142 in verschiedenen Ausführungsformen Arbeit an späteren Anforderungen D205 durch, indem er präventiv eine exklusive Berechtigung der Ziel-Cache-Zeilen erhält. Dementsprechend kann E/A-Agent D142 exklusive Berechtigungsanforderungen D215 an Speichersteuerungen D120 (insbesondere Kohärenzsteuerungen D210) ausgeben. In einigen Fällen kann ein Satz von Transaktionsanforderungen D205 auf Cache-Zeilen abzielen, die von unterschiedlichen Speichersteuerungen D120 verwaltet werden, und daher kann der E/A-Agent D142 exklusive Berechtigungsanforderungen D215 an die entsprechenden Speichersteuerungen D120 basierend auf solchen Transaktionsanforderungen D205 ausgeben. Für eine Lesetransaktionsanforderung D205 kann der E/A-Agent D142 die exklusive Leseberechtigung erhalten; für eine Schreibtransaktionsanforderung D205 kann E/A-Agent D142 eine exklusive Schreibberechtigung erhalten.
  • Die Kohärenzsteuerung D210 ist in verschiedenen Ausführungsformen eine Schaltlogik, die konfiguriert ist, um Anforderungen (z. B. exklusive Berechtigungsanforderungen D215) von der Verschaltung D105 (z. B. über eine oder mehrere in der Speichersteuerung D120 enthaltene Warteschlangen) zu empfangen, die auf Cache-Zeilen abzielen, die auf den Speicher D130 abgebildet sind, mit dem die Speichersteuerung D120 gekoppelt ist. Die Kohärenzsteuerung D210 kann diese Anforderungen verarbeiten und Antworten (z. B. die exklusive Berechtigungsantwort D217) mit den Daten der angeforderten Cache-Zeilen erzeugen und gleichzeitig die Cache-Kohärenz im SOC D100 aufrechterhalten. Um die Cache-Kohärenz aufrechtzuerhalten, kann die Kohärenzsteuerung D210 das Verzeichnis D220 verwenden.
  • Das Verzeichnis D220 ist in verschiedenen Ausführungsformen ein Speicherungsarray, das einen Satz von Einträgen aufweist, von denen jeder den Kohärenzzustand einer jeweiligen Cache-Zeile innerhalb des Systems verfolgen kann. In einigen Ausführungsformen verfolgt ein Eintrag auch den Ort der Daten einer Cache-Zeile. Zum Beispiel kann ein Eintrag des Verzeichnisses D220 angeben, dass Daten einer bestimmten Cache-Zeile in dem Cache D114 des Caching-Agenten D110 in einem gültigen Zustand zwischengespeichert werden. (Während die exklusive Berechtigung erörtert wird, kann in einigen Fällen eine Cache-Zeile zwischen mehreren Cache-fähigen Einheiten (z. B. Caching-Agent D110) für Lesezwecke gemeinsam genutzt werden und somit kann eine gemeinsam genutzte Berechtigung bereitgestellt werden.) Um die exklusive Berechtigung für eine Cache-Zeile bereitzustellen, kann die Kohärenzsteuerung D210 sicherstellen, dass die Cache-Zeile nicht außerhalb des Speichers D130 und der Speichersteuerung D120 in einem gültigen Zustand gespeichert wird. Auf Grundlage des der Cache-Zeile zugeordneten Verzeichniseintrags, der das Ziel einer exklusiven Berechtigungsanforderung D215 ist, bestimmt die Kohärenzsteuerung D210 in verschiedenen Ausführungsformen, welche Komponenten (z. B. Caching-Agenten D110, E/A-Agenten D142 usw.) Snoops D225 und welche Art von Snoop D225 (z. B. invalidieren, Ändern in eigen usw.) empfangen sollen. Zum Beispiel kann die Speichersteuerung D120 bestimmen, dass der Caching-Agent 110 die Daten einer vom E/A-Agenten D142 angeforderten Cache-Zeile speichert, und daher einen Snoop D225 an den Caching-Agenten D110 ausgeben kann, wie in 45 gezeigt. In einigen Ausführungsformen zielt die Kohärenzsteuerung D210 nicht auf spezifische Komponenten, sondern übermittelt stattdessen Snoops D225, die von vielen der Komponenten des SOC D100 beobachtet werden.
  • In verschiedenen Ausführungsformen werden mindestens zwei Typen von Snoops unterstützt: Snoop-Vorwärts und Snoop-Rückwärts. Die Snoop-Vorwärts-Nachrichten können verwendet werden, um zu veranlassen, dass eine Komponente (z. B. der Cache-Agent D110) die Daten einer Cache-Zeile an die anfordernde Komponente weiterleitet, während die Snoop-Rückwärts-Nachrichten verwendet werden können, um zu veranlassen, dass die Komponente die Daten der Cache-Zeile an die Speichersteuerung D120 zurückgibt. Die Unterstützung von Snoop-Vorwärts- und Snoop-Rückwärts-Abläufen kann sowohl ein Drei-Hop- (Snoop-Vorwärts) als auch ein Vier-Hop-Verhalten (Snoop-Rückwärts) ermöglichen. Zum Beispiel kann Snoop-Vorwärts verwendet werden, um die Anzahl von Nachrichten zu minimieren, wenn eine Cache-Zeile einer Komponente bereitgestellt wird, da die Komponente die Cache-Zeile speichern und die darin enthaltenen Daten möglicherweise verwenden kann. Andererseits speichert eine nicht-cachefähige Komponente möglicherweise nicht die gesamte Cache-Zeile, und somit kann das Zurückkopieren in den Speicher sicherstellen, dass die Daten der gesamten Cache-Zeile in der Speichersteuerung D120 erfasst werden. In verschiedenen Ausführungsformen empfängt der Caching-Agent D110 einen Snoop D225 von der Speichersteuerung D120, verarbeitet diesen Snoop D225, um den Cache-Zeilen-Zustand zu aktualisieren (z. B. die Cache-Zeile zu invalidieren), und stellt eine Kopie der Daten der Cache-Zeile (falls durch den Snoop D225 spezifiziert) für den anfänglichen Berechtigungsanforderer oder die Speichersteuerung D120 bereit. Eine Snoop-Antwort D227 (oder ein „Abschluss“) ist in verschiedenen Ausführungsformen eine Nachricht, die anzeigt, dass die Zustandsänderung vorgenommen wurde, und die gegebenenfalls eine Kopie der Cache-Zeilen-Daten bereitstellt. Wenn der Snoop-Vorwärts-Mechanismus verwendet wird, werden die Daten der anfordernden Komponente in drei Hops über die Verschaltung D105 bereitgestellt: die Anforderung von der anfordernden Komponente an die Speichersteuerung D120, der Snoop von der Speichersteuerung D120 an das Caching, und die Snoop-Antwort von der Caching-Komponente an die anfordernde Komponente. Wenn der Snoop-Rückwärts-Mechanismus verwendet wird, kann es zu vier Hops kommen: Anforderung und Snoop, wie im Drei-Hop-Protokoll, Snoop-Antwort der Caching-Komponente an die Speichersteuerung D120 und Daten von der Speichersteuerung D120 an die anfordernde Komponente.
  • In einigen Ausführungsformen kann die Kohärenzsteuerung D210 das Verzeichnis D220 aktualisieren, wenn ein Snoop D225 erzeugt und übertragen wird, anstelle des Empfangs einer Snoop-Antwort D227. Sobald die angeforderte Cache-Zeile von der Speichersteuerung D120 zurückgefordert worden ist, gewährt die Kohärenzsteuerung D210 in verschiedenen Ausführungsformen dem Berechtigungsanforderer (z. B. dem E/A-Agenten D142) über eine exklusive Berechtigungsantwort D217 exklusive Lese-(oder Schreib-)Berechtigungen. Die exklusive Berechtigungsantwort D217 kann die Daten der angeforderten Cache-Zeile einschließen. In verschiedenen Ausführungsformen aktualisiert die Kohärenzsteuerung D210 das Verzeichnis D220, um anzuzeigen, dass die Cache-Zeile dem Berechtigungsanforderer gewährt wurde.
  • Beispielsweise kann der E/A-Agent D142 eine Reihe von Lesetransaktionsanforderungen D205 vom Peripheriegerät D144A empfangen. Für eine gegebene dieser Anforderungen kann der E/A-Agent D142 eine exklusive Leseberechtigungsanforderung D215 an die Speichersteuerung D120 für Daten senden, die einer spezifischen Cache-Zeile zugeordnet sind (oder wenn die Cache-Zeile von einer anderen Speichersteuerung D120 verwaltet wird, wird die exklusive Leseberechtigungsanforderung D215 an diese andere Speichersteuerung D120 gesendet). Die Kohärenzsteuerung D210 kann auf Grundlage eines Eintrags des Verzeichnisses D220 bestimmen, dass der Cache-Agent D110 die der spezifischen Cache-Zeile zugeordneten Daten derzeit in einem gültigen Zustand speichert. Dementsprechend sendet die Kohärenzsteuerung D210 einen Snoop D225 an den Caching-Agenten D110, der veranlasst, dass der Caching-Agent D110 die Berechtigung für diese Cache-Zeile aufgibt und eine Snoop-Antwort D227 zurücksendet, die die Daten der Cache-Zeile einschließen kann. Nach dem Empfangen dieser Snoop-Antwort D227 kann die Kohärenzsteuerung D210 eine exklusive Berechtigungsantwort D217 erzeugen und dann an den E/A-Agenten D142 senden, wodurch dem E/A-Agenten D142 die Cache-Zeilen-Daten und die exklusive Berechtigung für die Cache-Zeile bereitgestellt werden.
  • Nach dem Empfangen der exklusiven Berechtigung für eine Cache-Zeile wartet der E/A-Agent D142 in verschiedenen Ausführungsformen, bis die entsprechende Transaktion (gemäß den Ordnungsregeln) abgeschlossen werden kann, d. h. er wartet, bis die entsprechende Transaktion die ranghöchste Transaktion wird und die Auflösung der Ordnungsabhängigkeit für die Transaktion erfolgt. Beispielsweise können die E/A-Agenten D142 Transaktionsanforderungen D205 von einem Peripheriegerät D144 empfangen, um Schreibtransaktionen A-D durchzuführen. Der E/A-Agent D142 kann die exklusive Berechtigung für die Cache-Zeile erhalten, die der Transaktion C zugeordnet ist; die Transaktionen A und B sind jedoch möglicherweise nicht abgeschlossen. Folglich wartet der E/A-Agent D142, bis die Transaktionen A und B abgeschlossen wurden, bevor die relevanten Daten für die der Transaktion C zugeordneten Cache-Zeile geschrieben wurden. Nach Abschluss einer gegebenen Transaktion stellt der E/A-Agent D142 in verschiedenen Ausführungsformen dem Transaktionsanforderer (z. B. dem Peripheriegerät D144A) eine Transaktionsantwort D207 bereit, die anzeigt, dass die angeforderte Transaktion durchgeführt wurde. In verschiedenen Fällen kann der E/A-Agent D142 eine exklusive Leseberechtigung einer Cache-Zeile erhalten, einen Satz von Lesetransaktionen an der Cache-Zeile durchführen und danach die exklusive Leseberechtigung für die Cache-Zeile freigeben, ohne einen Schreibvorgang in die Cache-Zeile durchzuführen, während die exklusive Leseberechtigung gehalten wurde.
  • In einigen Fällen kann der E/A-Agent D142 mehrere Transaktionsanforderungen D205 (innerhalb eines relativ kurzen Zeitraums) empfangen, die auf dieselbe Cache-Zeile abzielen, und infolgedessen kann der E/A-Agent D142 Massenlese- und -schreibvorgänge durchführen. Als Beispiel könnten zwei vom Peripheriegerät D144A empfangene Schreibtransaktionsanforderungen D205 auf den unteren bzw. oberen Abschnitt einer Cache-Zeile abzielen. Dementsprechend kann der E/A-Agent D142 die exklusive Schreibberechtigung für die Cache-Zeile erwerben und die der Cache-Zeile zugeordneten Daten zurückhalten, bis mindestens beide der Schreibtransaktionen abgeschlossen sind. Somit kann der E/A-Agent D142 in verschiedenen Ausführungsformen die ausführende Berechtigung zwischen Transaktionen weiterleiten, die auf die gleiche Cache-Zeile abzielen. Das heißt, der E/A-Agent D142 muss nicht für jede einzelne Transaktionsanforderung D205 eine Berechtigungsanforderung D215 senden. In einigen Fällen kann der E/A-Agent D142 die ausführende Berechtigung von einer Lesetransaktion an eine Schreibtransaktion weiterleiten (oder umgekehrt), aber in anderen Fällen leitet der E/A-Agent D142 die ausführende Berechtigung nur zwischen Transaktionen der gleichen Art weiter (z. B. von einer Lesetransaktion an eine andere Lesetransaktion).
  • In einigen Fällen könnte der E/A-Agent D142 die exklusive Berechtigung für eine Cache-Zeile verlieren, bevor der E/A-Agent D142 die relevanten Transaktionen gegenüber der Cache-Zeile durchgeführt hat. Als Beispiel kann der E/A-Agent D142, während er darauf wartet, dass eine Transaktion die ranghöchste wird, damit sie durchgeführt werden kann, einen Snoop D225 von der Speichersteuerung D120 infolgedessen empfangen, dass ein anderer E/A-Agent D142 versucht, die exklusive Berechtigung für die Cache-Zeile zu erhalten. In verschiedenen Ausführungsformen bestimmt der E/A-Agent D142 nach dem Aufgeben der exklusiven Berechtigung für eine Cache-Zeile, ob die Berechtigung für die verlorene Cache-Zeile wiedererlangt werden soll. Wenn die verlorene Cache-Zeile einer ausstehenden Transaktion zugeordnet ist, erfasst der E/A-Agent D142 in vielen Fällen keine erneute exklusive Berechtigung für die Cache-Zeile; wenn jedoch in einigen Fällen die ausstehende Transaktion hinter einer eingestellten Anzahl von Transaktionen liegt (und somit nicht die vorrangige Transaktion wird), kann der E/A-Agent D142 eine exklusive Berechtigungsanforderung D215 für die Cache-Zeile ausgeben. Wenn jedoch eine Schwellenanzahl von ausstehenden Transaktionen (z. B. zwei ausstehende Transaktionen) auf die Cache-Zeile gerichtet ist, erwirbt der E/A-Agent D142 in verschiedenen Ausführungsformen wieder die exklusive Berechtigung für die Cache-Zeile.
  • Nun Bezug nehmend auf 46A ist ein Blockdiagramm beispielhafter Elemente gezeigt, die einem E/A-Agenten D142 zugeordnet sind, der Schreibtransaktionen verarbeitet. In der veranschaulichten Ausführungsform schließt der E/A-Agent D142 eine E/A-Agent-Steuerung D310 und Kohärenz-Caches D320 ein. Wie gezeigt, schließen die Kohärenz-Caches D320 einen abgerufenen Daten-Cache D322, einen zusammengeführten Daten-Cache D324 und einen neuen Daten-Cache D326 ein. In einigen Ausführungsformen wird der E/A-Agent D142 auf eine andere Weise als gezeigt implementiert. Als ein Beispiel schließt der E/A-Agent D142 möglicherweise keine separaten Caches für Daten, die aus dem Speicher gezogen werden, und Daten, die als Teil einer Schreibtransaktion geschrieben werden sollen, ein.
  • Die E/A-Agent-Steuerung D310 ist in verschiedenen Ausführungsformen eine Schaltlogik, die konfiguriert ist, um Peripheriegeräten D144 zugeordnete Transaktionen zu empfangen und zu verarbeiten, die mit dem E/A-Agenten D142 gekoppelt sind. In der veranschaulichten Ausführungsform empfängt die E/A-Agent-Steuerung D310 eine Schreibtransaktionsanforderung D205 von einem Peripheriegerät D144. Die Schreibtransaktionsanforderung D205 spezifiziert eine Zielspeicheradresse und kann die zu schreibenden Daten oder eine Referenz auf den Ort dieser Daten einschließen. Zum Verarbeiten einer Schreibtransaktion verwendet der E/A-Agent D142 in einigen Ausführungsformen Caches D320. Kohärenz-Caches D320 sind in verschiedenen Ausführungsformen Speicherungsarrays, die Einträge einschließen, die konfiguriert sind, um Daten oder Programmanweisungen zu speichern. Ähnlich wie bei dem Cache D114 können die Kohärenz-Caches D320 assoziative Speicherarrays (z. B. vollständig assoziatives oder satzassoziatives, wie ein satzassoziativer 4-Wege-Cache) oder ein Direct-Mapped-Speicherungsarray sein und können eine beliebige Speicherkapazität und/oder eine beliebige Cache-Zeilengröße (z. B. 32 Bytes, 64 Bytes usw.) aufweisen.
  • In verschiedenen Ausführungsformen wird der abgerufene Daten-Cache D322 verwendet, um Daten zu speichern, die als Reaktion auf die Ausgabe einer exklusiven Berechtigungsanforderung D215 erhalten wurden. Insbesondere kann der E/A-Agent D142 nach dem Empfangen einer Schreibtransaktionsanforderung D205 von einem Peripheriegerät D144 eine exklusive Schreibberechtigungsanforderung D215 an die bestimmte Speichersteuerung D120 senden, die die Daten verwaltet, die unter der Zielspeicheradresse bzw. der angezielten Speicheradresse gespeichert sind. Die von dieser Speichersteuerung D120 zurückgegebenen Daten werden von der E/A-Agentensteuerung D310 im abgerufenen Daten-Cache D322 gespeichert, wie veranschaulicht. In verschiedenen Ausführungsformen speichert der E/A-Agent D142 diese Daten getrennt von den Daten, die in der Schreibtransaktionsanforderung D205 eingeschlossen sind, um ein Snooping der abgerufenen Daten vor der Ordnungsauflösung zu ermöglichen. Dementsprechend kann der E/A-Agent D142 wie gezeigt einen Snoop D225 empfangen, der einen E/A-Agenten D142 veranlasst, eine Snoop-Antwort D227 bereitzustellen, die die von der bestimmten Speichersteuerung D120 empfangenen Daten freigibt.
  • Der neue Daten-Cache D326 wird in verschiedenen Ausführungsformen verwendet, um die Daten zu speichern, die in eine Schreibtransaktionsanforderung D205 eingeschlossen sind, bis die Ordnungsabhängigkeit aufgelöst ist. Sobald der E/A-Agent D142 die relevanten Daten von der jeweiligen Speichersteuerung D120 empfangen hat und sobald die Schreibtransaktion zur vorrangigen Transaktion geworden ist, kann der E/A-Agent D142 die relevanten Daten aus dem abgerufenen Daten-Cache D322 mit den entsprechenden Schreibdaten aus dem neuen Daten-Cache D326 zusammenführen. Der zusammengeführte Daten-Cache D324 wird in verschiedenen Ausführungsformen verwendet, um die zusammengeführten Daten zu speichern. In verschiedenen Fällen kann eine Schreibtransaktion auf einen Abschnitt, aber nicht auf die gesamte Cache-Zeile abzielen. Dementsprechend können die zusammengeführten Daten einen Abschnitt einschließen, der durch die Schreibtransaktion geändert wurde, und einen Abschnitt, der nicht geändert wurde. In einigen Fällen kann der E/A-Agent D142 eine Reihe von Schreibtransaktionsanforderungen D205 empfangen, die zusammen auf mehrere oder alle Abschnitte einer Cache-Zeile abzielen. Somit kann bei der Verarbeitung der Reihe von Schreibtransaktionen der größte Teil der Cache-Zeile (oder die gesamte Cache-Zeile) geändert werden. Als Beispiel kann der E/A-Agent D142 vier Schreibtransaktionsanforderungen D205 verarbeiten, die jeweils auf einen anderen 32-Bit-Abschnitt derselben 128-Bit-Cache-Zeile abzielen, wodurch der gesamte Zeileninhalt durch die neuen Daten ersetzt wird. In einigen Fällen ist eine Schreibtransaktionsanforderung D205 ein Schreibvorgang mit voller Cache-Zeile und somit werden die Daten, auf die aus dem abgerufenen Daten-Cache D322 für die Schreibtransaktion zugegriffen wird, vollständig durch diese eine Schreibtransaktionsanforderung D205 ersetzt. Sobald der gesamte Inhalt einer Cache-Zeile gelesen wurde oder der E/A-Agent D142 alle relevanten Schreibtransaktionen abgeschlossen hat, die auf die Cache-Zeile abzielen, gibt in verschiedenen Ausführungsformen der E/A-Agent D142 eine exklusive Schreibberechtigung für die Cache-Zeile frei und kann dann die Daten aus den Kohärenz-Caches D320 räumen.
  • Nun Bezug nehmend auf 46B ist ein Blockdiagramm beispielhafter Elemente gezeigt, die einem E/A-Agenten D142 zugeordnet sind, der Schreibtransaktionen verarbeitet. In der veranschaulichten Ausführungsform schließt der E/A-Agent D142 eine E/A-Agent-Steuerung D310 und abgerufenen Daten-Cache D322 ein. In einigen Ausführungsformen wird der E/A-Agent D142 auf eine andere Weise als gezeigt implementiert.
  • Da der E/A-Agent D142 keine Daten für Lesetransaktionen schreibt, verwendet er in verschiedenen Ausführungsformen den zusammengeführten Daten-Cache D324 und den neuen Daten-Cache D326 nicht für die Verarbeitung von Lesetransaktionen - sie sind daher in der veranschaulichten Ausführungsform nicht veranschaulicht. Folglich kann der E/A-Agent D142 nach dem Empfangen einer Lesetransaktionsanforderung D205 eine exklusive Leseberechtigung D215 an die geeignete Speichersteuerung D120 ausgeben und eine exklusive Berechtigungsantwort D217 empfangen, die die Daten der Ziel-Cache-Zeile einschließt. Sobald der E/A-Agent D142 die relevanten Daten empfangen hat und sobald die Lesetransaktion zur vorrangigen ausstehenden Transaktion geworden ist, kann der E/A-Agent D142 die Lesetransaktion abschließen. Sobald der gesamte Inhalt einer Cache-Zeile gelesen wurde oder der E/A-Agent D142 alle relevanten Lesetransaktionen abgeschlossen hat, die auf die Cache-Zeile abzielen (da unterschiedliche Lesetransaktion auf unterschiedliche Abschnitte dieser Cache-Zeile abzielen können), gibt in verschiedenen Ausführungsformen der E/A-Agent D142 eine exklusive Leseberechtigung für die Cache-Zeile frei und kann dann die Daten aus dem abgerufenen Daten-Cache D322 räumen.
  • Unter Bezugnahme auf 47 wird ein Beispiel für die Verarbeitung von Lesetransaktionsanforderungen D205 gezeigt, die von einem Peripheried144 empfangen werden. Während sich dieses Beispiel auf Lesetransaktionsanforderung D205 bezieht, kann die folgende Erörterung auch auf die Verarbeitung von Schreibtransaktionsanforderungen D205 angewendet werden. Wie gezeigt, empfängt der E/A-Agent D142 vom Peripheriegerät D144 eine Lesetransaktionsanforderung D205A, gefolgt von einer Lesetransaktionsanforderung D205B. Als Reaktion auf das Empfangen von Transaktionsanforderungen D205A-B gibt der E/A-Agent 142 für die Transaktionsanforderung D205A eine exklusive Leseberechtigung D215A an die Speichersteuerung D120B aus und für die Transaktionsanforderung D205B gibt der E/A-Agent D142 eine exklusive Leseberechtigung D215B an die Speichersteuerung D120A aus. Während der E/A-Agent 142 in der veranschaulichten Ausführungsform mit zwei verschiedenen Speichersteuerungen DD120 kommuniziert, können in einigen Fällen Lesetransaktionsanforderungen D205A-B auf Cache-Zeilen abzielen, die von derselben Speichersteuerung D120 verwaltet werden, und somit kann der E/A-Agent D142 nur mit dieser Speichersteuerung D120 kommunizieren, um Lesetransaktionsanforderungen D205A-B zu erfüllen.
  • Wie weiter dargestellt, tritt ein Verzeichnisfehler an der Speichersteuerung D120A für die Ziel-Cache-Zeile der Transaktionsanforderung D205B auf, was angibt, dass die Daten der Ziel-Cache-Zeile nicht in einem gültigen Zustand außerhalb des Speichers D130 gespeichert werden. Die Speichersteuerung D120A sendet eine Antwort D217B an den E/A-Agenten D142 zurück, die eine exklusive Leseberechtigung für die Cache-Zeile gewährt und ferner die dieser Cache-Zeile zugeordneten Daten einschließen kann. Wie ebenfalls gezeigt, tritt ein Verzeichnistreffer an der Speichersteuerung D120B für die Ziel-Cache-Zeile der Transaktionsanforderung D205A auf. Die Speichersteuerung D120B kann basierend auf ihrem Verzeichnis D220 bestimmen, dass der veranschaulichte Caching-Agent D110 die Daten der Ziel-Cache-Zeile zwischenspeichert. Folglich gibt die Speichersteuerung D120B einen Snoop D225 an den Caching-Agenten D110 aus und empfängt eine Snoop-Antwort D227, die Daten einschließen kann, die der Ziel-Cache-Zeile zugeordnet sind. Die Speichersteuerung D120B sendet eine exklusive Leseberechtigungsantwort D217A an den E/A-Agenten D142, die die exklusive Leseberechtigung für die Ziel-Cache-Zeile gewährt und ferner die Daten einschließen kann, die dieser Cache-Zeile zugeordnet sind.
  • Wie veranschaulicht, empfängt der E/A-Agent D142 die exklusive Leseberechtigungsantwort D217B, bevor er die exklusive Leseberechtigungsantwort D217A empfängt. Die Regeln für die Transaktionsordnung des Peripheriegeräts D144 schreiben in verschiedenen Ausführungsformen vor, dass die Transaktionsanforderungen D205A-B in einer bestimmten Reihenfolge ausgeführt werden müssen (z. B. in der Reihenfolge, in der sie empfangen wurden). Infolgedessen, da die Leseanforderung D205A noch nicht abgeschlossen ist, wenn der E/A-Agent D142 die exklusive Leseberechtigungsantwort D217B empfängt, hält der E/A-Agent D142 nach Erhalt der Antwort D217B die spekulative exklusive Leseberechtigung, schließt aber die entsprechende Lesetransaktionsanforderung D205B nicht ab. Sobald der E/A-Agent D142 die exklusive Leseberechtigungsantwort D217A empfängt, kann der E/A-Agent D142 die Transaktionsanforderung D205A abschließen und eine vollständige Anforderung D205A an das Peripheriegerät D144 ausgeben. Danach kann der E/A-Agent D142 die Transaktionsanforderung D205B abschließen und auch eine vollständige Anforderung D205B an das Peripheriegerät D144 ausgeben. Da der E/A-Agent D142 präventiv die exklusive Leseberechtigung für die Cache-Zeile erhalten hat, die der Leseanforderung D205B zugeordnet ist, muss der E/A-Agent D142 nach Abschluss der Lesetransaktionsanforderung D205A keine Anforderung für diese Cache-Zeile senden (vorausgesetzt, der E/A-Agent D142 hat die Berechtigung für die Cache-Zeile nicht verloren). Stattdessen kann der E/A-Agent D142 die Lesetransaktionsanforderung D205B relativ bald nach Abschluss der Lesetransaktionsanforderung D205A abschließen und somit den Großteil oder die gesamte Verzögerung (z. B. 500 Taktzyklen), die dem Abrufen dieser Cache-Zeile in die Kohärenz-Caches D320 des E/A-Agenten 142 zugeordnet ist, vermeiden.
  • Nun Bezug nehmend auf 48 ist ein Flussdiagramm eines Verfahrens 500 gezeigt. Verfahren 500 ist ein Beispiel eines Verfahrens, das von einer E/A-Agentenschaltung (z. B. einem E/A-Agenten 142) durchgeführt wird, um eine Reihe von Transaktionsanforderungen (z. B. Transaktionsanforderungen D205) zu verarbeiten, die von einer Peripheriekomponente (z. B. einem Peripheriegerät 144) empfangen werden. In einigen Beispielen schließt das Verfahren 500 mehr oder weniger Schritte als gezeigt ein, z. B. kann die E/A-Agentenschaltung Daten aus ihrem Cache (z. B. einem Kohärenz-Cache D330) räumen, nachdem sie den Satz von Transaktionsanforderungen verarbeitet hat.
  • Das Verfahren 500 beginnt in Schritt D510 damit, dass die E/A-Agentenschaltung eine Reihe von Transaktionsanforderungen von der Peripheriekomponente empfängt, um eine Reihe von Lesetransaktionen (die mindestens eine Lesetransaktion einschließt) durchzuführen, die an eine oder mehrere der Vielzahl von Cache-Zeilen gerichtet sind. In einigen Fällen empfängt der E/A-Agent Anforderungen zur Durchführung von Schreibtransaktionen oder einer Mischung aus Lese- und Schreibtransaktionen. Der E/A-Agent kann diese Transaktionsanforderungen von mehreren Peripheriekomponenten empfangen.
  • In Schritt 520 gibt die E/A-Agentenschaltung an eine erste Speichersteuerungsschaltung (z. B. eine Speichersteuerungsschaltung D120), die konfiguriert ist, um den Zugriff auf eine erste der Vielzahl von Cache-Zeilen zu verwalten, eine Anforderung (z. B. eine exklusive Berechtigungsanforderung D215) für die exklusive Leseberechtigung für die erste Cache-Zeile aus, sodass die Daten der ersten Cache-Zeile nicht außerhalb des Speichers und der E/A-Agentenschaltung in einem gültigen Zustand zwischengespeichert werden. Die Anforderung nach exklusiver Leseberechtigung der ersten Cache-Zeile kann bewirken, dass eine Snoop-Anforderung (z. B. ein Snoop D225) an eine weitere E/A-Agent-Schaltung (oder einen Cashing-Agenten D110) gesendet werden soll, um eine exklusive Leseberechtigung der ersten Cache-Zeile freizugeben.
  • In Schritt 530 empfängt die E/A-Agentenschaltung die exklusive Leseberechtigung für die erste Cache-Zeile, einschließlich des Empfangs der Daten der ersten Cache-Zeile. In einigen Fällen kann die E/A-Agentenschaltung eine an die erste Cache-Zeile gerichtete Snoop-Anforderung empfangen und dann die exklusive Leseberechtigung für die erste Cache-Zeile freigeben, bevor die Durchführung des Satzes von Lesetransaktionen abgeschlossen wird, einschließlich der Invalidierung der in der E/A-Agentenschaltung für die erste Cache-Zeile gespeicherten Daten. Die E/A-Agentenschaltung kann danach eine Bestimmung vornehmen, dass mindestens eine Schwellenanzahl von verbleibenden unverarbeiteten Lesetransaktionen des Satzes von Lesetransaktionen an die erste Cache-Zeile gerichtet sind, und als Reaktion auf die Bestimmung eine Anforderung an die erste Speichersteuerungsschaltung senden, um die exklusive Leseberechtigung für die erste Cache-Zeile wiederherzustellen. Wenn jedoch die E/A-Agentenschaltung eine Bestimmung vornimmt, dass weniger als eine Schwellenanzahl der verbleibenden unverarbeiteten Lesetransaktionen des Satzes von Lesetransaktionen an die erste Cache-Zeile gerichtet sind, dann kann die E/A-Agentenschaltung die verbleibenden Lesetransaktionen verarbeiten, ohne die exklusive Leseberechtigung für die erste Cache-Zeile wiederherzustellen.
  • In Schritt 540 führt die E/A-Agentenschaltung den Satz von Lesetransaktionen in Bezug auf die Daten durch. In einigen Fällen kann die E/A-Agentenschaltung die exklusive Leseberechtigung für die erste Cache-Zeile freigeben, ohne einen Schreibvorgang an der ersten Cache-Zeile durchgeführt zu haben, während die exklusive Leseberechtigung gehalten wurde. Die E/A-Agentenschaltung kann eine Bestimmung vornehmen, dass mindestens zwei des Satzes von Lesetransaktionen auf mindestens zwei verschiedene Abschnitte der ersten Cache-Zeile abzielen. Als Reaktion auf die Bestimmung kann die E/A-Agentenschaltung mehrere der Lesetransaktionen verarbeiten, bevor sie die exklusive Leseberechtigung für die erste Cache-Zeile freigibt.
  • In einigen Fällen kann die E/A-Agentenschaltung von einer anderen Peripheriekomponente eine Reihe von Anforderungen zur Durchführung eines Satzes von Schreibtransaktionen empfangen, die an eine oder mehrere der Vielzahl von Cache-Zeilen gerichtet sind. Die E/A-Agentenschaltung kann an eine zweite Speichersteuerungsschaltung, die konfiguriert ist, um den Zugriff auf eine zweite der Vielzahl von Cache-Zeilen zu verwalten, eine Anforderung für die exklusive Schreibberechtigung für die zweite Cache-Zeile ausgeben, sodass die Daten der zweiten Cache-Zeile nicht außerhalb des Speichers und der E/A-Agentenschaltung in einem gültigen Zustand zwischengespeichert werden. Dementsprechend kann die E/A-Agentenschaltung die Daten der zweiten Cache-Zeile empfangen und den Satz von Schreibtransaktionen in Bezug auf die Daten der zweiten Cache-Zeile durchführen. In einigen Fällen kann eine des Satzes von Schreibtransaktionen das Schreiben von Daten in einen ersten Abschnitt der zweiten Cache-Zeile beinhalten. Die E/A-Agentenschaltung kann die Daten der zweiten Cache-Zeile mit den Daten der Schreibtransaktion zusammenführen, sodass der erste Abschnitt (z. B. die unteren 64 Bits) aktualisiert wird, ein zweiter Abschnitt (z. B. die oberen 64 Bits) der zweiten Cache-Zeile jedoch unverändert bleibt. In den Fällen, in denen der Satz von Schreibtransaktionen das Schreiben in verschiedene Abschnitte der zweiten Cache-Zeile beinhaltet, kann die E/A-Agentenschaltung als Reaktion auf das Schreiben in alle Abschnitte der zweiten Cache-Zeile die exklusive Schreibberechtigung für die zweite Cache-Zeile freigeben.
  • D2D-Schaltung
  • 49 bis 55 veranschaulichen verschiedene Ausführungsformen einer D2D-Schaltung 26. Die integrierten Schaltungen (ICs) eines Systems-on-a-Chip (SOC) schließen im Allgemeinen einen oder mehrere Prozessoren, die als zentrale Verarbeitungseinheiten (CPUs) für ein System dienen, zusammen mit verschiedenen anderen Komponenten, wie Speichersteuerungen und Peripheriekomponenten, ein. Zusätzliche Komponenten, einschließlich einer oder mehrerer zusätzlicher ICs, können in einer bestimmten SOC-IC eingeschlossen sein, um eine gegebene Vorrichtung zu bilden. Das Erhöhen einer Anzahl von Prozessoren und anderen diskreten Komponenten, die in einer SOC-IC eingeschlossen sind, kann für eine erhöhte Leistung wünschenswert sein. Zusätzlich können Kosteneinsparungen in einer Vorrichtung erreicht werden, indem die Anzahl anderer Komponenten reduziert wird, die zusätzlich zu der SOC-IC benötigt werden, um die gegebene Vorrichtung zu bilden. Die Vorrichtung kann kompakter (von einer kleineren Größe) sein, wenn mehr vom Gesamtsystem in eine einzige IC integriert ist. Durch das Integrieren von mehr Komponenten in das SOC kann des Weiteren ein reduzierter Stromverbrauch für die Vorrichtung als Ganze erreicht werden.
  • Ein gegebenes SOC kann in einer Vielfalt von Anwendungen verwendet werden, mit unterschiedlichen Leistungs-, Kosten- und Stromüberlegungen. Bei einer kostensensiblen Anwendung kann beispielsweise die Leistung weniger wichtig sein als die Kosten und der Stromverbrauch. Andererseits werden möglicherweise für eine leistungsorientierte Anwendung die Kosten und der Stromverbrauch nicht hervorgehoben. Dementsprechend kann eine Reihe von SOC-Designs verwendet werden, um die Vielfalt von Anwendungen zu unterstützen.
  • Das Erhöhen der Wiederverwendung eines gegebenen SOC-Designs kann wünschenswert sein, um Kosten zu reduzieren, die mit dem Entwerfen, Verifizieren, Herstellen und Beurteilen eines neuen SOC-Designs verbunden sind. Dementsprechend ist eine Technik zum Skalieren eines einzelnen SOC-Designs für eine Reihe von Anwendungen wünschenswert.
  • Wie vorstehend beschrieben, kann ein gegebenes IC-Design in einer Vielfalt von Anwendungen mit einer Reihe von Leistungs- und Kostenüberlegungen verwendet werden. Zusätzlich kann die Wiederverwendung eines bestehenden IC-Designs Kosten im Vergleich zum Entwerfen, Verifizieren, Herstellen und Beurteilen eines neuen IC-Designs reduzieren. Eine Technik zum Skalieren eines einzelnen IC-Designs über eine Reihe von Anwendungen besteht darin, mehrere Instanzen der IC in Anwendungen zu verwenden, die Leistung im Vergleich zu Kosten hervorheben, und eine einzelne Instanz der IC in den kostenempfindlichen Anwendungen zu verwenden.
  • Die Verwendung mehrerer Instanzen der IC kann mehrere Herausforderungen darstellen. Einige Anwendungen, zum Beispiel mobile Vorrichtungen, verfügen über einen begrenzten Platz für mehrere ICs, die eingeschlossen werden sollen. Des Weiteren kann, um die Latenz zu reduzieren, die mit der Kommunikation zwischen ICs verbunden ist, eine externe Schnittstelle zwischen ICs eine große Anzahl von Stiften einschließen, wodurch eine große Anzahl von Bits parallel zwischen zwei oder mehr ICs ausgetauscht werden kann. Zum Beispiel kann eine Schnittstelle für ein Mehrkern-SOC einen systemweiten Kommunikationsbus mit Hunderten oder sogar tausend oder mehr parallel verlaufenden Signalen verwenden. Um zwei oder mehr eines solchen SOC miteinander zu koppeln, kann eine Schnittstelle erforderlich sein, die Zugriff auf einen signifikanten Abschnitt des Kommunikationsbusses bereitstellt, was möglicherweise hundert oder mehr Stifte erfordert, die über die zwei oder mehr Chips verdrahtet werden sollen. Zusätzlich sollten, um die interne Kommunikationsfrequenz des Kommunikationsbusses zu erreichen oder um sich dieser auch nur anzunähern, die Zeiteigenschaften der großen Anzahl von Stiften der Schnittstelle zwischen ICs konsistent sein, um zu vermeiden, dass unterschiedliche Bits eines gleichen Datenworts auf unterschiedlichen Taktzyklen ankommen. Das Herstellen einer großen Hochgeschwindigkeitsschnittstelle mit einer einzelnen Stiftanordnung, sodass zwei oder mehr Instanzen eines gleichen IC-Chips in einem kleinen physischen Raum miteinander gekoppelt werden können, kann eine signifikante Herausforderung für IC-Designer darstellen.
  • Wie weiter unten erläutert wird, beschreibt die vorliegende Offenbarung die Verwendung von „komplementären“ Schnittstellen zwischen ICs. Die vorliegende Offenbarung erkennt, dass solche Schnittstellen zwischen ICs das Koppeln von zwei oder mehr Instanzen eines gleichen IC-Designs in begrenztem Raum unterstützen und Skalierbarkeit eines IC-Designs bereitstellen, um eine Reihe von Anwendungen zu unterstützen. Eine solche skalierbare Schnittstelle kann eine Stiftanordnung einschließen, die es ermöglicht, dass zwei ICs physisch mit wenig bis keiner Kreuzung von Drähten zwischen den zwei ICs gekoppelt werden, wenn die zwei ICs flächig zueinander weisend oder entlang eines gemeinsamen Rands der beiden Chips platziert sind. Um die Konsistenz der Leistungseigenschaften über die Stifte der Schnittstelle zu erhöhen, kann ein einzelnes Design für eine kleinere Anzahl von Stiften, z. B. sechzehn, zweiunddreißig oder dergleichen, wiederholt werden, bis eine gewünschte Anzahl von Stiften für die Schnittstelle implementiert ist. Eine solche Schnittstelle zwischen ICs kann es einer IC ermöglichen, in einer breiten Palette von Anwendungen verwendet zu werden, indem eine Leistungserhöhung durch Kopplung von zwei oder mehr Instanzen der IC ermöglicht wird. Diese Schnittstelle kann ferner ermöglichen, dass die zwei oder mehr ICs auf eine Weise miteinander gekoppelt werden, die es ermöglicht, dass die gekoppelten ICs in mobilen Anwendungen oder anderen Anwendungen, in denen der physische Raum für mehrere ICs begrenzt ist, verwendet werden.
  • Zwei Schnittstellen zwischen ICs können als „komplementär“ im Sinne dieser Offenbarung bezeichnet werden, wenn Stifte mit „komplementären Funktionen“ so positioniert sind, dass sie „komplementäre Layouts“ aufweisen. Ein Paar Schnittstellenstifte weist „komplementäre Funktionen“ auf, wenn ein erster dieser Stifte auf einer integrierten Schaltung dazu ausgelegt ist, von einem zweiten dieser Stifte auf einer anderen integrierten Schaltung aufgenommen zu werden. Senden und Empfangen sind ein Beispiel für komplementäre Funktionen, da ein Sendestift auf einer IC, der ein Ausgangssignal eines bestimmten Bits eines Datenworts bereitstellt, dazu ausgelegt ist, mit einem Empfangsstift auf einer anderen IC gekoppelt zu werden, der das bestimmte Bit des Datenworts als ein Eingangssignal akzeptiert. In ähnlicher Weise wird ein Stift, der einen Taktsignalausgang trägt, so betrachtet, dass er eine komplementäre Funktion zu einem zugehörigen Stift aufweist, der in der Lage ist, das Taktsignal als Eingabe zu empfangen.
  • Es wird darauf hingewiesen, dass der Begriff „Symmetrieachse“ über diese gesamte Offenbarung hinweg verwendet wird. Verschiedene Ausführungsformen einer Symmetrieachse sind in 49, 50, 51, 52, 53A und 53B gezeigt und nachstehend unter Bezugnahme auf diese Figuren beschrieben.
  • Stifte mit komplementärer Funktion weisen ein komplementäres Layout auf, wenn die Stifte relativ zu einer Symmetrieachse der Schnittstelle so angeordnet sind, dass eine erste integrierte Schaltung, die die Schnittstelle aufweist, neben oder gekoppelt mit einer zweiten Instanz der integrierten Schaltung angeordnet ist, sodass die Stifte, die die komplementären Funktionen aufweisen, ausgerichtet sind. Es kann auch so ausgedrückt werden, dass sich solche Stifte in „komplementären Positionen“ befinden. Ein Beispiel für ein komplementäres Layout wären Sendestifte für bestimmte Signale (z. B. Bit 0 und Bit 1 eines Datenbusses), die am weitesten bzw. am zweitweitesten von der Symmetrieachse entfernt auf einer Seite der Achse positioniert sind, wobei die komplementären Empfangsstifte (z. B. Bit 0 und Bit 1 des Datenbusses) am weitesten und am zweitweitesten von der Symmetrieachse entfernt auf einer gegenüberliegenden Seite der Achse platziert sind. In einer solchen Ausführungsform kann eine erste Instanz einer IC mit der komplementären Schnittstelle relativ zu einer zweiten Instanz der IC mit der gleichen Schnittstelle zwischen ICs positioniert sein, sodass die Sendestifte der ersten Instanz an den Empfangsstiften der zweiten Instanz ausgerichtet sind und sodass die Empfangsstifte der ersten Instanz an den Sendestiften der zweiten Instanz ausgerichtet sind. Wie in Bezug auf 53A und 53B weiter erläutert wird, werden Stifte auf zwei identischen Schnittstellen als „ausgerichtet“ angesehen, wenn die Umfänge der beiden Schnittstellen aneinander ausgerichtet sind und eine gerade Linie, die senkrecht zu den beiden Schnittstellen ist, durch die betreffenden Stifte gezogen werden kann. Das Ausrichtungskonzept, wie es sich auf Stifte einer Schnittstelle bezieht, wird nachstehend in Bezug auf 53A und 53B weiter beschrieben.
  • Ein solches komplementäres Stiftlayout ermöglicht es, dass die erste und die zweite Instanz über ihre jeweiligen externen Schnittstellen gekoppelt werden können, ohne dass sich Signalpfade zwischen den beiden Instanzen kreuzen. Ein Paar Schnittstellenstifte, die komplementäre Funktionen sowie komplementäre Positionen aufweisen, werden als „komplementäre Stifte“ bezeichnet. Paare von Sende- und Empfangsstiften werden hierin verwendet, um ein Beispiel für komplementäre Stifte zu zeigen. In anderen Ausführungsformen können komplementäre Stifte jedoch Paare von bidirektionalen Stiften einschließen, die so konfiguriert sind, dass Signale in beiden Richtungen basierend auf Einstellungen eines oder mehrerer Steuersignale gesendet werden können. Zum Beispiel können komplementäre Stifte eines Datenbusses konfigurierbar sein, um Daten abhängig davon zu senden oder zu empfangen, ob Daten gelesen oder geschrieben werden.
  • Es wird darauf hingewiesen, dass, wie hierin erwähnt, eine Schnittstelle immer noch als komplementär betrachtet werden kann, wenn nur ein Abschnitt der komplementären Stiftfunktionen der Schnittstelle in komplementären Positionen ist. Zum Beispiel kann eine gegebene Schnittstelle zwischen ICs Stifte einschließen, die einer Vielzahl von Kommunikationsbussen zugeordnet sind, wie zwei oder mehr von einem Speicherbus, einem Anzeigebus, einem Netzwerkbus und dergleichen. Die gegebene Schnittstelle zwischen ICs wird als komplementär angesehen, wenn Stifte mit komplementären Funktionen, die mindestens einem der eingeschlossenen Busse zugeordnet sind, in einem komplementären Layout relativ zu der Symmetrieachse der gegebenen Schnittstelle angeordnet sind. Andere Busse der Schnittstelle und/oder andere Signale, die nicht direkt mit einem bestimmten Kommunikationsbus verbunden sind, weisen möglicherweise keine Stifte in komplementären Positionen auf.
  • Es wird darauf hingewiesen, dass in den in dieser Offenbarung veranschaulichten Beispielen auf die Verwendung von zwei oder mehr ICs eines gleichen Designs Bezug genommen wird. Es wird in Betracht gezogen, dass eine gleiche externe Schnittstelle mit einem gleichen physischen Stiftlayout verwendet werden kann, um ICs mit einem unterschiedlichen Design zu koppeln. Zum Beispiel kann eine Familie unterschiedlicher IC-Designs das gleiche Design externer Schnittstellen über die Familie hinweg einschließen, um verschiedene Kombinationen von Instanzen von zwei oder mehr der ICs zu ermöglichen. Eine solche Vielfalt von Kombinationen kann eine hochskalierbare Systemlösung über eine breite Palette von Anwendungen bereitstellen, wodurch zum Beispiel die Verwendung kleinerer, weniger teurer Mitglieder der Familie in kostenempfindlichen Anwendungen und die Verwendung teurerer, leistungsfähigerer Mitglieder der Familie in leistungsgeminderten Anwendungen ermöglicht wird. Mitglieder der Familie können auch mit einem kleinen, leistungsarmen Mitglied zur Verwendung in Modi mit reduzierter Leistung und einem Mitglied mit hoher Leistung zur Verwendung, wenn komplexe Prozesse und/oder viele parallele Prozesse durchgeführt werden müssen, kombiniert werden.
  • In einigen Ausführungsformen befindet sich die externe Schnittstelle physisch entlang eines Rands eines Chips einer IC. Ein solcher physischer Ort kann eine Vielfalt von Multi-Die-Konfigurationen unterstützen, wie das Platzieren von zwei oder mehr Dies auf einer koplanaren Oberfläche, wobei die Ränder, die die externe Schnittstelle einschließen, am nächsten an einem benachbarten Die ausgerichtet sind, um eine Drahtlänge zu reduzieren, wenn die externen Schnittstellen gekoppelt sind. In einem anderen Beispiel kann ein Chip eines Paares nach oben weisend angeordnet sein, während der andere nach unten weist, wobei sie dann durch ihre jeweiligen Schnittstellen ausgerichtet sind. In einer Ausführungsform, in der nur eine einzelne der ICs eingeschlossen ist, kann die Platzierung der externen Schnittstelle entlang eines Rands des Chips ermöglichen, dass die externe Schnittstelle zum Beispiel während eines Wafersägevorgangs physisch entfernt wird.
  • 49 veranschaulicht ein Blockdiagramm einer Ausführungsform eines Systems, das zwei Instanzen einer IC, die über jeweilige externe Schnittstellen gekoppelt sind, einschließt. Wie veranschaulicht, schließt das System E100 integrierte Schaltungen E101a und E101b (zusammen integrierte Schaltungen E101) ein, die über ihre externen Schnittstellen E110a bzw. E110b (zusammen externe Schnittstellen E110) gekoppelt sind. Integrierte Schaltungen E101 können in einer Ausführungsform Beispiele für das in 1 gezeigte SOC 10 sein. Die Symmetrieachse E140 ist als vertikale gestrichelte Linie gezeigt, die senkrecht zu den und durch die Mitte der Schnittstellen E110a und E110b angeordnet ist. Die Symmetrieachse stellt eine Referenz für das physische Layout von Stiften bereit, die in externen Schnittstellen E110 enthalten sind, einschließlich der Sendestifte E120a und E120b und der Empfangsstifte E125a und E125b, die einem bestimmten Bus zugeordnet sind. Es wird darauf hingewiesen, dass, wie gezeigt, die Schnittstellen E110a und 1E10b in den integrierten Schaltungen E101a bzw. E101b zentriert sind. In anderen Ausführungsformen kann jedoch eine externe Schnittstelle näher an einer bestimmten Seite der integrierten Schaltung positioniert sein.
  • Wie gezeigt, schließt die integrierte Schaltung E101a eine externe Schnittstelle E110a mit einem physischen Stiftlayout ein, bei dem sich der Sendestift E120a und der Empfangsstift E125a für einen bestimmten Bus in komplementären Positionen E130 relativ zu der Symmetrieachse E140 befinden. Die integrierte Schaltung E101a ist ein IC-Design, das eine bestimmte Funktion mit einer endlichen Bandbreite durchführt. Zum Beispiel kann die integrierte Schaltung E101a ein universeller Mikroprozessor oder ein Mikrocontroller, ein Digitalsignalprozessor, ein Grafik- oder Audioprozessor oder eine andere Art von System-on-a-Chip sein. In einigen Anwendungen kann eine einzelne Instanz einer integrierten Schaltung E101 eine geeignete Leistungsbandbreite bereitstellen. In anderen Anwendungen können mehrere integrierte Schaltungen E101 verwendet werden, um die Leistungsbandbreite zu erhöhen. In einigen Anwendungen können die mehreren integrierten Schaltungen E101 als einzelnes System konfiguriert sein, in dem das Vorhandensein mehrerer integrierter Schaltungen für Software, die auf dem einzelnen System ausgeführt wird, transparent ist.
  • Wie in 49 gezeigt, ist der Empfangsstift E125b in der externen Schnittstelle E110b komplementär zu dem Sendestift E120a der externen Schnittstelle E110a. Dementsprechend ist das E/A-Signal E115a, das über den Sendestift E120a gesendet wird, dasselbe wie das E/A-Signal E115a, das von dem Empfangsstift E125b empfangen wird. In ähnlicher Weise ist der Empfangsstift E125a der externen Schnittstelle 110a komplementär zu dem Sendestift E120b der externen Schnittstelle E110b. Das E/A-Signal E115b wird über den Sendestift E120b übertragen, ist daher ein gemeinsames Signal mit dem E/A-Signal E115b, das vom Empfangsstift E125a empfangen wird. Das E/A-Signal E115a kann zum Beispiel einem Datenbit 0 des bestimmten Busses in den integrierten Schaltungen E101a und E101b entsprechen. Dementsprechend würde das E/A-Signal E115b auch dem Datenbit 0 des bestimmten Busses in den integrierten Schaltungen E101a und E101b entsprechen.
  • Wie veranschaulicht, wird ein komplementäres Stiftlayout durch Platzieren des Sendestifts E120a und des Empfangsstifts E120a in einer gleichen Reihenfolge relativ zu der Symmetrieachse E140 ermöglicht, wobei jeder Stift der zehnte Stift von der Symmetrieachse E140 ist. In der veranschaulichten Ausführungsform sind der Sendestift E120a und der Empfangsstift E120a auch als in einem gleichen physischen Abstand E135 von, aber auf gegenüberliegenden Seiten der Symmetrieachse E140 angeordnet gezeigt. Die zwei Instanzen der externen Schnittstelle E110 können daher in der Lage sein, direkt miteinander gekoppelt zu werden. Obwohl eine solche physische Stiftsymmetrie eine wünschenswerte Stiftausrichtung ermöglichen kann, wenn die integrierte Schaltung E101b in eine entgegengesetzte Position von der integrierten Schaltung E101a gedreht wird, wird dieser Grad an Stiftsymmetrie nicht als Anforderung für alle Ausführungsformen komplementärer Schnittstellen betrachtet.
  • Wie veranschaulicht, ist die integrierte Schaltung E101a mit einer zweiten Instanz, einer integrierten Schaltung E101b, gekoppelt. Die integrierten Schaltungen E101a und E101b sind zwei Instanzen einer gleichen IC und schließen daher jeweilige Instanzen derselben Schaltungen, gleiche Merkmale und, wie gezeigt, dieselbe externe Schnittstelle E110 ein. Dementsprechend schließt die integrierte Schaltung E101b eine externe Schnittstelle E110b mit einem physischen Stiftlayout, das einen Sendestift E120b und einen Empfangsstift E125b für das gegebene Eingangs-/Ausgangssignal (E/A-Signal) aufweist, die sich in komplementären Positionen relativ zu der Symmetrieachse E140 befinden.
  • Um integrierte Schaltungen E101 zu koppeln, sind die externen Schnittstellen E110 der ersten und der zweiten Instanz der integrierten Schaltung E101 so positioniert, dass der Sendestift E120a und der Empfangsstift E125a für das E/A-Signal E115 auf der integrierten Schaltung E101a an dem Empfangsstift E125b bzw. dem Sendestift E120b für das E/A-Signal E115 auf der integrierten Schaltung E101b ausgerichtet sind. Durch Drehen des Dies der integrierten Schaltung E101b um 180 Grad und Platzieren eines gemeinsamen Rands der zwei integrierten Schaltungen 101 aneinander angrenzend ist der Sendestift E120a der integrierten Schaltung E101a physisch an den Empfangsstift E125b der integrierten Schaltung E101b angrenzend angeordnet. In ähnlicher Weise ist der Empfangsstift E125a der integrierten Schaltung E101a physisch an den Sendestift E120b der integrierten Schaltung E101b angrenzend angeordnet. Wie hierin verwendet, bezieht sich „angrenzend“ auf einen physischen Ort von zwei oder mehr Schaltungselementen, die so angeordnet sind, dass Drähte, die zwei Elemente koppeln, keine Drähte benachbarter Sätze ähnlicher Elemente kreuzen. Zum Beispiel deuten hinsichtlich Stiften der zwei externen Schnittstellen angrenzende Stifte daraufhin, dass ein Draht von einem gegebenen Stift der ersten Instanz zu einem komplementären Stift der zweiten Instanz keinen Draht kreuzt, der verwendet wird, um einen der benachbarten Stifte der ersten und der zweiten Instanz zu koppeln.
  • Der Sendestift E120a ist mit dem Empfangsstift E125b und der Empfangsstift E125a ist mit dem Sendestift E120b über jeweilige Drähte E145 gekoppelt. Es wird darauf hingewiesen, dass sich, wie hierin verwendet, ein „Draht“ auf jedes geeignete leitfähige Medium bezieht, das es ermöglicht, dass ein Signal zwischen gekoppelten Paaren von Sende- und Empfangsstiften der externen Schnittstellen E110 übertragen wird. Zum Beispiel kann ein Draht einem Verbindungsdraht entsprechen, der zwischen dem Sendestift E120a und dem Empfangsstift E125b angebracht ist. Zusätzlich kann eine Interposervorrichtung verwendet werden, um die Stifte der externen Schnittstelle E110a mit den Stiften der externen Schnittstelle E110b zu koppeln. In einigen Ausführungsformen kann die integrierte Schaltung E101a entweder mit oder ohne Interposervorrichtung zwischen den zwei Dies mit integrierter Schaltung umgedreht und flächig zueinander weisend mit der integrierten Schaltung E101b verbunden sein.
  • Andere Stifte der externen Schnittstelle E110 können auch in ähnlichen komplementären Positionen angeordnet sein, sodass für eine Gruppe von Sendestiften der externen Schnittstelle E110 eine komplementäre Gruppe von Empfangsstiften in einer gleichen Reihenfolge relativ zu der Symmetrieachse E 140 auf der gegenüberliegenden Seite von der Gruppe von Sendestiften angeordnet ist. Ein solches Layout führt zu einer symmetrischen Stiftanordnung, bei der ein Paar von Stiften, die eine gleiche Anzahl von Stiften von der Symmetrieachse E140, jedoch auf gegenüberliegenden Seiten, sind, komplementäre Funktionen aufweisen, z. B. ist ein Stift des Paares ein Sendestift und der andere ein Empfangsstift.
  • Unter Verwendung dieses komplementären Stiftlayouts schließt das Senden von Daten durch die integrierte Schaltung E101a das Senden eines Abschnitts eines Datenpakets über den Sendestift E120a, der sich in einem bestimmten Abstand von der Symmetrieachse E140 befindet, und das Empfangen des Abschnitts des Datenpakets über den Empfangsstift E125b, der sich in demselben bestimmten Abstand von der Symmetrieachse E140 befindet, durch die integrierte Schaltung E101b ein. In ähnlicher Weise werden die verbleibenden Abschnitte des Datenpakets durch andere Sendestifte parallel zum ersten Abschnitt an komplementäre Empfangsstifte gesendet, die in gleichem Abstand von der Symmetrieachse E140 angeordnet sind. Es wird darauf hingewiesen, dass das komplementäre Stiftlayout auch dazu führen kann, dass die Drähte E145, die zwischen der externen Schnittstelle E110a und E1 10b verbunden sind, ähnlich lang sind. Diese Ähnlichkeit kann dazu beitragen, dass das Datenpaket parallel gesendet und empfangen wird, wodurch der Versatz zwischen verschiedenen Bits des Datenpakets sowie jeglichen Taktsignalen, die zum Abtasten des Datenpakets verwendet werden, reduziert wird.
  • Durch Verwenden des vorstehend beschriebenen komplementären Stiftlayouts kann eine externe Schnittstelle auf einer integrierten Schaltung implementiert werden, die es ermöglicht, mehrere Instanzen der integrierten Schaltung in einer Weise miteinander zu koppeln, die die Verwendung in Anwendungen mit beschränktem Platz ermöglicht, während eine Leistungsanforderung der Anwendung erfüllt wird. Die Wiederverwendung einer bestehenden integrierten Schaltung über eine erweiterte Palette von Anwendungen kann die Design- und Produktionskosten reduzieren, die ansonsten mit dem Entwerfen einer neuen integrierten Schaltung verbunden sind, um die Leistungsanforderungen einer oder mehrerer Anwendungen der erweiterten Palette zu erfüllen.
  • Es wird darauf hingewiesen, dass es sich bei dem System E 100, wie in 49 veranschaulicht, lediglich um ein Beispiel handelt. Die Veranschaulichung von 49 wurde vereinfacht, um für diese Offenbarung relevante Merkmale hervorzuheben. Verschiedene Ausführungsformen können unterschiedliche Konfigurationen der Schaltungselemente einschließen. Zum Beispiel ist die externe Schnittstelle E110 mit zwanzig Stiften gezeigt. In anderen Ausführungsformen kann jede geeignete Anzahl von Stiften in der externen Schnittstelle eingeschlossen sein, einschließlich zum Beispiel über tausend Stifte. Obwohl nur zwei Instanzen der integrierten Schaltung gezeigt sind, wird in Betracht gezogen, dass zusätzliche Instanzen in anderen Ausführungsformen eingeschlossen sein können. Die Symmetrieachse E140 ist als durch die Mitte der integrierten Schaltungen E101a und E101b verlaufend dargestellt. In anderen Ausführungsformen können die externe Schnittstelle und daher die Symmetrieachse außerhalb der Mitte der integrierten Schaltung positioniert sein.
  • Die in 49 veranschaulichte integrierte Schaltung ist nur mit einer externen Schnittstelle gezeigt. Verschiedene integrierte Schaltungen können jede geeignete Anzahl von zusätzlichen Schaltungsblöcken einschließen. Ein Beispiel für eine integrierte Schaltung mit zusätzlichen Schaltungsblöcken ist in 50 gezeigt.
  • Übergehend zu 50 ist ein Diagramm einer Ausführungsform einer integrierten Schaltung mit einer externen Schnittstelle gezeigt. Wie veranschaulicht, schließt die integrierte Schaltung 101 die externe Schnittstelle E110 ein, die mit On-Chip-Routern E240a-E240e gekoppelt ist, die wiederum mit jeweiligen von mehreren Busschaltungen gekoppelt sind, die die Busschaltungen E250, E255 und E258 einschließen. Die verschiedenen Busschaltungen sind mit jeweiligen Sätzen von Funktionsschaltungen E260a-E260f gekoppelt. Die externe Schnittstelle E110 ist mit einer Vielzahl von Sendestiften E120 und Empfangsstiften E125 sowie zugehörigen Senderschaltungen E230 und Empfängerschaltungen E235 gezeigt. Die integrierte Schaltung E101, wie gezeigt, entspricht einem IC-Design für beide integrierten Schaltungen E101a und E101b in 49.
  • Wie veranschaulicht, sind die Busschaltungen E250-E258 konfiguriert, um gegebene Daten zwischen der Vielzahl von Funktionsschaltungen E260a-E260f (zusammen Funktionsschaltungen E260) zu übertragen. Die Busschaltungen E250, E255 und E258 stellen jeweilige Kommunikationspfade zwischen verschiedenen Sätzen von Funktionsschaltungen, einschließlich der externen Schnittstelle E110 und jeweiligen Sätzen von Funktionsschaltungen E260, bereit. Jede der Busschaltungen E250-E258 kann einen jeweiligen Satz von Netzwerkprotokollen und/oder bestimmte Datentypen unterstützen. Zum Beispiel kann die Busschaltung E258 zum Übertragen von Grafikdaten verwendet werden, während die Busschaltung E250 Universaldaten unterstützen kann, und die Busschaltung E255 wird für Audiodaten verwendet.
  • Die Busschaltungen E250, E255 und E258 können zusammen eine Kommunikations-Fabric innerhalb der integrierten Schaltung E101 zum Übertragen von Datentransaktionen zwischen verschiedenen Funktionsschaltungen E260 und zusätzlichen Funktionsschaltungen, die nicht veranschaulicht sind, bilden. Für den Zugriff auf die externe Schnittstelle E110 und damit auf eine weitere Instanz der integrierten Schaltung E101 ist jede der Busschaltungen E250-E258 mit einem jeweiligen On-Chip-Router E240 gekoppelt, der wiederum mit einer oder mehreren Senderschaltungen E230 und Empfängerschaltungen E235 gekoppelt sind, die in der externen Schnittstelle E110 eingeschlossen sind. Die On-Chip-Router E240a und E240d stellen, wie gezeigt, verschiedene Zugangspunkte in die Busschaltung E250 bereit und können sich physisch an verschiedenen Orten auf der integrierten Schaltung E101, wie in der Nähe der zugehörigen Sender- und Empfängerschaltungen, befinden. In ähnlicher Weise stellen die On-Chip-Router E240b und E240c unterschiedliche Zugangspunkte in die Busschaltung E255 bereit, und der On-Chip-Router E240e stellt einen Zugangspunkt in die Busschaltung E258 bereit.
  • Wie veranschaulicht, ist eine Vielzahl von Senderschaltungen E230 in der externen Schnittstelle E110 mit einem bestimmten Satz von Sendestiften E220 gekoppelt, und eine Vielzahl von Empfängerschaltungen E235 ist mit einem bestimmten Satz von Empfangsstiften E225 gekoppelt. Diese Senderschaltungen E230 und Empfängerschaltungen E235 können physisch durch ihren entsprechenden Satz von Sendestiften E220 und Satz von Empfangsstiften E225 angeordnet sein. Ein solcher gemeinsamer Ort dieser Schaltungen kann den Zeitversatz zwischen einem Zeitpunkt, zu dem ein gegebener des Satzes von Senderschaltungen E230 in einer ersten Instanz der integrierten Schaltung E101 einen bestimmten Signalpegel aktiviert, und einem späteren Zeitpunkt, zu dem ein entsprechender des Satzes von Empfängerschaltungen auf einer zweiten Instanz der integrierten Schaltung E101 den aktivierten Signalpegel empfängt, reduzieren. Dieser Zeitversatz kann in IC-Designs zunehmen, in denen die Senderschaltungen E230 und/oder Empfängerschaltungen E235 weiter von ihren jeweiligen Sende- und Empfangsstiften entfernt platziert sind.
  • Der bestimmte Satz von Sendestiften E220 ist in einem bestimmten Layout relativ zu der Symmetrieachse E140 der externen Schnittstelle E110 angeordnet. Der bestimmte Satz von Empfangsstiften E225 ist in einem komplementären Layout zu dem bestimmten Layout relativ zu der Symmetrieachse E140 angeordnet. Dementsprechend ist, wenn zwei Instanzen der integrierten Schaltung E101 einander zugewandt angeordnet sind, wobei eine der Instanzen um E180 Grad von der anderen Instanz umgekehrt ist, der gegebene Sendestift E120 an dem entsprechenden Empfangsstift E125 ausgerichtet. Die externe Schnittstelle E110 ist konfiguriert, um bestimmte Daten zwischen den Busschaltungen E250-E258 und der anderen Instanz der integrierten Schaltung E101 zu übertragen.
  • Die On-Chip-Router E240 übertragen die bestimmten Daten über eine Vielzahl von Signalen zwischen einer zugehörigen Busschaltung E250-E258 und einer externen Schnittstelle E110. Die On-Chip-Router E240 können konfiguriert sein, um ein oder mehrere Datenpakete, die an eine jeweiligen der Busschaltungen E250-E258 gesendet werden sollen, in die Warteschlange zu stellen und/oder ein oder mehrere Datenpakete, die von der jeweiligen Busschaltung empfangen werden sollen, in die Warteschlange zu stellen. Zum Beispiel kann der On-Chip-Router E240a eine Reihe von Datenpaketen von der anderen Instanz der integrierten Schaltung E101 über die externe Schnittstelle E110 empfangen. In einigen Ausführungsformen kann der On-Chip-Router E240a ein oder mehrere Datenpakete der Reihe puffern, während er auf verfügbare Bandbreite in der Busschaltung E250 wartet, bevor er die empfangenen Datenpakete sendet. Es kann auch der umgekehrte Fall eintreten, wobei der On-Chip-Router E240a Datenpakete von der Busschaltung E250 puffert, während er auf die Bandbreite wartet, um sie an die andere Instanz der integrierten Schaltung E101 zu senden In anderen Ausführungsformen kann der On-Chip-Router E240a die Funktionsschaltung E260a oder E260b veranlassen, das Senden eines Datenpakets zu verzögern, bis Bandbreite an dem Bus E250 und/oder Ressourcen in einer Zielschaltung verfügbar sind, um das Datenpaket zu empfangen. Zusätzlich können die On-Chip-Router E240 Logikschaltungen zum Bestimmen eines endgültigen Ziels für ein empfangenes Datenpaket, z. B. eine bestimmte (oder mehrere) der Funktionsschaltungen E260, einschließen. In einigen Ausführungsformen können die On-Chip-Router E240 Datensignale, die von der externen Schnittstelle E110 empfangen werden, unter Verwendung eines Datenprotokolltyps in einen anderen Datenprotokolltyp, der mit der zugehörigen Busschaltung kompatibel ist, umwandeln.
  • Wie offenbart, schließt die integrierte Schaltung E101 die Vielzahl von Senderschaltungen E230 und die Vielzahl von Empfängerschaltungen E235 ein, die jeweiligen der Vielzahl von Sendestiften E120 und der Vielzahl von Empfangsstiften E125 entsprechen. Die Senderschaltungen E230 schließen Schaltlogik zum Führen von Datensignalen auf entsprechende Sendestifte E120 ein. Zum Beispiel können die Senderschaltungen E230 Treiberschaltungen einschließen, die konfiguriert sind, um einen bestimmten Spannungspegel von einem Signal zu empfangen, das von einem zugehörigen On-Chip-Router E240 erzeugt wird, und dann einen entsprechenden Spannungspegel auf einem zugehörigen Sendestift E120 erzeugen, sodass eine entsprechende Empfängerschaltung E235 in der anderen Instanz der integrierten Schaltung E101 diesen Spannungspegel erkennen kann. Die Empfängerschaltungen E235 können zum Beispiel Eingangsschaltungen einschließen, die konfiguriert sind, um zu erkennen, ob der empfangene Spannungspegel auf einem entsprechenden der Empfangsstifte E125 über oder unter einem bestimmten Spannungsschwellenwert liegt, und dann einen entsprechenden Logikpegel auf einem Signal zu erzeugen, das an einen zugehörigen On-Chip-Router E240 gesendet wird. Die Senderschaltungen E230 und die Empfängerschaltungen E235, wie gezeigt, sind in einem physischen Layout angeordnet, das dem bestimmten komplementären Layout relativ zu der Symmetrieachse 140 entspricht.
  • Die On-Chip-Router E240 schließt ein Paar von On-Chip-Routern (z. B. die On-Chip-Router E240a und E240d) ein, die mit einer gemeinsamen Busschaltung (z. B. der Busschaltung E250) gekoppelt sind. Der On-Chip-Router E240a ist mit einem bestimmten Satz von Sende- und Empfangsstiften der externen Schnittstelle E110, die sich auf der linken Seite der Symmetrieachse E 140 befinden, gekoppelt. Der On-Chip-Router E240d ist mit einem anderen Satz von Sende- und Empfangsstiften der externen Schnittstelle, die sich auf der rechten Seite der Symmetrieachse E 140 befinden und komplementär zu dem bestimmten Satz von Sende- und Empfangsstiften sind, gekoppelt. Zum Beispiel weist ein gegebener Sendestift E120, der mit dem On-Chip-Router E240a gekoppelt ist, einen entsprechenden komplementären Empfangsstift E125 auf, der mit dem On-Chip-Router E240d gekoppelt ist.
  • Ein Beispiel für einen Datenaustausch zwischen einer bestimmten Funktionsschaltung einer ersten Instanz der integrierten Schaltung E101 (z. B. Funktionsschaltung E260a) und einer anderen Funktionsschaltung einer zweiten Instanz der integrierten Schaltung E101 (z.B. einer zweiten Instanz der Funktionsschaltung E260b) schließt das Senden, durch die Funktionsschaltung E260a in der ersten Instanz, von ersten Daten über den Satz von Sendestiften E220 der externen Schnittstelle E110 der ersten Instanz ein. Dieses Senden umfasst das Senden eines bestimmten Satzes von Signalen an die zweite Instanz über die externe Schnittstelle E110 unter Verwendung des On-Chip-Routers E240a. Das Empfangen der ersten Daten durch die zweite Instanz umfasst das Empfangen des bestimmten Satzes von Signalen über einen Satz von Empfangsstiften E225 der externen Schnittstelle E110, die in der zweiten Instanz mit dem On-Chip-Router E240d gekoppelt sind, durch die zweite Instanz. Der On-Chip-Router E240d kann dann die empfangenen ersten Daten über die Busschaltung E250 der zweiten Instanz an die zweite Instanz der Funktionsschaltung E260b leiten.
  • Daten, die von der Funktionsschaltung E260b der zweiten Instanz an die Funktionsschaltung E260a der ersten Instanz gesendet werden, wiederholen diesen Prozess. Die zweite Instanz der integrierten Schaltung E101 sendet zweite Daten über den Satz von Sendestiften E220 der externen Schnittstelle 110 der zweiten Instanz, einschließlich des Sendens eines anderen Satzes von Signalen über die externe Schnittstelle E110 unter Verwendung des On-Chip-Routers E240a der zweiten Instanz an die erste Instanz. Das Empfangen der zweiten Daten über den Satz von Empfangsstiften E225 der externen Schnittstelle E110 der ersten Instanz durch die erste Instanz umfasst das Empfangen eines anderen Satzes von Signalen von der zweiten Instanz über die externe Schnittstelle E110 unter Verwendung des On-Chip-Routers E240d der ersten Instanz. Die empfangenen zweiten Daten werden dann über die Busschaltung E250 der ersten Instanz an die Funktionsschaltung E260a geleitet. Daten können daher unter Verwendung der entsprechenden Sätze von komplementären Sendestiften E120 und Empfangsstiften E125 zwischen den zwei Instanzen der integrierten Schaltung E101 ausgetauscht werden.
  • Des Weiteren ist der On-Chip-Router E240a über die Busschaltung E250 mit dem On-Chip-Router E240d und mit dem Satz von Sendestiften E220 gekoppelt. In ähnlicher Weise ist der On-Chip-Router E240d mit dem Satz von Empfangsstiften E225 gekoppelt. Die Funktionsschaltung E260a in der ersten Instanz kann daher Daten über die externe Schnittstelle E110 unter Verwendung des komplementären Satzes von On-Chip-Routern E240a und E240d senden und empfangen. Die Funktionsschaltung E260b der zweiten Instanz kann in ähnlicher Weise Daten über die externe Schnittstelle E110 unter Verwendung des komplementären Satzes von On-Chip-Routern E240a und E240d der zweiten Instanz senden und empfangen. Dementsprechend können es die gekoppelten externen Schnittstellen E110 der ersten und der zweiten Instanz den jeweiligen Kommunikations-Fabrics der zwei Instanzen ermöglichen, als ein einzelnes kohärentes Kommunikations-Fabric zu fungieren, wodurch ermöglicht wird, dass Datenpakete zwischen Funktionsschaltungen auf gegenüberliegenden Dies auf eine ähnliche Weise wie Datenpakete ausgetauscht werden, die zwischen zwei Funktionsschaltungen auf demselben Die ausgetauscht werden. Aus einer funktionellen Perspektive können die zwei Instanzen der integrierten Schaltung E101 als eine einzelne integrierte Schaltung arbeiten.
  • Es wird darauf hingewiesen, dass die Ausführungsform von 50 ein Beispiel ist. In anderen Ausführungsformen kann eine andere Kombination von Elementen eingeschlossen sein. Zum Beispiel kann eine andere Anzahl von Busschaltungen und/oder On-Chip-Routern eingeschlossen sein. Obwohl 50 26 Stifte darstellt, die in der externen Schnittstelle E110 eingeschlossen sind, kann in anderen Ausführungsformen jede geeignete Anzahl von Stiften eingeschlossen sein.
  • In der Beschreibung von 49 und 50 werden verschiedene Paare von Stiften der externen Schnittstelle E110 als komplementär beschrieben. In einigen Ausführungsformen ist eine Reihenfolge von Bits von Daten, die über einen bestimmten Satz von Sendestiften einer ersten Instanz eines IC übertragen werden, möglicherweise nicht direkt am komplementären Satz von Empfangsstiften einer zweiten Instanz der IC ausgerichtet. Eine Ausführungsform einer IC, die zeigt, wie eine Fehlausrichtung von Datenbits behandelt werden kann, ist in 51 gezeigt.
  • Unter Bezugnahme auf 51 sind zwei Instanzen der integrierten Schaltung E101 gezeigt, die über ihre jeweiligen Instanzen der externen Schnittstelle E110 gekoppelt sind. Wie gezeigt, stellt das System E300 eine Ausführungsform dar, in der empfangene Daten im Vergleich zu den Sendedaten fehlausgerichtet sind. Das System E300 schließt die integrierten Schaltungen E101a und E101b jeweils mit einer jeweiligen externen Schnittstelle E110a und E110b und einem jeweiligen Paar von On-Chip-Routern ein: On-Chip-Router E340a und E340b in der integrierten Schaltung E101a und On-Chip-Router E340c und E340d auf der integrierten Schaltung E101b. Für das veranschaulichte Beispiel entspricht der On-Chip-Router E340a der integrierten Schaltung E101a dem On-Chip-Router E340c der integrierten Schaltung E101b. In ähnlicher Weise entspricht der On-Chip-Router E340b dem On-Chip-Router E340d. Jede der integrierten Schaltungen E101a und E101b schließt ferner einen jeweiligen der Schnittstellenwrapper E350a und E350b ein, die konfiguriert sind, um einzelne Signale zwischen den jeweiligen On-Chip-Routern und den externen Schnittstellen zu leiten.
  • Wie veranschaulicht, sind die Sende- und Empfangsstifte der externen Schnittstelle E110a und E110b in Sätze von Stiften, einschließlich jeweiliger Sender- und Empfängerschaltungen, gruppiert. Diese Sätze von Stiften weisen eine übliche Anzahl von Stiften, acht im veranschaulichten Beispiel, auf, obwohl jede geeignete Anzahl verwendet werden kann. Diese übliche Anzahl von Stiften kann verwendet werden, um ein Design für die Sätze von Stiften zu standardisieren. Jeder Satz von Stiften kann einen gemeinsamen Satz von Signalen zum Steuern von Taktsignalen, Leistung und dergleichen einschließen. Zum Beispiel empfängt jeder Stift eines gegebenen Satzes ein gleiches gategesteuertes Taktsignal und kann mit einem gleichen gategesteuerten Leistungsknoten und/oder einem gleichen gategesteuerten Bezugsmasseknoten gekoppelt sein. Das Verwenden einer kleinen Anzahl (z. B. eines oder zwei) von Designs für die Sätze von Stiften kann eine Entwicklungszeit für die externe Schnittstelle verringern sowie eine Gleichförmigkeit für die Platzierung sowie für die Leistungseigenschaften (z. B. Anstiegs- und Abfallzeiten) für jeden der Stifte der externen Schnittstellen E110a und E110b erhöhen. Wie zuvor offenbart, kann, obwohl nur zweiunddreißig Stifte für jede Instanz der externen Schnittstelle E110 veranschaulicht sind, die externe Schnittstelle E110 tatsächlich Hunderte oder Tausende von Stiften einschließen. Dementsprechend kann das Standardisieren von Sätzen von Stiften, die in dem Schnittstellendesign als eine Einheit implementiert werden sollen, zu einer erheblichen Reduzierung der Zeiten führen, die zum Entwerfen und Validieren der externen Schnittstelle E110 erforderlich sind.
  • Einzelne der Vielzahl der On-Chip-Router E340a-E340d sind einem jeweiligen oder mehreren der Sätze von Stiften zugewiesen. Zum Beispiel ist der On-Chip-Router E340a dem Satz von Sendestiften E320a und dem Satz von Empfangsstiften E325a zugewiesen. Ebenso werden On-Chip-Router EE340b-340d
    einem jeweiligen Satz von Sendestiften und einem jeweiligen Satz von Empfangsstiften zugewiesen. In verschiedenen Ausführungsformen können diese Zuweisungen fest oder programmierbar sein, z. B. werden Sätze von Stiften durch Einstellen eines bestimmten Konfigurationsregisters (nicht gezeigt) zugewiesen. Es wird darauf hingewiesen, dass Empfangs- und Sendestifte in der dargestellten Ausführungsform in separate Sätze gruppiert sind. In anderen Ausführungsformen, wie nachstehend gezeigt wird, kann ein Satz von Stiften sowohl Sende- als auch Empfangsstifte einschließen.
  • Zusätzlich sind einzelne der Vielzahl von On-Chip-Routern E340a-E340d einer jeweiligen Busschaltung zugewiesen und sind daher mit einer Vielzahl von Funktionsschaltungen, die auf derselben integrierten Schaltung E101 eingeschlossen sind, gekoppelt. In einigen Ausführungsformen kann eine physische Ausrichtung von On-Chip-Routern E340 vorzugsweise auf die jeweilige Busschaltung implementiert werden, mit der der On-Chip-Router gekoppelt ist. Zum Beispiel können die On-Chip-Router E340a und E340b so instanziiert sein, dass sie um 180 Grad voneinander gedreht sind, um an einer gemeinsamen Busschaltung ausgerichtet zu sein, die die integrierte Schaltung E101a umgibt. In einer solchen Ausführungsform sind die Stifte des On-Chip-Routers E340b möglicherweise nicht am Satz von Empfangsstiften E325b und/oder am Satz von Sendestiften E320b der externen Schnittstelle E110a ausgerichtet. Zusätzlich kann der Schnittstellenwrapper 350a mehrere Instanzen derselben Komponente einschließen, die um 180 Grad voneinander instanziiert sind. In einem solchen Fall sind die Sende- und Empfangsstifte des Schnittstellenwrappers E350a möglicherweise nicht an den Stiften der externen Schnittstelle E110a ausgerichtet. Dementsprechend kann eine Fähigkeit, Stiftsignale durch den Schnittstellenwrapper E350a umzuleiten, erwünscht sein.
  • Wie gezeigt, schließt jeder der On-Chip-Router E340a-E340d sechs Ausgangssignale und sechs Eingangssignale ein, die sich von der üblichen Anzahl von Stiften, acht, unterscheiden. Dementsprechend sind zwei Stifte jedes der Sätze von Stiften E320 und E325, die jedem On-Chip-Router E340 zugewiesen sind, ungenutzt. Die On-Chip-Router E340a-E340d unterstützen jeweils ein bestimmtes Netzwerkprotokoll, wie vorstehend in Bezug auf 50 beschrieben. In einigen Fällen, wie in 51 gezeigt, schließt ein bestimmtes Netzwerkprotokoll möglicherweise keine Anzahl von Stiften ein, die an der üblichen Anzahl von Stiften, die in den Sätzen von Stiften eingeschlossen sind, ausgerichtet ist. Da das Entfernen der zusätzlichen Stifte Leistungseigenschaften der verbleibenden Stifte beeinflussen könnte (z. B. könnte sich eine parasitäre Kapazität, die von jedem der verbleibenden Stifte beobachtet wird, unterscheiden, wodurch die Anstiegs- und Abfallzeiten beeinträchtigt werden), werden in einigen Ausführungsformen die nicht relevanten Stifte in den jeweiligen Sätzen belassen.
  • Jeder Satz von Sendestiften E320 schließt, wie gezeigt, einen Sendepuffer ein, und in ähnlicher Weise schließt jeder Satz von Empfangsstiften E325 einen Empfangspuffer ein. Da acht Sendestifte oder acht Empfangsstifte in jedem Satz eingeschlossen sind, können die jeweiligen Sende- und Empfangspuffer als ein Datenbyte abgerufen werden. Zum Beispiel kann der On-Chip-Router E340a Daten an den On-Chip-Router E340d senden. Der On-Chip-Router E340a sendet sechs Ausgangssignale an den Schnittstellenwrapper E350a. Der Schnittstellenwrapper E350a ist konfiguriert, um den Satz von Sendestiften E320a zu einer Standardstiftbelegung in dem On-Chip-Router E340a zu leiten. Wie gezeigt, ist diese Standardzuweisung eine direkte Durchgangszuweisung, bei der ein Bit 0 des Satzes von Sendestiften E320a mit einem Bit 0 des On-Chip-Routers E340a gekoppelt ist, und so weiter zu einem Bit 5 des Satzes von Sendestiften E320a, das einem Bit 5 des On-Chip-Routers E340a zugeordnet ist. Diese Bitzuweisung geht davon aus, dass das Bit 0 dem äußersten linken Stift der Sätze von Stiften in der externen Schnittstelle E110a entspricht.
  • Es ist zu beachten, dass die integrierte Schaltung E101b in Bezug auf die integrierte Schaltung E101a um 180 Grad gedreht ist. Dementsprechend entspricht das Bit 0 dem äußersten rechten Stift der Sätze von Stiften in der externen Schnittstelle E110b. Da die Drähte E145 zwischen der externen Schnittstelle E110 und E110b, wie gezeigt, direkt sind, ist das Bit 0 des Satzes von Sendestiften E320 mit dem Bit 7 des Satzes von Empfangsstiften E325d gekoppelt, und in ähnlicher Weise ist das Bit 5 des Satzes von Sendestiften e320a mit dem Bit 2 des Satzes von Empfangsstiften E325d gekoppelt. Dementsprechend leitet der Schnittstellenwrapper E350b den Satz von Empfangsstiften E325d unter Verwendung einer Nichtstandardstiftbelegung zu dem On-Chip-Router E340d.
  • In ähnlicher Weise kann das Senden von Daten von dem On-Chip-Router E340d an den On-Chip-Router E340a das Senden von Signalen durch den On-Chip-Router E340d über den Satz von Sendestiften E320d der externen Schnittstelle E110b unter Verwendung einer Nichtstandardstiftbelegung einschließen, um den Satz von Sendestiften E320d an den On-Chip-Router E340d zu leiten. Das Empfangen der Daten durch den On-Chip-Router E340a über den Satz von Empfangsstiften E325a der externen Schnittstelle E110a umfasst das Leiten des Satzes von Empfangsstiften E325a zu dem On-Chip-Router E340a unter Verwendung der Standardstiftbelegung.
  • In einigen Ausführungsformen können die Schnittstellenwrapper E350a und E350b das Leiten zwischen einem gegebenen On-Chip-Router E340 und den Sende- und Empfangsstiften des einen oder der mehreren zugewiesenen Sätze von Stiften auf jedem gegebenen Taktzyklus anpassen, während dessen keine Daten von dem gegebenen On-Chip-Router E340 übertragen werden. Zum Beispiel kann eine Menge bestimmter Daten zwischen dem On-Chip-Router E340b und dem On-Chip-Router E340c gesendet werden. Der Schnittstellenwrapper E350a leitet für einen ersten Abschnitt der bestimmten Daten die Vielzahl von Signalen zwischen dem On-Chip-Router E340b und dem Satz von Sendestiften E320b unter Verwendung einer ersten Stiftbelegung und leitet dann für einen zweiten Abschnitt der bestimmten Daten die Vielzahl von Signalen zwischen dem On-Chip-Router E340b und dem Satz von Sendestiften E320b unter Verwendung einer zweiten Stiftbelegung, die sich von der ersten Stiftbelegung unterscheidet, um.
  • Die integrierten Schaltungen E101a und E101b können z. B. jeweils einen oder mehrere Verarbeitungskerne einschließen, die in der Lage sind, Anweisungen einer bestimmten Anweisungssatzarchitektur auszuführen. Dementsprechend können Anweisungen eines bestimmten Programms einen Kern veranlassen, die Stiftbelegungen in den Schnittstellenwrappern E350a und/oder E350b zu bestimmten Zeitpunkten oder für bestimmte Arten von Daten zu modifizieren. Zum Beispiel können Bilddaten gesendet werden, indem eine Stiftbelegung verwendet wird und dann auf eine andere Stiftbelegung für Audiodaten oder für Befehle, die den Bilddaten zugeordnet sind, umgeschaltet wird. Zusätzlich können die Schnittstellenwrapper E350a und E350b in der Lage sein, Stiftbelegungen für einen On-Chip-Router umzuleiten, während ein anderer Router auf derselben IC Daten sendet oder empfängt.
  • Es wird darauf hingewiesen, dass die Beispiele von 51 lediglich zum Zeigen offenbarter Konzepte dienen. Das System E300 wurde vereinfacht, um die beschriebenen Techniken klar zu veranschaulichen. In anderen Ausführungsformen können zusätzliche Sätze von Sende- und Empfangsstiften in den externen Schnittstellen sowie zusätzliche On-Chip-Router eingeschlossen sein. Andere Schaltungsblöcke der integrierten Schaltungen E101a und E101b wurden der Klarheit halber weggelassen.
  • 51 beschreibt, wie Sätze von Stiften in der externen Schnittstelle implementiert und verwendet werden können. Verschiedene Techniken können zum Implementieren solcher Sätze von Stiften verwendet werden. In 51 sind die Stifte der externen Schnittstelle in Sätze von Sendestiften gruppiert, die von den Sätzen von Empfangsstiften getrennt sind. 52 veranschaulicht ein weiteres Beispiel für das Gruppieren von Sätzen von Stiften, die sowohl Sende- als auch Empfangsstifte einschließen.
  • Übergehend zu 52 ist ein Blockdiagramm einer Ausführungsform einer integrierten Schaltung mit einer externen Schnittstelle gezeigt. In der veranschaulichten Ausführungsform schließt die integrierte Schaltung E101 die externe Schnittstelle E410 und die On-Chip-Router E440a-E440d (zusammen die On-Chip-Router E440) ein. Die externe Schnittstelle E410 schließt vier Sätze von Sende- und Empfangsstiften, Bündel E450a-E450d (zusammen Bündel E450), ein, in denen die Sende- und Empfangsstifte in einem komplementären Layout relativ zu der Symmetrieachse E140 angeordnet sind. Jedes der veranschaulichten Bündel E450a-E450d schließt acht Stifte, vier Sendestifte und vier Empfangsstifte, ein.
  • Wie veranschaulicht, sind die Sende- und Empfangsstifte der externen Schnittstelle E410 in Sätze von Stiften, Bündel E450a-E450d, gruppiert, wobei jedes der Bündel E450 eine übliche Anzahl von Stiften (acht) aufweist. Die On-Chip-Router E440 sind einem jeweiligen der Bündel E450 zugewiesen. In anderen Ausführungsformen können jedoch einer oder mehrere der On-Chip-Router E440 zu zwei oder mehr Bündeln E450 zugewiesen sein. Wie vorstehend beschrieben, können Sätze von Sende- und Empfangsstiften unter Verwendung der standardisierten Bündel E450 implementiert werden, um die Konsistenz über die Stifte der externen Schnittstelle E410 hinweg zu erhöhen. Innerhalb jedes Bündels E450 teilen sich die enthaltenen Sende- und Empfangsstifte ein gemeinsames Leistungssignal und Taktsignal.
  • Jedes Bündel E450 kann mit jedem geeigneten Leistungssignal und Taktsignal gekoppelt sein. Wie gezeigt, sind die Bündel E450a und E450d gekoppelt, um das Leistungssignal E460a und das Taktsignal E465a zu empfangen, während die Bündel E450b und E450c gekoppelt sind, um das Leistungssignal E460b und das Taktsignal E465b zu empfangen. In einigen Ausführungsformen kann das Leistungssignal E460a unabhängig von dem Leistungssignal E460b gesteuert werden, einschließlich zum Beispiel unter Verwendung eines anderen Spannungspegels und/oder durch Implementieren verschiedener Leistungsgatter, um die jeweiligen Bündel E450 zu aktivieren/deaktivieren. In ähnlicher Weise kann das Taktsignal E465a auch unabhängig von dem Taktsignal E465b gesteuert werden. Demgemäß kann das Taktsignal E465a unabhängig von dem Taktsignal E465b aktiviert und/oder auf eine bestimmte Frequenz eingestellt werden. In der vorliegenden Ausführungsform sind die Bündel E450a und E450d ein komplementäres Paar, wie die Bündel E450b und E450c. Zusätzlich zur Verwendung eines standardisierten Stiftbündels zum Implementieren jedes der Bündel E450 kann die Verwendung von gemeinsamen Leistungs- und Taktsignalen für ein komplementäres Paar von Bündeln E450 die Leistungskonstanz zwischen den zwei Bündeln E450 eines komplementären Paares weiter erhöhen.
  • Wie gezeigt, sind die On-Chip-Router E440a und E440d den Bündeln E450a bzw. E450d zugewiesen. In ähnlicher Weise sind die On-Chip-Router E440b und E440c jeweils den Bündeln E450b und E450c zugewiesen. Die On-Chip-Router E440a und E440d schließen eine gleiche Anzahl von Sende- und Empfangsstiften ein, wie sie in einem standardisierten Bündel eingeschlossen sind, was zu keinen ungenutzten Stiften in den Bündeln E450a und E450d führt. Die On-Chip-Router E440b und E440c schließen dagegen weniger Sende- und Empfangsstifte ein als die übliche Anzahl von Stiften, die in einem standardisierten Bündel enthalten sind, was zu einem ungenutzten Sendestift und einem ungenutzten Empfangsstift in den Bündeln E450b bzw. E450c führt.
  • Die On-Chip-Router E440a und E440d können, wie veranschaulicht, Datenpakete über die Bündel E450a und E450d unter Verwendung aller Sendestifte der jeweiligen Bündel senden. Zu einem anderen Zeitpunkt können die On-Chip-Router E440a und E440d jedoch eine Vielzahl von Datenpaketen senden, wobei einige der Vielzahl von Datenpaketen eine geringere Anzahl von Bits einschließen, was zur Verwendung von weniger als allen Sendestiften des jeweiligen Bündels E450 führt. Ebenso können beim Empfangen von Datenpaketen weniger als alle Empfangsstifte in dem Bündel E450a und E450d verwendet werden, um ein gegebenes Datenpaket zu empfangen.
  • Es wird darauf hingewiesen, dass 52 lediglich ein Beispiel der offenbarten Konzepte ist. Obwohl vier On-Chip-Router und vier Stiftbündel gezeigt sind, kann in anderen Ausführungsformen jede geeignete Anzahl eingeschlossen sein. Wie veranschaulicht, sind innerhalb jedes Stiftbündels vier Sendestifte und vier Empfangsstifte gezeigt. In anderen Ausführungsformen kann jede geeignete Anzahl von Sende- und Empfangsstiften eingeschlossen sein. In einigen Ausführungsformen kann sich die Anzahl von Sendestiften von der Anzahl von Empfangsstiften unterscheiden. In anderen Ausführungsformen können Sende- und Empfangsstifte in separaten Bündeln implementiert sein.
  • In 49 und 51 sind zwei integrierte Schaltungen über ihre jeweiligen externen Schnittstellen gekoppelt gezeigt. In einigen Ausführungsformen können die zwei integrierten Schaltungen auf einer koplanaren Oberfläche platziert sein, wobei beide ICs in eine gleiche Richtung weisen und eine IC so gedreht ist, dass die Stifte ihrer jeweiligen externen Schnittstellen auf eine Weise ausgerichtet sind, die es den Stiften der zwei externen Schnittstellen ermöglicht, gekoppelt zu werden, ohne Drähte zu kreuzen. In anderen Ausführungsformen, wie in 53A und 53B gezeigt, können zwei ICs flächig zueinander weisend befestigt sein, wobei ihre jeweiligen externen Schnittstellen ausgerichtet sind. 53B stellt ferner ein Beispiel für zwei Dies dar, die über eine nicht ausgerichtete externe Schnittstelle gekoppelt sind.
  • Übergehend zu 53A sind nun zwei Ausführungsformen zur Befestigung von zwei integrierten Schaltungen zusammen über eine externe Schnittstelle dargestellt. In einer Ausführungsform zeigt das System E500 ein Die E501a mit integrierter Schaltung, der mit dem Die E501b mit integrierter Schaltung unter Verwendung von Lötkugeln E540 gekoppelt ist. In einer anderen Ausführungsform stellt das System E505 das Die E501a mit integrierter Schaltung mit dem Die E501b mit integrierter Schaltung unter Verwendung der Interposervorrichtung E530 sowie von zwei Sätzen von Lötkugeln E545 gekoppelt dar. In der vorliegenden Ausführungsform entsprechen die Dies E501a und E501b mit integrierter Schaltung den integrierten Schaltungen E101a und E101b in 49.
  • Wie in 49 gezeigt, können die externen Schnittstellen der integrierten Schaltungen E101a und E101b unter Verwendung von Drähten (z. B. Lötverbindungsdrähten oder Mikrostreifenleitern, die auf Leiterplatten abgeschieden sind) mit den zwei Dies gekoppelt sein, die auf einer koplanaren Oberfläche platziert sind, wobei die Flächen beider Dies in eine gleiche Richtung weisen. Eine solche Technik kann eine kostengünstige Montagelösung ermöglichen, kann aber eine Oberfläche einer zugehörigen Leiterplatte erfordern, die größer als eine Grundfläche der zwei Chips ist. Um diese Grundfläche zu reduzieren, schließt das System E500 zwei Dies E501a und E501b mit integrierter Schaltung ein, die flächig zueinander weisend angeordnet sind, wobei Stifte der jeweiligen externen Schnittstellen ausgerichtet und unter Verwendung von Lötkugeln E540 direkt miteinander verlötet sind. Zum Beispiel ist der Sendestift E120a direkt an den Empfangsstift E125b gelötet, und der Empfangsstift E125a ist direkt an den Sendestift E120b gelötet. Das vorstehend beschriebene komplementäre Stiftlayout für die externen Schnittstellen E110 in 49 ermöglicht dieses direkte Löten zwischen verschiedenen Instanzen derselben Schnittstelle. Die Platzierung komplementärer Paare von Stiften in gleichem Abstand von der Symmetrieachse E 140 stellt die Ausrichtung bereit, die die Direktverbindungen ermöglicht.
  • Das System E505 stellt eine ähnliche Lösung wie das System E500 dar, aber mit einer Hinzufügung der Interposervorrichtung E530a, um eine leitfähige Verbindung zwischen einer externen Schnittstelle jedes Dies bereitzustellen. In dem System E505 wird der Sendestift E120a des Dies mit integrierter Schaltung E501a an einen bestimmten Stift der Interposervorrichtung E530a gelötet. Dieser bestimmte Stift wird dann an den Empfangsstift E125b gelötet. In ähnlicher Weise wird der Empfangsstift E125a an einen anderen Stift der Interposervorrichtung E530a gelötet, der wiederum an den Sendestift E120b gelötet wird. Obwohl die Interposervorrichtung E530a das Leiten von Stiften des Dies E501a mit integrierter Schaltung an Stifte des Dies mit integrierter Schaltung E501b, die nicht physisch ausgerichtet sind, ermöglichen kann, ermöglicht die Verwendung des komplementären Stiftlayouts für die externen Schnittstellen der Dies E501a und E501b mit integrierter Schaltung, dass die Interposervorrichtung E530a direkte Leitungspfade zwischen den zwei Dies aufweist. Eine solche direkte Verbindung kann einen physischen Pfad zwischen Stiften der integrierten Schaltung E501a und E501b im Vergleich zum Leiten von Verbindungen zwischen fehlausgerichteten Stiften auf den zwei Dies reduzieren. Die Verwendung der Interposervorrichtung E530a kann ferner das Leiten eines oder mehrerer Stifte der externen Schnittstellen oder anderer Stifte entweder des Dies E501a oder des Dies E501b mit integrierter Schaltung zu einem Rand der Interposervorrichtung E530 ermöglichen, wo die Stifte zum Beispiel mit anderen integrierten Schaltungen gekoppelt werden können.
  • In 53A sind die Stifte der externen Schnittstellen der integrierten Schaltungen E501a und E501b mit komplementären Stiften dargestellt, die in gleichem Abstand von der Symmetrieachse E 140 sind. In einigen Ausführungsformen können nicht alle Stifte einer Schnittstelle ein solches äquidistantes Stiftlayout einschließen. Nun Bezug nehmend auf 53B sind zwei weitere Beispiele von zwei gekoppelten ICs gezeigt. Die ICs, die in den Systemen E510 und E515 eingeschlossen sind, schließen jedoch keine Stifte ein, die alle in gleichem Abstand von der Symmetrieachse sind.
  • Wie veranschaulicht, zeigt das System E510 ein Beispiel einer externen Schnittstelle, die komplementäre Stifte einschließt. Ähnlich wie bei dem Die mit integrierter Schaltung E501a und E501b sind die Dies E502a und E502b mit integrierter Schaltung zwei Instanzen eines gleichen Designs der integrierten Schaltung, die durch ein gemeinsames externes Schnittstellendesign gekoppelt sind. Die Stifte der externen Schnittstelle des Dies E502a und E502b mit integrierter Schaltung schließen Sende- und Empfangsstifte für zwei Busse, Bus E560 und Bus E565, ein. Die Stifte für den Bus E565 sind in zwei Abschnitte pro Die aufgeteilt, Bus E565a und E565b auf dem Die mit integrierter Schaltung E502a und Bus E565c und E565d auf dem Die E502b mit integrierter Schaltung. Jedes Die schließt auch jeweilige Stifte für den Bus E560 ein, E560a auf dem Die E502a und E560b mit integrierter Schaltung auf dem Die E502b mit integrierten Schaltung. Die komplementären Stifte des Busses E565a und E565d sind nicht in gleichem Abstand von der Symmetrieachse E140, und obwohl die Stifte in einer gleichen Reihenfolge angeordnet sind, kann keine gerade Linie, die parallel zu den Rändern des Dies ist, durch die Stifte der Busse E565a und E565d gezogen werden, und Ähnliches gilt bei den Stiften der Busse E565b und E565c. Dementsprechend sind die Stifte des Busses E565 nicht ausgerichtet.
  • Wie gezeigt, sind die Stifte des Busses E560a, die komplementäre Funktionen aufweisen, auch nicht in gleichem Abstand von der Symmetrieachse E140 angeordnet. Im Gegensatz zu den Stiften des Busses E565 können jedoch Linien parallel zu den Rändern des Dies durch die komplementären Paare von Stiften der Busse E560a und E560b gezogen werden. Dementsprechend sind die Stifte des Busses E560 ausgerichtet.
  • Das System E515, wie dargestellt, zeigt ein Beispiel einer externen Schnittstelle, die nicht komplementär ist. Wie das System E510 schließt das System E515 zwei Instanzen eines gleichen Designs der integrierten Schaltung ein, das Die E503a und E503b mit integrierter Schaltung. In dem System E515 sind die Stifte der externen Schnittstelle nicht ausgerichtet, und folglich kreuzen sich mehrere Signalpfade. Zum Beispiel kreuzt der Signalpfad zwischen dem Sendestift E120a und dem Empfangsstift E125b den Pfad von dem Sendestift E121a und dem Empfangsstift E126b. Auf der gegenüberliegenden Seite der Symmetrieachse E 140 kreuzt der Signalpfad zwischen dem Sendestift E120b und dem Empfangsstift E125a den Pfad von dem Sendestift E121b und dem Empfangsstift E126a. Aufgrund dieser Fehlausrichtung werden die integrierten Schaltungen E503a und E503b nicht als eine komplementäre Schnittstelle aufweisend betrachtet.
  • Es wird darauf hingewiesen, dass die Ausrichtung komplementärer Stifte einer externen Schnittstelle zu einer Verringerung einer Rauschkopplung zwischen benachbarten Signalen führen kann. Wenn sich zwei oder mehr Signalpfade kreuzen, können die Drähte, die Signale tragen, in unmittelbare Nähe kommen, was wiederum eine Anfälligkeit für eine Rauschkopplung erhöhen kann, bei der ein erster Signalpfad elektromagnetische Störungen von Signalübergängen auf einem zweiten Signalpfad empfängt. Je näher die beiden Signalpfade sind, desto größer ist die Anfälligkeit, dass Rauschen zwischen den beiden Pfaden übertragen wird. Durch Ausrichten der Stifte der Schnittstelle kann ein geeigneter Abstand zwischen benachbarten Signalpfaden aufrechterhalten werden, wodurch die Rauschanfälligkeit auf ein akzeptables Niveau reduziert wird. Das ausgerichtete Stiftlayout kann ferner eine Länge der Signalpfade durch die Interposervorrichtung reduzieren, was eine Impedanz zwischen den komplementären Stiftpaaren reduzieren kann, wodurch der Betrieb des Systems bei niedrigeren Spannungspegeln und/oder höheren Taktfrequenzen erfolgen kann.
  • Es wird ferner darauf hingewiesen, dass die Beispiele von 53A und 53B lediglich zum Zeigen der offenbarten Techniken dienen. Andere Techniken zum Koppeln von zwei oder mehr IC-Chips werden in Betracht gezogen. Zum Beispiel können in einigen Ausführungsformen Stifte für jeden von zwei oder mehr IC-Chips mit Verbindungen zwischen dem Chip, die durch die Leiterplatte geführten werden, direkt mit einer Leiterplatte gekoppelt sein.
  • Die vorstehend in Bezug auf 49-53 beschriebenen Schaltungen und Techniken können zwei externe Schnittstellen unter Verwendung einer Vielfalt von Verfahren koppeln. Zwei Verfahren im Zusammenhang mit dem Koppeln von Schnittstellen sind nachstehend in Bezug auf 54 und 55 beschrieben.
  • Übergehend zu 54 wird nun ein Flussdiagramm für ein Beispiel eines Verfahrens zum Koppeln von zwei integrierten Schaltungen miteinander gezeigt. Das Verfahren E600 kann von einem System durchgeführt werden, das zwei oder mehr Instanzen einer integrierten Schaltung einschließt, wie dem System E100 in 49. Unter gemeinsamer Bezugnahme auf 49 und 54 beginnt Verfahren E600 bei Block E610.
  • Bei Block E610 schließt das Verfahren E600 das Senden von ersten Daten über einen Satz von Sendestiften der externen Schnittstelle E110a durch die integrierte Schaltung E101a an die integrierte Schaltung E101b ein. Wie gezeigt, sind die integrierten Schaltungen E101a und E101b zwei Instanzen eines gemeinsamen Designs der integrierten Schaltung. Somit ist ein physisches Stiftlayout der zwei Instanzen gleich. In anderen Ausführungsformen wird jedoch in Betracht gezogen, dass jeweilige Instanzen von zwei unterschiedlichen integrierten Schaltungen verwendet werden können. In 49 sind Sendestifte der externen Schnittstelle E110a der integrierten Schaltung E101a mit jeweiligen Empfangsstiften der externen Schnittstelle E110b der integrierten Schaltung E101b gekoppelt, einschließlich des Sendestifts E120a, der mit dem Empfangsstift E125b gekoppelt ist. Die integrierte Schaltung E101a kann daher eine externe Schnittstelle E110a verwenden, um die ersten Daten an die integrierte Schaltung E101b zu senden.
  • Das Verfahren E600 schließt bei Block E620 ferner das Empfangen von zweiten Daten über einen Satz von Empfangsstiften der externen Schnittstelle E110a durch die integrierte Schaltung E101a von der integrierten Schaltung E101b ein. Wie veranschaulicht, sind Empfangsstifte der externen Schnittstelle E110a mit jeweiligen Empfangsstiften der externen Schnittstelle E110b gekoppelt, einschließlich des Empfangsstifts E125a, der mit dem Sendestift E120b gekoppelt ist. Der Satz von Sendestiften und der Satz von Empfangsstiften befinden sich in komplementären Positionen relativ zu der Symmetrieachse E140 der integrierten Schaltung E101. Dementsprechend entsprechen die Sendestifte E120a und E120b einem gleichen Sendestift in dem gemeinsamen Design der integrierten Schaltung. Ebenso entsprechen die Empfangsstifte E125a und E125b einem gleichen Empfangsstift in dem gemeinsamen Design der integrierten Schaltung. Dieses komplementäre Stiftlayout der externen Schnittstelle relativ zu der Symmetrieachse E140 ermöglicht es, dass die zwei Instanzen des gemeinsamen Designs der integrierten Schaltung durch ihre jeweiligen externen Schnittstellen gekoppelt werden können, ohne dass Stifte der externen Schnittstelle umgeleitet werden müssen. Stattdessen können Direktverbindungen zwischen den externen Schnittstellen E110a und E110b möglich sein, ohne zugehörige Drähte zu kreuzen. Eine solche Technik zum Koppeln der zwei Instanzen der gemeinsamen integrierten Schaltung kann eine externe Schnittstelle mit einer großen Anzahl von Stiften (z. B. größer als tausend Stifte) ermöglichen.
  • In einigen Beispielen kann das Verfahren E600 bei Block E620 enden oder kann sich in anderen Ausführungsformen als Reaktion darauf wiederholen, dass neue Daten zwischen den zwei integrierten Schaltungen E101a und E101b ausgetauscht werden sollen. Es wird darauf hingewiesen, dass das Verfahren von 54 lediglich ein Beispiel für das Koppeln von zwei integrierten Schaltungen ist.
  • Unter Bezugnahme auf 55 wird nun ein Flussdiagramm für ein Beispiel eines Verfahrens zum Leiten von Signalen zwischen Stiften einer externen Schnittstelle und einem oder mehreren On-Chip-Routern veranschaulicht. In ähnlicher Weise wie bei dem vorstehenden Verfahren E600 kann das Verfahren E700 durch ein System mit zwei oder mehr integrierten Schaltungen, wie das System E300 in 51, durchgeführt werden. Unter gemeinsamer Bezugnahme auf 51 und 55 beginnt Verfahren E700 bei Block E710.
  • Das Verfahren E700 schließt bei Block E710 das Leiten, durch die integrierte Schaltung E101a, des Satzes von Sendestiften E320b an den On-Chip-Router E340b unter Verwendung einer Nichtstandardstiftbelegung zum Senden von ersten Daten über den Satz von Sendestiften E320a ein. Wie in 51 gezeigt, schließt die integrierte Schaltung E101a den Schnittstellenwrapper E350a ein, der konfiguriert ist, um Signale von den On-Chip-Routern E340a und E340b zu jeweiligen Sätzen von Sende- und Empfangsstiften in der externen Schnittstelle E110a zu leiten. Der Schnittstellenwrapper E350a kann eine Standardstiftbelegung zum Leiten des Satzes von Sendestiften E320b verwenden, um Signale von dem On-Chip-Router E340b auszugeben. Unter einigen Bedingungen kann der Schnittstellenwrapper E350a jedoch konfiguriert sein, um die Ausgangssignale von dem On-Chip-Router E340b an den Satz von Sendestiften E320b unter Verwendung einer Nichtstandardstiftbelegung umzuleiten. Zum Beispiel weist, wie in 51 gezeigt, der On-Chip-Router E340b weniger Ausgangssignale auf als eine Anzahl von Sendestiften, die in den Satz von Sendestiften E320b eingeschlossen sind. Die Nichtstandardstiftbelegung kann verwendet werden, um anzupassen, wo einzelne Bits der ersten Daten durch die integrierte Schaltung E101b empfangen werden.
  • Bei Block E720 schließt das Verfahren E700 das Leiten, durch die integrierte Schaltung E101a, des Satzes von Empfangsstiften E325a an den On-Chip-Router E340a unter Verwendung einer Standardstiftbelegung zum Empfangen von zweiten Daten über den Satz von Empfangsstiften E325a ein. Wie veranschaulicht, kann der Schnittstellenwrapper E350a in einigen Fällen ferner dazu konfiguriert sein, die Standardstiftbelegung zu verwenden, um den Satz von Empfangsstiften E325a mit dem On-Chip-Router E340a zu koppeln, zum Beispiel wenn der Schnittstellenwrapper E350b in der integrierten Schaltung E101b eine Nichtstandardstiftbelegung verwendet, um eine Stiftbelegung umzuleiten, bevor die zweiten Daten von dem Satz von Sendestiften E320d in der externen Schnittstelle E110b gesendet werden, sodass die einzelnen Bits der zweiten Daten in einer gewünschten Reihenfolge ankommen.
  • Eine solche Verwendung von Standard- und Nichtstandardstiftbelegungen kann eine Flexibilität der externen Schnittstellen von zwei integrierten Schaltungen erhöhen, die miteinander gekoppelt sind. Durch Ermöglichen, dass Signale zwischen den externen Schnittstellen und den On-Chip-Routern umgeleitet werden, kann eine Konsistenz von Signalen, die zwischen den zwei externen Schnittstellen verlaufen, im Vergleich zum Umleiten von Signalen über Drähte zwischen den zwei externen Schnittstellen erhöht werden. Zusätzlich können programmierbare Leitungsfähigkeiten der Schnittstellenwrapper eine Flexibilität der externen Schnittstellen erhöhen, was möglicherweise ermöglicht, dass die externen Schnittstellen für eine erhöhte Anzahl von Datentypen verwendet werden, die zwischen den integrierten Schaltungen übertragen werden sollen, ohne dass Daten vor dem Senden vorverarbeitet oder empfangene Daten nachverarbeitet werden müssen, um übertragene Datenbits in einer korrekten Bitposition zu platzieren.
  • Es wird darauf hingewiesen, dass das Verfahren von 55 lediglich ein Beispiel für das Leiten von Daten zwischen einem On-Chip-Router und einer externen Schnittstelle ist. Das Verfahren E700 kann durch beliebige Instanzen der in 49-53 offenbarten integrierten Schaltungen durchgeführt werden. Variationen der offenbarten Verfahren werden in Betracht gezogen, einschließlich Kombinationen von Vorgängen der Verfahren E600 und E700. Zum Beispiel kann Block E710 des Verfahrens E700 vor der Durchführung von Block E610 in dem Verfahren E600 durchgeführt werden, und Block E720 kann vor der Durchführung von Block E620 des Verfahrens E600 durchgeführt werden.
  • Hashing
  • Die 56-68 veranschaulichen verschiedene Ausführungsformen eines Adress-Hashing-Mechanismus, der in einer Ausführungsform des SOC 10 eingesetzt werden kann. In einer Ausführungsform ist die Hashing-Schaltlogik konfiguriert, um den Speicheranforderungsverkehr gemäß einem selektiv programmierbaren Hashing-Protokoll auf den Systemspeicher zu verteilen. Mindestens eine Programmierung des programmierbaren Hashing-Protokolls verteilt eine Reihe von Speicheranforderungen gleichmäßig auf eine Vielzahl von Speichersteuerungen im System für eine Vielzahl von Speicheranforderungen in der Reihe. Mindestens eine Programmierung des programmierbaren Hashing-Protokolls verteilt benachbarte Anforderungen innerhalb des Speicherraums mit einer spezifizierten Granularität auf physisch entfernte Speicherschnittstellen.
  • Es existieren verschiedene Computersysteme, die eine große Menge an Systemspeicher einschließen, der für Prozessoren und andere Hardware-Agenten im System über einen Speicher-Adressraum direkt zugänglich ist (im Vergleich zu beispielsweise einem E/A-Adressraum, der auf spezifische E/A-Vorrichtungen abgebildet wird) Der Systemspeicher ist im Allgemeinen als mehrere dynamische Direktzugriffsspeichervorrichtungen (DRAM-Vorrichtungen) implementiert. In anderen Fällen können auch andere Speichertypen, wie Vorrichtungen mit statischem Direktzugriffsspeicher (SRAM-Vorrichtungen), Magnetspeichervorrichtungen verschiedener Typen (z. B. MRAM), nichtflüchtige Speichervorrichtungen, wie Flash-Speicher oder Nur-Lese-Speicher (ROM), andere Typen von Direktzugriffsspeichervorrichtungen, verwendet werden. In einigen Fällen kann ein Abschnitt des Speicheradressraums zusätzlich zu den Abschnitten des Speicheradressraums, die auf die RAM-Vorrichtungen abgebildet werden, auf solche Vorrichtungen abgebildet werden (und speicherabgebildete E/A-Vorrichtungen können ebenfalls verwendet werden).
  • Die Abbildung von Speicheradressen auf die Speichervorrichtungen kann die Leistung des Speichersystems stark beeinflussen (z. B. in Bezug auf eine nachhaltige Bandbreite und Speicherlatenz). Zum Beispiel werden typische Systeme einer nicht einheitlichen Speicherarchitektur (NUMA-Systeme) aus Rechenknoten konstruiert, die Prozessoren, Peripherievorrichtungen und Speicher einschließen. Die Rechenknoten kommunizieren, und ein Rechenknoten kann auf Daten in einem anderen Rechenknoten zugreifen, jedoch mit erhöhter Latenz. Der Speicheradressraum wird in großen kontinuierlichen Abschnitten zugeordnet (z. B. schließt ein Knoten die Adressen 0 bis N-1 ein, wobei N die Anzahl von Bytes von Speicher in dem Knoten ist, ein anderer Knoten schließt die Adressen N bis 2N-1 ein usw.). Diese Abbildung optimiert den Zugriff auf lokalen Speicher auf Kosten von Zugriffen auf nicht lokalen Speicher. Diese Abbildung beschränkt jedoch auch das Betriebssystem sowohl bei der Art der Abbildung virtueller Seiten auf physische Seiten als auch der Auswahl des Rechenknotens, in dem ein gegebener Prozess in dem System ausgeführt werden kann, um eine höhere Leistung zu erreichen. Zusätzlich werden die Bandbreite und die Latenz der Zugriffe durch einen Prozess auf große Datenmengen durch die Leistung eines gegebenen lokalen Speichersystems begrenzt und werden beeinträchtigt, wenn auf Speicher einen anderen Rechenknoten zugegriffen wird.
  • 56 ist ein Blockdiagramm einer Ausführungsform einer Vielzahl von Systemen auf einem Chip (SOC) F10, die ein System bilden. Die SOCs F10 können Instanzen eines gemeinsamen Designs einer integrierten Schaltung sein, und daher ist eines der SOCs F10 detaillierter gezeigt. Andere Instanzen des SOC F10 können ähnlich sein. Die SOCs F10 können beispielsweise Instanzen des in 1 gezeigten SOC 10 sein. In der veranschaulichten Ausführungsform umfasst das SOC F10 eine Vielzahl von Speichersteuerungen F12A-F12H, einen oder mehrere Prozessorcluster (P-Cluster) F14A-F14B, eine oder mehrere Grafikverarbeitungseinheiten (GPUs) F16A-F16B, einen oder mehrere E/A-Cluster F18A-F18B und eine Kommunikations-Fabric, die eine West-Verschaltung (West-IC) F20A und eine Ost-IC F20B umfasst. Die E/A-Cluster F18A-F18B, die P-Cluster F14A-F14B und die GPUs F16A-F16B können mit der West-IC F20A und der Ost-IC F20B gekoppelt sein. Die West-IC F20A kann mit den Speichersteuerungen F12A-F12D gekoppelt sein, und die Ost-IC F20B kann mit den Speichersteuerungen F12E-F12H gekoppelt sein.
  • Das in 56 gezeigte System schließt ferner eine Vielzahl von Speichervorrichtungen F28 ein, die mit den Speichersteuerungen F12A-F12H gekoppelt sind. In dem Beispiel von 56 sind 59 Speichervorrichtungen F28 mit jeder Speichersteuerung F12A-F12H gekoppelt. Andere Ausführungsformen können mehr oder weniger Speichervorrichtungen F28 aufweisen, die mit einer gegebenen Speichersteuerung F12A-F12H gekoppelt sind. Des Weiteren können unterschiedliche Speichersteuerungen F12A-F12H eine unterschiedliche Anzahl von Speichervorrichtungen F28 aufweisen. Die Speichervorrichtungen F28 können in Bezug auf die Kapazität und Konfiguration variieren oder können eine einheitliche Kapazität und Konfiguration (z. B. Bänke, Bankgruppen, Zeilengröße, Ränge usw.) aufweisen. Jede Speichervorrichtung F28 kann in dieser Implementierung über einen unabhängigen Kanal mit ihrer jeweiligen Speichersteuerung F12A-F12H gekoppelt sein. Kanäle, die von zwei oder mehr Speichervorrichtungen F28 gemeinsam genutzt werden, können in anderen Ausführungsformen unterstützt werden. In einer Ausführungsform können die Speichervorrichtungen F28 auf dem entsprechenden SOC F10 in einer Chip-auf-Chip-Implementierung (CoC-Implementierung) oder einer Package-auf-Package-Implementierung (PoP-Implementierung) montiert sein. In einer anderen Ausführungsform können die Speichervorrichtungen F28 mit dem SOC F10 in einer Multi-Chip-Modul-Implementierung (MCM-Implementierung) gehäust sein. In noch einer anderen Ausführungsform können die Speichervorrichtungen F28 auf einem oder mehreren Speichermodulen, wie einzelnen Inline-Speichermodulen (SIMMs), doppelten Inline-Speichermodulen (DIMMs) usw., montiert sein. In einer Ausführungsform können die Speichervorrichtungen F28 ein dynamischer Direktzugriffsspeicher (DRAM), wie ein synchroner DRAM (SDRAM) und insbesondere ein SDRAM mit doppelter Datenrate (DDR-SDRAM), sein. In einer Ausführungsform können die Speichervorrichtungen F28 gemäß der DDR-SDRAM-Spezifikation mit niedriger Leistung (LP), die auch bekannt ist, und auf einem mobilen DDR-SDRAM (mDDR-SDRAM) implementiert sein.
  • In einer Ausführungsform können die Verschalungen F20A-F20B auch mit einer Schnittstelle außerhalb des SOC mit der anderen Instanz des SOC F10 gekoppelt sein, wodurch das System auf mehr als ein SOC skaliert wird (z. B. mehr als ein Halbleiter-Die, wobei eine gegebene Instanz des SOC F10 auf einem einzigen Halbleiter-Die implementiert sein kann, aber mehrere Instanzen zu einem System gekoppelt sein können). Somit kann das System auf zwei oder mehr Halbleiter-Dies skalierbar sein, auf denen Instanzen des SOC F10 implementiert sind. Zum Beispiel können die zwei oder mehr Halbleiter-Dies als ein einzelnes System konfiguriert sein, in dem das Vorhandensein mehrerer Halbleiter-Dies für Software, die auf dem einzelnen System ausgeführt wird, transparent ist. In einer Ausführungsform können die Verzögerungen als ein Gesichtspunkt von Softwaretransparenz für das Multi-Die-System in einer Kommunikation von Die zu Die minimiert werden, sodass eine Die-zu-Die-Kommunikation im Vergleich zu einer Intra-Die-Kommunikation in der Regel keine signifikante zusätzliche Latenz aufweist. In anderen Ausführungsformen verfügt die Kommunikations-Fabric in dem SOC F10 möglicherweise nicht über physisch unterschiedliche Verschaltungen F20A-F20B, sondern kann vielmehr eine vollständige Verschaltung zwischen Quell-Hardware-Agenten im System (die Speicheranforderungen übertragen) und den Speichersteuerungen F12A-F12H (z. B. eine vollständige Kreuzschiene) sein. Solche Ausführungsformen können in einer Ausführungsform dennoch logisch ein Konzept der Verschaltungen F20A-F20B für Hashing- und Routing-Zwecke einschließen.
  • Die Speichersteuerung F12A ist in 56 detaillierter gezeigt und kann eine Steuerschaltung F24 und verschiedene interne Puffer F26 einschließen. Andere Speichersteuerungen F12B-F12 h können ähnlich sein. Die Steuerschaltung F24 ist mit den internen Puffern F26 und den Speicherortkonfigurationsregistern F22F (unten erläutert) gekoppelt. Im Allgemeinen kann die Steuerschaltung F24 so konfiguriert sein, dass sie den Zugriff auf die Speichervorrichtungen F28 steuert, mit denen die Speichersteuerung F12A gekoppelt ist, einschließlich der Steuerung der Kanäle zu den Speichervorrichtungen F28, der Durchführung einer Kalibrierung, der Sicherstellung einer korrekten Aktualisierung usw. Die Steuerschaltung F24 kann auch so konfiguriert sein, dass sie Speicheranforderungen plant, um zu versuchen, die Latenz zu minimieren, die Speicherbandbreite zu maximieren usw. In einer Ausführungsform können die Speichersteuerungen F12A-F12H Speichercaches verwenden, um die Speicherlatenz zu reduzieren, und die Steuerschaltung F24 kann konfiguriert sein, um auf den Speichercache für Speicheranforderungen und Prozesstreffer und -fehltreffer im Speichercache sowie Entfernungen aus dem Speichercache zuzugreifen. In einer Ausführungsform können die Speichersteuerungen F12A-F12H die Kohärenz für den daran gebundenen Speicher verwalten (z. B. ein verzeichnisbasiertes Kohärenzschema), und die Steuerschaltung F24 kann zum Verwalten der Kohärenz konfiguriert sein. Ein Kanal zu einer Speichervorrichtung F28 kann die physischen Verbindungen zur Vorrichtung sowie Kommunikationsschaltlogik auf niedriger Ebene (z. B. Schaltlogik einer physischen Schicht (PHY-Schaltlogik)) umfassen.
  • Wie in 56 veranschaulicht, schließen die E/A-Cluster F18A-F18B, die P-Cluster F14A-F14B, die GPUs F16A-FF16B und die Speichersteuerungen F12A-F12H Speicherortkonfigurationsregister (MLC-Register) (Bezugszeichen F22A-F22H, F22J-F22N und F22P) ein. Die West- und Ost-IC F20A-F20B können in einigen Ausführungsformen auch Speicherortkonfigurationsregister einschließen. Da das System mehrere Speichersteuerungen F12A-F12H (und möglicherweise mehrere Sätze von Speichersteuerungen in mehreren Instanzen des SOC F10) einschließt, kann die Adresse, auf die durch eine Speicheranforderung zugegriffen wird, decodiert (z. B. gehasht) werden, um die Speichersteuerungen F12A-F12H und schließlich die spezifische Speichervorrichtung F28, die auf die Adresse abgebildet wird, zu bestimmen. Das heißt, die Speicheradressen können innerhalb eines Speicheradressraums definiert sein, der Speicheradressen auf Speicherorte in den Speichervorrichtungen abbildet. Eine gegebene Speicheradresse in dem Speicheradressraum identifiziert eindeutig einen Speicherort in einer der Speichervorrichtungen F28, die mit einer der Vielzahl von Speichersteuerungen F12A-F12H gekoppelt sind. Die MLC-Register F22A-F22H, F22J-F22N und F22P können programmierbar sein, um die Abbildung zu beschreiben, sodass das Hashing der Speicheradressbits, wie durch die MLC-Register F22A-F22H, F22J-F22N und F22P angegeben, die Speichersteuerungen F12A-F12H und schließlich die Speichervorrichtung F28 (und in einer Ausführungsform die Bankgruppe und/oder Bank innerhalb der Speichervorrichtung F28), an die die Speicheranforderung gerichtet ist, identifizieren kann.
  • In einer gegebenen Schaltung kann es mehr als ein MLC-Register geben. Zum Beispiel kann es für jede Granularitätsebene in einer Hierarchie von Granularitätsebenen ein MLC-Register geben, um die Speichersteuerungen F12A-F12H zu identifizieren. Die Anzahl von von einer gegebenen Schaltung decodierten Ebenen kann davon abhängen, wie viele Granularitätsebenen die gegebene Schaltung verwendet, um zu bestimmen, wie eine Speicheranforderung an die richtigen Speichersteuerungen F12A-F12H und in einigen Fällen an sogar noch niedrigere Granularitätsebenen innerhalb der richtigen Speichersteuerung F12A-F12H geleitet wird. Die Speichersteuerungen F12A-F12H können MLC-Register für jede Ebene der Hierarchie einschließen, bis hin zu mindestens der spezifischen Speichervorrichtung F28. Im Allgemeinen können Granularitätsebenen als eine rekursive Zweierpotenz von mindestens zwei der Vielzahl von Speichersteuerungen F12A-F12H betrachtet werden. Wenngleich die MLC-Register F22A-F22H, F22J-F22N und F22P die gleiche allgemeine Bezugszahl erhalten, sind entsprechend möglicherweise nicht alle MLC-Register F22A-F22H, F22J-F22N und F22P derselbe Registersatz. Jedoch können Instanzen der Register F22A-F22H, F22J-F22N und F22P, die derselben Granularitätsebene entsprechen, gleich sein und konsistent programmiert werden. Weitere Details werden weiter unten erläutert.
  • Die Speichersteuerungen F12A-F12H können physisch über das Die mit integrierter Schaltung, auf dem das SOC F10 implementiert ist, verteilt sein. Somit können die Speichersteuerungen im System physisch über mehrere Dies mit integrierter Schaltung verteilt sein und physisch innerhalb des Die mit integrierter Schaltung verteilt sein. Das heißt, die Speichersteuerungen F12A-F12H können über den Bereich des Halbleiter-Die, auf dem das SOC F10 gebildet ist, verteilt sein. In 56 kann zum Beispiel der Ort der Speichersteuerungen F12A-F12H innerhalb des SOC F10 repräsentativ für die physischen Orte dieser Speichersteuerungen F12A-F12H innerhalb des Die-Bereichs des SOC F10 sein. Dementsprechend kann das Bestimmen der Speichersteuerung F12A-F12H, auf die eine gegebene Speicheranforderung abgebildet wird (die „Zielspeichersteuerung“), verwendet werden, um die Speicheranforderung über eine Kommunikations-Fabric in dem SOC F10 an die Zielspeichersteuerung zu leiten. Die Kommunikations-Fabric kann zum Beispiel die West-IC F20A und die Ost-IC F20B einschließen und kann ferner eine zusätzliche Verschaltung einschließen, die in 56 nicht gezeigt ist. In anderen Ausführungsformen sind die Speichersteuerungen F12A-F12H möglicherweise nicht physisch verteilt. Dennoch kann ein Hashing-Mechanismus wie der hier beschriebene verwendet werden, um die Zielspeichersteuerung F12A-F12H zu identifizieren.
  • Die E/A-Cluster F18A-F18B, die P-Cluster F14A-F14B und die GPUs F16A-F16B können Beispiele für Hardware-Agenten sein, die so konfiguriert sind, dass sie über die Speichersteuerungen F12A-F12H unter Verwendung von Speicheradressen auf Daten in den Speichervorrichtungen F28 zugreifen. Andere Hardware-Agenten können ebenfalls eingeschlossen sein. Im Allgemeinen kann ein Hardware-Agent eine Hardware-Schaltung sein, die eine Quelle einer Speicheranforderung (z. B. einer Lese- oder Schreibanforderung) sein kann. Die Anforderung wird basierend auf den Inhalten der MLC-Register vom Hardware-Agenten an die Zielspeichersteuerung geleitet.
  • In einer Ausführungsform können Speicheradressen über die Speichersteuerungen F12A-F12H (und entsprechende Speichersteuerungen in anderen Instanzen des im System enthaltenen SOC F10) abgebildet werden, um Daten innerhalb einer Seite im gesamten Speichersystem zu verteilen. Ein solches Schema kann die Bandbreitennutzung der Kommunikations-Fabric und der Speichersteuerungen für Anwendungen verbessern, die auf die die meisten oder alle Daten einer Seite zugreifen. Das heißt, eine gegebene Seite innerhalb des Speicheradressraums kann in eine Vielzahl von Blöcken unterteilt werden, und die Vielzahl von Blöcken der gegebenen Seite kann über die Vielzahl von Speichersteuerungen in einem System verteilt werden. Eine Seite kann die Speicherzuweisungseinheit in einem virtuellen Speichersystem sein. Das heißt, wenn Speicher einer Anwendung oder einem anderen Prozess/Thread zugewiesen wird, wird der Speicher in Seiteneinheiten zugewiesen. Das virtuelle Speichersystem erstellt eine Übersetzung aus den von der Anwendung verwendeten virtuellen Adressen und den physischen Adressen im Speicheradressraum, die Orte in den Speichervorrichtungen F28 identifizieren. Die Seitengrößen variieren von Ausführungsform zu Ausführungsform. Zum Beispiel kann eine Seitengröße von F16 Kilobyte (16 kB) verwendet werden. Es können kleinere oder größere Seitengrößen verwendet werden (z. B. 4 kB, 8 kB, 1 Megabyte (MB), 4 MB usw.). In einigen Ausführungsformen werden mehrere Seitengrößen gleichzeitig in einem System unterstützt. Im Allgemeinen wird die Seite an einer Seitengrößengrenze ausgerichtet (z. B. wird eine 16-kB-Seite an 16-kB-Grenzen zugewiesen, sodass die niedrigstwertigen F14 Adressbits einen Offset innerhalb einer Seite bilden und die verbleibenden Adressbits die Seite identifizieren).
  • Die Anzahl von Blöcken, in die eine gegebene Seite unterteilt ist, kann mit der Anzahl von Speichersteuerungen und/oder Speicherkanälen im System zusammenhängen. Zum Beispiel kann die Anzahl von Blöcken gleich der Anzahl von Speichersteuerungen (oder der Anzahl von Speicherkanälen) sein. Wenn in einer solchen Ausführungsform auf alle Daten auf der Seite zugegriffen wird, kann eine gleiche Anzahl von Speicheranforderungen an jede Speichersteuerung/jeden Speicherkanal gesendet werden. Andere Ausführungsformen können eine Anzahl von Blöcken aufweisen, die einem Vielfachen der Anzahl von Speichersteuerungen oder einem Bruchteil der Speichersteuerungen (z. B. einem Zweierpotenz-Bruchteil) entspricht, sodass eine Seite über eine Teilmenge der Speichersteuerungen verteilt wird.
  • In einer Ausführungsform können die MLC-Register so programmiert werden, dass sie benachbarte Blöcke einer Seite auf Speichersteuerungen abbilden, die innerhalb des/der SOC(s) F10 des Systems physisch voneinander entfernt sind. Dementsprechend kann ein Zugriffsmuster, bei dem auf aufeinanderfolgende Blöcke einer Seite zugegriffen wird, über das System verteilt sein, wobei verschiedene Abschnitte der Kommunikations-Fabric genutzt werden und sich gegenseitig nur minimal (oder möglicherweise überhaupt nicht) stören. Zum Beispiel können Speicheranforderungen an benachbarte Blöcke unterschiedliche Pfade durch die Kommunikations-Fabric nehmen und würden daher nicht dieselben Fabric-Ressourcen (z. B. Abschnitte der Verschaltungen F20A-F20B) verbrauchen. Das heißt, die Pfade können mindestens teilweise nicht überlappend sein. In einigen Fällen können die Pfade vollständig nicht überlappend sein. Weitere Einzelheiten über die Verteilung der Speicherzugriffe werden nachstehend unter Bezugnahme auf 57 bereitgestellt. Durch die Maximierung der Verteilung von Speicherzugriffen kann die Leistung im System insgesamt verbessert werden, indem die Gesamtlatenz reduziert und die Bandbreitennutzung erhöht wird. Außerdem kann Flexibilität bei der Planung von Prozessen für Prozessoren erreicht werden, da eine ähnliche Leistung auf jedem ähnlichen Prozessor in jedem P-Cluster F14A-F14B erzielt werden kann.
  • Die MLC-Register F22A-F22H, F22J-F22N, F22P können unabhängig voneinander die Adressbits angeben, die gehasht werden, um jede Granularitätsebene im System für eine gegebene Speicheradresse auszuwählen. Zum Beispiel kann eine erste Granularitätsebene den Halbleiter-Die auswählen, an den die Speicheranforderung geleitet wird. Eine zweite Granularitätsebene kann einen Slice auswählen, bei dem es sich um einen Satz von Speichersteuerungen handeln kann (z. B. können die oberen 4 Speichersteuerungen F12A-F12B und F12E-F12F einen Slice bilden, und die unteren 4 Speichersteuerungen F12C-F12D und F12F-F12G können einen anderen Slice bilden). Andere Granularitätsebenen können die Auswahl einer „Seite“ (Ost oder West in 1) und einer Zeile innerhalb eines Slices einschließen. Es kann zusätzliche Granularitätsebenen innerhalb der Speichersteuerungen F12A-F12H geben, die schließlich zu einer ausgewählten Speichervorrichtung F28 (und in einer Ausführungsform möglicherweise zu einer Bankgruppe und Bank innerhalb der Vorrichtung F28) führen. Eine beliebige Anzahl von Granularitätsebenen kann in verschiedenen Ausführungsformen unterstützt werden. Wenn zum Beispiel mehr als zwei Dies eingeschlossen sind, kann es eine oder mehrere Granularitätsebenen geben, die gröber sind als die Die-Ebene, auf der Gruppen von Dies ausgewählt werden.
  • Die unabhängige Spezifikation von Adressbits für jede Granularitätsebene kann dem System erhebliche Flexibilität verleihen. Außerdem können Änderungen am Design des SOC F10 selbst durch die Verwendung einer unterschiedlichen Programmierung in den MLC-Registern verwaltet werden, und somit muss die Hardware im Speichersystem und/oder in der Verschaltung nicht geändert werden, um einer anderen Abbildung von Adressen auf Speichervorrichtungen Rechnung zu tragen. Des Weiteren kann die Programmierbarkeit in den MLC-Registern ermöglichen, dass Speichervorrichtungen F28 in einem gegebenen Produkt, das den/die SOC(s) F10 einschließt, entleert werden können, wodurch Kosten und Leistungsverbrauch reduziert werden, wenn das vollständige Komplement der Speichervorrichtungen F28 in diesem Produkt nicht benötigt wird.
  • In einer Ausführungsform ist jede Granularitätsebene eine binäre Bestimmung: Ein Ergebnis von Binär Null aus dem Hash wählt ein Ergebnis auf der Ebene aus, und ein Ergebnis von Binär Eins aus dem Hash wählt das andere Ergebnis aus. Die Hashes können beliebige kombinatorische Logikoperationen an den Eingangsbits sein, die durch die Programmierung der MLC-Register für die Ebenen ausgewählt werden. In einer Ausführungsform kann der Hash eine Exclusive-OR-Reduktion sein, bei der die Adressbits miteinander Exclusive-OR-verknüpft werden, was zu einer binären Ausgabe führt. Andere Ausführungsformen können einen Mehrbit-Ausgabewert erzeugen, um aus mehr als zwei Ergebnissen auszuwählen.
  • Die internen Puffer F26 in einer gegebenen Speichersteuerung F12A-F12H können konfiguriert sein, um eine signifikante Anzahl von Speicheranforderungen zu speichern. Die internen Puffer F26 können statische Puffer, wie Transaktionstabellen, die den Status verschiedener Speicheranforderungen verfolgen, die in der gegebenen Speichersteuerung F12A-F12H verarbeitet werden, sowie verschiedene Pipeline-Stufen, durch die die Anforderungen während ihrer Verarbeitung fließen können, einschließen. Die Speicheradresse, auf die durch die Anforderung zugegriffen wird, kann ein erheblicher Abschnitt der Daten sein, die die Anforderung beschreiben, und kann somit eine erhebliche Komponente des Leistungsverbrauchs beim Speichern der Anforderungen und beim Verschieben der Anforderungen durch die verschiedenen Ressourcen innerhalb der gegebenen Speichersteuerung F12A-F12H sein. In einer Ausführungsform können die Speichersteuerungen F12A-F12H so konfiguriert sein, dass sie aus jedem Satz von Adressbits (entsprechend jeder Granularitätsebene), der zur Bestimmung der Zielspeichersteuerung verwendet wird, ein Adressbit löschen. In einer Ausführungsform können die verbleibenden Adressbits zusammen mit der Tatsache, dass die Anforderung bei der Zielspeichersteuerung erfolgt, bei Bedarf zur Wiederherstellung der gelöschten Adressbits verwendet werden. In einigen Ausführungsformen kann das gelöschte Bit ein Adressbit sein, das in keinem anderen Hash eingeschlossen ist, der einer anderen Granularitätsebene entspricht. Der Ausschluss des gelöschten Bits von anderen Ebenen kann die parallele Wiederherstellung der gelöschten Bits ermöglichen, da die Operationen unabhängig sind. Wenn ein gegebenes gelöschtes Bit nicht von anderen Ebenen ausgeschlossen ist, kann es zuerst wiederhergestellt und dann zur Wiederherstellung der anderen gelöschten Bits verwendet werden. Somit kann der Ausschluss eine Optimierung für die Wiederherstellung sein. Andere Ausführungsformen erfordern möglicherweise keine Wiederherstellung der ursprünglichen Adresse, und somit müssen die gelöschten Bits nicht für jeden Hash eindeutig sein, oder sie können die Bits auf serielle Weise wiederherstellen, wenn der Ausschluss nicht implementiert wird. Die verbleibenden Adressbits (ohne die gelöschten Bits) können eine komprimierte Pipe-Adresse bilden, die intern in der Speichersteuerung zur Verarbeitung verwendet werden kann. Die gelöschten Adressbits werden nicht benötigt, da die Speichermenge in den Speichervorrichtungen F28, die mit der gegebenen Speichersteuerung F12A-F12H gekoppelt sind, unter Verwendung der komprimierten Pipe-Adresse eindeutig adressiert werden kann. Die MLC-Register F22A-F22H, F22J-F22N und F22P können in einer Ausführungsform Register einschließen, die programmierbar sind, um die gelöschten Bits zu identifizieren.
  • Das SOC F10 in 56 schließt eine bestimmte Anzahl der Speichersteuerungen F12A-F12H, P-Cluster F14A-F14B, GPUs F16A-F16B und E/A-Cluster F18A-F18B ein. Im Allgemeinen können verschiedene Ausführungsformen je nach Wunsch eine beliebige Anzahl der Speichersteuerungen F12A-F12H, P-Cluster F14A-F14B, GPUs F16A-F16B und E/A-Cluster F18A-F18B einschließen. Wie oben erwähnt, umfassen die P-Cluster F14A-F14B, die GPUs F16A-F16B und die E/A-Cluster F18A-F18B im Allgemeinen Hardware-Schaltungen, die so konfiguriert sind, dass sie die hier beschriebene Operation für jede Komponente implementieren. In ähnlicher Weise umfassen die Speichersteuerungen F12A-F12H im Allgemeinen Hardware-Schaltungen (Speichersteuerungsschaltungen), um die hier beschriebene Operation für jede Komponente zu implementieren. Die Verschaltung F20A-F20B und andere Kommunikations-Fabric umfassen im Allgemeinen Schaltungen zum Transport von Kommunikationen (z. B. Speicheranforderungen) zwischen den anderen Komponenten. Die Verschaltung F20A-F20B kann Punkt-zu-Punkt-Schnittstellen, gemeinsam genutzte Busschnittstellen und/oder Hierarchien einer oder beider Schnittstellen umfassen. Die Fabric kann leitungsvermittelt, paketvermittelt usw. sein.
  • 57 ist ein Blockdiagramm, das eine Ausführungsform einer Vielzahl von Speichersteuerungen und eine physische/logische Anordnung auf dem/den SOC-Die(s) für eine Ausführungsform veranschaulicht. Die Speichersteuerungen F12A-F12H sind für zwei Instanzen des SOC F10 veranschaulicht, das als Die 0 und Die 1 in 57 (z. B. getrennt durch die kurze gestrichelte Linie 30) veranschaulicht sind. Der Die 0 kann der Abschnitt sein, der über der gestrichelten Linie 30 veranschaulicht ist, und der Die 1 kann der Abschnitt unterhalb der gestrichelten Linie 30 sein. Die Speichersteuerungen F12A-F12H auf einem gegebenen Die können basierend auf dem physischen Ort der Speichersteuerungen F12A-F12H in Slices unterteilt sein. Zum Beispiel kann ein Slice 0 in 57 die Speichersteuerungen F12A-F12B und F12E-F12F einschließen, die physisch auf einer Hälfte des Die 0 oder Die 1 angeordnet sind. Ein Slice 1 kann die Speichersteuerungen F12C-F12D und F12G-F12H einschließen, die sich physisch auf der anderen Hälfte des Dies 0 oder Dies 1 befinden. Die Slices auf einem Die sind in 57 durch gestrichelte Linien 32 begrenzt. Innerhalb der Slices können die Speichersteuerungen F12A-F12H basierend auf dem physischen Ort im Slice in Zeilen unterteilt sein. Zum Beispiel ist in 56 gezeigt, dass das Slice 0 des Die 0 zwei Zeilen einschließt, nämlich die Speichersteuerungen F12A und F12E oberhalb der gestrichelten Linie 34 in einer Zeile 0, die sich physisch auf einer Hälfte des von dem Slice 0 eingenommenen Bereichs befinden. Die Speichersteuerungen F12B und F12F, Zeile 1 des Slice 1, befinden sich physisch auf der anderen Hälfte des von dem Slice 0 eingenommenen Bereichs, unterhalb der gestrichelten Linie 34 auf der anderen Hälfte des von dem Slice 0 eingenommenen Bereichs. Andere Slices können in ähnlicher Weise in Zeilen unterteilt sein. Außerdem kann eine gegebene Speichersteuerung F12A-F12H entweder über die West-Verschaltung F20A oder die Ost-Verschaltung F20B erreichbar sein.
  • Um eine gegebene Speichersteuerung F12A-F12H auf einem gegebenen Die 0 oder 1 zu identifizieren, auf den eine Speicheradresse abgebildet ist, kann dementsprechend die Speicheradresse auf mehreren Granularitätsebenen gehasht werden. In dieser Ausführungsform können die Ebenen die Die-Ebene, die Slice-Ebene, die Zeilenebene und die Seitenebene (Ost oder West) einschließen. Die Die-Ebene kann angeben, welcher der Vielzahl von Dies mit integrierter Schaltung die gegebene Speichersteuerung einschließt. Die Slice-Ebene kann angeben, welcher der Vielzahl von Slices innerhalb des Die die gegebene Speichersteuerung einschließt, wobei die Vielzahl von Speichersteuerungen auf dem Die basierend auf dem physischen Ort auf dem gegebenen Die mit integrierter Schaltung logisch in eine Vielzahl von Slices unterteilt sind und ein gegebener Slice mindestens zwei Speichersteuerungen der Vielzahl von Speichersteuerungen innerhalb eines Die einschließt. Innerhalb des gegebenen Slices können Speichersteuerungen basierend auf dem physischen Ort auf dem Die und insbesondere innerhalb des gegebenen Slices logisch in eine Vielzahl von Zeilen unterteilt sein. Die Zeilenebene kann angeben, welche der Vielzahl von Zeilen die gegebene Speichersteuerung einschließt. Die Zeile kann in eine Vielzahl von Seiten unterteilt sein, wiederum basierend auf dem physischen Ort im Die und insbesondere innerhalb der gegebenen Zeile. Die Seitenebene kann angeben, welche Seite einer gegebenen Zeile die gegebene Speichersteuerung einschließt.
  • Andere Ausführungsformen können mehr oder weniger Ebenen basierend auf der Anzahl der Speichersteuerungen 12A-12H, der Anzahl von Dies usw. einschließen. Zum Beispiel kann eine Ausführungsform, die mehr als zwei Dies einschließt, mehrere Granularitätsebenen zur Auswahl des Dies einschließen (z. B. können Die-Gruppen verwendet werden, um Paare der SOCs 10 in einer Implementierung mit vier Dies zu gruppieren, und die Die-Ebene kann zwischen Dies im ausgewählten Paar auswählen. In ähnlicher Weise kann eine Implementierung, die vier statt 8 Speichersteuerungen pro Die einschließt, möglicherweise eine der Slice- oder Zeilenebenen beseitigen. Eine Implementierung, die einen einzelnen Die anstelle mehrerer Dies einschließt, kann die Die-Ebene beseitigen.
  • Auf jeder Granularitätsebene wird eine binäre Bestimmung getroffen, die auf einem Hash einer Teilmenge von Adressbits basiert, um die eine oder andere Ebene auszuwählen. Somit kann der Hash auf den Adressbits logisch arbeiten, um eine binäre Ausgabe (ein Bit, entweder Null oder Eins) zu erzeugen. Jede logische Funktion kann für den Hash verwendet werden. In einer Ausführungsform kann zum Beispiel eine Exclusive-OR-Reduktion (XOR-Reduktion) verwendet werden, bei der der Hash die Teilmenge von Adressbits XOR-verknüpft, um das Ergebnis zu erzeugen. Eine XOR-Reduktion kann auch eine Reversibilität des Hashs bereitstellen. Die Reversibilität ermöglicht möglicherweise die Wiederherstellung der gelöschten Bits,wobei jedoch das binäre Ergebnis mit den Adressbits, die nicht gelöscht wurden (ein gelöschtes Bit pro Ebene), XOR-verknüpft werden. Insbesondere kann in einer Ausführungsform das gelöschten Adressbit aus Teilmengen von Adressbits, die für andere Ebenen verwendet werden, ausgeschlossen werden. Andere Bits im Hash können von Hashes gemeinsam genutzt werden, nicht jedoch das Bit, das gelöscht werden soll. Während in dieser Ausführungsform die XOR-Reduktion verwendet wird, können andere Ausführungsformen eine beliebige logisch reversible boolesche Operation als den Hash implementieren.
  • 58 ist ein Blockdiagramm einer Ausführungsform eines binären Entscheidungsbaums, um eine Speichersteuerung F12A-F12H (und ein Die) zu bestimmen, die eine bestimmte Speicheradresse bedient (d. h. die Speichersteuerung, auf die die bestimmte Speicheradresse abgebildet wird). Der Entscheidungsbaum kann das Bestimmen eines Die (Bezugszeichen F40), eines Slices auf dem Die (Bezugszeichen F42), einer Zeile im Slice (Bezugszeichen F44) und einer Seite innerhalb der Zeile (Bezugszeichen F46) einschließen. In einer Ausführungsform kann es zusätzliche binäre Entscheidungen geben, um die Verarbeitung der Speicheranforderung innerhalb der Speichersteuerung zu steuern. Zum Beispiel kann die Ausführungsform von 58 eine Ebenenebene F48 und eine Pipe-Ebene F50 einschließen. Die internen Granularitätsebenen können die Speicheranforderung auf die spezifische Speichervorrichtung F28 abbilden, die die von der Speicheranforderung betroffenen Daten speichert. Das heißt, die feinste Granularitätsebene kann die Ebene sein, die auf die spezifische Speichervorrichtung F28 abbildet. Die Speicherebenen können unabhängig sein, sodass mehrere Speicheranforderungen parallel ausgeführt werden können. Zusätzlich können die verschiedenen Strukturen, die in der Speichervorrichtung eingeschlossen sind (z.B. ein Speicher-Cache, um Daten, auf die zuvor in den Speichervorrichtungen F28 zugegriffen wurde, zwischenzuspeichern, Kohärenzsteuerhardware wie duplizierte Tags oder ein Verzeichnis, verschiedene Puffer und Warteschlangen usw.), auf die Ebenen geteilt werden und somit können die Speicherstrukturen kleiner und leichter auszulegen sein, um die Zeitsteuerung bei einer gegebenen Betriebsfrequenz zu erfüllen, usw. Dementsprechend kann die Leistung sowohl durch die parallele Verarbeitung als auch durch die höhere erreichbare Taktfrequenz bei einer gegebenen Größe der Hardwarestrukturen gesteigert werden. In anderen Ausführungsformen kann es auch zusätzliche Ebenen einer internen Granularität innerhalb der Speichersteuerung geben.
  • Der in 58 veranschaulichte binäre Entscheidungsbaum soll nicht implizieren, dass die Bestimmungen der Die-Ebene F40, der Slice-Ebene F42, der Zeilenebene F44, der Seitenebene F46, der Ebenenebene F48 und der Pipe F50 seriell erfolgen. Die Logik zur Durchführung der Bestimmungen kann parallel arbeiten, indem sie Sätze von Adressbits auswählt und die Hashes durchführt, um die resultierenden binären Entscheidungen zu erzeugen.
  • Zurückkehrend zu 57 kann die Programmierbarkeit der Adressabbildung auf die Speichersteuerungen F12A-F12H und die Dies 0 und 1 eine Verteilung aufeinanderfolgender Adressen zwischen physisch entfernten Speichersteuerungen F12A-F12H unterstützen. Das heißt, wenn eine Quelle zum Beispiel auf aufeinanderfolgende Adressen einer Speicherseite zugreift, können sich die Speicheranforderungen auf die verschiedenen Speichersteuerungen verteilen (mit einer gewissen Adressgranularität). Zum Beispiel können aufeinanderfolgende Cache-Blöcke (z. B. ausgerichtete 64-Byte- oder 128-Byte-Blöcke) auf unterschiedliche Speichersteuerungen F12A-F12H abgebildet werden. Es können auch weniger granulare Abbildungen verwendet werden (z. B. 256-Byte-, 512-Byte- oder 1-Kilobyte-Blöcke können auf verschiedene Speichersteuerungen abgebildet werden). Das heißt, eine Anzahl aufeinanderfolgender Speicheradressen, die auf Daten im selben Block zugreifen, kann an dieselbe Speichersteuerung geleitet werden, und dann kann eine nächste Anzahl aufeinanderfolgender Speicheradressen an eine andere Speichersteuerung geleitet werden.
  • Die Abbildung aufeinanderfolgender Blöcke auf physisch verteilte Speichersteuerungen F12A-F12H kann Leistungsvorteile aufweisen. Da zum Beispiel die Speichersteuerungen F12A-F12H voneinander unabhängig sind, kann die im Satz der Speichersteuerungen F12A-F12H insgesamt verfügbare Bandbreite besser genutzt werden, wenn auf eine vollständige Seite zugegriffen wird. Außerdem kann in einigen Ausführungsformen die Route der Speicheranforderungen in der Kommunikations-Fabric teilweise nicht überlappend oder vollständig nicht überlappend sein. Das heißt, dass mindestens ein Segment der Kommunikations-Fabric, das Teil der Route für eine Speicheranforderung ist, möglicherweise nicht Teil der Route für eine andere Speicheranforderung, und umgekehrt, für eine teilweise nicht überlappende Route ist. Vollständig nicht überlappende Routen können unterschiedliche, vollständig getrennte Teile der Fabric verwenden (z. B. können keine Segmente gleich sein). Somit kann der Datenverkehr in der Kommunikations-Fabric verteilt werden und sich nicht so stark gegenseitig stören, wie der Datenverkehr andernfalls stören könnte.
  • Dementsprechend können die MLC-Register F22A-F22H, F22J-F22N und F22P mit Daten programmierbar sein, die veranlassen, dass die Schaltlogik eine erste Speicheranforderung mit einer ersten Adresse an eine erste Speichersteuerung der Vielzahl von Speichersteuerungen leitet und eine zweite Speicheranforderung mit einer zweiten Adresse an eine zweite Speichersteuerung der Vielzahl von Speichersteuerungen leitet, die physisch von der ersten Speichersteuerung entfernt ist, wenn die erste Adresse und die zweite Adresse benachbarte Adressen auf einer zweiten Granularitätsebene sind. Die erste Route der ersten Speicheranforderung durch die Kommunikations-Fabric und eine zweite Route der zweiten Speicheranforderung durch die Kommunikations-Fabric sind in einer Ausführungsform vollständig nicht überlappend. In anderen Fällen können die erste und die zweite Route teilweise nicht überlappend sein. Das eine oder die mehreren Register können mit Daten programmierbar sind, die veranlassen, dass die Kommunikations-Fabric eine Vielzahl von Speicheranforderungen an aufeinanderfolgende Adressen an verschiedene der Vielzahl von Speichersteuerungen in einem Muster leitet, das die Vielzahl von Speicheranforderungen über physisch entfernte Speichersteuerungen verteilt.
  • In 57 sind zum Beispiel die Speichersteuerungen F12A-F12H auf dem Die 0 und dem Die 1 mit MC 0 bis MC 15 gekennzeichnet. Beginnend mit der Adresse Null auf einer Seite können aufeinanderfolgende Adressen auf der in der Programmierung der MLC-Register F22A-F22H, F22J-F22N und F22P definierten Granularitätsebene zuerst auf MC0 (Speichersteuerung F12A in dem Die 0), dann MC1 (Speichersteuerung 12G in dem Die 1), MC2 (Speichersteuerung F12D in dem Die 1), MC3 (Speichersteuerung F12F in dem Die 0), MC4 (Speichersteuerung F12A in dem Die 1), MC5 (Speichersteuerung F12G in dem Die 0), MC6 (Speichersteuerung F12D in dem Die 0), MC7 (Speichersteuerung F12F in dem Die 1), MC8 (Speichersteuerung F12C in dem Die 0), MC9 (Speichersteuerung F12E in dem Die 1), MC10 (Speichersteuerung F12B in dem Die 1), MC11 (Speichersteuerung F12H in dem Die 0), MC12 (Speichersteuerung F12C in dem Die 1), MC13 (Speichersteuerung F12E in dem Die 0), MC14 (Speichersteuerung F12B in dem Die 0) und dann MC15 (Speichersteuerung F12H in dem Die 1) zugreifen. Wenn die zweite Granularitätsebene kleiner als 1/Ntel einer Seitengröße ist, wobei N die Anzahl der Speichersteuerungen im System ist (z. B. in dieser Ausführungsform F16), kann der nächste aufeinanderfolgende Zugriff nach MC 15 zu MC0 zurückkehren. Während ein eher wahlfreies Zugriffsmuster dazu führen kann, dass Speicheranforderungen an physisch nahe gelegene Speichersteuerungen geleitet werden, können die häufigeren regulären Zugriffsmuster (selbst wenn ein Schritt beteiligt ist, bei dem eine oder mehrere Speichersteuerungen in der oben genannten Reihenfolge übersprungen werden) im System gut verteilt sein.
  • 59 ist ein Blockdiagramm, das eine Ausführungsform einer Vielzahl von Speicherortskonfigurationsregistern F60 und F62 veranschaulicht. Im Allgemeinen können die Register F60 in einem gegebenen Hardware-Agenten mit Daten programmierbar sein, die identifizieren, welche Adressbits im Hash auf einer oder mehreren der Vielzahl von Granularitätsebenen eingeschlossen sind. In der veranschaulichten Ausführungsform können die Register F60 ein Die-Register, ein Slice-Register, ein Zeilenregister, ein Seitenregister, ein Ebenenregister und ein Pipe-Register entsprechend den zuvor beschriebenen Ebenen sowie eine Bankgruppe (BankG) und Bankregister, die die Bankgruppe und Bank innerhalb einer Speichervorrichtung F28 definieren, die die Daten speichert (für eine Ausführungsform, in der die DRAM-Speichervorrichtungen sowohl Bankgruppen als auch Banken aufweisen) einschließen.
  • Speichern der Daten (für eine Ausführungsform, in der die DRAM-Speichervorrichtungen sowohl Bankgruppen als auch Bänke aufweisen). Es wird darauf hingewiesen, dass in 59 zwar separate Register F60 für jede Granularitätsebene gezeigt sind, andere Ausführungsformen jedoch je nach Wunsch zwei oder mehr Granularitätsebenen als Felder in einem einzigen Register kombinieren können.
  • Das Die-Register ist für eine Ausführungsform in einer Explosionsansicht gezeigt, und andere Register F60 können ähnlich sein. In der veranschaulichten Ausführungsform kann das Die-Register ein Umkehrfeld F66 und ein Maskenfeld F68 einschließen. Das Umkehrfeld F66 kann ein Bit sein, wobei der gesetzte Zustand eine Umkehrung angibt und der gelöschte Zustand keine Umkehrung angibt (oder umgekehrt, oder es kann ein Mehrbitwert verwendet werden). Das Maskenfeld F68 kann ein Feld von Bits sein, die jeweiligen Adressbits entsprechen. Der gesetzte Zustand in einem Maskenbit kann für diese Granularitätsebene angeben, dass das jeweilige Adressbit im Hash enthalten ist, und der gelöschte Zustand kann angeben, dass das jeweilige Adressbit vom Hash ausgeschlossen ist (oder umgekehrt).
  • Das Umkehrfeld F66 kann verwendet werden, um anzugeben, dass das Ergebnis des Hashs der ausgewählten Adressbits umgekehrt werden soll. Die Umkehrung kann zusätzliche Flexibilität bei der Bestimmung der Speichersteuerung ermöglichen. Zum Beispiel führt die Programmierung einer Maske, die nur aus Nullen besteht, zu einer binären 0 auf dieser Granularitätsebene für jede Adresse, wodurch die Entscheidung jedes Mal in die gleiche Richtung gezwungen wird. Wenn eine binäre 1 auf einer gegebenen Granularitätsebene für eine beliebige Adresse gewünscht wird, kann die Maske auf ausschließlich Nullen programmiert und das Umkehrbit gesetzt werden.
  • Jedes der MLC-Register F22A-F22H, F22J-F22N und F22P kann eine Teilmenge oder alle der Register F60 einschließen, abhängig vom Hardware-Agenten und den von diesem Hardware-Agenten zum Leiten einer Speicheranforderung verwendeten Granularitätsebenen. Im Allgemeinen kann ein gegebener Hardware-Agent alle Granularitätsebenen nutzen, bei Bedarf bis hin zur Bankebene (geschweifte Klammer mit der Bezeichnung „Bank“ in 59). Jedoch müssen einige Hardware-Agenten nicht so viele Granularitätsebenen implementieren. Zum Beispiel kann ein Hardware-Agent die Granularitätsebenen „Die“, „Slice“, „Zeile“ und „Seite“ verwenden und die Speicheranforderungen an die Zielspeichersteuerung F12A-F12H auf dem Ziel-Die (geschweifte Klammer mit der Bezeichnung „MC“ in 59) liefern. Die Speichersteuerung F12A-F12H kann die verbleibenden Hashing-Ebenen verwalten. Ein anderer Hardware-Agent kann zwei Routen zu einer gegebenen Speichersteuerung F12A-F12H aufweisen, eine für jede Ebene. Somit kann ein solcher Hardware-Agent die Register „Die“, „Slice“, „Zeile“, „Seite“ und „Ebene“ verwenden (geschweifte Klammer mit der Bezeichnung „Ebene“ in 59). Ein weiterer Hardware-Agent kann die Granularitätsebenen „Die“, „Slice“, „Zeile“, „Seite“ und „Ebene“ sowie die Pipe-Ebene, die den gewünschten Kanal identifiziert (geschweifte Klammer mit der Bezeichnung „Kanal“ in 59), einschließen. Somit kann ein erster Hardware-Agent für eine erste Anzahl der Vielzahl von Granularitätsebenen programmierbar sein, und ein zweiter Hardware-Agent kann für eine zweite Anzahl der Vielzahl von Granularitätsebenen programmierbar sein, wobei sich die zweite Anzahl von der ersten Anzahl unterscheidet.
  • In anderen Ausführungsformen können Bankgruppen-, Bank- und andere vorrichtungsinterne Granularitätsebenen anders als die anderen Granularitätsebenen angegeben sein und können somit separat definierte Register sein, die nicht in den Registern F60 enthalten sind. In noch anderen Ausführungsformen können Bankgruppen-, Bank- und andere vorrichtungsinterne Granularitätsebenen in Hardware festgelegt sein.
  • Ein weiterer Satz von Registern, die in einigen Sätzen der MLC-Register F22A-F22H, F22J-F22N und F22P enthalten sein können, sind die in 59 gezeigten Löschregister F62. Insbesondere können in einer Ausführungsform die Löschregister F62 in den MLC-Registern F22F-F22H und F22J-F22N in den Speichersteuerungen F12A-F12H enthalten sein. Die Löschregister F62 können ein Register für jede Granularitätsebene einschließen und können programmierbar sein, um mindestens ein Adressbit in der Teilmenge von Adressbits zu identifizieren, die der Granularitätsebene entspricht, die von der Zielspeichersteuerung F12A-F12H gelöscht werden soll. Das angegebene Bit ist eines der Bits, die in dem entsprechenden Register F60 als ein im Hash dieser Granularitätsebene enthaltenes Bit angegeben sind. In einer Ausführungsform kann das gelöschte Adressbit ausschließlich im Hash dieser Granularitätsebene enthalten sein (z. B. ist das gelöschte Adressbit auf keiner anderen Granularitätsebene in den Registern F60 angegeben). Andere in einem gegebenen Hash enthaltene Bits können in anderen Granularitätsebenen gemeinsam genutzt werden, das gelöschte Bit kann jedoch für die gegebene Granularitätsebene eindeutig sein. Die Löschregister F62 können auf beliebige Weise programmiert werden, um das Adressbit anzugeben, das gelöscht werden soll (z. B. kann eine Bitnummer als Hexadezimalzahl angegeben werden, oder die Bitmaske kann wie in 59 gezeigt verwendet werden). Die Bitmaske kann ein Bit für jedes Adressbit einschließen (oder jedes auswählbare Adressbit, wenn einige Adressbits nicht gelöscht werden können). Bei der Bitmaske kann es sich um eine „One-Hot“-Maske handeln, in der es nur ein einziges gesetztes Bit gibt, das das ausgewählte Löschbit angeben kann. In anderen Ausführungsformen kann eine einzelne Bitmaske in einem einzelnen Löschregister F62 ein Löschbit für jede Granularitätsebene angeben und ist somit möglicherweise keine One-Hot-Maske.
  • Die Speichersteuerung kann über die Löschregister F62 programmiert werden, um die Löschbits anzugeben. Die Speichersteuerung (und insbesondere die Steuerschaltung F24) kann so konfiguriert sein, dass sie für jede Speicheranforderung eine interne Adresse (die oben erwähnte „komprimierte Pipe-Adresse“ oder kurz „komprimierte Adresse“) zur internen Verwendung in der Speichersteuerung in den internen Puffern F26 erzeugt und die Speichervorrichtung F28 adressiert. Die komprimierte Pipe-Adresse kann durch Löschen einiger oder aller der angegebenen Adressbits und Verschieben der verbleibenden Adressbits zusammen erzeugt werden.
  • Wie bereits erwähnt, können die zahlreichen internen Puffer mit Kopien der Adresse Strom sparen, indem unnötige Adressbits entfernt werden. Außerdem können mit einer reversiblen Hash-Funktion gelöschte Bits wiederhergestellt werden, um die vollständige Adresse wiederherzustellen. Die Existenz der Speicheranforderung in einer gegebenen Speichersteuerung F12A-F12H stellt das Ergebnis des Hashes auf einer gegebenen Granularitätsebene bereit und das Hashing des Ergebnisses mit den anderen Adressbits, die in dieser Granularitätsebene eingeschlossen sind, ergibt das gelöschte Adressbit. Die Wiederherstellung der vollständigen Adresse kann nützlich sein, wenn sie für eine Antwort auf die Anforderung, für Snoops aus Kohärenzgründen usw. benötigt wird.
  • Nun Bezug nehmend auf 60 ist ein Flussdiagramm gezeigt, das die Funktionsweise einer Ausführungsform der SOCs während des Bootens/Hochfahrens veranschaulicht. Zum Beispiel kann die in 60 veranschaulichte Operation durch Anweisungen durchgeführt werden, die von einem Prozessor ausgeführt werden (z. B. Boot-Code auf niedriger Ebene, der ausgeführt wird, um das System für die Ausführung des Betriebssystems zu initialisieren). Alternativ kann die Gesamtheit oder ein Abschnitt der in 60 gezeigten Operation während des Bootens durch Hardware-Schaltlogik durchgeführt werden. 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 in kombinatorischer Logik in den SOCs F10 parallel durchgeführt werden. Blöcke, Kombinationen von Blöcken und/oder das Flussbild als Ganzes können über mehrere Taktzyklen geleitet werden.
  • Der Boot-Code kann die SOC-Konfiguration (z. B. einen oder mehrere Chips, einschließlich Instanzen des SOC F10, SOC-Designunterschiede, wie ein partielles SOC, das weniger Speichersteuerungen F12A-F12H einschließt, oder eines von einer Vielzahl von SOC-Designs, die vom System unterstützt werden, Speichervorrichtungen F28, die mit jeder Speichersteuerung F12A-F12H gekoppelt sind, usw.) identifizieren (Block F70). Das Identifizieren der Konfiguration kann im Allgemeinen darin bestehen, die Anzahl von Zielen für Speicheranforderungen (z. B. die Anzahl der Speichersteuerungen F12A-F12H im System, die Anzahl von Ebenen in jeder Speichersteuerung F12A-F12H, die Anzahl der Speichersteuerungen F12A-F12H, die während der Verwendung aktiviert werden, usw.) zu bestimmen. Eine gegebene Speichersteuerung F12A-F12H könnte während der Verwendung nicht verfügbar sein, z. B. wenn die Speichervorrichtungen F28 an der gegebenen Speichersteuerung F12A-F12H nicht bestückt sind oder ein Hardware-Fehler in den Speichervorrichtungen F28 vorliegt. In anderen Fällen ist die gegebene Speichersteuerung F12A-F12H in bestimmten Testmodi oder Diagnosemodi möglicherweise nicht verfügbar. Das Identifizieren der Konfiguration kann auch das Bestimmen der Gesamtmenge an verfügbarem Speicher (z. B. die Anzahl der Speichervorrichtungen F28, die mit jeder Speichersteuerung F12A-F12H gekoppelt sind, und die Kapazität der Speichervorrichtungen F28) einschließen.
  • Diese Bestimmungen können sich auf die Größe eines zusammenhängenden Blocks innerhalb einer Seite auswirken, die auf jede Speichersteuerung F12A-F12H abgebildet werden soll, was einen Kompromiss zwischen der Verteilung der Speicheranforderungen innerhalb einer Seite auf die Speichersteuerungen F12A-F12H (und Instanzen des SOC F10, wenn mehr als eine Instanz bereitgestellt wird) und den Effizienzen, die durch die Gruppierung von Anforderungen zu denselben Adressen erzielt werden können, darstellt. Der Boot-Code kann somit die Blockgröße bestimmen, die auf jede Speichersteuerung F12A-F12H abgebildet werden soll (Block F72). In anderen Modi kann eine lineare Abbildung von Adressen auf die Speichervorrichtungen F12A-F12H verwendet werden (z. B. Abbildung der Gesamtheit der Speichervorrichtungen F28 in einer Speichervorrichtung F12A-F12H auf einen zusammenhängenden Block von Adressen im im Speicheradressraum), oder es kann ein Hybrid aus verschachtelt auf einer oder mehreren Granularitätsebenen und linear auf anderen Granularitätsebenen verwendet werden. Der Boot-Code kann bestimmen, wie die MLC-Register F22A-2F2H, F22J-F22N und F22P programmiert werden sollen, um die gewünschte Abbildung von Adressen auf die Speichersteuerungen F12A-F12H bereitzustellen (Block F74). Zum Beispiel können die Maskenregister F60 so programmiert werden, dass sie die Adressbits auf jeder Granularitätsebene auswählen, und die Löschbitregister F62 können so programmiert werden, dass sie das Löschbit für jede Granularitätsebene auswählen.
  • 61 ist ein Flussdiagramm, das den Betrieb verschiedener SOC-Komponenten veranschaulicht, um die Route für eine Speicheranforderung von einer Quellkomponente zur identifizierten Speichersteuerung F12A-F12H für diese Speicheranforderung zu bestimmen. 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 in kombinatorischer Logik in den SOCs F10 parallel durchgeführt werden. Blöcke, Kombinationen von Blöcken und/oder das Flussbild als Ganzes können über mehrere Taktzyklen geleitet werden.
  • Die Komponente kann die Register F60 auf die Adresse der Speicheranforderung anwenden, um die verschiedenen Granularitätsebenen, wie Die, Slice, Zeile, Seite usw., zu bestimmen (Block F76). Basierend auf den Ergebnissen auf den Granularitätsebenen kann die Komponente die Speicheranforderung über die Fabric an die identifizierte Speichersteuerung F12A-F12H leiten (Block F78).
  • 62 ist ein Flussdiagramm, das die Funktionsweise einer Ausführungsform einer Speichersteuerung F12A-F12H als Reaktion auf eine Speicheranforderung 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 in kombinatorischer Logik in den SOCs F10 parallel durchgeführt werden. Blöcke, Kombinationen von Blöcken und/oder das Flussbild als Ganzes können über mehrere Taktzyklen geleitet werden.
  • Die Speichersteuerung F12A-F12H kann die Ebenen-, Pipe-, Bankgruppen- und Bankmaskenregister F60 verwenden, um die Ebene, Pipe, Bankgruppe und Bank für die Speicheranforderung zu identifizieren (Block F80). Zum Beispiel kann die Speichersteuerung F12A-F12H die Maske aus dem entsprechenden Register F60 mit der Adresse logisch AND-verknüpfen, die Bits logisch kombinieren (z. B. XOR-Reduktion) und gegebenenfalls umkehren. Die Speichersteuerung F12A-F12H kann die Löschmasken aus den Löschregistern F62 verwenden, um die durch jede Granularitätsebene (z. B. Die, Slice, Zeile, Seite, Ebene, Pipe, Bankgruppe und Bank) angegebenen Adressbits zu löschen, und kann die verbleibenden Adressbits zusammen verschieben, um die komprimierte Pipe-Adresse zu bilden (Block F82). Zum Beispiel kann die Speichersteuerung F12A-F12H die Adresse mit dem logischen AND der Umkehrung der Löschmasken maskieren und die verbleibenden Bits zusammen verschieben. Alternativ kann die Speichersteuerung F12A-F12H einfach die Adressbits zusammen verschieben und dabei natürlich die identifizierten Bits löschen. Die Speichersteuerung F12A-F12H kann die spezifizierte Speicheranforderung (z. B. Lesen oder Schreiben) durchführen (Block F84) und kann auf die Quelle antworten (z. B. mit Lesedaten oder einem Schreibabschluss, wenn die Schreiboperation
    keine gepostete Schreiboperation ist). Wenn die vollständige Adresse für die Antwort oder aus anderen Gründen während der Verarbeitung benötigt wird, kann die vollständige Adresse aus der komprimierten Pipe-Adresse, den Inhalten der Register F60 für jede Ebene und dem bekannten Ergebnis für jede Ebene, die der Speichersteuerung F12A-F12H, der die Speicheranforderung empfangen hat, entspricht, wiederhergestellt werden (Block F86).
  • Die große Anzahl der Speichersteuerungen F12A-F12H im System und die große Anzahl der Speichervorrichtungen F28, die mit den Speichersteuerungen F12A-F12H gekoppelt sind, können eine erhebliche Quelle für den Leistungsverbrauch im System sein. Zu bestimmten Zeitpunkten während des Betriebs kann eine relativ kleine Speichermenge aktiv genutzt werden, und Leistung könnte durch Deaktivieren eines oder mehrerer Slices von Speichersteuerungen/Speichervorrichtungen gespart werden, wenn auf diese Slices nur selten zugegriffen wurde. Das Deaktivieren eines Slices kann jeden Mechanismus einschließen, der den Leistungsverbrauch im Slice reduziert und dazu führt, dass das Slice nicht verfügbar ist, bis das Slice wieder aktiviert wird. In einer Ausführungsform können Daten von den Speichervorrichtungen F28 zurückgehalten werden, während das Slice deaktiviert ist. Dementsprechend kann die Leistungsversorgung der Speichervorrichtungen F28 aktiv bleiben, aber die Speichervorrichtungen F28 können in einen Modus mit geringerer Leistung versetzt werden (z. B. können DRAM-Vorrichtungen in einen Selbstaktualisierungsmodus versetzt werden, in dem die Vorrichtungen intern Aktualisierungsoperationen erzeugen, um Daten zurückzuhalten, sind aber von dem SOC F10 aus nicht zugänglich, bis der Selbstaktualisierungsmodus verlassen wird). Die Speichersteuerung(en) F12A-F12H im Slice können auch in einem Niederleistungsmodus (z. B. taktgesteuert) sein. Die Speichersteuerung(en) F12A-F12H im Slice können leistungsgesteuert sein und somit beim Aktivieren des Slice und nach dem Deaktivieren eingeschaltet und neu konfiguriert werden.
  • In einer Ausführungsform kann Software (z. B. ein Abschnitt des Betriebssystems) die Aktivität im System überwachen, um zu bestimmen, ob ein oder mehrere Slices deaktiviert werden können. Die Software kann auch Versuche überwachen, während einer deaktivierten Zeit auf Daten im Slice zuzugreifen, und kann das Slice je nach Wunsch erneut aktivieren. Des Weiteren kann die Überwachungssoftware in einer Ausführungsform vor der Deaktivierung des Slice Datenseiten im Slice erkennen, auf die in einer höheren als einer angegebenen Rate zugegriffen wird, und kann diese Seiten in ein anderes Slice kopieren, das nicht deaktiviert wird (Neuabbilden der Übersetzungen von einer virtuellen auf eine physische Adresse für diese Seiten). Somit bleiben möglicherweise einige Seiten im Slice verfügbar, und es kann auf diese zugegriffen werden, während das Slice deaktiviert ist. Der Prozess des Neuzuweisens von Seiten, auf die zugegriffen wird, und des Deaktivierens eines Slice wird hier als „Falten“ eines Slice bezeichnet. Das erneute Aktivieren eines gefalteten Slice kann als „Entfalten“ eines Slice bezeichnet werden, und der Prozess des erneuten Aktivierens kann ein Neuabbilden der zuvor neu zugewiesenen Seiten, um die Seiten auf die verfügbaren Slices zu verteilen (und wenn die Daten in den neu zugewiesenen Seiten während der Zeit modifiziert wurden, während der das Slice gefaltet wurde, Kopieren der Daten in die neu zugewiesene physische Seite) einschließen.
  • 63 ist ein Flussdiagramm, das die Funktionsweise einer Ausführungsform einer Überwachungssystemoperation zum Bestimmen, ob Speicher gefaltet oder entfaltet werden soll, veranschaulicht. Während die Blöcke in einer bestimmter Reihenfolge zum leichteren Verständnis gezeigt sind, können andere Reihenfolgen verwendet werden. Eine oder mehrere Codesequenzen („Code“), die eine Vielzahl von Anweisungen umfassen, die von einem oder mehreren Prozessoren auf dem/den SOC(s) F10 ausgeführt werden, können Operationen, einschließlich der unten gezeigten Operationen, verursachen. Zum Beispiel kann ein Speichermonitor- und Faltungs-/Entfaltungscode Anweisungen einschließen, die, wenn sie von den Prozessoren auf dem/den SOC(s) F10 ausgeführt werden, bewirken können, dass das System, einschließlich der SOCs, Operationen durchführt, die die in 63 gezeigten Operationen einschließen.
  • Der Speichermonitor- und Faltungs-/Entfaltungscode kann Bedingungen im System überwachen, um Gelegenheiten zum Falten eines Slice oder eine Aktivität, die angibt, dass ein gefaltetes Slice entfaltet werden soll, zu identifizieren (Block F90). Eine Aktivität, die überwacht werden kann, kann zum Beispiel Zugriffsraten auf verschiedene Seiten, die in einem gegebenen Slice enthalten sind, einschließen. Wenn auf die Seiten innerhalb eines bestimmten Slice nicht mit einer Rate über einem Schwellenwert zugegriffen wird (oder auf eine erhebliche Anzahl von Seiten nicht mit einer Rate über dem Schwellenwert zugegriffen wird), kann das gegebene Slice ein Kandidat für die Faltung sein, da das Slice oft im Ruhezustand ist. Leistungszustände in den Prozessoren innerhalb der SOCs können ein weiterer Faktor sein, der vom Speichermonitor- und Faltungs-/Entfaltungscode überwacht wird, da Prozessoren in Niederleistungszuständen möglicherweise weniger häufig auf Speicher zugreifen. Insbesondere Prozessoren, die sich im Ruhezustand befinden, greifen möglicherweise nicht auf Speicherseiten zu. Die verbrauchte Bandbreite auf den Kommunikations-Fabrics in dem/den SOC(s) F10 kann überwacht werden. Andere Systemfaktoren können ebenfalls überwacht werden. Speicher könnte zum Beispiel gefaltet werden, weil das System erkennt, dass eine Batterie, die Leistung zuführt, einen niedrigen Ladezustand erreicht. Ein weiterer Faktor könnte ein Wechsel der Leistungsquelle sein, z. B. kann das System an eine kontinuierliche, praktisch unbegrenzte Leistungsquelle (z. B. eine Wandsteckdose) angeschlossen und vom Stromnetz getrennt worden sein, sodass es nun auf Batterieleistung angewiesen ist. Ein weiterer Faktor könnte eine Überlastung der Systemtemperatur, eine Überlastung der Leistungsversorgung oder dergleichen sein, wobei ein Falten von Speicher die thermische oder elektrische Belastung reduzieren könnte. In verschiedenen Ausführungsformen kann ein beliebiger Satz von Faktoren überwacht werden, die die Aktivitätsebene im System angeben.
  • Wenn die Aktivität angibt, dass ein oder mehrere Speicher-Slices ohne wesentliche Auswirkungen auf die Leistung gefaltet werden könnten (Entscheidungsblock F92, „Ja“-Zweig), kann der Speichermonitor- und Faltungs-/Entfaltungscode eine Faltung von mindestens einem Slice initiieren (Block F94). Wenn die Aktivität angibt, dass die Nachfrage nach Speicher möglicherweise zunimmt (oder bald zunehmen könnte) (Entscheidungsblock F96, „Ja“-Zweig), kann der Speichermonitor- und Faltungs-/Entfaltungscode eine Entfaltung initiieren (Block F98).
  • In einer Ausführungsform kann das Falten von Slices schrittweise sein und in Phasen erfolgen. 64 ist ein Flussdiagramm, das eine Ausführungsform einer schrittweisen Faltung eines Slice veranschaulicht. Obwohl die Blöcke der Einfachheit des Verständnisses wegen in einer bestimmten Reihenfolge gezeigt sind, können andere Reihenfolgen verwendet werden. Code, der von einem oder mehreren Prozessoren auf dem/den SOC(s) F10 ausgeführt wird, kann Operationen, einschließlich der unten gezeigten Operationen, verursachen.
  • Der Faltungsprozess kann mit der Bestimmung eines zu faltenden Slice beginnen (Block F100). Das Slice kann ausgewählt werden, indem bestimmt wird, dass auf das Slice unter den Slices am wenigsten häufig zugegriffen wird oder dass es zu den Slices gehört, auf die am wenigsten häufig zugegriffen wird. Das Slice kann zufällig ausgewählt werden (in einer Ausführungsform sind Slices, die als aktiv bleibend bestimmt werden, nicht eingeschlossen). Das Slice kann basierend auf einem Fehlen von verbundenen und/oder Copy-on-Write-Seiten (unten erläutert) im Slice ausgewählt werden, oder das Slice kann weniger verbundene und/oder Copy-on-Write-Seiten als andere Slices aufweisen. Ein Slice kann basierend auf seiner relativen Unabhängigkeit von anderen gefalteten Slices ausgewählt werden (z. B. physische Entfernung, Fehlen gemeinsam genutzter Segmente in der Kommunikations-Fabric mit anderen gefalteten Slices usw.). Ein beliebiger Faktor oder beliebige Faktoren können verwendet werden, um das Slice zu bestimmen. Das Slice kann als Faltung gekennzeichnet sein. In einer Ausführungsform kann der Faltungsprozess Slices in Zweierpotenzen deaktivieren, in Übereinstimmung mit dem binären Entscheidungsbaum für das Hashing. Mindestens ein Slice kann als entfaltbar bezeichnet werden und aktiv bleiben, um sicherzustellen, dass Daten im Speichersystem zugänglich sind.
  • Das Initiieren einer Faltung kann das Verhindern neuer Speicherzuweisungen für physische Seiten im Faltungs-Slice einschließen. Somit kann der Speichermonitor- und Faltungs-/Entfaltungscode mit dem Code für einen Zuweiser für virtuelle Speicherseiten kommunizieren, der physische Seiten für virtuelle Seiten zuweist, die noch nicht in Speicher abgebildet wurden, um zu bewirken, dass der Zuweiser für virtuelle Speicherseiten die Zuweisung physischer Seiten im Slice einstellt (Block F102). Die Deaktivierung kann möglicherweise auch darauf warten, dass verbundene Seiten im Slice nicht mehr verbunden werden. Eine verbundene Seite kann eine Seite sein, die vom virtuellen Speichersystem nicht ausgelagert werden darf. Zum Beispiel können Seiten von Kernel-Code und Seiten verwandter Datenstrukturen verbunden sein. Wenn eine Copy-on-Write-Seite zugewiesen wird, kann sie einem Slice zugewiesen werden, das aktiv bleiben soll, und kann somit möglicherweise keinem Faltungs-Slice zugewiesen werden. Copy-on-Write-Seiten können verwendet werden, um unabhängigen Codesequenzen (z. B. Prozessen oder Threads innerhalb eines Prozesses oder von Prozessen) die gemeinsame Nutzung von Seiten zu ermöglichen, solange keine der unabhängigen Codesequenzen die Seiten schreibt. Wenn eine unabhängige Codesequenz eine Schreiboperation erzeugt, kann die Schreiboperation bewirken, dass der Zuweiser für virtuelle Speicherseiten eine neue Seite zuweist und die Daten auf die neu zugewiesene Seite kopiert.
  • Somit kann der Zuweiser für virtuelle Speicherseiten wissen, welche physischen Seiten auf welche Slices abgebildet werden. In einer Ausführungsform kann, wenn eine Faltung verwendet wird, eine lineare Abbildung von Adressen auf Speicher verwendet werden, anstatt die Blöcke auf jeder Seite über die verschiedenen Speichersteuerungen/Speicher zu verteilen. Alternativ kann die Abbildung von Adressen zusammenhängend auf einen gegebenen Slice erfolgen, die Seiten können jedoch auf die Speichersteuerungen/Speicherkanäle innerhalb des Slice verteilt sein. In einer bestimmten Ausführungsform kann der Adressraum als einzelne zusammenhängende Blöcke auf jedes Slice abgebildet werden (z. B. kann ein Slice auf Adressen 0 bis slice_size-1 abgebildet werden, ein anderes Slice kann auf Adressen slice_size bis 2*slice_size-1 abgebildet werden usw.). Andere Mechanismen können eine Verschachtelung zwischen Seitengrenzen verwenden oder Seiten auf eine begrenzte Anzahl von Slices abbilden, die als Einheit gefaltet/entfaltet werden können, usw.
  • Während des Übergangszeitraums, wenn ein Slice gefaltet wird, können die Seiten im ausgewählten (Faltungs-)Slice über einen Zeitraum hinweg verfolgt werden, um zu bestimmen, auf welche Seiten aktiv zugegriffen wird (Block F104). Zum Beispiel können Zugriffsbits in den Seitentabellenübersetzungen verwendet werden, um zu verfolgen, auf welche Seiten zugegriffen wird (die Zugriffsbits werden regelmäßig überprüft und bei der Überprüfung gelöscht, damit neue Zugriffe erkannt werden können). Seiten, die als aktiv und fehlerhaft befunden wurden (die Daten wurden seit dem Laden in den Speicher modifiziert), können in ein Slice verschoben werden, das aktiv bleibt. Das heißt, die Seiten können von dem Zuweiser für virtuelle Speicherseiten in ein anderes Slice neu abgebildet werden (Block F106). Seiten, die als aktiv, aber fehlerfrei befunden wurden (nach dem anfänglichen Laden in den Speicher nicht modifiziert), können optional in ein anderes Slice neu abgebildet werden (Block F108). Wenn eine aktive, aber fehlerfreie Seite nicht neu abgebildet wird, kann ein Zugriff auf die Seite nach dem Falten des Slice bewirken, dass das Slice erneut aktiviert wird, und kann somit die möglichen Leistungseinsparungen einschränken. Somit besteht die allgemeine Absicht möglicherweise darin, dass Seiten, auf die aktiv zugegriffen wird, nicht im deaktivierten/gefalteten Slice verbleiben.
  • Sobald der obige Vorgang abgeschlossen ist, können die Speichervorrichtungen F28 (z. B. DRAMs) im Slice aktiv in die Selbstaktualisierung versetzt werden (Block F110). Alternativ können die Speichervorrichtungen F28 auf natürliche Weise in die Selbstaktualisierung übergehen, da im Laufe der Zeit keine Zugriffe stattfinden, wobei sie sich auf die in die Hardware der Speichersteuerungen F12A-F12H integrierten Leistungsverwaltungsmechanismen stützen, um den Übergang zur Selbstaktualisierung zu bewirken. Andere Arten von Speichervorrichtungen können gemäß der Definition dieser Vorrichtungen aktiv in einen Niederleistungsmodus versetzt werden (oder können auf natürliche Weise übergehen). Optional können die Speichersteuerungen F 12A-F 12H im Slice aufgrund des Fehlens von Datenverkehr auf einen Niederleistungszustand reduziert werden, können aber weiterhin auf Speicheranforderungen abhören und auf diese reagieren, wenn sie auftreten (Block F112).
  • Wenn in einer Ausführungsform eine ausreichend hohe Konfidenz besteht, dass die Daten im gefalteten Slice nicht erforderlich sind, kann eine harte Faltung als aggressiverer Modus zusätzlich zur aktuellen Faltung angewendet werden. Das heißt, die Speichervorrichtungen F28 können tatsächlich ausgeschaltet werden, wenn über einen längeren Zeitraum kein Zugriff auf das gefaltete Slice besteht.
  • Das Entfalten (erneutes Aktivieren oder Aktivieren) eines Slice kann entweder schrittweise oder schnell erfolgen. Eine schrittweise Entfaltung kann auftreten, wenn die von den laufenden Anwendungen benötigte Menge an aktivem Speicher oder Bandbreite zunimmt und sich einem Schwellenwert nähert, bei dem die derzeit aktiven Slices den Bedarf möglicherweise nicht mehr decken und somit die Leistung einschränken würden. Eine schnelle Entfaltung kann bei einer großen Speicherzuweisung oder einem erheblichen Anstieg des Bandbreitenbedarfs auftreten (z. B., wenn die Anzeige eingeschaltet wird, eine neue Anwendung gestartet wird, ein Benutzer mit dem System interagiert, wie wenn er das System entsperrt oder auf andere Weise mit dem System interagiert, indem er auf eine Taste oder eine andere Eingabevorrichtung drückt, usw.).
  • 65 ist ein Flussdiagramm, das eine Ausführungsform des Entfaltens eines Speicher-Slice veranschaulicht. Obwohl die Blöcke der Einfachheit des Verständnisses wegen in einer bestimmten Reihenfolge gezeigt sind, können andere Reihenfolgen verwendet werden. Code, der von einem oder mehreren Prozessoren auf dem/den SOC(s) F10 ausgeführt wird, kann Operationen, einschließlich der unten gezeigten Operationen, verursachen.
  • Es kann ein zu entfaltendes Slice (Block F120) oder mehrere Slices, wie eine Zweierpotenz von Slices, ausgewählt werden, wie oben erläutert. Es kann jeder Mechanismus zum Auswählen eines Slice/von Slices verwendet werden. Wenn zum Beispiel ein Speicherzugriff auf ein gefaltetes Slice erfolgt, kann das Slice ausgewählt werden. Ein Slice kann zufällig ausgewählt werden. Ein Slice kann basierend auf seiner relativen Unabhängigkeit von anderen nicht gefalteten Slices (z. B. physische Entfernung, Fehlen gemeinsam genutzter Segmente in der Kommunikations-Fabric mit nicht gefalteten Slices usw.) ausgewählt werden. Ein beliebiger Faktor oder beliebige Kombinationen von Faktoren können verwendet werden, um ein Slice zur Entfaltung auszuwählen.
  • Der Leistungszustand der Speichersteuerung(en) F12A-F12H im sich entfaltenden Slice kann optional erhöht werden, und/oder die DRAMs können aktiv veranlasst werden, die Selbstaktualisierung (oder einen anderen Niederleistungsmodus für andere Arten von Speichervorrichtungen F28) zu verlassen (Block F122). Alternativ können die Speichersteuerungen F 12A-F 12H und die Speichervorrichtungen F28 als Reaktion auf das Eintreffen von Speicheranforderungen auf natürliche Weise in höhere Leistungsfähigkeits-/Leistungszustände übergehen, wenn physische Seiten innerhalb des sich entfaltenden Speicher-Slice eintreffen. Der Speichermonitor- und Faltungs-/Entfaltungscode kann den Zuweiser für virtuelle Speicherseiten darüber informieren, dass physische Seitenzuweisungen innerhalb des ausgewählten Speicher-Slice zur Zuweisung verfügbar sind (Block F124). Im Laufe der Zeit kann der Zuweiser für virtuelle Speicherseiten Seiten innerhalb des ausgewählten Speicher-Slice neu angeforderten Seiten zuweisen (Block F126). Alternativ oder zusätzlich zur Zuweisung neu angeforderter Seiten kann der Zuweiser für virtuelle Speicherseiten Seiten, die zuvor im ausgewählten Speicher-Slice zugewiesen wurden, zurück in das ausgewählte Speicher-Slice verschieben. In einer anderen Ausführungsform kann der Zuweiser für virtuelle Speicherseiten Seiten schnell in das ausgewählte Slice verschieben.
  • Das Slice kann wie zuvor in Bezug auf 57 beschrieben definiert werden (z. B. kann ein Slice eine gröbere Körnung als eine Zeile aufweisen). In anderen Ausführungsformen kann ein Slice zum Zwecke der Speicherfaltung eine beliebige Größe bis hin zu einem einzelnen Speicherkanal (z. B. einer einzelnen Speichervorrichtung F28) aufweisen. Andere Ausführungsformen können ein Slice als eine oder mehrere Speichersteuerungen F12A-F12H definieren. Im Allgemeinen ist ein Slice eine physische Speicherressource, auf die eine Vielzahl von Seiten abgebildet wird. Die Abbildung kann in einer Ausführungsform gemäß der Programmierung der MLC-Register F22A-F22H, F22J-F22N und F22P bestimmt werden. In einer anderen Ausführungsform kann die Abbildung in Hardware festgelegt oder auf andere Weise programmierbar sein.
  • In einer Ausführungsform kann die Wahl der Slice-Größe teilweise auf der Datenkapazität und Bandbreite basieren, die von Niederleistungsanwendungsfällen von Interesse im System verwendet werden. Zum Beispiel, kann eine Slice-Größe so gewählt werden, dass ein einzelnes Slice eine primäre Anzeige des Systems unterstützen und über die Speicherkapazität verfügen kann, um das Betriebssystem und eine kleine Anzahl von Hintergrundanwendungen zu halten. Anwendungsfälle können zum Beispiel das Ansehen eines Films, das Abspielen von Musik, einen aktiven Bildschirmschoner, wobei jedoch das Abrufen von E-Mails oder das Herunterladen von Updates im Hintergrund erfolgt, einschließen.
  • 66 ist ein Flussdiagramm, das ein Beispiel eines Verfahrens zum Falten eines Speicher-Slice (z. B. zum Deaktivieren des Slice) veranschaulicht. Obwohl die Blöcke der Einfachheit des Verständnisses wegen in einer bestimmten Reihenfolge gezeigt sind, können andere Reihenfolgen verwendet werden. Code, der von einem oder mehreren Prozessoren auf dem/den SOC(s) F10 ausgeführt wird, kann Operationen, einschließlich der unten gezeigten Operationen, verursachen.
  • Das Verfahren kann das Erkennen einschließen, ob ein erstes Speicher-Slice einer Vielzahl von Speicher-Slices in einem Speichersystem deaktiviert werden soll oder nicht (Entscheidungsblock F130). Wenn die Erkennung angibt, dass das erste Speicher-Slice nicht deaktiviert werden soll (Entscheidungsblock F130, „Nein“-Zweig), kann das Verfahren abgeschlossen sein. Wenn die Erkennung angibt, dass das erste Speicher-Slice deaktiviert werden soll, kann das Verfahren fortgesetzt werden (Entscheidungsblock F130, „Ja“-Zweig). Basierend auf dem Erkennen, dass das erste Speicher-Slice deaktiviert werden soll, kann das Verfahren das Kopieren einer Teilmenge physischer Seiten innerhalb des ersten Speicher-Slice in ein anderes Speicher-Slice der Vielzahl von Speicher-Slices einschließen. Auf Daten in der Teilmenge physischer Seiten kann mit einer höheren als einer Schwellenwertrate zugegriffen werden (Block F132). Das Verfahren kann basierend auf dem Erkennen, dass das erste Speicher-Slice deaktiviert werden soll, eine Neuabbildung virtueller Adressen, die der Teilmenge physischer Seiten entsprechen, auf das andere Speicher-Slice einschließen (Block F134). Das Verfahren kann basierend auf dem Erkennen, dass das erste Speicher-Slice deaktiviert werden soll, auch das Deaktivieren des ersten Speicher-Slice einschließen (Block F136). In einer Ausführungsform kann das Deaktivieren des ersten Speicher-Slice das aktive Versetzen eines oder mehrerer dynamischer Zugriffsspeicher (DRAMs) im ersten Speicher-Slice in den Selbstaktualisierungsmodus einschließen. In einer anderen Ausführungsform kann das Deaktivieren des ersten Speicher-Slice das Ermöglichen, dass ein oder mehrere dynamische Zugriffsspeicher (DRAMs) im ersten Speicher-Slice aufgrund eines fehlenden Zugriffs in den Selbstaktualisierungsmodus übergehen, umfassen. In einer Ausführungsform umfasst das Speichersystem eine Vielzahl von Speichersteuerungen, und die physische Speicherressource umfasst mindestens eine der Vielzahl von Speichersteuerungen. In einer anderen Ausführungsform umfasst das Speichersystem eine Vielzahl von Speicherkanälen, und ein gegebener dynamischer Direktzugriffsspeicher (DRAM) ist mit einem der Vielzahl von Speicherkanälen gekoppelt. Das gegebene Speicher-Slice umfasst mindestens einen der Vielzahl von Speicherkanälen. In einer Ausführungsform ist zum Beispiel das gegebene Speicher-Slice ein Speicherkanal der Vielzahl von Speicherkanälen.
  • In einer Ausführungsform kann das Bestimmen, dass das erste Speicher-Slice deaktiviert werden soll, umfassen: Erkennen, dass eine Zugriffsrate auf das erste Speicher-Slice niedriger als ein erster Schwellenwert ist; und Identifizieren der Teilmenge physischer Seiten, auf die häufiger als ein zweiter Schwellenwert zugegriffen wird. In einem Beispiel kann das Verfahren ferner das Deaktivieren der Zuweisung der Vielzahl physischer Seiten, die dem ersten Speicher-Slice entsprechen, zu virtuellen Adressen in einem Speicherzuweiser basierend auf dem Erkennen, dass die Zugriffsrate niedriger als der erste Schwellenwert ist, umfassen. Das Verfahren kann ferner das Durchführen der Identifikation im Anschluss an das Deaktivieren der Zuweisung der Vielzahl physischer Seiten umfassen. In einer Ausführungsform umfasst das Kopieren das Kopieren von Daten von einer oder mehreren physischen Seiten der Teilmenge, die Daten einschließen, die im Speichersystem modifiziert wurden, in das andere Speicher-Slice. In einer Ausführungsform umfasst das Kopieren ferner das Kopieren von Daten von verbleibenden physischen Seiten der Teilmenge im Anschluss an das Kopieren der Daten von der einen oder den mehreren physischen Seiten.
  • Gemäß dem oben Genannten kann ein System eine oder mehrere Speichersteuerungen umfassen, die mit einer oder mehreren Speichervorrichtungen gekoppelt sind und ein Speichersystem bilden, wobei das Speichersystem eine Vielzahl von Speicher-Slices einschließt und wobei ein gegebenes Speicher-Slice der Vielzahl von Speicher-Slices eine physische Speicherressource ist, auf die eine Vielzahl physischer Seiten abgebildet wird. Das System kann ferner einen oder mehrere Prozessoren und ein nicht flüchtiges computerlesbares Speichermedium umfassen, das eine Vielzahl von Anweisungen speichert, die, wenn sie von dem einen oder den mehreren Prozessoren ausgeführt werden, bewirken, dass das System Operationen durchführt, die das Verfahren wie oben beschrieben umfassen. Das nicht flüchtige computerlesbare Speichermedium ist ebenfalls eine Ausführungsform.
  • 67 ist ein Flussdiagramm, das ein Beispiel eines Verfahrens zum Hashing einer Adresse veranschaulicht, um eine Speicheranforderung für die Adresse an eine Zielspeichersteuerung und in einigen Fällen an eine Zielspeichervorrichtung und/oder eine Zielbankgruppe und/oder eine Zielbank in der Speichervorrichtung zu leiten. Obwohl die Blöcke der Einfachheit des Verständnisses wegen in einer bestimmten Reihenfolge gezeigt sind, können andere Reihenfolgen verwendet werden. Verschiedene Komponenten des SOC F10, wie Quell-Hardware-Agenten, Kommunikations-Fabric-Komponenten und/oder Speichersteuerungskomponenten, können so konfiguriert sein, dass sie Abschnitte oder die Gesamtheit des Verfahrens durchführen.
  • Das Verfahren kann das Erzeugen einer Speicheranforderung mit einer ersten Adresse in einem Speicheradressraum einschließen, der auf Speichervorrichtungen in einem System mit einer Vielzahl von Speichersteuerungen abgebildet ist, die physisch über einen oder mehrere Dies mit integrierter Schaltung verteilt sind (Block F140). In einer Ausführungsform identifiziert eine gegebene Speicheradresse im Speicheradressraum eindeutig einen Speicherort in einer der Speichervorrichtungen, die mit einer der Vielzahl von Speichersteuerungen gekoppelt sind, eine gegebene Seite im Speicheradressraum wird in eine Vielzahl von Blöcken unterteilt und die Vielzahl von Blöcken der gegebenen Seite wird über die Vielzahl von Speichersteuerungen verteilt. Das Verfahren kann ferner ein Hashing unabhängig angegebener Sätze von Adressbits von der ersten Adresse umfassen, um die Speicheranforderung an eine erste Speichersteuerung der Vielzahl von Speichersteuerungen zu richten, wobei die unabhängig angegebenen Sätze von Adressbits die erste Speichersteuerung auf einer Vielzahl von Granularitätsebenen lokalisieren (Block F142). Das Verfahren kann ferner noch das Leiten der Speicheranforderung an die erste Speichersteuerung basierend auf dem Hashing umfassen (Block F144).
  • In einer Ausführungsform sind das eine oder die mehreren Dies mit integrierter Schaltung eine Vielzahl von Dies mit integrierter Schaltung; die Vielzahl von Granularitätsebenen eine Die-Ebene umfasst und gibt die Die-Ebene an, welches der Vielzahl von Dies mit integrierter Schaltung die erste Speichersteuerung einschließt. In einer Ausführungsform sind die Vielzahl von Speichersteuerungen auf einem gegebenen Die mit integrierter Schaltung basierend auf dem physischen Ort auf dem gegebenen Die mit integrierter Schaltung logisch in eine Vielzahl von Slices unterteilt; mindestens zwei Speichersteuerungen der Vielzahl von Speichersteuerungen in einem gegebenen Slice der Vielzahl von Slices enthalten sind; die Vielzahl von Granularitätsebenen eine Slice-Ebene umfasst und gibt die Slice-Ebene an, welches der Vielzahl von Slices die erste Speichersteuerung einschließt. In einer Ausführungsform sind die mindestens zwei Speichersteuerungen im gegebenen Slice basierend auf dem physischen Ort auf dem gegebenen Die mit integrierter Schaltung logisch in eine Vielzahl von Zeilen unterteilt; die Vielzahl von Granularitätsebenen eine Zeilenebene umfasst und gibt die Zeilenebene an, welche der Vielzahl von Zeilen die erste Speichersteuerung einschließt. In einer Ausführungsform schließt die Vielzahl von Zeilen eine Vielzahl von Seiten basierend auf dem physischen Ort auf dem gegebenen Die mit integrierter Schaltung ein; die Vielzahl von Granularitätsebenen eine Seitenebene umfasst und gibt die Seitenebene an, welche Seite einer gegebenen Zeile der Vielzahl von Zeilen die erste Speichersteuerung einschließt. In einer Ausführungsform umfasst ein gegebener Hardware-Agent einer Vielzahl von Hardware-Agenten, die Speicheranforderungen erzeugen, ein oder mehrere Register, und umfasst das nicht beanspruchte Verfahren ferner das Programmieren des einen oder der mehreren Register mit Daten, die identifizieren, welche Adressbits auf einer oder mehreren der Vielzahl von Granularitätsebenen im Hash enthalten sind. In einer Ausführungsform ist ein erster Hardware-Agent der Vielzahl von Hardware-Agenten für eine erste Anzahl der Vielzahl von Granularitätsebenen programmierbar und ist ein zweiter Hardware-Agent der Vielzahl von Hardware-Agenten für eine zweite Anzahl der Vielzahl von Granularitätsebenen programmierbar, wobei sich die zweite Anzahl von der ersten Anzahl unterscheidet. In einer Ausführungsform umfasst eine gegebene Speichersteuerung der Vielzahl von Speichersteuerungen ein oder mehrere Register, die mit Daten programmierbar sind, die identifizieren, welche Adressbits in der Vielzahl von Granularitätsebenen enthalten sind, und umfasst eine oder mehrere andere Granularitätsebenen innerhalb der gegebenen Speichersteuerung.
  • 68 ist ein Flussdiagramm, das ein Beispiel eines Verfahrens zum Löschen von Adressbits zur Bildung einer komprimierten Pipe-Adresse in einer Speichersteuerung veranschaulicht. Obwohl die Blöcke der Einfachheit des Verständnisses wegen in einer bestimmten Reihenfolge gezeigt sind, können andere Reihenfolgen verwendet werden. Die Speichersteuerung kann so konfiguriert sein, dass sie Abschnitte oder die Gesamtheit des Verfahrens durchführt.
  • Das Verfahren kann das Empfangen einer Adresse, die eine Vielzahl von Adressbits umfasst, an einer ersten Steuerung einer Vielzahl von Speichersteuerungen in einem System einschließen. Die Adresse wird an die erste Speichersteuerung geleitet, und eine erste Speichervorrichtung einer Vielzahl von Speichervorrichtungen, die von der ersten Speichersteuerung gesteuert wird, wird basierend auf einer Vielzahl von Hashes von Sätzen der Vielzahl von Adressbits ausgewählt (Block F150). Das Verfahren kann außerdem das Löschen einer Vielzahl der Vielzahl von Adressbits einschließen (Block F152). Ein gegebenes Bit der Vielzahl der Vielzahl von Adressbits ist in einem der Vielzahl von Hashes enthalten und ist von den verbleibenden der Vielzahl von Hashes ausgeschlossen. Das Verfahren kann das Verschieben verbleibender Adressbits der Vielzahl von Adressbits einschließen, um eine komprimierte Adresse zu bilden, die in der ersten Speichersteuerung verwendet wird (Block F154).
  • In einem Beispiel kann das Verfahren ferner das Wiederherstellen der Vielzahl der Vielzahl von Adressbits basierend auf den Sätzen der Vielzahl von Adressbits, die in der Vielzahl von Hashes verwendet wird, und einer Identifikation der ersten Speichersteuerung umfassen. In einem Beispiel kann das Verfahren ferner das Zugreifen auf eine von der Speichersteuerung gesteuerte Speichervorrichtung basierend auf der komprimierten Adresse umfassen. In einem Beispiel kann das Verfahren ferner das Programmieren einer Vielzahl von Konfigurationsregistern umfassen, um die Sätze der Vielzahl von Adressbits zu identifizieren, die in jeweiligen der Vielzahl von Hashes enthalten sind. In einer Ausführungsform kann das Programmieren das Programmieren der Vielzahl von Konfigurationsregistern mit Bitmasken umfassen, die die Sätze der Vielzahl von Adressbits identifizieren. In einem Beispiel umfasst das Verfahren ferner das Programmieren einer Vielzahl von Konfigurationsregistern, um die Vielzahl der Vielzahl von Adressbits zu identifizieren, die gelöscht werden. In einer Ausführungsform umfasst das Programmieren das Programmieren der Vielzahl von Konfigurationsregistern mit One-Hot-Bit-Masken.
  • Mehrere Tapeouts aus einer gemeinsamen Datenbank
  • Integrierte Schaltungen schließen eine Vielzahl digitaler Logikschaltungen und/oder Analogschaltungen ein, die auf einem einzelnen Halbleitersubstrat oder „Chip“ integriert sind Eine große Vielfalt integrierter Schaltungen existiert von Hardware mit fester Funktion über Mikroprozessoren bis zu Systemen auf einem Chip (SOCs), die Prozessoren, integrierte Speichersteuerungen und eine Vielzahl anderer Komponenten einschließen, die einen hochintegrierten Chip bilden, der das Zentrum eines Systems sein kann.
  • Eine gegebene integrierte Schaltung kann zur Verwendung in einer Vielzahl von Systemen (z. B. eine Komponente „von der Stange“) ausgelegt sein. Die gegebene integrierte Schaltung kann einen Satz von Komponenten einschließen, die es ermöglichen, in den verschiedenen Systemen verwendet zu werden, aber ein besonderes System muss nicht alle Komponenten oder die volle Funktionalität und/oder die Leistung aller Komponenten erfordern. Die zusätzliche(n) Komponenten/Funktionalität werden/wird effektiv verschwendet, versteckte Kosten und ein Stromverbraucher (mindestens eine Leckleistung) im System. Für tragbare Systeme, die mindestens manchmal mit einer begrenzten Stromversorgung (z. B. einer Batterie) arbeiten, im Gegensatz zu der im Wesentlichen unbegrenzten Versorgung einer Wandsteckdose, führt die ineffiziente Verwendung von Leistung zu einer ineffizienten Verwendung der begrenzten Versorgung und sogar inakzeptablen kurzen Zeiten zwischen den Ladeanforderungen für die begrenzte Versorgung.
  • Das Anpassen integrierter Schaltungsfunktionalität an die Anforderungen eines gegebenen Systems ist daher wichtig, um ein qualitativ hochwertiges Produkt herzustellen. Das benutzerdefinierte integrierte Schaltungsdesign für viele unterschiedliche Systeme bringt jedoch auch Kosten in Bezug auf Design und Validierungsaufwand für jede integrierte Schaltung mit sich.
  • In einer Ausführungsform unterstützen eine Methodik und ein Design einer integrierten Schaltung mehr als ein Tape-Out und letztlich die Herstellung verschiedener Implementierungen der integrierten Schaltung basierend auf einer gemeinsamen Designdatenbank. Das Design kann eine vollständige Instanz unterstützen, in der alle in dem Design enthaltenen Schaltungskomponenten in dem hergestellten Chip eingeschlossen sind, sowie eine oder mehrere partielle Instanzen, die eine Teilmenge der Schaltungskomponenten in dem hergestellten Chip einschließen. Die partiellen Instanzen können auf kleineren Dies hergestellt werden, aber die Schaltungskomponenten und ihre physische Anordnung und Verdrahtung mit der partiellen Instanz können dieselbe wie der entsprechende Bereich innerhalb der vollständigen Instanz sein. Das heißt, die partielle Instanz kann erzeugt werden, indem ein Abschnitt des Bereichs der vollständigen Instanz und deren Komponenten aus der Designdatenbank entfernt wird, um die partielle Instanz zu erzeugen. Die Arbeit des Entwerfens, Verifizierens, Synthetisierens, Durchführens einer Zeitsteuerungsanalyse, Durchführens von Designregeln, die eine elektrische Analyse durchführen, usw. kann über die vollständige Instanz und die partiellen Instanzen geteilt werden. Zusätzlich kann ein integrierter Schaltungs-Chip, der für eine Vielzahl von Produkten mit variierenden Rechenanforderungen geeignet ist, Formfaktoren, Kostenstrukturen, Stromversorgungsbeschränkungen usw. in einer Ausführungsform aus demselben Designprozess unterstützt werden.
  • Zum Beispiel kann die vollständige Instanz eine gewisse Anzahl von Recheneinheiten (z. B. zentrale Verarbeitungseinheit (CPU)-Prozessoren, Grafikverarbeitungseinheiten (GPUs), Co-Prozessoren, die an die CPU-Prozessoren gebunden sind, andere Spezialprozessoren wie digitale Signalprozessoren, Bildsignalprozessoren usw. einschließen.) Partielle Instanzen können weniger Recheneinheiten einschließen. Die vollständige Instanz kann eine gewisse Menge an Speicherkapazität über eine Vielzahl von Speichersteuerungen einschließen, und die partiellen Instanzen können weniger Speichersteuerungen einschließen, die eine geringere Speicherkapazität unterstützen. Die vollständige Instanz kann eine gewisse Anzahl von Eingangs-Ausgangs (E/A)-Vorrichtungen und/oder Schnittstellen (auch als Peripheriegeräte/Schnittstellen oder einfach Peripheriegeräte bezeichnet) einschließen. Die partielle Instanz kann weniger E/A-Vorrichtungen/S chnittstellen aufweisen.
  • In einer Ausführungsform können die partiellen Instanzen ferner einen Stub-Bereich einschließen. Der Stub-Bereich kann Terminierungen für Eingangssignale an die Schaltungskomponenten bereitstellen, die in den partiellen Instanzen enthalten sind, wobei die Quellen für diese Eingangssignale in der vollständigen Instanz Schaltungskomponenten im entfernten Bereich sind und somit die Eingangssignale nicht in Abwesenheit des Stub-Bereichs verbunden sind. Ausgangssignale von den Schaltungskomponenten zu Schaltungskomponenten im entfernten Bereich können zumindest den Rand des Stubs erreichen und können unverbunden sein. In einer Ausführungsform kann der Stub-Bereich eine Metallisierung einschließen, um die Eingangssignale mit Strom- (digitale Eins) oder Masse (digitale Null)-Drähten (z. B. Strom- und Erdungsnetze) wie erforderlich zu verbinden, um eine ordnungsgemäße Funktion der Schaltungskomponenten in der partiellen Instanz bereitzustellen. Zum Beispiel kann ein Stromverwaltungsblock in der partiellen Instanz Eingaben von den entfernten Schaltungskomponenten empfangen, und die Eingänge können an Strom oder Masse gebunden sein, um anzuzeigen, dass die entfernten Schaltungskomponenten ausgeschaltet, frei sind usw., sodass der Stromverwaltungsblock nicht auf die Antwort de entfernten Schaltungskomponente wartet, wenn die Leistungszustände usw. geändert werden. In einer Ausführungsform kann der Stub-Bereich nur eine Metallisierung (Verdrahtung) einschließen. Das heißt, der Stub-Bereich kann aktive Schaltlogiken (z. B. Transistoren, die in dem Halbleitersubstrat ausgebildet sind) ausschließen. Die Metallisierungsschichten (oder Metallschichten) sind über der Oberfläche des Halbleitersubstrats ausgebildet, um die Drahtverbindung zwischen aktiven Schaltungselementen bereitzustellen (oder um die digitalen Eins-/Nullwerte in dem Stub-Bereich bereitzustellen). Das Verwalten der Designs partieller Instanzen auf diese Art und Weise kann das Ausmaß der Verifizierung der partiellen Instanzen in Bezug auf den Aufwand in der vollständigen Instanz minimieren. Zum Beispiel muss eine zusätzliche Zeitsteuerungsüberprüfung nicht erforderlich sein, eine zusätzliche Verifizierung des physischen Designs kann minimal sein usw.
  • 69 ist ein Blockdiagramm, das eine Ausführungsform einer vollständigen Instanz und mehrerer partieller Instanzen einer integrierten Schaltung veranschaulicht. Die vollständige Instanz der integrierten Schaltung wird durch die geschweifte Klammer G12 („Chip 1“) angezeigt, und partielle Instanzen der integrierten Schaltung sind durch geschweifte Klammern G14 und G16 („Chip 2“ und „Chip 3“) angegeben. Die vollständige Instanz, Chip 1, schließt eine Vielzahl von Schaltungskomponenten G10AG10D ein. Die physischen Standorte der Schaltungskomponenten G10A-G10D auf einer Oberfläche eines Halbleitersubstratchips oder -dies (BezugszeichenG 18) für die vollständige Instanz sind durch die Platzierung der Schaltungskomponenten 10A-10D angegeben. 69 ist eine vereinfachte Darstellung und es kann mehr Schaltungskomponenten geben und die physische Anordnung kann dann mehr variiert werden als in 69 gezeigt. Verschiedene Verschaltungen zwischen den Schaltungskomponenten G10A-G10D werden für die Kommunikation zwischen Komponenten verwendet, die in 69 nicht gezeigt sind. Die Verschaltung sowie die Verschaltung innerhalb der Schaltungskomponenten G10A-G10D selbst können in Metallisierungsschichten oberhalb der Halbleitersubstratoberfläche implementiert werden.
  • Jede partielle Instanz entspricht einer „Trennlinie“ G20A-G20B in 69. Die Trennlinie teilt diese Schaltungskomponenten G10A-G10D, die in der vollständigen Instanz von Schaltungskomponenten G10A-G10D enthalten sind, die in den verschiedenen partiellen Instanzen enthalten sind. Somit ist beispielsweise Chip 2 durch die Trennlinie G20A definiert und schließt Schaltungskomponenten G10A-G10C, nicht jedoch die Schaltungskomponente G10D ein. In ähnlicher Art und Weise ist Chip 3 durch die Trennlinie G20B definiert und schließt Schaltungskomponenten G10A-G10B, aber nicht die Schaltungskomponenten G10C-G10D ein. Die Trennlinien können in der Designdatenbank definiert sein oder können Teil des Designprozesses sein, können jedoch nicht explizit in der Designdatenbank dargestellt werden.
  • Im Allgemeinen kann die Designdatenbank eine Vielzahl von Computerdateien umfassen, die Beschreibungen der Schaltungskomponenten G10A-G10D und ihrem Verbindungspunkt speichern. Die Designdatenbank kann zum Beispiel Beschreibungen der Registerübertragungsebene (RTL-Beschreibungen) der Schaltungen einschließen, die in der Hardwarebeschreibungssprache (HDL), wie Verilog, VHDL usw., ausgedrückt werden. Die Designdatenbank kann Schaltungsbeschreibungen aus einem Schaltungseditor-Tool für Schaltungen einschließen, die direkt implementiert sind, anstatt aus den RTL-Beschreibungen unter Verwendung einer Bibliothek von Standardzellen synthetisiert sind. Die Designdatenbank kann Netzlisten einschließen, die sich aus der Synthese ergeben, die Standardzellinstanzen und ihre Verbindungspunkte beschreiben. Die Designdatenbank kann physische Layoutbeschreibungen der Schaltungskomponenten und ihrer Verbindungspunkte einschließen und kann die Tape-Out-Beschreibungsdateien einschließen, welche die integrierten Schaltungen in Bezug auf geometrische Formen und Schichten beschreiben, die verwendet werden können, um Masken für den Herstellungsprozess integrierter Schaltungen zu erzeugen. Die Tape-Out-Beschreibungsdateien können im Graphic-Design-System-(GDSII)-Format, im Open-Artwork-System-Interchange-Standard-(OASIS)-Format usw. ausgedrückt werden. Jede Kombination des Vorstehenden kann in der Designdatenbank enthalten sein.
  • Die Trennlinien G20A-G20B teilen den Bereich Chip G18 in Teilbereiche, innerhalb derer Teilmengen der Schaltungskomponenten G10A-G10D instanziiert sind. Zum Beispiel teilt die Trennlinie G20B den Bereich Chip G18 in einen ersten Teilbereich (über der Linie G20B wie in 69 ausgerichtet) und einen zweiten Teilbereich (unterhalb der Linie G20B). Die Trennlinie G20A teilt den zweiten Teilbereich ferner in dritte und vierte Teilbereiche, wobei der dritte Teilbereich dem ersten Teilbereich benachbart ist oder an diesem anliegt. Die Kombination des ersten Teilbereichs und des zweiten Teilbereichs stellt die vollständige Instanz dar. Der erste Teilbereich allein (zusammen mit einem Stub-Bereich) stellt die kleinste partielle Instanz (Chip 3) dar. Der erste Teilbereich und der dritte Teilbereich stellen die andere partielle Instanz in diesem Beispiel (Chip 2) dar.
  • Die physischen Standorte von Schaltungskomponenten innerhalb eines gegebenen Teilbereichs und der Verbindungspunkt innerhalb der Schaltungskomponenten und zwischen den Schaltungskomponenten müssen sich zwischen der vollständigen Instanz und den partiellen Instanzen nicht ändern. Wenn also die Schaltungskomponenten innerhalb der vollständigen Instanz Timing-Anforderungen, physische Designanforderungen und elektrische Anforderungen für eine erfolgreiche Herstellung und Verwendung der vollständigen Instanz erfüllen, sollten die gleichen Anforderungen auch durch die partiellen Instanzen zum größten Teil erfüllt werden. Das physische Design und elektrische Anforderungen innerhalb der Stub-Bereiche müssen verifiziert werden, und gewisse Anforderungen an physische Designanforderungen können an die Teilbereiche wie Eckausschlüsse, gesteuerte Flip-Chip-Verbindungs (C4)-Pufferausschlusszonen usw. angewendet werden, wie nachstehend erörtert. Sobald die vollständige Instanz verifiziert und für Tape-out bereit ist, kann in einer Ausführungsform das Tape-Out aus den partiellen Instanzen mit minimalem Aufwand fortfahren.
  • 70-72 veranschaulichen die partiellen Instanzen und die vollständige Instanz für die in 69 gezeigte Ausführungsform. 72 ist die vollständige Instanz und schließt somit die Schaltungskomponenten G10A-G10D ein. 70 und 71 entsprechen Chip 3 bzw. Chip 2. Somit schließt die partielle Instanz in 70 die Schaltungskomponenten G10A-G10B aus dem ersten Teilbereich sowie einen Stub-Bereich G22 (Stub 1) ein. Die partielle Instanz in 71 schließt die Schaltungskomponenten G10A-G10B aus dem ersten Teilbereich, die Schaltungskomponente G10C aus dem zweiten Teilbereich und einen Stub-Bereich G24 (Stub 2) ein.
  • Eine Schaltungskomponente kann eine beliebige Gruppe von Schaltungen sein, die angeordnet sind, um eine bestimmte Komponente des IC (z. B. einen Prozessor wie eine CPU oder GPU, einen Cluster von Prozessoren oder GPUs, eine Speichersteuerung, ein Kommunikationsgewebe oder einen Abschnitt davon, eine Peripherievorrichtung oder eine periphere Schnittstellenschaltung usw.) zu implementieren. Eine gegebene Schaltungskomponente kann eine hierarchische Struktur aufweisen. Zum Beispiel kann eine Prozessorclusterschaltungskomponente mehrere Instanzen eines Prozessors aufweisen, die Kopien desselben Prozessordesigns sein können, die mehrmals innerhalb des von dem Cluster belegten Bereichs platziert sind.
  • Gemäß dieser Beschreibung kann ein Verfahren das Definieren, in einer Designdatenbank, die einer integrierten Schaltungsdesign entspricht, einen Bereich, der von dem integrierten Schaltungsdesign belegt werden soll, wenn sie auf einem Halbleitersubstrat hergestellt wird, umfassen. Zum Beispiel kann der Bereich der Bereich der vollständigen Instanz sein, wie in 69 und 72 gezeigt. Das Verfahren kann ferner das Definieren einer Trennlinie (die eine von mehreren Trennlinien sein kann) umfassen. Die Trennlinie kann den Bereich in einen ersten Teilbereich und einen zweiten Teilbereich abgrenzen, wobei eine Kombination des ersten Teilbereichs und des zweiten Teilbereichs die vollständige Instanz darstellt. Der erste Teilbereich und ein Stub-Bereich stellen eine partielle Instanz der integrierten Schaltung dar, die weniger Schaltungskomponenten als die vollständige Instanz einschließt. In der Designdatenbank ist ein physischer Standort einer Vielzahl von Schaltungskomponenten, die sowohl in der vollständigen Instanz als auch in der partiellen Instanz der integrierten Schaltung enthalten sind, in dem ersten Teilbereich definiert. Der relative Standort der Vielzahl von Schaltungskomponenten innerhalb des ersten Teilbereichs und der Verbindungspunkt der Vielzahl von Schaltungskomponenten innerhalb des ersten Teilbereichs können in der vollständigen Instanz und der partiellen Instanz unverändert sein. Ein physischer Standort einer anderen Vielzahl von Schaltungskomponenten, die in der vollständigen Instanz enthalten sind, aber von der partiellen Instanz ausgeschlossen sind, ist in dem zweiten Teilbereich definiert. In der Designdatenbank ist auch ein Stub-Bereich definiert. Der Stub-Bereich kann Abschlüsse für Drähte einschließen, die andernfalls die Trennlinie zwischen dem ersten und dem zweiten Teilbereich durchlaufen würden. Der Stub-Bereich kann einen korrekten Betrieb der Vielzahl von Schaltungskomponenten in dem ersten Teilbereich in Abwesenheit des zweiten Teilbereichs in der partiellen Instanz sicherstellen. Ein erster Datensatz für die vollständige Instanz kann unter Verwendung des ersten Teilbereichs und des zweiten Teilbereichs erzeugt werden, wobei der erste Datensatz die vollständige Instanz für die Herstellung der vollständigen Instanz definiert: Ein zweiter Datensatz für die partielle Instanz kann auch unter Verwendung des ersten Teilbereichs und des Stub-Bereichs erzeugt werden. Der zweite Datensatz definiert die partielle Instanz zur Herstellung der partiellen Instanz. In einem Beispiel kann das Verfahren ferner das Definieren einer zweiten Trennlinie in dem zweiten Teilbereich, das Teilen des zweiten Teilbereichs in einen dritten Teilbereich und einen vierten Teilbereich umfassen. Der dritte Teilbereich kann an den ersten Teilbereich angrenzen, und der dritte Teilbereich und der erste Teilbereich können eine zweite partielle Instanz der integrierten Schaltung darstellen. Das Verfahren kann ferner das Erzeugen eines dritten Datensatzes für die zweite partielle Instanz unter Verwendung des ersten Teilbereichs, des dritten Teilbereichs und eines zweiten Stub-Bereichs einschließen. Der dritte Datensatz definiert die zweite partielle Instanz zur Herstellung der zweiten partiellen Instanz.
  • Wie oben erwähnt, kann der Stub-Bereich Schaltlogik ausschließen. Zum Beispiel kann der Stub-Bereich aktive Schaltlogik wie Transistoren oder andere in dem Halbleitersubstrat ausgebildete Schaltungen ausschließen. Der Stub-Bereich kann Schaltungen ausschließen, die ebenfalls in den Metallisierungsschichten gebildet werden können (z. B. explizite Widerstände, Induktoren oder Kondensatoren). Während die Metallisierungsschichten parasitäre Eigenschaften aufweisen (z. B. Widerstand, Induktivität und Kapazität), können explizit definierte Schaltungen zugelassen werden. Der Stub-Bereich kann nur Verdrahtung in einer oder mehreren Metallisierungsschichten über einer Oberfläche des Halbleitersubstrats einschließen.
  • Ein weiteres Verfahren kann das Empfangen des ersten Datensatzes und des zweiten Datensatzes einschließen, z. B. an einer Halbleiterherstellungsanlage oder „Gießerei“. Das Verfahren kann ferner das Herstellen einer ersten Vielzahl der vollständigen Instanz der integrierten Schaltung basierend auf dem ersten Datensatz und das Herstellen einer zweiten Vielzahl der partiellen Instanz der integrierten Schaltung basierend auf dem zweiten Datensatz einschließen.
  • Eine integrierte Schaltung, die eine partielle Instanz gemäß dieser Offenbarung implementiert, kann eine Vielzahl von Schaltungskomponenten umfassen, die physisch auf einer Oberfläche eines Halbleitersubstrats angeordnet sind, das die integrierte Schaltung bildet; und eine Vielzahl von Drahtabschlüssen entlang einer einzelnen Kante der Oberfläche (z. B. der Stub-Bereich). Die Vielzahl von Drahtabschlüssen kann elektrisch mit einer Vielzahl von Versorgungsdrähten der integrierten Schaltung verbunden sein, um feste digitale Logikpegel auf Drähten bereitzustellen, die Eingänge in eine oder mehrere der Vielzahl von Schaltungskomponenten sind. Die Stromversorgungsdrähte können Teil eines Stromversorgungsnetzes (z. B. Strom und/oder Masse) in den Metallisierungsschichten der integrierten Schaltung sein. Die Strom- und Erdungsnetze können auch als Strom- und Erdungsnetze bezeichnet werden. Die Eingangsdrähte, die durch die Drahtabschlüsse terminiert werden, sind ausgerichtet, um die einzelne Kante zu kreuzen, und weisen keine Schaltung auf, die konfiguriert ist, um die Drähte innerhalb der integrierten Schaltung anzusteuern (z. B. werden die Drähte in der vollständigen Instanz von den Schaltungskomponenten in dem zweiten Teilbereich angetrieben, die in der partiellen Instanz nicht vorhanden sind). Der Bereich entlang der einzelnen Kante, der die Vielzahl von Drahtabschlüssen einschließt, schließt auch aktive Schaltungselemente aus. Zum Beispiel kann der Bereich entlang der einzelnen Kante nur Verdrahtung in einer oder mehreren Metallisierungsschichten über einer Oberfläche des Halbleitersubstrats einschließen.
  • Die hierin beschriebene Methodik kann eine Vielzahl von Bereichen des Gesamtdesignprozesses für eine integrierte Schaltung beeinflussen. Beispielsweise ist die Lageplanung ein Element des Designprozesses, bei dem die verschiedenen Schaltungskomponenten Bereichen auf dem Halbleiterteilzustand zugeordnet sind. Während der Lageplanung können die Existenz der partiellen Instanzen und der Standort der Trennlinien berücksichtigt werden, wodurch sichergestellt wird, dass die Schaltungskomponenten, die in allen Instanzen enthalten sind, in dem ersten Teilbereich enthalten sind, und andere Schaltungskomponenten in dem zweiten Teilbereich (oder dritten und vierten Teilbereich usw.) enthalten sind. Zusätzlich kann die Form der Teilbereiche sorgfältig ausgelegt werden, um eine effiziente Nutzung des Bereichs sowohl in der vollständigen Instanz als auch in den partiellen Instanzen bereitzustellen. Hauptbusse oder ein anderer Verbindungspunkt, der eine Kommunikation zwischen Schaltungskomponenten während der gesamten Instanz bereitstellen kann, können dazu ausgelegt sein, die Kommunikation in den verschiedenen Instanzen korrekt zu verwalten (z. B. können die Busse in dem Stub-Bereich terminiert sein oder in dem Stub-Bereich unverbunden sein, und somit sollten die Kommunikationen nicht in Richtung des Stub-Bereichs übertragen werden). Der Lageplan kann auch die Tape-Out-Anforderungen sowohl für die vollständige Instanz als auch für die partiellen Instanzen berücksichtigen (z. B. verschiedene Ausschlusszonen, wie nachstehend ausführlicher erörtert). Zusätzlich kann der Lageplan versuchen, die Anzahl der Drähte zu minimieren, welche die Trennlinie durchlaufen, um die Verifizierung zu vereinfachen, dass die partiellen Instanzen korrekt arbeiten.
  • Eine Berücksichtigung in einer Ausführungsform kann in einer Ausführungsform die Definition gewisser kritischer Verbindungen einschließen, die durch das Trennen in partielle Instanzen betroffen werden könnten. Taktverbindungspunkte und Analogverbindungspunkte können Beispiele sein. Der Taktverbindungspunkt (oder „Taktbaum“) ist häufig so ausgelegt, dass der Abstand und die elektrische Last von dem Taktgenerator oder der Taktquelle zu den Taktterminierungen an verschiedenen Zustandselementen in den Schaltungskomponenten ungefähr gleich oder „ausgewogen“ ist. Die Zustandselemente können z. B. Flip-Flops („Flops“), Register, Latches, Speicherarrays und andere getaktete Speichervorrichtungen einschließen.
  • Um das Gleichgewicht unter den verschiedenen Instanzen der integrierten Schaltungsdesigns aufrechtzuerhalten, können unabhängige Taktbäume zwischen lokalen Taktquellen in jedem Teilbereich und den Zustandselementen innerhalb dieses Teilbereichs definiert werden. Zum Beispiel ist 73 ein Blockdiagramm, das eine Ausführungsform der vollständigen Instanz der integrierten Schaltung (Chip 18) und der Trennlinien G20A-G20B veranschaulicht, die Teilbereiche der vollständigen Instanz zum Trennen in die partiellen Instanzen abgrenzen. Die lokale(n) Taktquelle(n) G30A-G30C ist/sind veranschaulicht, wobei jede unabhängige Taktbäume ansteuert, die durch die Linien innerhalb jedes Teilbereichs veranschaulicht werden. Die Taktbäume müssen die Trennlinien G20A-G20B nicht kreuzen. Das heißt, der Taktbaum innerhalb eines gegebenen Teilbereichs kann innerhalb dieses Teilbereichs verbleiben.
  • Eine Taktquelle kann eine beliebige Schaltung sein, die konfiguriert ist, um ein Taktsignal an die Schaltlogik zu erzeugen, die mit ihrem Taktbaum gekoppelt ist. Zum Beispiel kann eine Taktquelle eine Phasenregelschleife (PLL), eine Verzögerungssperrschleife (DLL), eine Taktteilerschaltung usw. sein. Die Taktquelle kann mit einem Takteingang an die integrierte Schaltung gekoppelt sein, auf der ein externes Taktsignal bereitgestellt wird, wobei die Taktquelle sich in der Frequenz multiplizieren oder sich in der Frequenz dividieren kann, während die Phase oder die Taktkanten zu dem externen Signal gesperrt werden.
  • Somit kann ein Verfahren ferner das Definieren, in dem ersten Teilbereich, eines oder mehrerer erster Taktbäume, um Takte innerhalb des ersten Teilbereichs zu verteilen, und, in dem zweiten Teilbereich, das Definieren eines oder mehrerer zweiter Taktbäume zu verteilten Takten mit dem zweiten Teilbereich umfassen. Der eine oder die mehreren ersten Taktbäume können in der vollständigen Instanz von dem einen oder den mehreren zweiten Taktbäumen elektrisch isoliert sein. Die Taktbäume können physisch unabhängig sein, wie in 73 gezeigt (z. B. mit verschiedenen lokalen Taktquellen verbunden). Die Taktbäume müssen eine Trennlinie nicht in einen anderen Teilbereich kreuzen. In einem Herstellungsverfahren kann der erste Datensatz ferner einen oder mehrere erste Taktbäume, um Takte innerhalb des ersten Teilbereichs zu verteilen, und einen oder mehrere zweite Taktbäume umfassen, um Takte mit dem zweiten Teilbereich zu verteilen, und wobei der eine oder die mehreren ersten Taktbäume von dem einen oder den mehreren zweiten Taktbäumen in der vollständigen Instanz elektrisch isoliert sein können.
  • In einer Ausführungsform kann eine integrierte Schaltung einen oder mehr erste Taktbäume umfassen, um Takte innerhalb eines ersten Teilbereichs des ersten Bereichs zu verteilen; und einen oder mehrere zweite Taktbäume zu verteilten Takten mit dem zweiten Teilbereich. Der eine oder die mehreren ersten Taktbäume können von dem einen oder den mehreren zweiten Taktbäumen elektrisch isoliert sein.
  • 74 ist ein Blockdiagramm einer Ausführungsform des vollständigen Dies G18, der durch die Trennlinien G20A-G20B abgegrenzt ist, und die Bereitstellung von lokalen analogen Pads G32A-G32C innerhalb jedes Teilbereichs, der durch die Trennlinien G20A-G20B definiert ist. Die analogen Pads G32A-G32C können Anschlusspunkte für analoge Eingänge zu dem Chip bereitstellen. Analoge Signale weisen häufig spezielle Anforderungen auf, wie das Abschirmen von digitalem Rauschen, das die Genauigkeit und Funktionalität der analogen Signale beeinflussen kann, die im Gegensatz zu digitalen Signalen, die nur bei den digitalen Werten und nicht in dem Übergang dazwischen von Bedeutung sind, kontinuierliche Wertesignale sind. Das Sicherstellen, dass die Analoganforderungen innerhalb jedes Teilbereichs erfüllt sind, kann das Design der integrierten Schaltung insgesamt vereinfachen. In einer Ausführungsform kann, wenn es keine Verwendung für analoge Signale innerhalb eines gegebenen Teilbereichs gibt, dieser Teilbereich analoge Pads und Signalführung ausschließen.
  • Somit kann ein Verfahren ferner das Definieren, in dem ersten Teilbereich, eines oder mehrerer erster analoger Eingänge, und das Definieren, in dem zweiten Teilbereich, eines oder mehrerer zweiter analoger Eingänge einschließen. Der eine oder die mehreren ersten analogen Eingänge können mit dem ersten Teilbereich verbleiben und der eine oder die mehreren zweiten analogen Eingänge können innerhalb des zweiten Teilbereichs verbleiben. Das heißt, analoge Signale auf den Eingängen oder von den Eingängen können auf Drähten transportiert werden, welche die Trennlinien G20A-G20B nicht kreuzen. In einem Herstellungsverfahren kann der erste Datensatz ferner einen oder mehrere erste analoge Eingänge in dem ersten Teilbereich einschließen, wobei der eine oder die mehreren ersten analogen Eingänge mit dem ersten Teilbereich verbleiben, und wobei der erste Datensatz ferner einen oder mehrere zweite analoge Eingänge in dem zweiten Teilbereich einschließt, wobei der eine oder die mehreren zweiten analogen Eingänge innerhalb des zweiten Teilbereichs verbleiben.
  • Gemäß dieser Offenbarung kann eine integrierte Schaltung eine erste Vielzahl von Schaltungskomponenten, die physisch innerhalb eines ersten Bereichs einer Oberfläche eines Halbleitersubstrats angeordnet sind, das die integrierte Schaltung bildet, und eine zweite Vielzahl von Schaltungskomponenten umfassen, die physisch innerhalb eines zweiten Bereichs der Oberfläche des Halbleitersubstrats angeordnet sind, das die integrierte Schaltung bildet. Ein oder mehrere erste analoge Eingänge können innerhalb des ersten Bereichs bereitgestellt werden, wobei der eine oder die mehreren ersten analogen Eingänge von der ersten Vielzahl von Schaltungskomponenten isoliert sind. Ein oder mehrere zweite analoge Eingänge innerhalb des zweiten Bereichs, wobei der eine oder die mehreren zweiten analogen Eingänge von der zweiten Vielzahl von Schaltungskomponenten isoliert sind.
  • Ein weiteres Merkmal integrierter Schaltungen, das in Betracht gezogen werden kann, ist das Design für die Teststrategie (DFT). DFT schließt im Allgemeinen einen Anschluss oder Anschlüsse ein, auf dem eine DFT-Schnittstelle definiert ist, wie eine Schnittstelle, die mit den Spezifikationen der gemeinsamen Testzugriffsgruppe (JTAG) kompatibel ist. DFT kann das Definieren von Abtastketten von Zustandselementen in dem Design einschließen, sodass der Zustand ein- und ausgescannt werden kann, und Abtastketten können zum Beispiel definiert werden, um innerhalb eines gegebenen Teilbereichs zu verbleiben. Innerhalb jedes Teilbereichs können separate DFT-Anschlüsse vorgesehen sein, um die Kommunikation durch die Trennlinien hindurch so weit wie möglich zu minimieren. Wenn eine Kommunikation durch die Trennlinie erforderlich ist, können diese Signale (Eingaben an einen Teilbereich) und frei verbundene (Ausgänge eines Teilbereichs) in dem Stub-Bereich, ähnlich anderen Signalen, terminiert werden. In einer Ausführungsform können Abtastnetzwerke und andere DFT-Netzwerke als hierarchische Ringe ausgebildet sein, sodass die Abschnitte in den entfernten Schaltungskomponenten vom DFT-Netzwerk getrennt werden können, ohne dass sich das verbleibende Netzwerk weiter auf das verbleibende Netzwerk auswirkt.
  • In einer Ausführungsform können einige Schaltungskomponenten innerhalb der vollständigen Instanz mehrfach instanziiert werden. Eine oder mehrere der Instanzen können sich in den Teilbereichen befinden, die nicht in der einen oder den mehreren der partiellen Instanzen enthalten sind. Diese Schaltungskomponenten können dazu ausgelegt sein, um allen Anforderungen (Timing, physisch, elektrisch) an jedem Ort einer Instanz zu erfüllen und können somit für einige andere Standorte überdimensioniert sein (z. B. kann die Schaltungskomponente für einen Worst-Case-Taktversatz über ihre Standorte hinaus ausgelegt sein usw.). Zusätzlich können die partiellen Instanzen eine unterschiedliche Verpackungslösung aufweisen, die zusätzliche Designs erfordern kann, um Unterschiede in den Paketen zu handhaben (z. B. unterschiedliche IR-Spannungsabfälle).
  • In einer Ausführungsform kann die Gießerei die Fertigung bestimmter „nichtlogischer“ Zellen auf dem Halbleitersubstrat erfordern. Diese Zellen sind nicht Teil der integrierten Schaltung selbst, sondern können von der Gießerei verwendet werden, um den Herstellungsprozess zu verfeinern. Die für die Gießerei erforderlichen Zellen können strenge Regeln aufweisen und können von der Die-Größe unabhängig sein, und somit kann die Planung der Platzierung dieser Zellen in dem Lageplan der vollständigen Instanz erforderlich sein, sodass sie ordnungsgemäß in der (den) partiellen Instanz(en) angeordnet sind.
  • 75 veranschaulicht eine Ausführungsform einer weiteren Überlegung für das integrierte Schaltungsdesign: Ausschlussbereiche (oder Ausschlusszonen) verschiedener Typen. Auf der linken Seite in 75 ist die vollständige Instanz (Chip 1) des vollen Dies G18 zusammen mit den partiellen Instanzen auf der rechten Seite, Chip 3 oben (mit seinem Standort in der vollständigen Instanz, oberhalb der durch die gepunkteten Linien G34 angezeigten Trennlinie G20B) und Chip 2 unten (mit seinem Standort in der vollständigen Instanz, oberhalb der durch die Punkt- und Strichlinien G36 angezeigte Trennlinie G20A). Für jede Instanz weisen die Ecken der Chips Ausschlusszonen auf, in denen eine Schaltlogik nicht zulässig ist (oder viel strengere Designregeln befolgen muss), als andere Teile der Halbleitersubstratoberfläche. Die Eckausschlusszonen können definiert werden, da die mechanische Belastung der Ecken des Halbleiterchips größer sein kann als an anderen Stellen des Chips. Die Eckausschlusszonen sind durch kreuzschraffierte Flächen gekennzeichnet, die in 75 mit dem Bezugszeichen G38 gekennzeichnet sind.
  • Dementsprechend weist die vollständige Instanz an jeder ihrer vier Ecken Eckausschlusszonen sowie „Eck“-Ausschlusszonen entlang der Seiten der Chips, an den Ecken der Teilbereiche neben den Trennlinien G20A-G20B auf, welche die Ecken der Chips für die partiellen Instanzen bilden. Die zusätzlichen Eckausschlusszonen können die gleiche Größe wie die Eckausschlusszonen der vollständigen Instanz aufweisen oder können unterschiedlich groß sein, wenn die Größe der Eckausschlusszonen mit der Die-Gesamtgröße übereinstimmt.
  • Somit kann ein Verfahren ferner das Definieren einer Vielzahl von Ausschlusszonen an jeweiligen Ecken des Halbleitersubstrats umfassen, wobei Schaltungskomponenten gemäß den mechanischen Anforderungen eines Herstellungsprozesses von der Vielzahl von Ausschlusszonen ausgeschlossen sind, um die integrierte Schaltung herzustellen. Das Verfahren kann ferner das Definieren zusätzlicher Ausschlusszonen an Ecken des ersten Teilbereichs neben der Trennlinie umfassen, wobei die partielle Instanz Ausschlusszonen an jeweiligen Ecken des Halbleitersubstrats mit der darauf ausgebildeten partiellen Instanz einschließt. Der erste Datensatz in dem Herstellungsverfahren kann eine Vielzahl von Ausschlusszonen an jeweiligen Ecken des Halbleitersubstrats einschließen, wobei Schaltungskomponenten gemäß den mechanischen Anforderungen eines Herstellungsprozesses von der Vielzahl von Ausschlusszonen ausgeschlossen sind, um die integrierte Schaltung herzustellen; und der erste Datensatz kann zusätzliche Ausschlusszonen an Ecken des ersten Teilbereichs neben dem zweiten Teilbereich einschließen, wobei die partielle Instanz Ausschlusszonen an jeweiligen Ecken des Halbleitersubstrats mit der darauf ausgebildeten partiellen Instanz einschließt.
  • Zusätzlich kann eine integrierte Schaltung (z. B. einschließlich einer vollständigen Instanz) eine eine erste Vielzahl von Schaltungskomponenten umfassen, die physisch innerhalb eines ersten Bereichs einer Oberfläche eines Halbleitersubstrats angeordnet sind, das die integrierte Schaltung bildet; eine Vielzahl von Ausschlusszonen an jeweiligen Ecken des Halbleitersubstrats, wobei Schaltungskomponenten gemäß den mechanischen Anforderungen eines Fertigungsprozesses, der zur Herstellung der integrierten Schaltung verwendet wird, aus den mehreren Ausschlusszonen ausgeschlossen sind; und eine weitere Vielzahl von Ausschlusszonen, die von den jeweiligen Ecken entlang eines Paares von nominell parallelen Kanten des Halbleitersubstrats getrennt sind, wobei Schaltungskomponenten von der anderen Vielzahl von Ausschlusszonen ausgeschlossen sind, und wobei die andere Vielzahl von Ausschlusszonen im Wesentlichen gleich groß wie die Vielzahl von Ausschlusszonen ist.
  • 75 veranschaulicht auch die zulässigen Standorte von C4-Höckern auf der vollständigen Instanz und den partiellen Instanzen der integrierten Schaltung, die als doppelt kreuzschraffierte Bereiche in 75, Bezugszeichen G40, gezeigt sind. Bereiche außerhalb der Bereiche, die durch die doppelt kreuzschraffierten Bereiche G40 angezeigt sind, können keine zulässigen Standorte für C4-Höcker (z. B. Ausschlusszonen für C4-Höcker) sein oder es können strengere Regeln für die Platzierung von C4-Höckern in diesen Bereichen vorliegen. Für jede Kante jeder Instanz existieren somit die zulässigen Standorte/Ausschlusszonen. Das heißt, es kann C4-Ausschlusszonen um den Umfang des vollen Die G18 sowie auf beiden Seiten der Trennlinien G20A-G20B geben. Dementsprechend kann ein Verfahren ferner das Definieren einer zweiten Ausschlusszone entlang einer Kante des ersten Teilbereichs, die an den zweiten Teilbereich angrenzt, umfassen, wobei gesteuerte Flip-Chip-Verbindungsanschlüsse (C4-Verbindungen) von der zweiten Ausschlusszone ausgeschlossen sind. In einem Herstellungsverfahren kann der erste Datensatz ferner eine zweite Ausschlusszone entlang einer Kante des ersten Teilbereichs einschließen, die an den zweiten Teilbereich angrenzt, wobei gesteuerte Flip-Chip-Verbindungsanschlüsse (C4-Verbindungen) von der zweiten Ausschlusszone ausgeschlossen sind. In einer Ausführungsform kann eine integrierte Schaltung eine zweite Ausschlusszone entlang einer Linie zwischen der Vielzahl von Ausschlusszonen umfassen, wobei gesteuerte Flip-Chip-Verbindungsanschlüsse (C4-Verbindungen) von der zweiten Ausschlusszone ausgeschlossen sind.
  • 76 ist ein Blockdiagramm, das eine Ausführungsform der Schaltungskomponente G10B und des Stub-Bereichs G22 für die in 70 gezeigte Ausführungsform des Chips 3G veranschaulicht. Ähnliche Verbindungen mit der Schaltungskomponente G10A können ebenfalls bereitgestellt werden, und der Stub-Bereich G24 in 71 kann den Schaltungskomponenten G10A-G10C ähnlich sein. Der Stub-Bereich G22 kann Abschlüsse wie VDD-Abschlüsse G50 (für nach oben zu verbindende Eingänge oder Eingänge, die mit einer binären Eins verbunden werden) und Vss- oder Masse-Abschlüsse G52 (für nach unten zu verbindende Eingänge oder Eingänge, die mit einer binären Null verbunden werden) für die Schaltungskomponente G10B für Eingänge, die durch eine entfernte Schaltungskomponente, die Teil der vollständigen Instanz ist, aber nicht Teil einer partiellen Instanz, die in 76 durch die gepunkteten Linien von den Abschlüssen zu dem Rand des Stub-Bereichs G22 veranschaulicht ist, einschließen. Die Wahl der binären Eins oder der binären Null für eine gegebene Terminierung kann von der logischen Wirkung des Eingangs innerhalb der Schaltungskomponente G10B abhängen. Im Allgemeinen kann die Terminierung als jedweder Wert ausgewählt werden, der bewirkt, dass die Empfangsschaltung ohne weitere Eingabe von der entfernten Schaltungskomponente fortfährt, welche die Eingabe in die vollständige Instanz auslagern würde (z. B. als eine Ausgabe der entfernten Schaltungskomponente). Die Terminierung stellt einen bekannten Wert bereit, wenn eine Antriebsschaltung für das Signal fehlt. Ausgänge der Schaltungskomponente G10B, die mit einer entfernten Schaltungskomponente verbunden wären, können den Stub-BereichG22 (z. B. Bezugszeichen G54 und G56) erreichen, können aber freie Verbindungen (z. B. nicht mit einer Empfangsschaltung verbunden) sein. In der vollständigen Instanz oder einer größeren partiellen Instanz können sich die Ausgangsdrähte G54 und G56 bis zu Schaltungskomponenten erstrecken, die nicht in der partiellen Instanz vorhanden sind (veranschaulicht durch gepunktete Linien in 76).
  • Somit können die Eingänge, die in dem Stub-Bereich terminiert werden, Drähte sein, die sich bis zum Stub-Bereich erstrecken und so ausgerichtet sind, dass sie die Kante der integrierten Schaltung kreuzen, entlang der der Stub-Bereich angeordnet ist. Die Eingänge sind ohne Schaltung, die konfiguriert ist, um die Drähte innerhalb der integrierten Schaltung anzusteuern (z. B. werden die Drähte in der vollständigen Instanz von den Schaltungskomponenten angesteuert, die in der partiellen Instanz nicht vorhanden sind).
  • In anderen Fällen kann es wünschenswert sein, einen lokalen Eingang durch einen Eingang von einer entfernten Schaltungskomponente zu ersetzen. Zum Beispiel kann eine Schleifenrückschaltung, die zum Testen oder einer Ringverbindungsstruktur verwendet wird, die Schleifenrückseite/den -ring lokal in einer partiellen Instanz abschließen. Um derartige Instanzen zu unterstützen, kann die Empfangsschaltungskomponente (z. B. die Schaltungskomponente G10B) die Logikschaltung einschließen, um zwischen dem lokalen Signal und der Eingabe aus der entfernten Komponente auszuwählen. Zum Beispiel kann in 76 die Schaltungskomponente G10B eine Vielzahl von Multiplexern (Muxes) G58 und G60 einschließen. Jeder Mux G58 oder G60 kann mit einem Eingangsdraht gekoppelt sein, der normalerweise von einer Schaltungskomponente stammt, die in der partiellen Instanz nicht vorhanden ist. Der Eingangsdraht kann den Stub-Bereich G22 erreichen, kann aber eine freie Verbindung sein. Alternativ kann der Eingangsdraht, falls gewünscht, in einer binären Eins oder Null terminiert werden. Das Terminieren eines solchen Eingangs kann verhindern, dass er massefrei ist und möglicherweise Strom verschwendet, wenn der massefreie Eingang für einen beträchtlichen Zeitraum zwischen Strom und Masse liegt. Der Mux-Auswahldraht kann auch von dem Stub-Bereich G22 bereitgestellt werden und kann in einer binären 0 (Vss) oder einer binären 1 (VDD) terminiert werden, was den Mux veranlassen kann, den lokalen Draht auszuwählen. Wenn die Quellenschaltungskomponente des Eingangsdrahts vorhanden ist (z. B. in der vollständigen Instanz oder einer größeren partiellen Instanz), kann der Mux-Auswahldraht von der Quellenschaltungskomponente (gepunktete Linie in 76) bereitgestellt werden. In einem solchen Fall kann der Mux-Auswahldraht ein dynamisches Signal sein, das zwischen der lokalen Eingabe und der Eingabe von der Quellenschaltungskomponente nach Wunsch während des Betriebs auswählen kann, oder er kann mit dem gegenüberliegenden Binärwert verbunden werden, wenn er mit dem Mux-Auswahldraht in dem Stub-Bereich G22 verglichen wird.
  • Dementsprechend kann in einer Ausführungsform der Methodik die vollständige Instanz die andere Vielzahl von Schaltungskomponenten in dem zweiten Teilbereich einschließen, die eine Vielzahl von Ausgängen einschließen kann, die eine Vielzahl von Eingängen in der Vielzahl von Schaltungskomponenten in dem ersten Teilbereich sind. Die Vielzahl von Schaltungskomponenten kann eine Vielzahl von Multiplexerschaltungen aufweisen, die jeweilige der Vielzahl von Eingängen als Eingänge aufweisen. Das Verfahren kann das Darstellen einer Vielzahl von Auswahlsignalen für die Vielzahl von Multiplexerschaltungen in dem Stub-Bereich umfassen. Die Vielzahl von Auswahlsignalen kann innerhalb des Stub-Bereichs mit einem Binärwert terminiert werden, der einen unterschiedlichen Eingang der Vielzahl von Multiplexerschaltungen auswählt als die Mux-Eingänge, an die die Vielzahl von Eingängen angeschlossen sind. Die Vielzahl von Auswahlsignalen kann in einer Ausführungsform in dem zweiten Teilbereich mit einem unterschiedlichen Binärwert terminiert werden.
  • In einer Ausführungsform kann eine integrierte Schaltung eine Vielzahl von Schaltungskomponenten umfassen, die physisch auf einer Oberfläche eines Halbleitersubstrats angeordnet sind, das die integrierte Schaltung bildet. Die Vielzahl von Schaltungskomponenten schließt eine Vielzahl von Multiplexerschaltungen ein, wobei eine gegebene Multiplexerschaltung der Vielzahl von Multiplexerschaltungen einen ersten Eingangsdraht, einen zweiten Eingangsdraht und einen Auswahlsteuerdraht aufweist. Die integrierte Schaltung kann ferner einen Bereich entlang einer einzelnen Kante der Oberfläche umfassen, wobei: der Bereich eine elektrische Quelle des Auswahlsteuerdrahtes ist, die zweiten Eingangsdrähte die einzelne Kante der Oberfläche erreichen und unverbunden sind, und die Auswahlsteuerdrähte elektrisch mit Versorgungsdrähten der integrierten Schaltung verbunden sind. Eine Spannung an den Versorgungsdrähten während der Verwendung entspricht einem digitalen Logikpegel, der bewirkt, dass die Vielzahl von Multiplexerschaltungen die ersten Eingangsdrähte als Ausgänge der Vielzahl von Multiplexerschaltungen auswählt.
  • Unter Bezugnahme auf 77 ist ein Blockdiagramm einer Ausführungsform eines Paares integrierter Schaltungen G76 und G78 gezeigt, die vollständige Instanzen des Chips G18 sein können. Die Trennlinien G20A-G20B sind für die integrierte Schaltung G76 gezeigt, und gewisse zusätzliche Details der integrierten Schaltung G76 sind für eine Ausführungsform gezeigt. Insbesondere kann die integrierte Schaltung G76 eine Vielzahl von Netzwerkweichen G70A-G70H einschließen, die Teil eines Kommunikationsnetzes in der integrierten Schaltung G76 sein können. Das Kommunikationsnetz kann ein Beispiel von Schaltungskomponenten sein und kann konfiguriert sein, um eine Kommunikation zwischen anderen Schaltungskomponenten (z. B. Prozessoren, Speichersteuerungen, Peripheriegeräten usw.) bereitzustellen.
  • Die Netzwerkweichen G70A-G70H können unter Verwendung beliebiger Topologie, wie Ring, Netz, Stern usw. miteinander gekoppelt sein. Wenn eine gegebene Kommunikationsnachricht, oder ein Paket, in einer Netzwerkweiche G70A-G70H empfangen wird, kann die Netzwerkweiche G70A-G70H bestimmen, welche Ausgabe das Paket auf das Übertragen des Pakets zu seinem Zielort übertragen soll. Die Richtung kann davon abhängen, auf welcher Instanz der integrierten Schaltung die Netzwerkweichen hergestellt wurden.
  • Wenn zum Beispiel die vollständige Instanz hergestellt wird, kann eine gegebene Netzwerkweiche, wie die Netzwerkweiche G70E, ein Paket entweder nach oben oder unten übertragen, wie in 77 gezeigt (oder wenn eine andere, nicht gezeigte Schaltungskomponente, die mit der Netzwerkweiche G70E gekoppelt ist, ein Ziel des Pakets ist, kann die Netzwerkweiche G70E das Paket an diese Schaltungskomponente übertragen). Wenn jedoch eine partielle Instanz basierend auf der Trennlinie G20A gebildet wird, sendet die Netzwerkweiche G70E keine Pakete nach unten, da dort keine Empfangsschaltung vorhanden ist. In ähnlicher Art und Weise kann die Netzwerkweiche G70F in diesem Szenario keine Pakete nach unten senden. Wenn eine partielle Instanz basierend auf der Trennlinie G20B gebildet wird, können die Netzwerkweichen G70C und G70D keine Pakete in der Abwärtsrichtung übertragen.
  • Dementsprechend kann der Betrieb von mindestens einigen der Netzwerkweichen G70AG70H von der Instanz abhängen. Es kann mehrere Möglichkeiten geben, die Unterschiede zu verwalten. Zum Beispiel kann eine Eingabe an die Weichen die Instanz spezifizieren (Ausgabe durch die Stub-Bereiche oder durch eine Schaltungskomponente in dem Bereich unterhalb der Trennlinie 20B für die vollständige Instanz). In der veranschaulichten Ausführungsform kann eine Routingtabelle oder eine andere programmierbare Ressource G74 in jeder Netzwerkweiche G70A-G70H enthalten sein. Die Routingtabelle G74 kann bei der Initialisierung (z. B. durch Boot-Code oder andere Firmware) basierend auf dem Standort programmiert werden, der gerade vorhanden ist.
  • In ähnlicher Art und Weise können verschiedene Instanzen unterschiedliche Anzahlen von Speichersteuerungen aufweisen (z. B. können die Schaltungskomponenten in den entfernten Teilbereichen Speichersteuerungen einschließen, und es kann zusätzliche Speichersteuerungen in den verbleibenden Teilbereichen geben). Der Speicheradressenort kann auf die Speichersteuerungen abgebildet werden, und somit kann sich die Zuordnung basierend auf der Anzahl der tatsächlich in einer gegebenen vollständigen oder partiellen Instanz vorhandenen Speichersteuerungen ändern. Die Netzwerkweichen G70A-G70H, die Speicherbetriebspakete tragen, können mit Daten programmierbar sein, die Adressabbildung unter Verwendung einer programmierbaren Ressource beschreiben. Andere Schaltungskomponenten, die möglicherweise über die Adressabbildung informiert werden müssen, können in ähnlicher Art und Weise eine programmierbare Ressource aufweisen.
  • In der veranschaulichten Ausführungsform kann das Paar integrierter Schaltungen G76 und G78 konfiguriert sein, um miteinander zu kommunizieren, und so handeln, wie wenn sie ein integriertes Schaltungs-Die wären. Zum Beispiel können die Netzwerkweichen G70A-G70H auf jeder integrierten Schaltung G76 und G78 konfiguriert sein, um über eine Die-zu-Die-Schnittstellenschaltung (D2D-Schnittstellenschaltung) G72 zu kommunizieren, um eine Kommunikationsverbindung durch die integrierten Schaltungen G76 und G78 hinweg zu bilden. Somit kann ein Paket, das entweder aus einem beliebigen integrierten Schaltungs-Die stammt, ein Ziel auf dem anderen integrierten Schaltungs-Die aufweisen und kann über die D2D-Schnittstellenschaltungen G72 an das Ziel übertragen werden, nahtlos und somit im Wesentlichen nicht sichtbar für die im System ausgeführte Software. Die D2D-Schnittstellenschaltungen G72 können Beispiele für die in 1 gezeigte D2D-Schaltung 26 sein.
  • Da die partiellen Instanzen der integrierten Schaltung weniger als eine vollständige Instanz der Schaltlogik einschließen, ist eine der Komponentenschaltungen, die von jeder der partiellen Instanzen entfernt werden kann, die D2D-Schnittstellenschaltung G72. Das heißt, die D2D-Schnittstellenschaltung G72 kann in dem Teilbereich instanziiert werden, der von jeder der partiellen Instanzen entfernt wird (z. B. unterhalb der Trennlinie G20A in der veranschaulichten Ausführungsform).
  • 78 ist ein Flussdiagramm, das verschiedene Abschnitte der Design- und Validierungs-/Verifizierungsmethodik für eine Ausführungsform einer integrierten Schaltung veranschaulicht, die vollständige und partielle Instanzen unterstützt. Die Designdatenbank für die vollständige Instanz ist in der Mitte oben von 78 (Bezugszeichen G80) gezeigt. Die Designdatenbanken für die partiellen Instanzen sind links und rechts von der vollständigen Instanz (Bezugszeichen G82 und G84) gezeigt. Die Designdatenbanken G82 und G84 ziehen den Inhalt für die Teilbereiche, die diese integrierten Schaltungen bilden, aus der Designdatenbank G80, wie durch die Pfeile G86 und G88 angezeigt, zusammen mit den entsprechenden Stub-Bereichen G22 und G24, wie in 78 gezeigt.
  • Die Datenbanken G80, G82 und G84 können unter Verwendung statischer Zeitsteuerungsanalyse analysiert werden, um zu verifizieren, dass die Designs die Zeitanforderungen erfüllen (Block G90), physischer Verifizierung, um zu verifizieren, dass die Designs verschiedene physische Designregeln erfüllen (Block G92), und elektrischer Verifizierung, um zu verifizieren, dass die Designs (zusammen mit dem Paket, das für jedes Design verwendet werden soll, das zwischen den vollständigen und partiellen Instanzen zu verwenden ist), die elektrischen Anforderungen wie die Stromnetzstabilität, die Impedanz usw. erfüllen können (Block G94). Die physischen Designregeln können Merkmale wie minimale Abstände zwischen Vorrichtungen und/oder Verdrahtung in den Verdrahtungsschichten, Vorrichtungsgrößen usw. einschließen. Die physischen Designregeln können auch den Eckausschluss, C4-Höckerausschlüsse usw. einschließen, wie vorstehend erwähnt. Zusätzlich können in einer Ausführungsform zusätzliche „Antennen“-Regeln aufgrund der Ausgänge von Schaltungskomponenten, die in den partiellen Instanzen freie Verbindungen sind, zur Anwendung kommen.
  • Die Ergebnisse der verschiedenen Überprüfungsschritte können für Designänderungen (Engineering-Änderungsbefehle oder ECOs) überprüft und aussortiert werden, die erwartet werden können, um die Ergebnisse in nachfolgenden Durchläufen der verschiedenen Überprüfungen zu verbessern (Triage ECO-Blöcke G96, G98 und G100). Die ECOs können in der Designdatenbank G80 (Pfeile G102, G104 und G106) implementiert sein, unabhängig davon, welche Instanz zum ECO führte. Somit kann die Designdatenbank G80 etwas überdimensioniert sein, wenn die in dem Design erforderliche Worst-Case-Korrektur aus einer der partiellen Instanzen resultiert. Die Designdatenbanken G82 und G84 können aus der Designdatenbank G80 extrahiert werden, nachdem die Änderungen vorgenommen wurden, um die partiellen Instanzen zu aktualisieren, falls Änderungen in einem Teilbereich vorgenommen wurden, der in den partiellen Instanzen enthalten ist.
  • Sobald die verschiedenen Verifizierungen abgeschlossen sind (Blöcke G108, G110 und G 112), können die Tape-Outs für die vollständige Instanz und die partiellen Instanzen durchgeführt werden (Blöcke G 114, G 116, was zu den Datensätzen für jede Instanz führt (Blöcke G120, G122 und G124).
  • In verschiedenen Ausführungsformen kann es zusätzliche Analyse- und Designflüsse geben, aber ähnlich jeder von den verschiedenen Designanstrengungen identifizierten ECOs können in der Designdatenbank G80 der vollständigen Instanzen und dann in den Teildesigndatenbanken G82 und G84 extrahiert werden.
  • Ein weiterer Bereich der integrierten Schaltungsdesignmethodik, der von der Unterstützung für vollständige und partielle Instanzen eines integrierten Schaltungsdesigns betroffen sein kann, ist die Designvalidierung (DV). DV schließt im Allgemeinen das Testen eines integrierten Schaltungsdesigns oder eines Abschnitts davon wie einer gegebenen Schaltungskomponente ein, um sicherzustellen, dass das Design wie erwartet arbeitet und die funktionellen und/oder Leistungsanforderungen für das Design erfüllt. Zum Beispiel kann DV das Definieren eines Prüfstands einschließen, um das Design zu stimulieren und den Betrieb auf erwartete Ergebnisse zu messen. Der Prüfstand kann beispielsweise einen zusätzlichen HDL-Code einschließen, der den Stimulus beschreibt. Um erhebliche Neuarbeit und zusätzliche Ressourcen zu vermeiden, um DV auf allen Ausführungsformen durchzuführen, kann eine konfigurierbare Prüfstandumgebung definiert werden, die jede Instanz abdeckt. Auf Komponentenebene kann die Wiedergabe von Differenzen auf Chip-Ebene innerhalb der Instanzen verwendet werden, um die Komponenten zu testen.
  • 79 ist ein Blockdiagramm, das eine Ausführungsform einer Prüfstandanordnung für die Chip-Ebene DV veranschaulicht. Der Prüfstand kann eine oberste Testebene G170 einschließen, die eine Definitionsaussage ($DEFINE) einschließen kann, die als Chip 1 (vollständige Instanz), Chip 2 (partielle Instanz) oder Chip 3 (partielle Instanz) in diesem Beispiel ausgewählt werden kann. Das heißt, für eine gegebene Simulation kann die $DEFINE-Aussage auf die getestete Instanz (eines der Etiketten Chip 1, Chip 2 oder Chip 3) eingestellt werden. Die oberste Testebene G170 kann ferner die zu testende Vorrichtung (DUT) G172 (z. B. die integrierte Schaltung in ihren partiellen und vollständigen Instanzen) und einen Prüfstand (TB) G174 einschließen.
  • Die DUT G172 kann den Abschnitt der integrierten Schaltung einschließen, der in jeder der Instanzen enthalten ist (z. B. Schaltungskomponenten G10A-G10B in diesem Beispiel, die jeder Instanz gemeinsam sind). Der gemeinsame Abschnitt G176 kann für eine gegebene Simulation uneingeschränkt in der DUT G172 eingeschlossen sein. Je nachdem, welche Instanz in der gegebenen Simulation getestet wird, kann einer der drei zusätzlichen Abschnitte bedingt enthalten sein. Zum Beispiel wird in Chip 1 getestet (und somit die $DEFINE-Aussage, die Chip 1 ist), die anderen Schaltungskomponenten G10C-G10D können eingeschlossen sein (Bezugszeichen G178). Wenn Chip 2 getestet wird (und somit die $DEFINE-Aussage Chip 2 abfragt), können die Schaltungskomponente G10C und der Stub G24 eingeschlossen sein (Bezugszeichen G180). Wenn Chip 3 getestet wird (und somit die $DEFINE-Aussage Chip3 abfragt), kann schlimmstenfalls der Stub G22 eingeschlossen sein (Bezugszeichen G182).
  • Der Prüfstand G174 kann in ähnlicher Art und Weise basierend auf der $DEFINE-Aussage konfigurierbar sein. Der Prüfstand G174 kann einen gemeinsamen Abschnitt G184 einschließen, der dem gemeinsamen Abschnitt G176 entspricht (z. B. Stimulus für den gemeinsamen Abschnitt G176). Andere Abschnitte G184, G186 oder G188 können selektiv basierend auf der $DEFINE-Aussage eingeschlossen sein, die Chip 1, Chip 2 bzw. Chip 3 abfragt. Der Stimulus für die entsprechenden Abschnitte G178, G180 bzw. G182 kann eingeschlossen sein. Das heißt, der Stimulus für die Kombination von Schaltungskomponenten G10C-G10D kann in Abschnitt G186 eingeschlossen sein; der Stimulus für die Kombination der Schaltungskomponente G10C und des Stubs G24 kann in Abschnitt G188 eingeschlossen sein; und die Stimulation für den Stub G22 kann in Abschnitt G 190 eingeschlossen sein. In einer Ausführungsform kann, da der Stub G22 möglicherweise keine aktive Schaltlogik einschließt, der Abschnitt G190 weggelassen werden. Alternativ können Unterschiede im Betrieb in dem gemeinsamen Abschnitt G176 in dem Abschnitt G190 erfasst werden.
  • Somit lässt der gleiche Gesamtaufbau der obersten Testebene G170 die Simulation einer beliebigen Instanz des Designs mit nur der Änderung der $DEFINE-Aussage zu, um das Design auszuwählen.
  • 80 veranschaulicht ein Beispiel für die Prüfung der Schaltungskomponentenebene über Replikation. Im Beispiel ist Chip 1 mit bestimmten Eingängen/Ausgängen (z. B. einer Schnittstelle) zwischen der Schaltungskomponente G10C und der Schaltungskomponente G10B gezeigt. Andere Schnittstellen zwischen anderen der Schaltungskomponenten G10A und G10D und die von der Schaltungskomponente G10B empfangen werden sind jedoch in 80 zur Vereinfachung nicht veranschaulicht.
  • Eine Prüfanordnung für die Schaltungskomponente G10B kann somit die Schaltungskomponente G10B in der DUT (Bezugszeichen G192) einschließen. Die Schnittstelle zwischen der Schaltungskomponente G10B und der Schaltungskomponente G10C kann über ein Modell der Schaltungskomponente G10C im Prüfstand G194 modelliert werden. Das Modell kann ein Verhaltensmodell der Schaltungskomponente G10C sein. Alternativ kann das Modell ein Busfunktionsmodell der Schaltungskomponente G10C sein, das den Betrieb der Schaltungskomponente G10C auf der Schnittstelle wirklichkeitsgetreu reproduziert, aber viele interne Vorgänge weglassen kann. Jedes beliebige Modell kann verwendet werden. Die Prüfanordnung kann dupliziert werden, um beispielsweise die Chip-3-Anordnung zu testen, in der Stub G22 enthalten ist, um verschiedene Eingangssignale an die Schaltungskomponente G10B auf der Schnittstelle, die von der Schaltungskomponente G10C bezogen wurden, nach oben und nach unten zu verbinden. Die reproduzierte Anordnung kann die DUT G192 und einen Prüfstand G196, der die oberen Verbindungen und die unteren Verbindungen des Stubs G22 instanziiert, einschließen.
  • In einer Ausführungsform kann die Designintegration (DI) ebenfalls modifiziert werden. Die Designintegration kann den Prozess des Verbindens der verschiedenen Schaltungskomponenten G10A-G10D einschließen, wodurch jede erforderliche „Klebstofflogik“ bereitgestellt wird, die eine korrekte Kommunikation zwischen den Schaltungskomponenten G10A-G10D usw. ermöglichen kann. Verschiedene Konfigurationen können sich ändern, wenn unterschiedliche Instanzen der integrierten Schaltung abgefangen werden. Zum Beispiel kann das Routing von Paketen über die Netzwerkweichen G70A-G70H (oder die Teilmengen der in einer gegebenen Instanz enthaltenen Weichen) von der Instanz abhängen. Das Programmieren der Routingtabellen G74 kann sich somit basierend auf der Instanz ändern. Andere Handlungsweisen des Designs können sich ebenfalls ändern, wie die Leistungsverwaltung. Sicherungen können verwendet werden, um die Instanz zu identifizieren, und somit das Programmieren der Routingtabellen G74 oder verschiedener Konfigurationsregister in anderen Schaltungskomponenten G10A-G10D, wenn das Verhalten nicht ausreichend durch Pull-Ups und Pull-Downs in den Stubs G22 oder G24 gesteuert wird. Die Sicherungen können Teil der Stubs sein oder können in den Schaltungskomponenten G10A-GG10D enthalten sein und können selektiv für einen Kurzschluss herangezogen werden.
  • 81 ist ein Flussdiagramm, das ein Beispiel eines Designs und eines Herstellungsverfahrens für eine integrierte Schaltung 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, die unabhängig sind, können parallel durchgeführt werden.
  • Das Verfahren kann das Definieren, in einer Designdatenbank, die einem integrierten Schaltungsdesign entspricht, eines Bereichs, der von dem integrierten Schaltungsdesign belegt werden soll, umfassen, wenn sie auf einem Halbleitersubstrat hergestellt wird (Block G 130). Das Verfahren kann ferner wie gewünscht das Definieren einer Trennlinie oder mehr als einer Trennlinie umfassen. Die Trennlinie kann den Bereich in einen ersten Teilbereich und einen zweiten Teilbereich abgrenzen, wobei eine Kombination des ersten Teilbereichs und des zweiten Teilbereichs eine vollständige Instanz der integrierten Schaltung darstellt, und wobei der erste Teilbereich und ein Stub-Bereich eine partielle Instanz der integrierten Schaltung darstellen, die weniger Schaltungskomponenten als die vollständige Instanz einschließt (Block G 132). Das Verfahren kann ferner das Darstellen, in der Designdatenbank, eines physischen Standorts einer Vielzahl von Schaltungskomponenten umfassen, die sowohl in der vollständigen Instanz als auch der partiellen Instanz der integrierten Schaltung in dem ersten Teilbereich enthalten sind (Block G134). In einer Ausführungsform sind eine relative Position der Vielzahl von Schaltungskomponenten innerhalb des ersten Teilbereichs und der Verbindungspunkt der Vielzahl von Schaltungskomponenten innerhalb des ersten Teilbereichs in der vollen Instanz und der partiellen Instanz unverändert. Das Verfahren kann ferner das Darstellen, in der Designdatenbank, einer physischen Position einer anderen Vielzahl von Schaltungskomponenten umfassen, die in der vollständigen Instanz enthalten sind, aber von der partiellen Instanz in dem zweiten Teilbereich ausgeschlossen sind (Block G136). Das Verfahren kann ferner das Definieren, in dem Stub-Bereich der Designdatenbank, von Terminierungen für Drähte umfassen, die andernfalls die Trennlinie zwischen dem ersten und dem zweiten Teilbereich durchlaufen würden, wodurch die korrekte Bedienung der Vielzahl von Schaltungskomponenten in dem ersten Teilbereich in Abwesenheit des zweiten Teilbereichs in der partiellen Instanz sichergestellt wird (Block G138). Das Verfahren kann ferner das Erzeugen eines ersten Datensatzes für die vollständige Instanz unter Verwendung des ersten Teilbereichs und des zweiten Teilbereichs umfassen (Block G140). Der erste Datensatz kann die vollständige Instanz zum Herstellen der vollständigen Instanz definieren. Das Verfahren kann ferner das Erzeugen eines zweiten Datensatzes für die partielle Instanz unter Verwendung des ersten Teilbereichs und des Stub-Bereichs umfassen, wobei der zweite Datensatz die partielle Instanz zur Herstellung der partiellen Instanz definiert (Block G 142). Das Verfahren kann ferner das Erzeugen von vollständigen und partiellen Instanzen basierend auf dem ersten bzw. dem zweiten Datensatz umfassen (Block G144).
  • In einer Ausführungsform kann der Stub-Bereich Schaltlogik ausschließen. Zum Beispiel kann der Stub-Bereich nur Verdrahtung in einer oder mehreren Metallisierungsschichten über einer Oberfläche des Halbleitersubstrats einschließen. In einer Ausführungsform kann die andere Vielzahl von Schaltungskomponenten in dem zweiten Teilbereich eine Vielzahl von Ausgängen einschließen, die eine Vielzahl von Eingängen in der Vielzahl von Schaltungskomponenten in dem ersten Teilbereich sind. Die Vielzahl von Schaltungskomponenten kann eine Vielzahl von Multiplexerschaltungen aufweisen, die jeweilige der Vielzahl von Eingängen als Eingänge aufweisen. Das Verfahren kann ferner das Darstellen, in dem Stub-Bereich, einer Vielzahl von Auswahlsignalen für die Vielzahl von Multiplexerschaltungen in dem Stub-Bereich umfassen. Die Vielzahl von Auswahlsignalen kann innerhalb des Stub-Bereichs mit einem Binärwert terminiert werden, der einen unterschiedlichen Eingang der Vielzahl von Multiplexerschaltungen als die Eingänge auswählt, mit der die Vielzahl von Eingängen verbunden ist. Die Vielzahl von Auswahlsignalen kann in dem zweiten Teilbereich mit einem unterschiedlichen Binärwert terminiert werden.
  • In einem Beispiel kann das Verfahren ferner das Definieren einer Vielzahl von Ausschlusszonen an jeweiligen Ecken des Halbleitersubstrats umfassen. Schaltungskomponenten können gemäß den mechanischen Anforderungen eines Herstellungsprozesses von der Vielzahl von Ausschlusszonen ausgeschlossen sein, um die integrierte Schaltung herzustellen. Das Verfahren kann weiterhin ferner das Definieren zusätzlicher Ausschlusszonen an Ecken des ersten Teilbereichs neben der Trennlinie umfassen, wobei die partielle Instanz Ausschlusszonen an jeweiligen Ecken des Halbleitersubstrats mit der darauf ausgebildeten partiellen Instanz einschließt.
  • In einem Beispiel kann das Verfahren ferner das Definieren einer zweiten Ausschlusszone entlang einer Kante des ersten Teilbereichs, der an den zweiten Teilbereich angrenzt, umfassen. Gesteuerte Flip-Chip-Anschlussverbindungen (C4-Verbindungen) können von der zweiten Ausschlusszone ausgeschlossen sein. In einem Beispiel kann das Verfahren ferner das Definieren, in dem ersten Teilbereich, von einem oder mehreren ersten analogen Eingängen umfassen; und das Definieren, in dem zweiten Teilbereich, eines oder mehrerer zweiter analoger Eingänge. Der eine oder die mehreren ersten verbleiben innerhalb des ersten Teilbereichs, und der eine oder die mehreren zweiten analogen Eingänge verbleiben innerhalb des zweiten Teilbereichs. In einem Beispiel kann das Verfahren das Definieren, in dem ersten Teilbereich, von einem oder mehreren ersten Taktbäumen umfassen, um Takte innerhalb des ersten Teilbereichs zu verteilen; und das Definieren, in dem zweiten Teilbereich, eines oder mehrerer zweiter Taktbäume zu verteilten Takten mit dem zweiten Teilbereich. Der eine oder die mehreren ersten Taktbäume können in der vollständigen Instanz von dem einen oder den mehreren zweiten Taktbäumen elektrisch isoliert sein. In einem Beispiel kann das Verfahren ferner das Definieren, in der Designdatenbank, einer zweiten Trennlinie in dem zweiten Teilbereich umfassen. Die zweite Trennlinie kann den zweiten Teilbereich in einen dritten Teilbereich und einen vierten Teilbereich unterteilen, wobei der dritte Teilbereich dem ersten Teilbereich benachbart ist. Der dritte Teilbereich und der erste Teilbereich können eine zweite partielle Instanz der integrierten Schaltung darstellen. Das Verfahren kann ferner das Erzeugen eines dritten Datensatzes für die zweite partielle Instanz unter Verwendung des ersten Teilbereichs, des dritten Teilbereichs und eines zweiten Stub-Bereichs umfassen. Der dritte Datensatz kann die zweite partielle Instanz zur Herstellung der zweiten partiellen Instanz definieren.
  • 82 ist ein Flussdiagramm, das ein Beispiel eines Verfahrens zum Herstellen integrierter Schaltungen 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, die unabhängig sind, können parallel durchgeführt werden.
  • In einem Beispiel kann ein Verfahren das Empfangen eines ersten Datensatzes für eine vollständige Instanz eines integrierten Schaltungsdesigns umfassen (Block G150). Der erste Datensatz kann die vollständige Instanz zum Herstellen der vollständigen Instanz definieren. Die vollständige Instanz kann eine erste Vielzahl von Schaltungskomponenten, die sich physisch in einem ersten Teilbereich eines Bereichs befinden, der auf einem Halbleitersubstrat durch die vollständige Instanz belegt ist, und eine zweite Vielzahl von Schaltungskomponenten einschließen, die sich physisch in einem zweiten Teilbereich des Bereichs befinden, der durch die vollständige Instanz auf dem Halbleitersubstrat belegt ist. Das Verfahren kann ferner das Empfangen eines zweiten Datensatzes für eine partielle Instanz des integrierten Schaltungsdesigns umfassen (Block G152). Der zweite Datensatz kann die partielle Instanz zum Herstellen der partiellen Instanz definieren. Die partielle Instanz kann die erste Vielzahl von Schaltungskomponenten in dem ersten Teilbereich einschließen, wobei ein relativer Standort der ersten Vielzahl von Schaltungskomponenten innerhalb des ersten Teilbereichs und der Verbindungspunkt der ersten Vielzahl von Schaltungskomponenten innerhalb des ersten Teilbereichs in der vollständigen Instanz und der partiellen Instanz unverändert ist. Die partielle Instanz kann ferner einen Stub-Bereich, der an den ersten Teilbereich angrenzt, einschließen, wobei der Stub-Bereich Terminierungen für Drähte einschließt, die andernfalls Komponenten in dem ersten und zweiten Teilbereich miteinander verbinden würden, wodurch die korrekte Bedienung der ersten Vielzahl von Schaltungskomponenten in dem ersten Teilbereich in Abwesenheit des zweiten Teilbereichs in der partiellen Instanz sichergestellt wird. Das Verfahren kann ferner das Herstellen einer ersten Vielzahl der vollständigen Instanz der integrierten Schaltung basierend auf dem ersten Datensatz umfassen (Block G154); und das Herstellen einer zweiten Vielzahl der partiellen Instanz der integrierten Schaltung basierend auf dem zweiten Datensatz (Block G156).
  • In einer Ausführungsform schließt der Stub-Bereich Schaltlogik aus. Zum Beispiel kann der Stub-Bereich nur Verdrahtung in einer oder mehreren Metallisierungsschichten über einer Oberfläche des Halbleitersubstrats einschließen. In einer Ausführungsform schließt die andere Vielzahl von Schaltungskomponenten in dem zweiten Teilbereich eine Vielzahl von Ausgängen ein, die eine Vielzahl von Eingängen in der ersten Vielzahl von Schaltungskomponenten in dem ersten Teilbereich sind; und die erste Vielzahl von Schaltungskomponenten umfasst eine Vielzahl von Multiplexerschaltungen, die jeweilige der Vielzahl von Eingängen als Eingänge aufweisen. Der Stub-Bereich kann ferner eine Vielzahl von Auswahlsignalen für die Vielzahl von Multiplexerschaltungen umfassen. In einer Ausführungsform wird die Vielzahl von Auswahlsignalen innerhalb des Stub-Bereichs mit einem Binärwert terminiert, der einen unterschiedlichen Eingang der Vielzahl von Multiplexerschaltungen auswählt als die Eingänge, an die die Vielzahl von Eingängen angeschlossen sind. Die Vielzahl von Auswahlsignalen kann in dem zweiten Teilbereich mit einem unterschiedlichen Binärwert in der vollständigen Instanz terminiert werden.
  • In einer Ausführungsform kann der erste Datensatz eine Vielzahl von Ausschlusszonen an jeweiligen Ecken des Halbleitersubstrats einschließen. Schaltungskomponenten können gemäß den mechanischen Anforderungen eines Herstellungsprozesses von der Vielzahl von Ausschlusszonen ausgeschlossen sein, um die integrierte Schaltung herzustellen. Der erste Datensatz kann ferner zusätzliche Ausschlusszonen an Ecken des ersten Teilbereichs neben dem zweiten Teilbereich einschließen, wobei die partielle Instanz Ausschlusszonen an jeweiligen Ecken des Halbleitersubstrats mit der darauf ausgebildeten partiellen Instanz einschließt. In einer Ausführungsform kann der erste Datensatz ferner eine zweite Ausschlusszone entlang einer Kante des ersten Teilbereichs einschließen, die an den zweiten Teilbereich angrenzt, wobei gesteuerte Flip-Chip-Verbindungsanschlüsse (C4-Verbindungen) von der zweiten Ausschlusszone ausgeschlossen sind. In einer Ausführungsform kann der erste Datensatz ferner einen oder mehrere erste analoge Eingänge in dem ersten Teilbereich und einen oder mehrere zweite analoge Eingänge in dem zweiten Teilbereich einschließen. Der eine oder die mehreren ersten analogen Eingänge können mit dem ersten Unterbereich verbleiben; und der eine oder die mehreren zweiten analogen Eingänge verbleiben innerhalb des zweiten Teilbereichs. In einer Ausführungsform kann der erste Datensatz ferner einen oder mehrere erste Taktbäume umfassen, um Takte innerhalb des ersten Teilbereichs und einen oder mehrere zweite Taktbäume zu verteilen, um Takte mit dem zweiten Teilbereich zu verteilen, und wobei der eine oder die mehreren ersten Taktbäume von dem einen oder den mehreren zweiten Taktbäumen in der vollständigen Instanz elektrisch isoliert sind.
  • Computersystem
  • Als Nächstes ist ein Blockdiagramm einer Ausführungsform eines Systems 700 gezeigt. In der veranschaulichten Ausführungsform schließt das System 700 mindestens eine Instanz eines Systems-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 enthalten sein (und es kann auch mehr als ein Speicher 702 enthalten sein). Der Speicher 702 kann in einer Ausführungsform die in 1 veranschaulichten Speicher 12A-12 m einschließen.
  • Die Peripheriegeräte 704 können abhängig von dem Typ des Systems 700 eine beliebige gewünschte Schaltlogik einschließen. Zum Beispiel kann in einer Ausführungsform das System 700 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 Peripherieeinheiten 2304 können Benutzerschnittstellenvorrichtungen, wie einen Anzeigebildschirm, einschließlich Berührungsanzeigebildschirmen oder Mehrfachberührungsanzeigebildschirmen, Tastatur- oder andere Eingabevorrichtungen, Mikrofone, Lautsprecher usw. einschließen. In anderen Ausführungsformen kann es sich bei dem System 700 um einen beliebigen Typ von Rechensystem handeln (z. B. Desktop-PC, Laptop, Workstation, Nettop usw.).
  • Der externe Speicher 702 kann eine beliebige Art von Speicher einschließen. Zum Beispiel kann der externe Speicher 702 SRAM, dynamischer RAM (DRAM), wie synchroner DRAM (SDRAM), SDRAM mit doppelter Datenrate (DDR, DDR2, DDR3 usw.), RAMBUS DRAM, Niederleistungsversionen 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 einzelne Inline-Speichermodule (SIMMs), doppelte Inline-Speichermodule (DIMMs) usw. Alternativ kann der externe Speicher 702 eine oder mehrere Speichervorrichtungen einschließen, die an dem SOC 10 in einer Chip-auf-Chip- oder Package-auf-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 Dienstes/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 Haushaltsvorrichtungen 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 im Heim ü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 83 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 83 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 84, 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 nicht-transitorischen 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 84 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 Synthese-Werkzeug gelesen werden, das die Beschreibung synthetisieren kann um eine Netzliste zu erstellen, 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 Speichermedium 800 eine Darstellung des SOC 10 speichert, können nach Bedarf auch andere Ausführungsformen eine Darstellung eines beliebigen Abschnitts des SOC 10 tragen, einschließlich einer der verschiedenen Ausführungsformen, die vorstehend in Bezug auf die 1 bis 82 beschrieben wurden, sowie einer beliebigen Kombination oder Teilmenge der vorstehend beschriebenen Ausführungsform.
  • Wie in 84 veranschaulicht, kann das computerzugängliche Speichermedium 800 ferner eines oder mehrere von einem Zuweiser für virtuelle Speicherseiten 806 und einem Speichermonitor- und Faltungs-/Entfaltungscode 808 speichern. Der Zuweiser für virtuelle Speicherseiten 806 kann Anweisungen umfassen, die, wenn sie auf einem Computer, wie den verschiedenen hierin beschriebenen Computersystemen, einschließlich eines oder mehrerer SOCs F 10, ausgeführt werden (und insbesondere auf einem Prozessor in einem oder mehreren der P-Cluster F14A-F14B ausgeführt werden) bewirken, dass der Computer Operationen, einschließlich der oben für den Zuweiser für virtuelle Speicherseiten beschriebenen (z. B. in Bezug auf 63 bis 66), durchführt. In ähnlicher Weise kann der Speichermonitor- und Faltungs-/Entfaltungscode F808 Anweisungen umfassen, die, wenn sie auf einem Computer, wie den verschiedenen hierin beschriebenen Computersystemen, einschließlich eines oder mehrerer SOCs F10, ausgeführt werden (und insbesondere auf einem Prozessor in einem oder mehreren der P-Cluster F14A-F14B ausgeführt werden) bewirken, dass der Computer Operationen, einschließlich der oben für den Speichermonitor- und Faltungs-/Entfaltungscode beschriebenen (z. B. in Bezug auf 63 bis 66), durchführt.
  • Ebenso wie in 68 veranschaulicht, kann das computerzugängliche Speichermedium 800 in 15 Datenbanken 812, 814 und 816 speichern, welche die vollständige Instanz der integrierten Schaltung G18 und die partiellen Instanzen der integrierten Schaltung G18 darstellen. Ähnlich die die Datenbank 802, kann jede der Datenbanken 812, 814 und 816 eine Datenbank sein, die durch ein Programm gelesen und direkt oder indirekt verwendet werden kann, um die Hardware, welche die Instanzen umfasst, herzustellen.
  • 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 den 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.
  • 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 benutzerdefiniert 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 den 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, sind Schaltungen, Einheiten und andere Elemente durch die Funktionen oder Vorgänge definiert, für deren Implementierung sie konfiguriert sind. Die Anordnung dieser Schaltungen/Einheiten/Komponenten in Bezug aufeinander und die Art und Weise, in der sie interagieren, bilden eine mikroarchitektonische Definition der Hardware, die letztendlich in einer integrierten Schaltung hergestellt oder in ein FPGA programmiert ist, um eine physische Implementierung der mikroarchitektonischen Definition zu bilden. Somit wird die Mikroarchitekturdefinition von dem 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 der 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 den 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 benutzerdefiniert 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 Gatter-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.
  • Weitere Details verschiedener Ausführungsformen sind in den folgenden Beispielen dargelegt:
    • 1. System, umfassend:
      • eine Vielzahl von Prozessorkernen;
      • eine Vielzahl von Grafikverarbeitungseinheiten;
      • eine Vielzahl von Peripherievorrichtungen, die sich von den Prozessorkernen und Grafikverarbeitungseinheiten unterscheiden;
      • eine oder mehrere Speichersteuerungsschaltungen, die konfiguriert sind, um eine Schnittstelle zum Systemspeicher zu bilden; und
      • eine Interconnect-Fabric, die konfiguriert ist, um Kommunikation zwischen der einen oder den mehreren Speichersteuerungsschaltungen und den Prozessorkernen, den Grafikverarbeitungseinheiten und den Peripherievorrichtungen bereitzustellen;
      • wobei die Prozessorkerne, Grafikverarbeitungseinheiten, Peripherievorrichtungen und Speichersteuerungen konfiguriert sind, um über eine vereinheitlichte Speicherarchitektur zu kommunizieren.
    • 2. System von Beispiel 1, wobei die Prozessorkerne, Grafikverarbeitungseinheiten und Peripherievorrichtungen konfiguriert sind, um auf jede Adresse innerhalb eines vereinheitlichten Adressraums zuzugreifen, der durch die vereinheitlichte Speicherarchitektur definiert ist.
    • 3. System von Beispiel 2, wobei der vereinheitlichte Adressraum ein virtueller Adressraum ist, der sich von einem durch den Systemspeicher bereitgestellten physischen Adressraum unterscheidet.
    • 4. System von einem der Beispiele 1 bis 3, wobei die vereinheitlichte Speicherarchitektur einen gemeinsamen Semantiksatz für den Speicherzugriff durch die Prozessorkerne, Grafikverarbeitungseinheiten und Peripherievorrichtungen bereitstellt.
    • 5. System von Beispiel 4, wobei die Semantik Speicherordnungseigenschaften einschließt.
    • 6. System von Beispiel 4 oder 5, wobei die Semantik eine Qualität von Dienstattributen einschließt.
    • 7. System von einem der Beispiele 4 bis 6, wobei die Semantik eine Cache-Kohärenz einschließt.
    • 8. System von einem der vorstehenden Beispiele, wobei die eine oder die mehreren Speichersteuerungsschaltungen jeweilige Schnittstellen zu einer oder mehreren Speichervorrichtungen einschließen, die auf Direktzugriffsspeicher abbildbar sind.
    • 9. System von Beispiel 8, wobei eine oder mehrere Speichervorrichtungen einen dynamischen Direktzugriffsspeicher (DRAM) umfassen.
    • 10. System von einem der vorstehenden Beispiele, ferner umfassend eine oder mehrere Cache-Ebenen zwischen den Prozessorkernen, Grafikverarbeitungseinheiten, Peripherievorrichtungen und dem Systemspeicher.
    • 11. System von Beispiel 10, wobei die eine oder die mehreren Speichersteuerungsschaltungen jeweilige Speicher-Caches einschließen, die zwischen der Interconnect-Fabric und dem Systemspeicher angeordnet sind, wobei die jeweiligen Speicher-Caches eine der einen oder mehreren Cache-Ebenen sind.
    • 12. System von einem der vorstehenden Beispiele, wobei die Interconnect-Fabric mindestens zwei Netzwerke mit heterogenen Interconnect-Topologien umfasst.
    • 13. System von einem der vorstehenden Beispiele, wobei die Interconnect-Fabric mindestens zwei Netzwerke mit heterogenen Betriebseigenschaften umfasst.
    • 14. System von Beispiel 12 oder 13, wobei die mindestens zwei Netzwerke ein kohärentes Netzwerk einschließen, das die Prozessorkerne und die eine oder mehrere Speichersteuerungsschaltungen miteinander verbindet.
    • 15. System von einem der Beispiele 12 bis 14, wobei die mindestens zwei Netzwerke ein mit den Grafikverarbeitungseinheiten und der einen oder mehreren Speichersteuerungsschaltungen gekoppeltes Netzwerk mit gelockerter Sortierung einschließen.
    • 16. System von Beispiel 15, wobei die Peripherievorrichtungen eine Teilmenge von Vorrichtungen einschließen, wobei die Teilmenge eine oder mehrere von einer Beschleunigerschaltung für maschinelles Lernen oder eine Massenmedienvorrichtung mit gelockerter Sortierung einschließt, und wobei das Netzwerk mit gelockerter Sortierung ferner mit der Teilmenge von Vorrichtungen an die eine oder mehrere Speichersteuerungsschaltungen gekoppelt ist.
    • 17. System von einem der Beispiele 12 bis 16, wobei die mindestens zwei Netzwerke ein Eingabe-Ausgabe-Netzwerk einschließen, das gekoppelt ist, um die Peripherievorrichtungen und die eine oder mehrere Speichersteuerungsschaltungen miteinander zu verbinden.
    • 18. System von Beispiel 17, wobei die Peripherievorrichtungen eine oder mehrere Echtzeitvorrichtungen einschließen.
    • 19. System von einem der Beispiele 12 bis 18, wobei die mindestens zwei Netzwerke ein erstes Netzwerk umfassen, das eine oder mehrere Eigenschaften umfasst, um die Latenz im Vergleich zu einem zweiten Netzwerk der mindestens zwei Netzwerke zu reduzieren.
    • 20. System von Beispiel 19, wobei die eine oder die mehreren Eigenschaften eine kürzere Route als das zweite Netzwerk umfassen
    • 21. System von Beispiel 19 oder 20, wobei die eine oder mehrere Eigenschaften eine Verdrahtung in Metallschichten umfassen, die geringere Latenzeigenschaften aufweisen als die Verdrahtung für das zweite Netzwerk.
    • 22. System von einem der Beispiele 12 bis 21, wobei die mindestens zwei Netzwerke ein erstes Netzwerk umfassen, das eine oder mehrere Eigenschaften zur Erhöhung der Bandbreite im Vergleich zu einem zweiten Netzwerk der mindestens zwei Netzwerke umfasst.
    • 23. System von Beispiel 22, wobei die eine oder mehrere Eigenschaften eine breitere Verschaltung im Vergleich zum zweiten Netzwerk umfassen.
    • 24. System von Beispiel 22 oder 23, wobei die eine oder mehrere Eigenschaften eine Verdrahtung in Metallschichten umfassen, die dichter sind als die Metallschichten, die für die Verdrahtung für das zweite Netzwerk verwendet werden.
    • 25. System von einem der Beispiele 12 bis 24, wobei die von den mindestens zwei Netzwerken verwendeten Interconnect-Topologien mindestens eine von einer Sterntopologie, einer Maschentopologie, einer Ringtopologie, einer Baumtopologie, einer Fat-Tree-Topologie, einer Hypercube-Topologie oder einer Kombination von einer oder den Topologien einschließen.
    • 26. System von einem der Beispiele 12 bis 25, wobei die von den mindestens zwei Netzwerken verwendeten Betriebseigenschaften mindestens eine von stark geordneter Speicherkohärenz oder entspannt geordneter Speicherkohärenz einschließen.
    • 27. System von einem der Beispiele 12 bis 26, wobei die mindestens zwei Netzwerke physisch und logisch unabhängig sind.
    • 28. System von einem der Beispiele 12 bis 27, wobei die mindestens zwei Netzwerke in einer ersten Betriebsart physisch getrennt sind und wobei ein erstes Netzwerk der mindestens zwei Netzwerke und ein zweites Netzwerk der mindestens zwei Netzwerke virtuell sind und in einer zweiten Betriebsart ein einziges physisches Netzwerk gemeinsam nutzen.
    • 29. System von einem der vorstehenden Beispiele, wobei die Prozessorkerne, die Grafikverarbeitungseinheiten, die Peripherievorrichtungen und die Interconnect-Fabric auf zwei oder mehr Dies mit integrierter Schaltung verteilt sind.
    • 30. System von Beispiel 29, wobei sich ein vereinheitlichter Adressraum, der durch die vereinheitlichte Speicherarchitektur definiert ist, über die zwei oder mehreren Dies mit integrierter Schaltung in einer für Software, die auf den Prozessorkernen, Grafikverarbeitungseinheiten oder Peripherievorrichtungen ausgeführt wird, transparenten Weise erstreckt.
    • 31. System von einem der Beispiele 29 bis 30, wobei sich die Interconnect-Fabric über die zwei Dies mit integrierter Schaltung erstreckt und wobei eine Kommunikation zwischen einer Quelle und einem Ziel transparent für einen Ort der Quelle und des Ziels auf den Dies mit integrierter Schaltung geleitet wird.
    • 32. System von einem der Beispiele 29 bis 31, wobei sich die Interconnect-Fabric über die zwei Dies mit integrierter Schaltung erstreckt und Hardware-Schaltungen verwendet, um eine Kommunikation zwischen einer Quelle und einem Ziel automatisch zu leiten, unabhängig davon, ob sich die Quelle und das Ziel auf demselben Die mit integrierter Schaltung befinden oder nicht.
    • 33. System von einem der Beispiele 29 bis 32, ferner umfassend mindestens eine Interposer-Vorrichtung, die konfiguriert ist, um Busse der Interconnect-Fabric über die zwei oder Dies mit integrierter Schaltung zu koppeln.
    • 34. System von einem der Beispiele 1 bis 33, wobei ein gegebenes Die mit integrierter Schaltung eine lokale Interrupt-Verteilungsschaltung einschließt, um Interrupts auf die Prozessorkerne in dem gegebenen Die mit integrierter Schaltung zu verteilen.
    • 35. System von Beispiel 34, umfassend zwei oder mehr Dies mit integrierter Schaltung, die jeweilige lokale Interrupt-Verteilungsschaltungen einschließen, und wobei mindestens eines der zwei oder mehr Dies mit integrierter Schaltung eine globale Interrupt-Verteilungsschaltung einschließt, wobei die lokalen Interrupt-Verteilungsschaltungen und die globale Interrupt-Verteilungsschaltung ein Mehrebenen-Interrupt-Verteilungsschema implementieren.
    • 36. System von Beispiel 35, wobei die globale Interrupt-Verteilungsschaltung konfiguriert ist, um eine Interrupt-Anforderung an die lokalen Interrupt-Verteilungsschaltungen in einer Sequenz zu übertragen, und wobei die lokalen Interrupt-Verteilungsschaltungen konfiguriert sind, um die Interrupt-Anforderung an lokale Interrupt-Ziele in einer Sequenz zu übertragen, bevor sie auf die Interrupt-Anforderung von der globalen Interrupt-Verteilungsschaltung antworten.
    • 37. System von einem der Beispiele 1 bis 36, wobei ein gegebenes Die mit integrierter Schaltung eine Leistungsverwaltungsschaltung umfasst, die konfiguriert ist, um einen lokalen Leistungszustand des gegebenen Die mit integrierter Schaltung zu verwalten.
    • 38. System von Beispiel 37, umfassend zwei oder mehr Dies mit integrierter Schaltung, die jeweilige Leistungsverwaltungsschaltungen einschließen, die konfiguriert sind, um den lokalen Leistungszustand des Dies mit integrierter Schaltung zu verwalten, und wobei mindestens einer der zwei oder mehr Dies mit integrierter Schaltung eine weitere Leistungsverwaltungsschaltung einschließt, die konfiguriert ist, um die Leistungsverwaltungsschaltungen zu synchronisieren.
    • 39. System von einem der vorstehenden Beispiele, wobei die Peripherievorrichtungen eine oder mehrere von folgenden einschließen: eine Audioverarbeitungsvorrichtung, eine Videoverarbeitungsvorrichtung, eine Beschleunigerschaltung für maschinelles Lernen, eine Matrixarithmetik-Beschleunigerschaltung, eine Kameraverarbeitungsschaltung, eine Display-Pipeline-Schaltung, eine nichtflüchtige Speichersteuerung, eine Peripheral Component Interconnect-Steuerung, einen Sicherheitsprozessor oder eine serielle Bussteuerung.
    • 40. System von einem der vorstehenden Beispiele, wobei die Interconnect-Fabric kohärente Agenten miteinander verbindet.
    • 41. System von Beispiel 40, wobei ein einzelner der Prozessorkerne einem kohärenten Agenten entspricht.
    • 42. System von Beispiel 40, wobei ein Cluster von Prozessorkernen einem kohärenten Agenten entspricht.
    • 43. System von einem der vorstehenden Beispiele, wobei eine gegebene der Peripherievorrichtungen ein nicht-kohärenter Agent ist.
    • 44. System von Beispiel 43, ferner umfassend einen Eingabe/Ausgabe-Agenten, der zwischen der gegebenen Peripherievorrichtung und der Interconnect-Fabric angeordnet ist, wobei der Eingabe/Ausgabe-Agent konfiguriert ist, um Kohärenzprotokolle der Interconnect-Fabric in Bezug auf die gegebene Peripherievorrichtung durchzusetzen.
    • 45. System von Beispiel 44, wobei der Eingabe/Ausgabe-Agent die Reihenfolge der Anforderungen von der gegebenen Peripherievorrichtung unter Verwendung der Kohärenzprotokolle sicherstellt.
    • 46. System von Beispiel 44 oder 45, wobei der Eingabe/Ausgabe-Agent konfiguriert ist, um ein Netzwerk aus zwei oder mehr Peripherievorrichtungen mit der Interconnect-Fabric zu koppeln.
    • 47. System von einem der vorstehenden Beispiele, ferner umfassend eine Hashing-Schaltlogik, die konfiguriert ist, um den Speicheranforderungsverkehr gemäß einem selektiv programmierbaren Hashing-Protokoll auf den Systemspeicher zu verteilen.
    • 48. System von Beispiel 47, wobei mindestens eine Programmierung des programmierbaren Hashing-Protokolls eine Reihe von Speicheranforderungen gleichmäßig auf eine Vielzahl von Speichersteuerungen im System für eine Vielzahl von Speicheranforderungen in der Reihe verteilt.
    • 49. System von Beispiel 29, wobei mindestens eine Programmierung des programmierbaren Hashing-Protokolls benachbarte Anforderungen innerhalb des Speicherraums mit einer festgelegten Granularität auf physisch entfernte Speicherschnittstellen verteilt.
    • 50. System von einem der vorstehenden Beispiele, ferner umfassend eine Vielzahl von Verzeichnissen, die konfiguriert sind, um einen Kohärenzzustand von Teilmengen des vereinheitlichten Speicheradressraums zu verfolgen, wobei die Vielzahl von Verzeichnissen in dem System verteilt ist.
    • 51. System von Beispiel 50, wobei die Vielzahl von Verzeichnissen auf die Speichersteuerungen verteilt ist.
    • 52. System von einem der vorstehenden Beispiele, wobei eine gegebene Speichersteuerungsschaltung der einen oder mehreren Speichersteuerungsschaltungen ein Verzeichnis umfasst, das konfiguriert ist, um eine Vielzahl von Cache-Blöcken zu verfolgen, die Daten in einem Abschnitt des Systemspeichers entsprechen, zu dem die gegebene Speichersteuerungsschaltung eine Schnittstelle bildet, wobei das Verzeichnis konfiguriert ist, um zu verfolgen, welche einer Vielzahl von Caches in dem System einen gegebenen Cache-Block der Vielzahl von Cache-Blöcken zwischenspeichern, wobei das Verzeichnis in Bezug auf Speicheranforderungen, die in dem Verzeichnis geordnet und verarbeitet wurden, präzise ist, selbst für den Fall, dass die Speicheranforderungen in dem System noch nicht abgeschlossen sind.
    • 53. System von einem der Beispiele 50 bis 52, wobei die gegebene Speichersteuerung konfiguriert ist, um auf Grundlage einer Speicheranforderung für den gegebenen Cache-Block einen oder mehrere Kohärenzerhaltungsbefehle für den gegebenen Cache-Block auszugeben, wobei der eine oder die mehreren Kohärenzerhaltungsbefehle einen Cache-Zustand für den gegebenen Cache-Block in einem entsprechenden Cache der Vielzahl von Caches einschließen, wobei der entsprechende Cache konfiguriert ist, um die Verarbeitung eines gegebenen Kohärenzerhaltungsbefehls auf Grundlage des Cache-Zustands in dem entsprechenden Cache zu verzögern, der nicht mit dem Cache-Zustand in dem gegebenen Kohärenzerhaltungsbefehl übereinstimmt.
    • 54. System von einem der Beispiele 50 bis 53, wobei ein erster Cache konfiguriert ist, um den gegebenen Cache-Block in einem gemeinsam genutzten Primärzustand zu speichern, und ein zweiter Cache konfiguriert ist, um den gegebenen Cache-Block in einem gemeinsam genutzten Sekundärzustand zu speichern, und wobei die gegebene Speichersteuerung konfiguriert ist, um zu bewirken, dass der erste Cache den gegebenen Cache-Block an einen Anforderer auf Grundlage der Speicheranforderung und des gemeinsam genutzten Primärzustands in dem ersten Cache überträgt.
    • 55. System von einem der Beispiele 50 bis 54, wobei die gegebene Speichersteuerung konfiguriert ist, um einen von einem ersten Kohärenzwartungsbefehl und einem zweiten Kohärenzwartungsbefehl an einen ersten Cache der Vielzahl von Caches auf Grundlage einer Art einer ersten Speicheranforderung auszugeben, wobei der erste Cache konfiguriert ist, um einen ersten Cache-Block an einen Anforderer weiterzuleiten, der die erste Speicheranforderung auf Grundlage des ersten Kohärenzwartungsbefehls ausgegeben hat, und wobei der erste Cache konfiguriert ist, um den ersten Cache-Block auf Grundlage des zweiten Kohärenzwartungsbefehls an die gegebene Speichersteuerung zurückzugeben.
    • 56. System, umfassend:
      • eine Vielzahl von Prozessorkernen;
      • eine Vielzahl von Grafikverarbeitungseinheiten;
      • eine Vielzahl von Peripherievorrichtungen, die sich von den Prozessorkernen und Grafikverarbeitungseinheiten unterscheiden;
      • eine oder mehrere Speichersteuerungsschaltungen, die konfiguriert sind, um eine Schnittstelle zum Systemspeicher zu bilden; und
      • eine Interconnect-Fabric, die konfiguriert ist, um Kommunikation zwischen der einen oder den mehreren Speichersteuerungsschaltungen und den Prozessorkernen, den Grafikverarbeitungseinheiten und den Peripherievorrichtungen bereitzustellen;
      • wobei die Prozessorkerne, Grafikverarbeitungseinheiten, Peripherievorrichtungen und Speichersteuerungen konfiguriert sind, um über eine vereinheitlichte Speicherarchitektur zu kommunizieren.
    • 57. System von Beispiel 56, wobei die Prozessorkerne, Grafikverarbeitungseinheiten und Peripherievorrichtungen konfiguriert sind, um auf jede Adresse innerhalb eines vereinheitlichten Adressraums zuzugreifen, der durch die vereinheitlichte Speicherarchitektur definiert ist.
    • 58. System von Beispiel 57, wobei der vereinheitlichte Adressraum ein virtueller Adressraum ist, der sich von einem durch den Systemspeicher bereitgestellten physischen Adressraum unterscheidet.
    • 59. System von einem der Beispiele 56 bis 58, wobei die vereinheitlichte Speicherarchitektur einen gemeinsamen Semantiksatz für den Speicherzugriff durch die Prozessorkerne, Grafikverarbeitungseinheiten und Peripherievorrichtungen bereitstellt.
    • 60. System von Beispiel 59, wobei die Semantik Speicherordnungseigenschaften einschließt.
    • 61. System von Beispiel 59, wobei die Semantik eine Qualität von Dienstattributen einschließt.
    • 62. System von Beispiel 59, wobei die Semantik eine Cache-Kohärenz einschließt.
    • 63. System von einem der Beispiele 56 bis 62, wobei die eine oder die mehreren Speichersteuerungsschaltungen jeweilige Schnittstellen zu einer oder mehreren Speichervorrichtungen einschließen, die auf Direktzugriffsspeicher abbildbar sind.
    • 64. System von Beispiel 63, wobei eine oder mehrere Speichervorrichtungen einen dynamischen Direktzugriffsspeicher (DRAM) umfassen.
    • 65. System von einem der Beispiele 56 bis 64, ferner umfassend eine oder mehrere Cache-Ebenen zwischen den Prozessorkernen, Grafikverarbeitungseinheiten, Peripherievorrichtungen und dem Systemspeicher.
    • 66. System von Beispiel 65, wobei die eine oder die mehreren Speichersteuerungsschaltungen jeweilige Speicher-Caches einschließen, die zwischen der Interconnect-Fabric und dem Systemspeicher angeordnet sind, wobei die jeweiligen Speicher-Caches eine der einen oder mehreren Cache-Ebenen sind.
    • 67. System von einem der Beispiele 56 bis 66, ferner umfassend eine Vielzahl von Verzeichnissen, die konfiguriert sind, um einen Kohärenzzustand von Teilmengen des vereinheitlichten Speicheradressraums zu verfolgen, wobei die Vielzahl von Verzeichnissen in dem System verteilt ist.
    • 68. System von Beispiel 57, wobei die Vielzahl von Verzeichnissen auf die Speichersteuerungen verteilt ist.
    • 69. System von einem der Beispiele 56 bis 68, wobei eine gegebene Speichersteuerungsschaltung der einen oder mehreren Speichersteuerungsschaltungen ein Verzeichnis umfasst, das konfiguriert ist, um eine Vielzahl von Cache-Blöcken zu verfolgen, die Daten in einem Abschnitt des Systemspeichers entsprechen, zu dem die gegebene Speichersteuerungsschaltung eine Schnittstelle bildet, wobei das Verzeichnis konfiguriert ist, um zu verfolgen, welche einer Vielzahl von Caches in dem System einen gegebenen Cache-Block der Vielzahl von Cache-Blöcken zwischenspeichern, wobei das Verzeichnis in Bezug auf Speicheranforderungen, die in dem Verzeichnis geordnet und verarbeitet wurden, präzise ist, selbst für den Fall, dass die Speicheranforderungen in dem System noch nicht abgeschlossen sind.
    • 70. System von Beispiel 69, wobei die gegebene Speichersteuerung konfiguriert ist, um auf Grundlage einer Speicheranforderung für den gegebenen Cache-Block einen oder mehrere Kohärenzerhaltungsbefehle für den gegebenen Cache-Block auszugeben, wobei der eine oder die mehreren Kohärenzerhaltungsbefehle einen Cache-Zustand für den gegebenen Cache-Block in einem entsprechenden Cache der Vielzahl von Caches einschließen, wobei der entsprechende Cache konfiguriert ist, um die Verarbeitung eines gegebenen Kohärenzerhaltungsbefehls auf Grundlage des Cache-Zustands in dem entsprechenden Cache zu verzögern, der nicht mit dem Cache-Zustand in dem gegebenen Kohärenzerhaltungsbefehl übereinstimmt.
    • 71. System von Beispiel 70, wobei ein erster Cache konfiguriert ist, um den gegebenen Cache-Block in einem gemeinsam genutzten Primärzustand zu speichern, und ein zweiter Cache konfiguriert ist, um den gegebenen Cache-Block in einem gemeinsam genutzten Sekundärzustand zu speichern, und wobei die gegebene Speichersteuerung konfiguriert ist, um zu bewirken, dass der erste Cache den gegebenen Cache-Block an einen Anforderer auf Grundlage der Speicheranforderung und des gemeinsam genutzten Primärzustands in dem ersten Cache überträgt.
    • 72. System von Beispiel 70 oder 71, wobei die gegebene Speichersteuerung konfiguriert ist, um einen von einem ersten Kohärenzwartungsbefehl und einem zweiten Kohärenzwartungsbefehl an einen ersten Cache der Vielzahl von Caches auf Grundlage einer Art einer ersten Speicheranforderung auszugeben, wobei der erste Cache konfiguriert ist, um einen ersten Cache-Block an einen Anforderer weiterzuleiten, der die erste Speicheranforderung auf Grundlage des ersten Kohärenzwartungsbefehls ausgegeben hat, und wobei der erste Cache konfiguriert ist, um den ersten Cache-Block auf Grundlage des zweiten Kohärenzwartungsbefehls an die gegebene Speichersteuerung zurückzugeben.
    • 73. System-on-a-Chip (SOC), umfassend:
      • eine Vielzahl von Prozessorkernen;
      • eine Vielzahl von Grafikverarbeitungseinheiten;
      • eine Vielzahl von Peripherievorrichtung;eine oder mehrere Speichersteuerungsschaltungen, und
      • eine Interconnect-Fabric, die konfiguriert ist, um Kommunikation zwischen der einen oder den mehreren Speichersteuerungsschaltungen und den Prozessorkernen, den Grafikverarbeitungseinheiten und den Peripherievorrichtungen bereitzustellen;
      • wobei die Prozessorkerne, Grafikverarbeitungseinheiten, Peripherievorrichtungen und Speichersteuerungen konfiguriert sind, um über die Interconnect-Fabric über eine vereinheitlichte Speicherarchitektur zu kommunizieren.
    • 74. SOC von Beispiel 73, wobei die Prozessorkerne, Grafikverarbeitungseinheiten und Peripherievorrichtungen konfiguriert sind, um auf jede Adresse innerhalb eines vereinheitlichten Adressraums zuzugreifen, der durch die vereinheitlichte Speicherarchitektur definiert ist.
    • 75. SOC von Beispiel 73 oder 74, wobei die vereinheitlichte Speicherarchitektur einen gemeinsamen Semantiksatz für den Speicherzugriff durch die Prozessorkerne, Grafikverarbeitungseinheiten und Peripherievorrichtungen bereitstellt.
    • 76. SOC von einem der Beispiele 73 bis 75, wobei die Semantik Speicherordnungseigenschaften einschließt.
    • 77. SOC von einem der Beispiele 73 bis 76, wobei die Semantik eine Qualität von Dienstattributen einschließt.
    • 78. SOC von einem der Beispiele 73 bis 77, wobei die Semantik eine Speicherkoherenz einschließt.
    • 79. SOC von einem der Beispiele 73 bis 78, ferner umfassend eine Vielzahl von Verzeichnissen, die konfiguriert sind, um einen Kohärenzzustand von Teilmengen des vereinheitlichten Speicheradressraums zu verfolgen, wobei die Vielzahl von Verzeichnissen in dem SOC verteilt ist.
    • 80. SOC von Beispiel 79, wobei die Vielzahl von Verzeichnissen auf die Speichersteuerungen verteilt ist.
    • 81. SOC von einem der Beispiele 73 bis 80, wobei eine gegebene Speichersteuerungsschaltung der einen oder mehreren Speichersteuerungsschaltungen ein Verzeichnis umfasst, das konfiguriert ist, um eine Vielzahl von Cache-Blöcken zu verfolgen, die Daten in einem Abschnitt des Systemspeichers entsprechen, zu dem die gegebene Speichersteuerungsschaltung eine Schnittstelle bildet, wobei das Verzeichnis konfiguriert ist, um zu verfolgen, welche einer Vielzahl von Caches in dem System einen gegebenen Cache-Block der Vielzahl von Cache-Blöcken zwischenspeichern, wobei das Verzeichnis in Bezug auf Speicheranforderungen, die in dem Verzeichnis geordnet und verarbeitet wurden, präzise ist, selbst für den Fall, dass die Speicheranforderungen in dem System noch nicht abgeschlossen sind.
    • 86. System, umfassend:
      • eine Vielzahl von Prozessorkernen;
      • eine Vielzahl von Grafikverarbeitungseinheiten;
      • eine Vielzahl von Peripherievorrichtungen, die sich von den Prozessorkernen und Grafikverarbeitungseinheiten unterscheiden;
      • eine oder mehrere Speichersteuerungsschaltungen, die konfiguriert sind, um
      • eine Schnittstelle zum Systemspeicher zu bilden; und
      • eine Interconnect-Fabric, die konfiguriert ist, um Kommunikation zwischen der einen oder den mehreren Speichersteuerungsschaltungen und den Prozessorkernen, den Grafikverarbeitungseinheiten und den Peripherievorrichtungen bereitzustellen;
      • wobei die Interconnect-Fabric mindestens zwei Netzwerke mit heterogenen Betriebseigenschaften umfasst.
    • 87. System von Beispiel 86, wobei die Interconnect-Fabric mindestens zwei Netzwerke mit heterogenen Interconnect-Topologien umfasst.
    • 88. System von Beispiel 86 oder 87, wobei die mindestens zwei Netzwerke ein kohärentes Netzwerk einschließen, das die Prozessorkerne und die eine oder mehrere Speichersteuerungsschaltungen miteinander verbindet.
    • 89. System von einem der Beispiele 86 bis 88, wobei die mindestens zwei Netzwerke ein mit den Grafikverarbeitungseinheiten und der einen oder mehreren Speichersteuerungsschaltungen gekoppeltes Netzwerk mit gelockerter Sortierung einschließen.
    • 90. System von Beispiel 89, wobei die Peripherievorrichtungen eine Teilmenge von Vorrichtungen einschließen, wobei die Teilmenge eine oder mehrere von einer Beschleunigerschaltung für maschinelles Lernen oder eine Massenmedienvorrichtung mit gelockerter Sortierung einschließt, und wobei das Netzwerk mit gelockerter Sortierung ferner mit der Teilmenge von Vorrichtungen an die eine oder mehrere Speichersteuerungsschaltungen gekoppelt ist.
    • 91. System von einem der Beispiele 89 von 90, wobei die mindestens zwei Netzwerke ein Eingabe-Ausgabe-Netzwerk einschließen, das gekoppelt ist, um die Peripherievorrichtungen und die eine oder mehrere Speichersteuerungsschaltungen miteinander zu verbinden.
    • 92. System von Beispiel 91, wobei die Peripherievorrichtungen eine oder mehrere Echtzeitvorrichtungen einschließen.
    • 93. System von einem der Beispiele 86 bis 92, wobei die mindestens zwei Netzwerke ein erstes Netzwerk umfassen, das eine oder mehrere Eigenschaften umfasst, um die Latenz im Vergleich zu einem zweiten Netzwerk der mindestens zwei Netzwerke zu reduzieren.
    • 94. System von Beispiel 93, wobei die eine oder die mehreren Eigenschaften eine kürzere Route als das zweite Netzwerk umfassen.
    • 95. System von Beispiel 93 oder 94, wobei die eine oder mehrere Eigenschaften eine Verdrahtung in Metallschichten umfassen, die eine oder mehrere niedrigere Latenzeigenschaften aufweisen als die Metallschichten, die für die Verdrahtung für das zweite Netzwerk verwendet werden.
    • 96. System von Beispiel 93, wobei die mindestens zwei Netzwerke ein erstes Netzwerk umfassen, das eine oder mehrere Eigenschaften zur Erhöhung der Bandbreite im Vergleich zu einem zweiten Netzwerk der mindestens zwei Netzwerke umfasst.
    • 97. System von Beispiel 96, wobei die eine oder die mehreren Eigenschaften eine Verschaltung umfassen, die eine größere Anzahl von Drähten verwendet als die Verschaltung für das zweite Netzwerk.
    • 98. System von Beispiel 96 oder 97, wobei die eine oder mehrere Eigenschaften eine Verdrahtung in Metallschichten umfassen, die dichter sind als die Metallschichten, die für die Verdrahtung für das zweite Netzwerk verwendet werden.
    • 99. System von einem der Beispiele 86 bis 98, wobei die von den mindestens zwei Netzwerken verwendeten Interconnect-Topologien mindestens eine von einer Sterntopologie, einer Maschentopologie, einer Ringtopologie, einer Baumtopologie, einer Fat-Tree-Topologie, einer Hypercube-Topologie oder einer Kombination von einer oder den Topologien einschließen.
    • 100. System von einem der Beispiele 86 bis 99, wobei die von den mindestens zwei Netzwerken verwendeten Betriebseigenschaften mindestens eine von stark geordneter Speicherkohärenz oder entspannt geordneter Speicherkohärenz einschließen.
    • 101. System von Beispiel 89, wobei die mindestens zwei Netzwerke physisch und logisch unabhängig sind.
    • 102. System von einem der Beispiele 86 bis 101, wobei die mindestens zwei Netzwerke in einer ersten Betriebsart physisch getrennt sind und wobei ein erstes Netzwerk der mindestens zwei Netzwerke und ein zweites Netzwerk der mindestens zwei Netzwerke virtuell sind und in einer zweiten Betriebsart ein einziges physisches Netzwerk gemeinsam nutzen.
    • 103. System-on-a-Chip (SOC), das auf einem Halbleiter-Die integriert ist, wobei das SOC umfasst:
      • eine Vielzahl von Prozessorkernen;
      • eine Vielzahl von Grafikverarbeitungseinheiten;
      • eine Vielzahl von Peripherievorrichtungen;
      • eine oder mehrere Speichersteuerungsschaltungen, und
      • eine Interconnect-Fabric, die konfiguriert ist, um Kommunikation zwischen der einen oder den mehreren Speichersteuerungsschaltungen und den Prozessorkernen, den Grafikverarbeitungseinheiten und den Peripherievorrichtungen bereitzustellen;
      • wobei die Interconnect-Fabric mindestens ein erstes Netzwerk und ein zweites Netzwerk umfasst, wobei das erste Netzwerk eine oder mehrere Eigenschaften umfasst, um die Latenzzeit im Vergleich zu einem zweiten Netzwerk der mindestens zwei Netzwerke zu reduzieren.
    • 104. SOC von Beispiel 103, wobei die eine oder die mehreren Eigenschaften eine kürzere Route für das erste Netzwerk über eine Oberfläche des Halbleiter-Dies umfassen als eine Route des zweiten Netzwerks.
    • 105. SOC von Beispiel 103 oder 104, wobei die eine oder mehrere Eigenschaften eine Verdrahtung in Metallschichten umfassen, die eine oder mehrere niedrigere Latenzeigenschaften aufweisen als die Metallschichten, die für die Verdrahtung für das zweite Netzwerk verwendet werden.
    • 106. SOC von einem der Beispiele 103 bis 105, wobei das zweite Netzwerk eine oder mehrere zweite Eigenschaften umfasst, um die Bandbreite im Vergleich zum ersten Netzwerk zu erhöhen.
    • 107. SOC von Beispiel 106, wobei die eine oder mehreren zweiten Eigenschaften eine Verschaltung mit mehr Drähten im Vergleich zur Verschaltung im zweiten Netzwerk umfassen.
    • 108. SOC von Beispiel 106 oder 107, wobei die eine oder mehreren zweiten Eigenschaften eine Verdrahtung in Metallschichten umfassen, die dichter sind als die Metallschichten, die für die Verdrahtung des zweiten Netzwerks verwendet werden.
    • 109. System-on-a-Chip (SOC), das auf einem Halbleiter-Die integriert ist, wobei das SOC umfasst:
      • eine Vielzahl von Prozessorkernen;
      • eine Vielzahl von Grafikverarbeitungseinheiten;
      • eine Vielzahl von Peripherievorrichtungen;
      • eine oder mehrere Speichersteuerungsschaltungen, und
      • eine Interconnect-Fabric, die konfiguriert ist, um Kommunikation zwischen der einen oder den mehreren Speichersteuerungsschaltungen und den Prozessorkernen, den Grafikverarbeitungseinheiten und den Peripherievorrichtungen bereitzustellen;
      • wobei die Interconnect-Fabric mindestens ein erstes Netzwerk und ein zweites Netzwerk umfasst, wobei das erste Netzwerk physisch und logisch unabhängig von dem zweiten Netzwerk ist.
    • 110. System von Beispiel 109, wobei das erste Netzwerk und das zweite Netzwerk in einer ersten Betriebsart physisch getrennt sind und wobei ein erstes Netzwerk der mindestens zwei Netzwerke und ein zweites Netzwerk der mindestens zwei Netzwerke virtuell sind und in einem zweiten Betriebsmodus ein einziges physisches Netzwerk gemeinsam nutzen.
    • 111. Integrierte Schaltung, umfassend:
      • eine Vielzahl von Prozessorkernen;
      • eine Vielzahl von Grafikverarbeitungseinheiten;
      • eine Vielzahl von Peripherievorrichtungen, die sich von den Prozessorkernen und Grafikverarbeitungseinheiten unterscheiden;
      • eine oder mehrere Speichersteuerungsschaltungen, die konfiguriert sind, um eine Schnittstelle zum Systemspeicher zu bilden;
      • eine Interconnect-Fabric, die konfiguriert ist, um Kommunikation zwischen der einen oder den mehreren Speichersteuerungsschaltungen und den Prozessorkernen, den Grafikverarbeitungseinheiten und den Peripherievorrichtungen bereitzustellen; und
      • eine Off-Chip-Verschaltung, die mit der Interconnect-Fabric gekoppelt und konfiguriert ist, um die Interconnect-Fabric mit einer entsprechenden Interconnect-Fabric auf einer anderen Instanz der integrierten Schaltung zu koppeln, wobei die Interconnect-Fabric und die Off-Chip-Verschaltung eine Schnittstelle bereitstellen, die die eine oder mehrere Speichersteuerungsschaltungen, die Prozessorkerne, Grafikverarbeitungseinheiten und Peripherievorrichtungen entweder in einer einzelnen Instanz der integrierten Schaltung oder in zwei oder mehr Instanzen der integrierten Schaltung transparent verbindet.
    • 112. Integrierte Schaltung von Beispiel 111, wobei sich ein vereinheitlichter Adressraum, der durch eine vereinheitlichte Speicherarchitektur definiert ist, über die zwei oder mehr Instanzen des Dies mit integrierter Schaltung erstreckt, die für Software, die auf den Prozessorkernen, den Grafikverarbeitungseinheiten oder den Peripherievorrichtungen ausgeführt wird, transparent ist.
    • 113. Integrierte Schaltung von Beispiel 112, wobei der vereinheitlichte Adressraum auf die einzelne Instanz transparent für Software abgebildet wird.
    • 114. Integrierte Schaltung von einem der Beispiele 111 bis 112, ferner umfassend eine lokale Interrupt-Verteilungsschaltung zum Verteilen von Interrupts auf die Prozessorkerne in der integrierten Schaltung.
    • 115. Integrierte Schaltung von Beispiel 114, ferner umfassend eine globale Interrupt-Verteilungsschaltung, wobei die lokalen Interrupt-Verteilungsschaltungen und die globale Interrupt-Verteilungsschaltung ein Mehrebenen-Interrupt-Verteilungsschema implementieren, wenn zwei oder mehr Instanzen der integrierten Schaltung verwendet werden.
    • 116. Integrierte Schaltung von Beispiel 115, wobei die globale Interrupt-Verteilungsschaltung konfiguriert ist, um eine Interrupt-Anforderung an die lokalen Interrupt-Verteilungsschaltungen in mindestens zwei Instanzen in einer Sequenz zu übertragen, und wobei die lokalen Interrupt-Verteilungsschaltungen konfiguriert sind, um die Interrupt-Anforderung an lokale Interrupt-Ziele in einer Sequenz zu übertragen, bevor sie auf die Interrupt-Anforderung von der globalen Interrupt-Verteilungsschaltung antworten.
    • 117. Integrierte Schaltung von einem der Beispiele 111 bis 116, wobei ein gegebenes Die mit integrierter Schaltung eine Leistungsverwaltungsschaltung umfasst, die konfiguriert ist, um einen lokalen Leistungszustand des gegebenen Die mit integrierter Schaltung zu verwalten.
    • 118. Integrierte Schaltung von Beispiel 117, ferner umfassend eine weitere Leistungsverwaltungsschaltung, die konfiguriert ist, um die Leistungsverwaltungsschaltungen auf den zwei oder mehr Instanzen der integrierten Schaltung zu synchronisieren.
    • 119. Integrierte Schaltung von einem der Beispiele 111 bis 118, wobei die Peripherievorrichtungen eine oder mehrere von folgenden einschließen: eine Audioverarbeitungsvorrichtung, eine Videoverarbeitungsvorrichtung, eine Beschleunigerschaltung für maschinelles Lernen, eine Matrix-Arithmetik-Beschleunigerschaltung, eine Kameraverarbeitungsschaltung, eine Display-Pipeline-Schaltung, eine nichtflüchtige Speichersteuerung, eine Peripheral Component Interconnect-Steuerung, einen Sicherheitsprozessor oder eine serielle Bussteuerung.
    • 120. Integrierte Schaltung von einem der Beispiele 111 bis 119, wobei die Interconnect-Fabric kohärente Agenten miteinander verbindet.
    • 121. Integrierte Schaltung von Beispiel 120, wobei ein einzelner der Prozessorkerne einem kohärenten Agenten entspricht.
    • 122. Integrierte Schaltung von Beispiel 120, wobei ein Cluster von Prozessorkernen einem kohärenten Agenten entspricht.
    • 123. Integrierte Schaltung von einem der Beispiele 111 bis 122, wobei eine gegebene der Peripherievorrichtungen ein nicht-kohärenter Agent ist
    • 124. Integrierte Schaltung von Beispiel 123, ferner umfassend einen Eingabe/Ausgabe-Agenten, der zwischen der gegebenen Peripherievorrichtung und der Interconnect-Fabric angeordnet ist, wobei der Eingabe/Ausgabe-Agent konfiguriert ist, um Kohärenzprotokolle der Interconnect-Fabric in Bezug auf die gegebene Peripherievorrichtung durchzusetzen.
    • 125. Integrierte Schaltung von Beispiel 124, wobei der Eingabe/Ausgabe-Agent die Reihenfolge der Anforderungen von der gegebenen Peripherievorrichtung unter Verwendung der Kohärenzprotokolle sicherstellt.
    • 126. Integrierte Schaltung von Beispiel 124, wobei der Eingabe/Ausgabe-Agent konfiguriert ist, um ein Netzwerk aus zwei oder mehr Peripherievorrichtungen mit der Interconnect-Fabric zu koppeln.
    • 127. Integrierte Schaltung von einem der Beispiele 111 bis 126, ferner umfassend eine Hashing-Schaltlogik, die konfiguriert ist, um den Speicheranforderungsverkehr gemäß einem selektiv programmierbaren Hashing-Protokoll auf den Systemspeicher zu verteilen.
    • 128. Integrierte Schaltung von Beispiel 127, wobei mindestens eine Programmierung des programmierbaren Hashing-Protokolls eine Reihe von Speicheranforderungen gleichmäßig auf eine Vielzahl von Speichersteuerungen im System für eine Vielzahl von Speicheranforderungen in der Reihe verteilt.
    • 129. Integrierte Schaltung von Beispiel 128, wobei mindestens eine Programmierung des programmierbaren Hashing-Protokolls benachbarte Anforderungen innerhalb des Speicherraums mit einer festgelegten Granularität auf physisch entfernte Speicherschnittstellen verteilt.
    • 130. System, umfassend:
      • eine Vielzahl von Instanzen einer integrierten Schaltung, wobei die integrierte Schaltung umfasst:
        • eine Vielzahl von Prozessorkernen;
        • eine Vielzahl von Grafikverarbeitungseinheiten;
        • eine Vielzahl von Peripherievorrichtungen, die sich von den Prozessorkernen und Grafikverarbeitungseinheiten unterscheiden;
        • eine oder mehrere Speichersteuerungsschaltungen, die konfiguriert sind, um eine Schnittstelle zum Systemspeicher zu bilden;
        • eine Interconnect-Fabric, die konfiguriert ist, um Kommunikation zwischen der einen oder den mehreren Speichersteuerungsschaltungen und den Prozessorkernen, den Grafikverarbeitungseinheiten und den Peripherievorrichtungen bereitzustellen; und
        • eine Off-Chip-Verschaltung, die mit der Interconnect-Fabric gekoppelt und konfiguriert ist, um die Interconnect-Fabric mit einer entsprechenden Interconnect-Fabric auf einer anderen der Vielzahl von Instanzen der integrierten Schaltung zu koppeln, wobei die Interconnect-Fabric und die Off-Chip-Verschaltung eine Schnittstelle bereitstellen, die die eine oder mehrere Speichersteuerungsschaltungen, die Prozessorkerne, Grafikverarbeitungseinheiten und Peripherievorrichtungen entweder in einer einzelnen Instanz der integrierten Schaltung oder in zwei oder mehr Instanzen der integrierten Schaltung transparent verbindet.
    • 131. System nach Beispiel 130, ferner umfassend ein Substrat, das konfiguriert ist, um die Off-Chip-Verschaltung von einer der Vielzahl von Instanzen mit der Off-Chip-Verschaltung einer anderen der Vielzahl von Instanzen zu koppeln.
    • 132. System nach Beispiel 130, ferner umfassend eine netzwerkintegrierte Schaltung, die konfiguriert ist, um mit der Off-Chip-Verschaltung in der Vielzahl der Instanzen gekoppelt zu werden und die Kommunikation zwischen der Vielzahl der Instanzen zu leiten.
  • 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.
  • ZITATE ENTHALTEN IN DER BESCHREIBUNG
  • Diese Liste der vom Anmelder aufgeführten Dokumente wurde automatisiert erzeugt und ist ausschließlich zur besseren Information des Lesers aufgenommen. Die Liste ist nicht Bestandteil der deutschen Patent- bzw. Gebrauchsmusteranmeldung. Das DPMA übernimmt keinerlei Haftung für etwaige Fehler oder Auslassungen.
  • Zitierte Patentliteratur
    • US 63/170868 [0067]
    • US 63/175868 [0067]
    • US 63/175877 [0067]
    • US 63/077371 [0070]

Claims (111)

  1. System, umfassend: eine Vielzahl von Prozessorkernen; eine Vielzahl von Grafikverarbeitungseinheiten; eine Vielzahl von Peripherievorrichtungen, die sich von den Prozessorkernen und Grafikverarbeitungseinheiten unterscheiden; eine Vielzahl von Speichersteuerungsschaltungen, die konfiguriert sind, um eine Schnittstelle zum Systemspeicher zu bilden; und eine Interconnect-Fabric, die konfiguriert ist, um Kommunikation zwischen den Speichersteuerungsschaltungen und den Prozessorkernen, den Grafikverarbeitungseinheiten und den Peripherievorrichtungen bereitzustellen; wobei die Prozessorkerne, Grafikverarbeitungseinheiten, Peripherievorrichtungen und Speichersteuerschaltungen konfiguriert sind, um über eine vereinheitlichte Speicherarchitektur zu kommunizieren, wobei eine gegebene Seite innerhalb eines vereinheitlichten Adressraums, der durch die vereinheitlichte Speicherarchitektur definiert ist, unter den Speichersteuerungsschaltungen verteilt ist; und wobei die Prozessorkerne, Grafikverarbeitungseinheiten, Peripherievorrichtungen, eine oder mehrere Speichersteuerungsschaltungen und eine Interconnect-Fabric in einem System-on-a-Chip (SOC) eingeschlossen sind, das auf einem oder mehreren co-verpackten Halbleiter-Dies integriert ist.
  2. System nach Anspruch 1, wobei die Prozessorkerne, Grafikverarbeitungseinheiten und Peripherievorrichtungen konfiguriert sind, um auf jede Adresse innerhalb eines vereinheitlichten Adressraums zuzugreifen, der durch die vereinheitlichte Speicherarchitektur definiert ist.
  3. System nach Anspruch 2, wobei der vereinheitlichte Adressraum ein virtueller Adressraum ist, der sich von einem durch den Systemspeicher bereitgestellten physischen Adressraum unterscheidet.
  4. System nach einem der Ansprüche 1 bis 3, wobei die vereinheitlichte Speicherarchitektur einen gemeinsamen Semantiksatz für den Speicherzugriff durch die Prozessorkerne, Grafikverarbeitungseinheiten und Peripherievorrichtungen bereitstellt.
  5. System nach Anspruch 4, wobei die Semantik Speicherordnungseigenschaften einschließt.
  6. System nach Anspruch 4 oder 5, wobei die Semantik eine Qualität von Dienstattributen einschließt.
  7. System nach einem der Ansprüche 4 bis 6, wobei die Semantik Cache-Koherenz einschließt.
  8. System nach einem der vorstehenden Ansprüche, wobei die Speichersteuerungsschaltungen jeweilige Schnittstellen zu einer oder mehreren Speichervorrichtungen einschließen, die auf Direktzugriffsspeicher abbildbar sind.
  9. System nach Anspruch 8, wobei eine oder mehrere Speichervorrichtungen einen dynamischen Direktzugriffsspeicher (DRAM) umfassen.
  10. System nach einem der vorstehenden Ansprüche, ferner umfassend eine oder mehrere Cache-Ebenen zwischen den Prozessorkernen, Grafikverarbeitungseinheiten, Peripherievorrichtungen und dem Systemspeicher.
  11. System nach Anspruch 10, wobei die Speichersteuerungsschaltungen jeweilige Speicher-Caches einschließen, die zwischen der Interconnect-Fabric und dem Systemspeicher angeordnet sind, wobei die jeweiligen Speicher-Caches eine der einen oder mehreren Cache-Ebenen sind.
  12. System nach einem der vorstehenden Ansprüche, wobei die Interconnect-Fabric mindestens zwei Netzwerke mit heterogenen Interconnect-Topologien umfasst.
  13. System nach einem der vorstehenden Ansprüche, wobei die Interconnect-Fabric mindestens zwei Netzwerke mit heterogenen Betriebseigenschaften umfasst.
  14. System nach Anspruch 12 oder 13, wobei die mindestens zwei Netzwerke ein kohärentes Netzwerk einschließen, das die Prozessorkerne und die eine oder mehrere Speichersteuerungsschaltungen miteinander verbindet.
  15. System nach einem der Ansprüche 12 bis 14, wobei die mindestens zwei Netzwerke ein mit den Grafikverarbeitungseinheiten und der einen oder mehreren Speichersteuerungsschaltungen gekoppeltes Netzwerk mit gelockerter Sortierung einschließen.
  16. System nach Anspruch 15, wobei die Peripherievorrichtungen eine Teilmenge von Vorrichtungen einschließen, wobei die Teilmenge eine oder mehrere von einer Beschleunigerschaltung für maschinelles Lernen oder eine Massenmedienvorrichtung mit gelockerter Sortierung einschließt, und wobei das Netzwerk mit gelockerter Sortierung ferner mit der Teilmenge von Vorrichtungen an die eine oder mehrere Speichersteuerungsschaltungen gekoppelt ist.
  17. System nach einem der Ansprüche 12 bis 16, wobei die mindestens zwei Netzwerke ein Eingabe-Ausgabe-Netzwerk einschließen, das gekoppelt ist, um die Peripherievorrichtungen und die eine oder mehrere Speichersteuerungsschaltungen miteinander zu verbinden.
  18. System nach Anspruch 17, wobei die Peripherievorrichtungen eine oder mehrere Echtzeitvorrichtungen einschließen.
  19. System nach einem der Ansprüche 12 bis 18, wobei die mindestens zwei Netzwerke ein erstes Netzwerk umfassen, das eine oder mehrere Eigenschaften umfasst, um die Latenz im Vergleich zu einem zweiten Netzwerk der mindestens zwei Netzwerke zu reduzieren.
  20. System nach Anspruch 19, wobei die eine oder die mehreren Eigenschaften eine kürzere Route als das zweite Netzwerk umfassen.
  21. System nach Anspruch 19 oder 20, wobei die eine oder mehrere Eigenschaften eine Verdrahtung in Metallschichten umfassen, die geringere Latenzeigenschaften aufweisen als die Verdrahtung für das zweite Netzwerk.
  22. System nach einem der Ansprüche 12 bis 21, wobei die mindestens zwei Netzwerke ein erstes Netzwerk umfassen, das eine oder mehrere Eigenschaften zur Erhöhung der Bandbreite im Vergleich zu einem zweiten Netzwerk der mindestens zwei Netzwerke umfasst.
  23. System nach Anspruch 22, wobei die eine oder mehrere Eigenschaften eine breitere Verschaltung im Vergleich zum zweiten Netzwerk umfassen.
  24. System nach Anspruch 22 oder 23, wobei die eine oder mehrere Eigenschaften eine Verdrahtung in Metallschichten umfassen, die dichter sind als die Metallschichten, die für die Verdrahtung für das zweite Netzwerk verwendet werden.
  25. System nach einem der Ansprüche 12 bis 24, wobei die von den mindestens zwei Netzwerken verwendeten Interconnect-Topologien mindestens eine von einer Sterntopologie, einer Maschentopologie, einer Ringtopologie, einer Baumtopologie, einer Fat-Tree-Topologie, einer Hypercube-Topologie oder einer Kombination von einer oder den Topologien einschließen.
  26. System nach einem der Ansprüche 12 bis 25, wobei die von den mindestens zwei Netzwerken verwendeten Betriebseigenschaften mindestens eine von stark geordneter Speicherkohärenz oder entspannt geordneter Speicherkohärenz einschließen.
  27. System nach einem der Ansprüche 12 bis 26, wobei die mindestens zwei Netzwerke physisch und logisch unabhängig sind.
  28. System nach einem der Ansprüche 12 bis 27, wobei die mindestens zwei Netzwerke in einer ersten Betriebsart physisch getrennt sind und wobei ein erstes Netzwerk der mindestens zwei Netzwerke und ein zweites Netzwerk der mindestens zwei Netzwerke virtuell sind und in einer zweiten Betriebsart ein einziges physisches Netzwerk gemeinsam nutzen.
  29. System nach einem der vorstehenden Ansprüche, wobei die Prozessorkerne, die Grafikverarbeitungseinheiten, die Peripherievorrichtungen und die Interconnect-Fabric auf zwei oder mehr Dies mit integrierter Schaltung verteilt sind.
  30. System nach Anspruch 29, wobei sich ein vereinheitlichter Adressraum, der durch die vereinheitlichte Speicherarchitektur definiert ist, über die zwei oder mehreren Dies mit integrierter Schaltung in einer für Software, die auf den Prozessorkernen, Grafikverarbeitungseinheiten oder Peripherievorrichtungen ausgeführt wird, transparenten Weise erstreckt.
  31. System von einem der Ansprüche 29 bis 30, wobei sich die Interconnect-Fabric über die zwei Dies mit integrierter Schaltung erstreckt und wobei eine Kommunikation zwischen einer Quelle und einem Ziel transparent für einen Ort der Quelle und des Ziels auf den Dies mit integrierter Schaltung geleitet wird.
  32. System nach einem der Ansprüche 29 bis 31, wobei sich die Interconnect-Fabric über die zwei Dies mit integrierter Schaltung erstreckt und Hardware-Schaltungen verwendet, um eine Kommunikation zwischen einer Quelle und einem Ziel automatisch zu leiten, unabhängig davon, ob sich die Quelle und das Ziel auf demselben Die mit integrierter Schaltung befinden oder nicht.
  33. System nach einem der Ansprüche 29 bis 32, ferner umfassend mindestens eine Interposer-Vorrichtung, die konfiguriert ist, um Busse der Interconnect-Fabric über die zwei oder Dies mit integrierter Schaltung zu koppeln.
  34. System nach einem der Ansprüche 1 bis 33, wobei ein gegebenes Die mit integrierter Schaltung eine lokale Interrupt-Verteilungsschaltung einschließt, um Interrupts auf die Prozessorkerne in dem gegebenen Die mit integrierter Schaltung zu verteilen.
  35. System nach Anspruch 34, umfassend zwei oder mehr Dies mit integrierter Schaltung, die jeweilige lokale Interrupt-Verteilungsschaltungen einschließen, und wobei mindestens eines der zwei oder mehr Dies mit integrierter Schaltung eine globale Interrupt-Verteilungsschaltung einschließt, wobei die lokalen Interrupt-Verteilungsschaltungen und die globale Interrupt-Verteilungsschaltung ein Mehrebenen-Interrupt-Verteilungsschema implementieren.
  36. System nach Anspruch 35, wobei die globale Interrupt-Verteilungsschaltung konfiguriert ist, um eine Interrupt-Anforderung an die lokalen Interrupt-Verteilungsschaltungen in einer Sequenz zu übertragen, und wobei die lokalen Interrupt-Verteilungsschaltungen konfiguriert sind, um die Interrupt-Anforderung an lokale Interrupt-Ziele in einer Sequenz zu übertragen, bevor sie auf die Interrupt-Anforderung von der globalen Interrupt-Verteilungsschaltung antworten.
  37. System nach einem der Ansprüche 1 bis 36, wobei ein gegebenes Die mit integrierter Schaltung eine Leistungsverwaltungsschaltung umfasst, die konfiguriert ist, um einen lokalen Leistungszustand des gegebenen Die mit integrierter Schaltung zu verwalten.
  38. System nach Anspruch 37, umfassend zwei oder mehr Dies mit integrierter Schaltung, die jeweilige Leistungsverwaltungsschaltungen einschließen, die konfiguriert sind, um den lokalen Leistungszustand des Dies mit integrierter Schaltung zu verwalten, und wobei mindestens einer der zwei oder mehr Dies mit integrierter Schaltung eine weitere Leistungsverwaltungsschaltung einschließt, die konfiguriert ist, um die Leistungsverwaltungsschaltungen zu synchronisieren.
  39. System nach einem der vorstehenden Ansprüche, wobei die Peripherievorrichtungen eine oder mehrere von folgenden einschließen: eine Audioverarbeitungsvorrichtung, eine Videoverarbeitungsvorrichtung, eine Beschleunigerschaltung für maschinelles Lernen, eine Matrixarithmetik-Beschleunigerschaltung, eine Kameraverarbeitungsschaltung, eine Display-Pipeline-Schaltung, eine nichtflüchtige Speichersteuerung, eine Peripheral Component Interconnect-Steuerung, einen Sicherheitsprozessor oder eine serielle Bus steuerung.
  40. System nach einem der vorstehenden Ansprüche, wobei die Interconnect-Fabric kohärente Agenten miteinander verbindet.
  41. System nach Anspruch 40, wobei ein einzelner der Prozessorkerne einem kohärenten Agenten entspricht.
  42. System nach Anspruch 40, wobei ein Cluster von Prozessorkernen einem kohärenten Agenten entspricht.
  43. System nach einem der vorstehenden Ansprüche, wobei eine gegebene der Peripherievorrichtungen ein nicht-kohärenter Agent ist.
  44. System nach Anspruch 43, ferner umfassend einen Eingabe/Ausgabe-Agenten, der zwischen der gegebenen Peripherievorrichtung und der Interconnect-Fabric angeordnet ist, wobei der Eingabe/Ausgabe-Agent konfiguriert ist, um Kohärenzprotokolle der Interconnect-Fabric in Bezug auf die gegebene Peripherievorrichtung durchzusetzen.
  45. System nach Anspruch 44, wobei der Eingabe/Ausgabe-Agent die Reihenfolge der Anforderungen von der gegebenen Peripherievorrichtung unter Verwendung der Kohärenzprotokolle sicherstellt.
  46. System nach Anspruch 44 oder 45, wobei der Eingabe/Ausgabe-Agent konfiguriert ist, um ein Netzwerk aus zwei oder mehr Peripherievorrichtungen mit der Interconnect-Fabric zu koppeln.
  47. System nach einem der vorstehenden Ansprüche, ferner umfassend eine Hashing-Schaltlogik, die konfiguriert ist, um den Speicheranforderungsverkehr gemäß einem selektiv programmierbaren Hashing-Protokoll auf den Systemspeicher zu verteilen.
  48. System nach Anspruch 47, wobei mindestens eine Programmierung des programmierbaren Hashing-Protokolls eine Reihe von Speicheranforderungen gleichmäßig auf eine Vielzahl von Speichersteuerungen im System für eine Vielzahl von Speicheranforderungen in der Reihe verteilt.
  49. System nach Anspruch 29, wobei mindestens eine Programmierung des programmierbaren Hashing-Protokolls benachbarte Anforderungen innerhalb des Speicherraums mit einer festgelegten Granularität auf physisch entfernte Speicherschnittstellen verteilt.
  50. System nach einem der vorstehenden Ansprüche, ferner umfassend eine Vielzahl von Verzeichnissen, die konfiguriert sind, um einen Kohärenzzustand von Teilmengen des vereinheitlichten Speicheradressraums zu verfolgen, wobei die Vielzahl von Verzeichnissen in dem System verteilt ist.
  51. System nach Anspruch 50, wobei die Vielzahl der Verzeichnisse auf die Speichersteuerschaltungen verteilt ist.
  52. System nach einem der vorstehenden Ansprüche, wobei eine gegebene Speichersteuerungsschaltung der Speichersteuerungsschaltungen ein Verzeichnis umfasst, das konfiguriert ist, um eine Vielzahl von Cache-Blöcken zu verfolgen, die Daten in einem Abschnitt des Systemspeichers entsprechen, zu dem die gegebene Speichersteuerungsschaltung eine Schnittstelle bildet, wobei das Verzeichnis konfiguriert ist, um zu verfolgen, welche einer Vielzahl von Caches in dem System einen gegebenen Cache-Block der Vielzahl von Cache-Blöcken zwischenspeichern, wobei das Verzeichnis in Bezug auf Speicheranforderungen, die in dem Verzeichnis geordnet und verarbeitet wurden, präzise ist, selbst für den Fall, dass die Speicheranforderungen in dem System noch nicht abgeschlossen sind.
  53. System von einem der Ansprüche 50 bis 52, wobei die gegebene Speichersteuerung konfiguriert ist, um auf Grundlage einer Speicheranforderung für den gegebenen Cache-Block einen oder mehrere Kohärenzerhaltungsbefehle für den gegebenen Cache-Block auszugeben, wobei der eine oder die mehreren Kohärenzerhaltungsbefehle einen Cache-Zustand für den gegebenen Cache-Block in einem entsprechenden Cache der Vielzahl von Caches einschließen, wobei der entsprechende Cache konfiguriert ist, um die Verarbeitung eines gegebenen Kohärenzerhaltungsbefehls auf Grundlage des Cache-Zustands in dem entsprechenden Cache zu verzögern, der nicht mit dem Cache-Zustand in dem gegebenen Kohärenzerhaltungsbefehl übereinstimmt.
  54. System von einem der Ansprüche 50 bis 53, wobei ein erster Cache konfiguriert ist, um den gegebenen Cache-Block in einem gemeinsam genutzten Primärzustand zu speichern, und ein zweiter Cache konfiguriert ist, um den gegebenen Cache-Block in einem gemeinsam genutzten Sekundärzustand zu speichern, und wobei die gegebene Speichersteuerungschaltung konfiguriert ist, um zu bewirken, dass der erste Cache den gegebenen Cache-Block an einen Anforderer auf Grundlage der Speicheranforderung und des gemeinsam genutzten Primärzustands in dem ersten Cache überträgt.
  55. System von einem der Ansprüche 50 bis 54, wobei die gegebene Speichersteuerungsschaltung konfiguriert ist, um einen von einem ersten Kohärenzwartungsbefehl und einem zweiten Kohärenzwartungsbefehl an einen ersten Cache der Vielzahl von Caches auf Grundlage einer Art einer ersten Speicheranforderung auszugeben, wobei der erste Cache konfiguriert ist, um einen ersten Cache-Block an einen Anforderer weiterzuleiten, der die erste Speicheranforderung auf Grundlage des ersten Kohärenzwartungsbefehls ausgegeben hat, und wobei der erste Cache konfiguriert ist, um den ersten Cache-Block auf Grundlage des zweiten Kohärenzwartungsbefehls an die gegebene Speichersteuerungsschaltung zurückzugeben.
  56. System-on-a-Chip (SOC), umfassend: eine Vielzahl von Prozessorkernen; eine Vielzahl von Grafikverarbeitungseinheiten; eine Vielzahl von Peripherievorrichtungen; eine oder mehrere Speichersteuerungsschaltungen, und eine Interconnect-Fabric, die konfiguriert ist, um Kommunikation zwischen der einen oder den mehreren Speichersteuerungsschaltungen und den Prozessorkernen, den Grafikverarbeitungseinheiten und den Peripherievorrichtungen bereitzustellen; wobei die Prozessorkerne, Grafikverarbeitungseinheiten, Peripherievorrichtungen, eine oder mehrere Speichersteuerungsschaltungen und eine Interconnect-Fabric auf einem oder mehreren co-verpackten Halbleiter-Dies integriert sind; wobei die Interconnect-Fabric konfiguriert ist, um eine Verbindung einer variablen Anzahl von Prozessorkernen, Grafikverarbeitungseinheiten, Peripherievorrichtungen oder Speichersteuerungsschaltungen zu ermöglichen; und wobei die Prozessorkerne, Grafikverarbeitungseinheiten, Peripherievorrichtungen und Speichersteuerungsschaltungen konfiguriert sind, um über die Interconnect-Fabric über eine vereinheitlichte Speicherarchitektur zu kommunizieren.
  57. SOC nach Anspruch 56, wobei die Prozessorkerne, Grafikverarbeitungseinheiten und Peripherievorrichtungen konfiguriert sind, um auf jede Adresse innerhalb eines vereinheitlichten Adressraums zuzugreifen, der durch die vereinheitlichte Speicherarchitektur definiert ist.
  58. SOC nach Anspruch 56 oder 57, wobei die vereinheitlichte Speicherarchitektur einen gemeinsamen Semantiksatz für den Speicherzugriff durch die Prozessorkerne, Grafikverarbeitungseinheiten und Peripherievorrichtungen bereitstellt.
  59. SOC nach einem der Ansprüche 56 bis 58, wobei die Semantik Speicherordnungseigenschaften einschließt.
  60. SOC nach einem der Ansprüche 56 bis 59, wobei die Semantik eine Qualität von Dienstattributen einschließt.
  61. SOC nach einem der Ansprüche 56 bis 60, wobei die Semantik eine Speicherkoherenz einschließt.
  62. SOC nach einem der Ansprüche 56 bis 61, ferner umfassend eine Vielzahl von Verzeichnissen, die konfiguriert sind, um einen Kohärenzzustand von Teilmengen eines vereinheitlichten Speicheradressraums zu verfolgen, der durch die vereinheitlichte Speicherarchitektur definiert ist, wobei die Vielzahl von Verzeichnissen in dem SOC verteilt ist.
  63. SOC nach Anspruch 62, wobei die Vielzahl der Verzeichnisse auf die Speichersteuerschaltungen verteilt ist.
  64. SOC von einem der Ansprüche 56 bis 63, wobei eine gegebene Speichersteuerungsschaltung der einen oder mehreren Speichersteuerungsschaltungen ein Verzeichnis umfasst, das konfiguriert ist, um eine Vielzahl von Cache-Blöcken zu verfolgen, die Daten in einem Systemspeicherabschnitt entsprechen, zu dem die gegebene Speichersteuerungsschaltung eine Schnittstelle bildet, wobei das Verzeichnis konfiguriert ist, um zu verfolgen, welche einer Vielzahl von Caches in dem System einen gegebenen Cache-Block der Vielzahl von Cache-Blöcken zwischenspeichern, wobei das Verzeichnis in Bezug auf Speicheranforderungen, die in dem Verzeichnis geordnet und verarbeitet wurden, präzise ist, selbst für den Fall, dass die Speicheranforderungen in dem System noch nicht abgeschlossen sind.
  65. System, umfassend: eine Vielzahl von Prozessorkernen; eine Vielzahl von Grafikverarbeitungseinheiten; eine Vielzahl von Peripherievorrichtungen, die sich von den Prozessorkernen und Grafikverarbeitungseinheiten unterscheiden; eine oder mehrere Speichersteuerungsschaltungen, die konfiguriert sind, um eine Schnittstelle zum Systemspeicher zu bilden; und eine Interconnect-Fabric, die konfiguriert ist, um Kommunikation zwischen der einen oder den mehreren Speichersteuerungsschaltungen und den Prozessorkernen, den Grafikverarbeitungseinheiten und den Peripherievorrichtungen bereitzustellen; wobei die Interconnect-Fabric mindestens zwei Netzwerke mit heterogenen Betriebseigenschaften umfasst; und wobei die Prozessorkerne, die Grafikverarbeitungseinheiten, die Peripherievorrichtungen, die eine oder die mehreren Speichersteuerungsschaltungen und eine die Interconnect-Fabric in einem System-on-a-Chip (SOC) eingeschlossen sind, das auf einem oder mehreren co-verpackten Halbleiter-Dies integriert ist.
  66. System nach Anspruch 65, wobei die Interconnect-Fabric mindestens zwei Netzwerke mit heterogenen Interconnect-Topologien umfasst.
  67. System nach Anspruch 65 oder 66, wobei die mindestens zwei Netzwerke ein kohärentes Netzwerk einschließen, das die Prozessorkerne und die eine oder mehrere Speichersteuerungsschaltungen miteinander verbindet.
  68. System nach einem der Ansprüche 65 bis 67, wobei die mindestens zwei Netzwerke ein mit den Grafikverarbeitungseinheiten und der einen oder mehreren Speichersteuerungsschaltungen gekoppeltes Netzwerk mit gelockerter Sortierung einschließen.
  69. System nach Anspruch 68, wobei die Peripherievorrichtungen eine Teilmenge von Vorrichtungen einschließen, wobei die Teilmenge eine oder mehrere von einer Beschleunigerschaltung für maschinelles Lernen oder eine Massenmedienvorrichtung mit gelockerter Sortierung einschließt, und wobei das Netzwerk mit gelockerter Sortierung ferner mit der Teilmenge von Vorrichtungen an die eine oder mehrere Speichersteuerungsschaltungen gekoppelt ist.
  70. System nach einem der Ansprüche 68 bis 69, wobei die mindestens zwei Netzwerke ein Eingabe-Ausgabe-Netzwerk einschließen, das gekoppelt ist, um die Peripherievorrichtungen und die eine oder mehrere Speichersteuerungsschaltungen miteinander zu verbinden.
  71. System nach Anspruch 70, wobei die Peripherievorrichtungen eine oder mehrere Echtzeitvorrichtungen einschließen.
  72. System nach einem der Ansprüche 65 bis 71, wobei die mindestens zwei Netzwerke ein erstes Netzwerk umfassen, das eine oder mehrere Eigenschaften umfasst, um die Latenz im Vergleich zu einem zweiten Netzwerk der mindestens zwei Netzwerke zu reduzieren.
  73. System nach Anspruch 72, wobei die eine oder die mehreren Eigenschaften eine kürzere Route als das zweite Netzwerk umfassen.
  74. System nach Anspruch 72 oder 73, wobei die eine oder mehrere Eigenschaften eine Verdrahtung in Metallschichten umfassen, die eine oder mehrere niedrigere Latenzeigenschaften aufweisen als die Metallschichten, die für die Verdrahtung für das zweite Netzwerk verwendet werden.
  75. System nach Anspruch 72, wobei die mindestens zwei Netzwerke ein erstes Netzwerk umfassen, das eine oder mehrere Eigenschaften zur Erhöhung der Bandbreite im Vergleich zu einem zweiten Netzwerk der mindestens zwei Netzwerke umfasst.
  76. System nach Anspruch 75, wobei die eine oder die mehreren Eigenschaften eine Verschaltung umfassen, die eine größere Anzahl von Drähten verwendet als eine Verschaltung für das zweite Netzwerk.
  77. System nach Anspruch 75 oder 76, wobei die eine oder mehrere Eigenschaften eine Verdrahtung in Metallschichten umfassen, die dichter sind als die Metallschichten, die für die Verdrahtung für das zweite Netzwerk verwendet werden.
  78. System von einem der Ansprüche 65 bis 77, wobei die von den mindestens zwei Netzwerken verwendeten Interconnect-Topologien mindestens eine von einer Sterntopologie, einer Maschentopologie, einer Ringtopologie, einer Baumtopologie, einer Fat-Tree-Topologie, einer Hypercube-Topologie oder einer Kombination von einer oder den Topologien einschließen.
  79. System nach einem der Ansprüche 65 bis 78, wobei die von den mindestens zwei Netzwerken verwendeten Betriebseigenschaften mindestens eine von stark geordneter Speicherkohärenz oder entspannt geordneter Speicherkohärenz einschließen.
  80. System nach Anspruch 68, wobei die mindestens zwei Netzwerke physisch und logisch unabhängig sind.
  81. System nach einem der Ansprüche 65 bis 80, wobei die mindestens zwei Netzwerke in einer ersten Betriebsart physisch getrennt sind und wobei ein erstes Netzwerk der mindestens zwei Netzwerke und ein zweites Netzwerk der mindestens zwei Netzwerke virtuell sind und in einer zweiten Betriebsart ein einziges physisches Netzwerk gemeinsam nutzen.
  82. System-on-a-Chip (SOC), das SOC umfassend: eine Vielzahl von Prozessorkernen; eine Vielzahl von Grafikverarbeitungseinheiten; eine Vielzahl von Peripherievorrichtungen; eine oder mehrere Speichersteuerungsschaltungen; und eine Interconnect-Fabric, die konfiguriert ist, um Kommunikation zwischen der einen oder den mehreren Speichersteuerungsschaltungen und den Prozessorkernen, den Grafikverarbeitungseinheiten und den Peripherievorrichtungen bereitzustellen; wobei die Interconnect-Fabric mindestens ein erstes Netzwerk und ein zweites Netzwerk umfasst, wobei das erste Netzwerk eine oder mehrere Eigenschaften umfasst, um die Latenz im Vergleich zu einem zweiten Netzwerk der mindestens zwei Netzwerke zu reduzieren, und wobei eine gegebene der einen oder mehreren Speichersteuerungsschaltungen mit dem ersten und dem zweiten Netzwerk gekoppelt und konfiguriert ist, um Speicheranforderungen von sowohl dem ersten als auch dem zweiten Netzwerk zu empfangen; und wobei die Prozessorkerne, Grafikverarbeitungseinheiten, Peripherievorrichtungen, eine oder mehrere Speichersteuerungsschaltungen und eine Interconnect-Fabric auf einem oder mehreren co-verpackten Halbleiter-Dies integriert sind.
  83. SOC nach Anspruch 82, wobei die eine oder die mehreren Eigenschaften eine kürzere Route für das erste Netzwerk über eine Oberfläche des Halbleiter-Dies umfassen als eine Route des zweiten Netzwerks.
  84. SOC nach Anspruch 82 oder 83, wobei die eine oder mehrere Eigenschaften eine Verdrahtung in Metallschichten umfassen, die eine oder mehrere niedrigere Latenzeigenschaften aufweisen als die Metallschichten, die für die Verdrahtung für das zweite Netzwerk verwendet werden.
  85. SOC nach einem der Ansprüche 82 bis 84, wobei das zweite Netzwerk eine oder mehrere zweite Eigenschaften umfasst, um die Bandbreite im Vergleich zum ersten Netzwerk zu erhöhen.
  86. SOC nach Anspruch 85, wobei die eine oder mehreren zweiten Eigenschaften eine Verschaltung mit mehr Drähten im Vergleich zu einer Verschaltung im zweiten Netzwerk umfassen.
  87. SOC nach Anspruch 85 oder 86, wobei die eine oder mehreren zweiten Eigenschaften eine Verdrahtung in Metallschichten umfassen, die dichter sind als die Metallschichten, die für die Verdrahtung des zweiten Netzwerks verwendet werden.
  88. System-on-a-Chip (SOC), das auf einem Halbleiter-Die integriert ist, wobei das SOC umfasst: eine Vielzahl von Prozessorkernen; eine Vielzahl von Grafikverarbeitungseinheiten; eine Vielzahl von Peripherievorrichtungen; eine oder mehrere Speichersteuerungsschaltungen, und eine Interconnect-Fabric, die konfiguriert ist, um Kommunikation zwischen der einen oder den mehreren Speichersteuerungsschaltungen und den Prozessorkernen, den Grafikverarbeitungseinheiten und den Peripherievorrichtungen bereitzustellen; wobei die Interconnect-Fabric mindestens ein erstes Netzwerk und ein zweites Netzwerk umfasst, wobei das erste Netzwerk physisch und logisch unabhängig von dem zweiten Netzwerk ist, und wobei das erste und das zweite Netzwerk heterogene Interconnect-Topologien aufweisen; und wobei die Prozessorkerne, Grafikverarbeitungseinheiten, Peripherievorrichtungen, eine oder mehrere Speichersteuerungsschaltungen und eine Interconnect-Fabric auf einem oder mehreren co-verpackten Halbleiter-Dies integriert sind.
  89. System nach Anspruch 88, wobei das erste Netzwerk und das zweite Netzwerk in einer ersten Betriebsart physisch getrennt sind und wobei ein erstes Netzwerk der mindestens zwei Netzwerke und ein zweites Netzwerk der mindestens zwei Netzwerke virtuell sind und in einem zweiten Betriebsmodus ein einziges physisches Netzwerk gemeinsam nutzen.
  90. Integrierte Schaltung, umfassend: eine Vielzahl von Prozessorkernen; eine Vielzahl von Grafikverarbeitungseinheiten; eine Vielzahl von Peripherievorrichtungen, die sich von den Prozessorkernen und Grafikverarbeitungseinheiten unterscheiden; eine oder mehrere Speichersteuerungsschaltungen, die konfiguriert sind, um eine Schnittstelle zum Systemspeicher zu bilden; eine Interconnect-Fabric, die konfiguriert ist, um Kommunikation zwischen der einen oder den mehreren Speichersteuerungsschaltungen und den Prozessorkernen, den Grafikverarbeitungseinheiten und den Peripherievorrichtungen bereitzustellen; und eine Off-Chip-Verschaltung, die mit der Interconnect-Fabric gekoppelt und konfiguriert ist, um die Interconnect-Fabric mit einer entsprechenden Interconnect-Fabric auf einer anderen Instanz der integrierten Schaltung zu koppeln, wobei die Interconnect-Fabric und die Off-Chip-Verschaltung eine Schnittstelle bereitstellen, die konfiguriert ist, um die eine oder mehrere Speichersteuerungsschaltungen, die Prozessorkerne, Grafikverarbeitungseinheiten und Peripherievorrichtungen entweder in einer einzelnen Instanz der integrierten Schaltung oder in zwei oder mehr Instanzen der integrierten Schaltung zu verbinden, und wobei die Schnittstelle ferner konfiguriert ist, um mehrere Instanzen der integrierten Schaltung in einer Weise zu verbinden, dass die mehreren Instanzen der integrierten Schaltung für die Software transparent als ein einziges System erscheinen.
  91. Integrierte Schaltung nach Anspruch 90, wobei sich ein vereinheitlichter Adressraum, der durch eine vereinheitlichte Speicherarchitektur definiert ist, über die zwei oder mehr Instanzen des Dies mit integrierter Schaltung erstreckt, die für Software, die auf den Prozessorkernen, den Grafikverarbeitungseinheiten oder den Peripherievorrichtungen ausgeführt wird, transparent ist.
  92. Integrierte Schaltung nach Anspruch 91, wobei der vereinheitlichte Adressraum auf die einzelne Instanz transparent für Software abgebildet wird.
  93. Integrierte Schaltung nach einem der Ansprüche 90 bis 91, ferner umfassend eine lokale Interrupt-Verteilungsschaltung zum Verteilen von Interrupts auf die Prozessorkerne in der integrierten Schaltung.
  94. Integrierte Schaltung nach Anspruch 93, ferner umfassend eine globale Interrupt-Verteilungsschaltung, wobei die lokalen Interrupt-Verteilungsschaltungen und die globale Interrupt-Verteilungsschaltung ein Mehrebenen-Interrupt-Verteilungsschema implementieren, wenn zwei oder mehr Instanzen der integrierten Schaltung verwendet werden.
  95. Integrierte Schaltung nach Anspruch 94, wobei die globale Interrupt-Verteilungsschaltung konfiguriert ist, um eine Interrupt-Anforderung an die lokalen Interrupt-Verteilungsschaltungen in mindestens zwei Instanzen in einer Sequenz zu übertragen, und wobei die lokalen Interrupt-Verteilungsschaltungen konfiguriert sind, um die Interrupt-Anforderung an lokale Interrupt-Ziele in einer Sequenz zu übertragen, bevor sie auf die Interrupt-Anforderung von der globalen Interrupt-Verteilungsschaltung antworten.
  96. Integrierte Schaltung nach einem der Ansprüche 90 bis 95, wobei ein gegebenes Die mit integrierter Schaltung eine Leistungsverwaltungsschaltung umfasst, die konfiguriert ist, um einen lokalen Leistungszustand des gegebenen Die mit integrierter Schaltung zu verwalten.
  97. Integrierte Schaltung nach Anspruch 96, ferner umfassend eine weitere Leistungsverwaltungsschaltung, die konfiguriert ist, um die Leistungsverwaltungsschaltungen auf den zwei oder mehr Instanzen der integrierten Schaltung zu synchronisieren.
  98. Integrierte Schaltung nach einem der Ansprüche 90 bis 97, wobei die Peripherievorrichtungen eine oder mehrere von folgenden einschließen: eine Audioverarbeitungsvorrichtung, eine Videoverarbeitungsvorrichtung, eine Beschleunigerschaltung für maschinelles Lernen, eine Matrix-Arithmetik-Beschleunigerschaltung, eine Kameraverarbeitungsschaltung, eine Display-Pipeline-Schaltung, eine nichtflüchtige Speichersteuerung, eine Peripheral Component Interconnect-Steuerung, einen Sicherheitsprozessor oder eine serielle Bussteuerung.
  99. Integrierte Schaltung nach einem der Ansprüche 90 bis 98, wobei die Interconnect-Fabric kohärente Agenten miteinander verbindet.
  100. Integrierte Schaltung nach Anspruch 99, wobei ein einzelner der Prozessorkerne einem kohärenten Agenten entspricht.
  101. Integrierte Schaltung nach Anspruch 99, wobei ein Cluster von Prozessorkernen einem kohärenten Agenten entspricht.
  102. Integrierte Schaltung nach einem der Ansprüche 90 bis 101, wobei eine gegebene der Peripherievorrichtungen ein nicht-kohärenter Agent ist.
  103. Integrierte Schaltung nach Anspruch 102, ferner umfassend einen Eingabe/Ausgabe-Agenten, der zwischen der gegebenen Peripherievorrichtung und der Interconnect-Fabric angeordnet ist, wobei der Eingabe/Ausgabe-Agent konfiguriert ist, um Kohärenzprotokolle der Interconnect-Fabric in Bezug auf die gegebene Peripherievorrichtung durchzusetzen.
  104. Integrierte Schaltung nach Anspruch 103, wobei der Eingabe/Ausgabe-Agent die Reihenfolge der Anforderungen von der gegebenen Peripherievorrichtung unter Verwendung der Kohärenzprotokolle sicherstellt.
  105. Integrierte Schaltung nach Anspruch 103, wobei der Eingabe/Ausgabe-Agent konfiguriert ist, um ein Netzwerk aus zwei oder mehr Peripherievorrichtungen mit der Interconnect-Fabric zu koppeln.
  106. Integrierte Schaltung nach einem der Ansprüche 90 bis 105, ferner umfassend eine Hashing-Schaltlogik, die konfiguriert ist, um den Speicheranforderungsverkehr gemäß einem selektiv programmierbaren Hashing-Protokoll auf den Systemspeicher zu verteilen.
  107. Integrierte Schaltung nach Anspruch 106, wobei mindestens eine Programmierung des programmierbaren Hashing-Protokolls eine Reihe von Speicheranforderungen gleichmäßig auf eine Vielzahl von Speichersteuerungen im System für eine Vielzahl von Speicheranforderungen in der Reihe verteilt.
  108. Integrierte Schaltung nach Anspruch 107, wobei mindestens eine Programmierung des programmierbaren Hashing-Protokolls benachbarte Anforderungen innerhalb des Speicherraums mit einer festgelegten Granularität auf physisch entfernte Speicherschnittstellen verteilt.
  109. System, umfassend: eine Vielzahl von Instanzen einer integrierten Schaltung, wobei die integrierte Schaltung umfasst: eine Vielzahl von Prozessorkernen; eine Vielzahl von Grafikverarbeitungseinheiten; eine Vielzahl von Peripherievorrichtungen, die sich von den Prozessorkernen und Grafikverarbeitungseinheiten unterscheiden; eine oder mehrere Speichersteuerungsschaltungen, die konfiguriert sind, um eine Schnittstelle zum Systemspeicher zu bilden; eine Interconnect-Fabric, die konfiguriert ist, um Kommunikation zwischen der einen oder den mehreren Speichersteuerungsschaltungen und den Prozessorkernen, den Grafikverarbeitungseinheiten und den Peripherievorrichtungen bereitzustellen; und eine Off-Chip-Verschaltung, die mit der Interconnect-Fabric gekoppelt und konfiguriert ist, um die Interconnect-Fabric mit einer entsprechenden Interconnect-Fabric auf einer anderen der Vielzahl von Instanzen der integrierten Schaltung zu koppeln, wobei die Interconnect-Fabric und die Off-Chip-Verschaltung eine Schnittstelle bereitstellen, die konfiguriert ist, um die eine oder mehrere Speichersteuerungsschaltungen, die Prozessorkerne, Grafikverarbeitungseinheiten und Peripherievorrichtungen entweder in einer einzelnen Instanz der integrierten Schaltung oder in zwei oder mehr Instanzen der integrierten Schaltung zu verbinden, und wobei die Schnittstelle ferner konfiguriert ist, um die Vielzahl von Instanzen der integrierten Schaltung in einer Weise zu verbinden, dass die Vielzahl von Instanzen der integrierten Schaltung für die Software transparent als ein einziges System erscheinen.
  110. System nach Anspruch 109, ferner umfassend ein Substrat, das konfiguriert ist, um die Off-Chip-Verschaltung von einer der Vielzahl von Instanzen mit der Off-Chip-Verschaltung einer anderen der Vielzahl von Instanzen zu koppeln.
  111. System nach Anspruch 109, ferner umfassend eine netzwerkintegrierte Schaltung, die konfiguriert ist, um mit der Off-Chip-Verschaltung in der Vielzahl der Instanzen gekoppelt zu werden und die Kommunikation zwischen der Vielzahl der Instanzen zu leiten.
DE202022002976.4U 2021-08-23 2022-08-23 Skalierbares System-on-a-Chip Active DE202022002976U1 (de)

Applications Claiming Priority (8)

Application Number Priority Date Filing Date Title
US202163235979P 2021-08-23 2021-08-23
US63/235,979 2021-08-23
US17/821,296 2022-08-22
US17/821,296 US11934313B2 (en) 2021-08-23 2022-08-22 Scalable system on a chip
US17/821,305 2022-08-22
US17/821,305 US12007895B2 (en) 2022-08-22 Scalable system on a chip
US17/821,312 2022-08-22
US17/821,312 US11803471B2 (en) 2021-08-23 2022-08-22 Scalable system on a chip

Publications (1)

Publication Number Publication Date
DE202022002976U1 true DE202022002976U1 (de) 2024-03-11

Family

ID=85227541

Family Applications (1)

Application Number Title Priority Date Filing Date
DE202022002976.4U Active DE202022002976U1 (de) 2021-08-23 2022-08-23 Skalierbares System-on-a-Chip

Country Status (7)

Country Link
US (2) US11934313B2 (de)
KR (3) KR20240035610A (de)
CN (1) CN117836750A (de)
AU (1) AU2022332113A1 (de)
DE (1) DE202022002976U1 (de)
TW (1) TW202328895A (de)
WO (1) WO2023028042A1 (de)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11531061B2 (en) * 2020-08-03 2022-12-20 Qualcomm Incorporated Interleaved testing of digital and analog subsystems with on-chip testing interface
CN117155842B (zh) * 2023-10-25 2024-02-13 苏州元脑智能科技有限公司 一种双主机路由的实现方法、系统、设备及介质
CN117950739A (zh) * 2024-03-26 2024-04-30 摩尔线程智能科技(北京)有限责任公司 主控制单元确定方法、装置、设备、存储介质及程序产品

Family Cites Families (102)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US976697A (en) 1910-09-08 1910-11-22 Ernst Roth Sliding brush for plan sifters.
US5893160A (en) 1996-04-08 1999-04-06 Sun Microsystems, Inc. Deterministic distributed multi-cache coherence method and system
US5897657A (en) 1996-07-01 1999-04-27 Sun Microsystems, Inc. Multiprocessing system employing a coherency protocol including a reply count
US6049847A (en) 1996-09-16 2000-04-11 Corollary, Inc. System and method for maintaining memory coherency in a computer system having multiple system buses
US6111582A (en) * 1996-12-20 2000-08-29 Jenkins; Barry L. System and method of image generation and encoding using primitive reprojection
US6263409B1 (en) 1998-12-22 2001-07-17 Unisys Corporation Data processing system and method for substituting one type of request for another for increased performance when processing back-to-back requests of certain types
US6976115B2 (en) 2002-03-28 2005-12-13 Intel Corporation Peer-to-peer bus segment bridging
US6854043B2 (en) 2002-07-05 2005-02-08 Hewlett-Packard Development Company, L.P. System and method for multi-modal memory controller system operation
US7191349B2 (en) 2002-12-26 2007-03-13 Intel Corporation Mechanism for processor power state aware distribution of lowest priority interrupt
US8321650B2 (en) 2003-01-13 2012-11-27 Emulex Design & Manufacturing Corporation Alignment-unit-based virtual formatting methods and devices employing the methods
US7098541B2 (en) 2003-05-19 2006-08-29 Hewlett-Packard Development Company, L.P. Interconnect method for directly connected stacked integrated circuits
US7444547B2 (en) * 2003-06-19 2008-10-28 International Business Machines Corproation Method, system, and product for programming in a simultaneous multi-threaded processor environment
US7340548B2 (en) 2003-12-17 2008-03-04 Microsoft Corporation On-chip bus
US7720054B2 (en) 2004-03-02 2010-05-18 Cisco Technology, Inc. Router configured for outputting update messages specifying a detected attribute change of a connected active path according to a prescribed routing protocol
US20070079074A1 (en) 2005-09-30 2007-04-05 Collier Josh D Tracking cache coherency in an extended multiple processor environment
US7636835B1 (en) 2006-04-14 2009-12-22 Tilera Corporation Coupling data in a parallel processing environment
DE112006003917T5 (de) 2006-05-30 2009-06-04 Intel Corporation, Santa Clara Verfahren, Gerät und System angewendet in einem Cachespeicher-Kohärenzprotokoll
US7480770B2 (en) 2006-06-14 2009-01-20 Sun Microsystems, Inc. Semi-blocking deterministic directory coherence
JP2008065713A (ja) 2006-09-08 2008-03-21 Canon Inc マルチプロセッサシステム及び割込み制御方法
US8074022B2 (en) 2006-09-28 2011-12-06 Virident Systems, Inc. Programmable heterogeneous memory controllers for main memory with different memory modules
US20080162869A1 (en) 2006-12-29 2008-07-03 Intel Corporation Address hashing to help distribute accesses across portions of destructive read cache memory
TWI317945B (en) 2007-01-12 2009-12-01 Via Tech Inc Memory refresh method and system
US8438320B2 (en) 2007-06-25 2013-05-07 Sonics, Inc. Various methods and apparatus for address tiling and channel interleaving throughout the integrated system
US8095735B2 (en) 2008-08-05 2012-01-10 Convey Computer Memory interleave for heterogeneous computing
US8286014B2 (en) 2008-03-25 2012-10-09 Intel Corporation Power management for a system on a chip (SoC)
US8291245B2 (en) 2008-04-17 2012-10-16 International Business Machines Corporation Method, apparatus and system for reducing power consumption based on storage device data migration
US20090305463A1 (en) 2008-06-06 2009-12-10 International Business Machines Corporation System and Method for Thermal Optimized Chip Stacking
US8190820B2 (en) 2008-06-13 2012-05-29 Intel Corporation Optimizing concurrent accesses in a directory-based coherency protocol
US7849247B2 (en) 2008-10-14 2010-12-07 Freescale Semiconductor, Inc. Interrupt controller for accelerated interrupt handling in a data processing system and method thereof
US8799582B2 (en) 2008-12-30 2014-08-05 Intel Corporation Extending cache coherency protocols to support locally buffered data
US20140325129A1 (en) 2008-12-31 2014-10-30 Micron Technology, Inc. Method and apparatus for active range mapping for a nonvolatile memory device
US8260996B2 (en) 2009-04-24 2012-09-04 Empire Technology Development Llc Interrupt optimization for multiprocessors
US9135215B1 (en) 2009-09-21 2015-09-15 Tilera Corporation Route prediction in packet switched networks
US8407516B2 (en) 2009-12-23 2013-03-26 Intel Corporation Controlling memory redundancy in a system
US8874855B2 (en) 2009-12-28 2014-10-28 Empire Technology Development Llc Directory-based coherence caching
US8799553B2 (en) 2010-04-13 2014-08-05 Apple Inc. Memory controller mapping on-the-fly
KR101717494B1 (ko) 2010-10-08 2017-03-28 삼성전자주식회사 인터럽트 처리 장치 및 방법
US20120096295A1 (en) 2010-10-18 2012-04-19 Robert Krick Method and apparatus for dynamic power control of cache memory
US20120144104A1 (en) * 2010-12-02 2012-06-07 Advanced Micro Devices, Inc. Partitioning of Memory Device for Multi-Client Computing System
US8959270B2 (en) 2010-12-07 2015-02-17 Apple Inc. Interrupt distribution scheme
US8458386B2 (en) 2010-12-07 2013-06-04 Apple Inc. Atomic interrupt masking in an interrupt controller to prevent delivery of same interrupt vector for consecutive interrupt acknowledgements
EP2490100B1 (de) 2011-02-14 2014-10-15 2236008 Ontario Inc. Suspendierbare Unterbrechungen zur Prozessorleerlaufverwaltung
US8732496B2 (en) 2011-03-24 2014-05-20 Nvidia Corporation Method and apparatus to support a self-refreshing display device coupled to a graphics controller
US8775700B2 (en) 2011-09-29 2014-07-08 Intel Corporation Issuing requests to a fabric
KR20140085497A (ko) 2011-10-03 2014-07-07 인벤사스 코포레이션 직교 윈도가 있는 멀티-다이 와이어본드 어셈블리를 위한 스터브 최소화
US9442879B2 (en) 2011-12-07 2016-09-13 Intel Corporation Multiple transaction data flow control unit for high-speed interconnect
US9029234B2 (en) 2012-05-15 2015-05-12 International Business Machines Corporation Physical design symmetry and integrated circuits enabling three dimentional (3D) yield optimization for wafer to wafer stacking
US20130318308A1 (en) 2012-05-24 2013-11-28 Sonics, Inc. Scalable cache coherence for a network on a chip
US9424191B2 (en) 2012-06-29 2016-08-23 Intel Corporation Scalable coherence for multi-core processors
US8963933B2 (en) 2012-07-23 2015-02-24 Advanced Micro Devices, Inc. Method for urgency-based preemption of a process
US9009368B2 (en) 2012-10-23 2015-04-14 Advanced Micro Devices, Inc. Interrupt latency performance counters
US9135174B2 (en) 2012-11-27 2015-09-15 International Business Machines Corporation Coherent attached processor proxy supporting master parking
US9348762B2 (en) 2012-12-19 2016-05-24 Nvidia Corporation Technique for accessing content-addressable memory
US9678564B2 (en) 2012-12-21 2017-06-13 Nxp B.V. Multiprocessor system with interrupt distributor
US9170946B2 (en) 2012-12-21 2015-10-27 Intel Corporation Directory cache supporting non-atomic input/output operations
US9075952B2 (en) 2013-01-17 2015-07-07 Intel Corporation Controlling bandwidth allocations in a system on a chip (SoC)
US9620181B2 (en) 2013-01-31 2017-04-11 Hewlett Packard Enterprise Development Lp Adaptive granularity row-buffer cache
US8786069B1 (en) 2013-03-15 2014-07-22 Invensas Corporation Reconfigurable pop
US9160627B2 (en) 2013-04-04 2015-10-13 Netspeed Systems Multiple heterogeneous NoC layers
US9405303B2 (en) 2013-04-22 2016-08-02 Emerson Electric Co. Power stealing for a wireless-enabled thermostat
WO2014185917A1 (en) 2013-05-16 2014-11-20 Hewlett-Packard Development Company, L.P. Multi-mode agent
US9244874B2 (en) 2013-06-14 2016-01-26 National Instruments Corporation Selectively transparent bridge for peripheral component interconnect express bus systems
US9054977B2 (en) 2013-08-05 2015-06-09 Netspeed Systems Automatic NoC topology generation
US9355034B2 (en) 2013-12-31 2016-05-31 Samsung Electronics Co., Ltd. Removal and optimization of coherence acknowledgement responses in an interconnect
US9442869B2 (en) 2014-01-24 2016-09-13 Texas Instruments Incorporated Programmable interrupt routing in multiprocessor devices
US9842076B2 (en) 2014-05-19 2017-12-12 Microchip Technology Incorporated Switchless USB C-connector hub
US9825779B2 (en) 2014-05-23 2017-11-21 Arteris, Inc. Network-on-chip (NoC) topology generation
WO2016048669A1 (en) 2014-09-26 2016-03-31 Intel Corporation Apparatus and method for configuring sets of interrupts
US10394730B2 (en) 2014-11-14 2019-08-27 Cavium, Llc Distributed interrupt scheme in a multi-processor system
US10523585B2 (en) 2014-12-19 2019-12-31 Amazon Technologies, Inc. System on a chip comprising multiple compute sub-systems
US9747225B2 (en) 2015-05-05 2017-08-29 Microsoft Technology Licensing, Llc Interrupt controller
US9996487B2 (en) 2015-06-26 2018-06-12 Intel Corporation Coherent fabric interconnect for use in multiple topologies
US20170017419A1 (en) 2015-07-15 2017-01-19 Innovium, Inc. System And Method For Enabling High Read Rates To Data Element Lists
JP6500736B2 (ja) 2015-10-14 2019-04-17 富士通株式会社 半導体装置および半導体装置の制御方法
US9940423B2 (en) 2015-12-20 2018-04-10 Arteris, Inc. Editing a NoC topology on top of a floorplan
US10191877B2 (en) 2015-12-22 2019-01-29 Intel Corporation Architecture for software defined interconnect switch
US10733350B1 (en) 2015-12-30 2020-08-04 Sharat C Prasad On-chip and system-area multi-processor interconnection networks in advanced processes for maximizing performance minimizing cost and energy
EP3400688B1 (de) 2016-01-04 2020-05-20 Gray Research LLC Massiv-paralleler computer, beschleunigte computercluster und zweidimensionaler router und verbindungsnetzwerk für feldprogrammierbare gate-arrays und anwendungen
US10585826B2 (en) 2016-01-25 2020-03-10 Advanced Micro Devices, Inc. Using processor types for processing interrupts in a computing device
US20170269666A1 (en) * 2016-03-18 2017-09-21 Apple Inc. Smart Dynamic Voltage and Frequency Scaling of Electronic Components
US10403333B2 (en) 2016-07-15 2019-09-03 Advanced Micro Devices, Inc. Memory controller with flexible address decoding
US20180189641A1 (en) 2017-01-04 2018-07-05 Stmicroelectronics S.R.L. Hardware accelerator engine
US10769080B2 (en) 2017-03-30 2020-09-08 Futurewei Technologies, Inc. Distributed and shared memory controller
US10043232B1 (en) 2017-04-09 2018-08-07 Intel Corporation Compute cluster preemption within a general-purpose graphics processing unit
US10515046B2 (en) 2017-07-01 2019-12-24 Intel Corporation Processors, methods, and systems with a configurable spatial accelerator
US10372446B2 (en) 2017-07-01 2019-08-06 Intel Corporation Technology to dynamically modulate memory device read granularity
US10534719B2 (en) 2017-07-14 2020-01-14 Arm Limited Memory system for a data processing network
US10268600B2 (en) 2017-09-12 2019-04-23 Intel Corporation System, apparatus and method for prefetch-aware replacement in a cache memory hierarchy of a processor
US10719651B2 (en) 2017-12-30 2020-07-21 Arteris, Inc. Synthesizing topology for an interconnect network of a system-on-chip with intellectual property blocks
US10579469B2 (en) 2018-05-25 2020-03-03 Arm Limited Interconnection network for integrated circuit
US10997771B2 (en) 2018-08-29 2021-05-04 Intel Corporation Position-based rendering apparatus and method for multi-die/GPU graphics processing
KR102641520B1 (ko) 2018-11-09 2024-02-28 삼성전자주식회사 멀티-코어 프로세서를 포함하는 시스템 온 칩 및 그것의 태스크 스케줄링 방법
US10944693B2 (en) 2018-11-13 2021-03-09 Advanced Micro Devices, Inc. Routing flits in a network-on-chip based on operating states of routers
US11734192B2 (en) 2018-12-10 2023-08-22 International Business Machines Corporation Identifying location of data granules in global virtual address space
US11113216B2 (en) 2019-03-20 2021-09-07 Mediatek Inc. Dispatching interrupts in a multi-processor system based on power and performance factors
US10673439B1 (en) 2019-03-27 2020-06-02 Xilinx, Inc. Adaptive integrated programmable device platform
US11036279B2 (en) 2019-04-29 2021-06-15 Arm Limited Apparatus and method for managing a cache
EP4066124A1 (de) 2019-11-26 2022-10-05 Mythic, Inc. Kachel-subsystem und verfahren für automatischen datenfluss und datenverarbeitung innerhalb einer integrierten schaltungsarchitektur
US11327786B2 (en) 2020-07-21 2022-05-10 Arm Limited Distributing interrupt request to be handled by target virtual processor
US11544193B2 (en) 2020-09-11 2023-01-03 Apple Inc. Scalable cache coherency protocol
US20230028642A1 (en) 2021-07-26 2023-01-26 Verizon Patent And Licensing Inc. Systems and methods for application security utilizing centralized security management
US20230069310A1 (en) * 2021-08-10 2023-03-02 Nvidia Corporation Object classification using one or more neural networks

Also Published As

Publication number Publication date
US20230056044A1 (en) 2023-02-23
AU2022332113A1 (en) 2024-03-07
CN117836750A (zh) 2024-04-05
WO2023028042A1 (en) 2023-03-02
US11803471B2 (en) 2023-10-31
US20230058989A1 (en) 2023-02-23
US20230053530A1 (en) 2023-02-23
US11934313B2 (en) 2024-03-19
KR20240055142A (ko) 2024-04-26
KR20240035610A (ko) 2024-03-15
KR20240055141A (ko) 2024-04-26
TW202328895A (zh) 2023-07-16

Similar Documents

Publication Publication Date Title
US20190205244A1 (en) Memory system, method and computer program products
DE202022002976U1 (de) Skalierbares System-on-a-Chip
Barroso et al. Piranha: A scalable architecture based on single-chip multiprocessing
JP5826865B2 (ja) プログラマブル回路と埋込型プロセッサシステムとを伴う集積回路
US6668308B2 (en) Scalable architecture based on single-chip multiprocessing
DE102018006756A1 (de) Beschleuniger-Fabric
Goswami et al. Power-performance co-optimization of throughput core architecture using resistive memory
DE112016007566T5 (de) Systeme, Verfahren und Vorrichtungen zur heterogenen Berechnung
DE112013001361B4 (de) System auf einem Chip, Verfahren, maschinenlesbares Medium und System für die Bereitstellung einer Snoop-Filterung zugeordnet mit einem Datenpuffer
Lenoski The design and analysis of DASH: A scalable directory-based multiprocessor
Rotenberg et al. Rationale for a 3D heterogeneous multi-core processor
DE112017001700T5 (de) Prozessoren, Verfahren, Systeme und Anweisungen zum Abruf von Daten auf der angegebenen Cache-Ebene mit garantiertem Abschluss
DE102022107196A1 (de) Sichere direkte Peer-to-Peer-Speicherzugriffsanforderung zwischen Geräten
DE112017003332T5 (de) Öffnungszugriffsprozessoren, verfahren, systeme und befehle
DE102022109273A1 (de) Unabhängige on-chip-mehrfachverschaltung
JP2022123079A (ja) ヘテロジニアスコンピューティングのためのシステム、方法及び装置
DE102022119705A1 (de) Cluster-identifikatorneuabbildung für asymmetrische topologien
DE112021004707T5 (de) Skalierbares cache-kohärenzprotokoll
DE112016007538T5 (de) Technologie zur realisierung eines binärverzweigten non-volatile-memory-express-treibers
Reble et al. One-sided communication and synchronization for non-coherent memory-coupled cores
Abdallah Heterogeneous Computing: An Emerging Paradigm of Embedded Systems Design
US12007895B2 (en) Scalable system on a chip
Tegegn An Implementation of a Predictable Cache-coherent Multi-core System
Mirian et al. Managing mutex variables in a cache-coherent shared-memory system for FPGAs
DE112022001978T5 (de) E/a-agent

Legal Events

Date Code Title Description
R207 Utility model specification