DE69732736T2 - Vielfaden-Busmaster - Google Patents

Vielfaden-Busmaster Download PDF

Info

Publication number
DE69732736T2
DE69732736T2 DE69732736T DE69732736T DE69732736T2 DE 69732736 T2 DE69732736 T2 DE 69732736T2 DE 69732736 T DE69732736 T DE 69732736T DE 69732736 T DE69732736 T DE 69732736T DE 69732736 T2 DE69732736 T2 DE 69732736T2
Authority
DE
Germany
Prior art keywords
bus
signal
transaction
data
request
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Lifetime
Application number
DE69732736T
Other languages
English (en)
Other versions
DE69732736D1 (de
Inventor
John M. Cypress Maclaren
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.)
Compaq Computer Corp
Original Assignee
Compaq Computer Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Compaq Computer Corp filed Critical Compaq Computer Corp
Publication of DE69732736D1 publication Critical patent/DE69732736D1/de
Application granted granted Critical
Publication of DE69732736T2 publication Critical patent/DE69732736T2/de
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

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/36Handling requests for interconnection or transfer for access to common bus or bus system
    • G06F13/362Handling requests for interconnection or transfer for access to common bus or bus system with centralised access control
    • G06F13/364Handling requests for interconnection or transfer for access to common bus or bus system with centralised access control using independent requests or grants, e.g. using separated request and grant lines

Description

  • Die Erfindung bezieht sich auf einen Multi-Threaded-Bus-Master.
  • In Computersystemen, die mehrere Schichten aus Bussen haben, werden Brücken-Vorrichtungen verwendet, um Bus-Vorrichtungen zu ermöglichen, unter den unterschiedlichen Bussen zu kommunizieren. Zum Beispiel kann, unter Bezugnahme auf 55, ein Computersystem einen Host-Bus 1001, verbunden mit einer zentralen Verarbeitungseinheit (CPU) 1000, und einem Hauptspeicher 1002, einen ersten Peripheral Component Interconnect (PCI) Bus 1004 und einen zweiten PCI-Bus 1006 enthalten. Eine CPU-PCI-Brücke 1008 ermöglicht eine Kommunikation von dem Host-Bus 1001 zu dem ersten PCI-Bus 1004, und eine PCI-PCI-Brücke 1010 ermöglicht eine Kommunikation zwischen dem ersten und dem zweiten PCI-Bus. Bus-Vorrichtungen auf einem PCI-Bus, geeignet zum Anfordern einer Bus-Inhaberschaft, werden als Bus-Master bezeichnet. Die Bus-Master auf dem ersten PCI-Bus 1004 umfassen die PCI-PCI-Brücke 1010 und andere, periphere Bus-Vorrichtungen 1012 und 1014.
  • Typischerweise sind die Bus-Vorrichtungen 1012 und 1014 in der Lage, nur eine Transaktion, die zu einem Zeitpunkt offen ist, zu haben (und sie werden als Einzel-Threaded-Vorrichtungen bezeichnet). Zum Beispiel würde, falls die Bus-Vorrichtung 1012 eine Transaktion auf dem ersten PCI-Bus 1004, der für den Hauptspeicher 1002 vorgesehen ist, erzeugt, allerdings die CPU-PCI-Brücke 1008 bestimmt, dass der Hauptspeicher 1002 belegt ist (z. B. die CPU 1000 greift darauf zu), die CPU-PCI-Brücke 1008 die Transaktion von der Bus-Vorrichtung 1012 in eine Warteschlange stellen und würde einen erneuten Versuch (entsprechend der PCI Local Bus Specification, Production Version, Revision 2.1 (Juni 1995)) zu der Bus-Vorrichtung 1012 (erneut versuchte Bus-Vorrichtung) herausgeben. Nach einer bestimmten Zeit würde die erneut versuchte Bus-Vorrichtung 1012 dieselbe Transaktion versuchen. Um unnötige Zuteilungen zu dem erneut versuch ten Bus-Master zu verhindern, maskiert der Arbitrierer auf dem ersten PCI-Bus 1004 typischerweise die Anforderungen (d. h. die Anforderung wird ignoriert) von dem erneut versuchten Bus-Master, bis die in die Warteschlange gestellte Transaktion erfolgreich auf dem vorgesehenen Bus gelaufen ist und eine Antwort bereit ist, um zurückgeführt zu werden.
  • Wenn die PCI-PCI-Brücke 1010 mit dem zweiten PCI-Bus 1006 verbunden ist, der mit mehr als einer Bus-Vorrichtung verbunden sein kann, ist die PCI-PCI-Brücke 1010 ein Bus-Master, der mehr als eine offene Bus-Transaktion haben kann, die gleichzeitig auf dem ersten PCI-Bus 1004 anhängig ist (die Brücke 1010 wird demzufolge als eine Multi-Threaded-Vorrichtung bezeichnet). Die PCI-PCI-Brücke 1010 führt Transaktionen von Bus-Mastern auf dem zweiten PCI-Bus 1006, die zu dem ersten PCI-Bus 1004 hin gerichtet sind, weiter.
  • Die WO 95/32475 offenbart einen Bus und Bus-Vorrichtungen, die dazu geeignet sind, Bus-Transaktionen auf dem Bus zu erzeugen. Sie offenbart auch eine Bus-Brücke, die eine Transaktions-Arbitrierungs-Einheit besitzt, die eine Transaktions-Reihenfolge beibehält und gegenseitige Blockierungen innerhalb der Brücke verhindert.
  • Gemäß der vorliegenden Erfindung wird ein Computersystem geschaffen, wie es im Anspruch 1 angegeben ist, das aufweist: einen Bus, Bus-Vorrichtungen, die zum Erzeugen von Bus-Transaktionen auf dem Bus geeignet sind,
    einen Komparator zum Vergleichen einer ersten Bus-Transaktion, erzeugt durch eine Bus-Vorrichtung, mit einer zweiten Bus-Transaktion, erzeugt durch die Bus-Vorrichtung, um zu bestimmen, ob die Bus-Vorrichtung eine Multi-Threaded-Vorrichtung ist, wobei die Bus-Vorrichtung dahingehend bestimmt wird, dass sie eine Multi-Threaded-Vorrichtung ist, falls sich die zweite Bus-Transaktion von der ersten Bus-Transaktion unterscheidet.
  • Die vorliegende Erfindung schafft auch ein Verfahren zum Charakterisieren einer Bus-Vorrichtung auf einem Bus in einem Computersystem, wie es im Anspruch 10 angegeben ist, das aufweist:
    Vergleichen einer ersten Bus-Transaktion, erzeugt durch die Bus-Vorrichtung, mit einer zweiten Bus-Transakation, erzeugt durch die Bus-Vorrichtung; und
    Anzeigen, dass die Bus-Vorrichtung mehr als eine anstehende Transaktion (Multi-Threaded-Vorrichtung) basierend auf dem Vergleich unterstützen kann, wobei die Bus- Vorrichtung dahingehend bestimmt wird, eine Multi-Threaded-Vorrichtung zu sein, falls sich die zweite Bus-Transaktion von der ersten Bus-Transaktion unterscheidet.
  • Bestimmte Ausführungsformen der Erfindung können ein oder mehrere der nachfolgenden Merkmale) umfassen. Ein Arbitrierer kann das Anforderungssignal einer erneut versuchten Bus-Vorrichtung maskieren, falls sie eine Einzel-Threaded-Vorrichtung ist, maskiert allerdings nicht das Anforderungs-Signal, falls die erneut versuchte Bus-Vorrichtung eine Multi-Threaded-Vorrichtung ist. Ein Detektor bestimmt, ob eine Bus-Vorrichtung eine Multi-Threaded-Vorrichtung ist. Der Detektor vergleicht eine erste Bus-Transaktion, erzeugt durch die erneut versuchte Bus-Vorrichtung, mit einer zweiten Bus-Transaktion, erzeugt durch die erneut versuchte Bus-Vorrichtung, und der Detektor bestimmt, ob die erneut versuchte Bus-Vorrichtung eine Multi-Threaded-Vorrichtung ist, und zwar basierend auf dem Vergleich. Die Multi-Threaded-Bus-Vorrichtung umfasst eine Brücke, die zwischen dem ersten Bus und einem zweiten Bus verbunden ist. Eine Brücke ist zwischen dem ersten und dem zweiten Bus verbunden. Die Brücke versucht erneut, eine Bus-Vorrichtungs-Anforderung, die zu dem zweiten Bus hin gerichtet ist. Die Bus-Vorrichtungs-Anforderung, die auf den zweiten Bus hin gerichtet ist, umfasst eine verzögerte Anforderungs-Transaktion. Der zweite Bus umfasst einen PCI-Bus und der erste Bus umfasst einen PCI-Bus.
  • Vorteile der Erfindung umfassen einen oder mehrere der nachfolgenden Vorteile. Eine Bus-Funktionsweise wird durch eine unterschiedliche Behandlung der Einzel-Threaded- und Multi-Threaded-Master verbessert. Ein Transaktions-Durchsatz durch den Multi-Threaded-Master wird verbessert, indem dem Master ermöglicht wird, mehrere Threads zu handhaben.
  • Andere Vorteile und Merkmale werden aus der nachfolgenden Beschreibung und aus den Zeichnungen ersichtlich werden, in denen:
  • 1 zeigt ein Blockdiagramm eines Computersystems.
  • 2 zeigt ein Blockdiagramm eines Erweiterungskastens des Computersystems der 1.
  • 3 zeigt ein Blockdiagramm der Brücken-Chips in dem Computersystem.
  • 4 zeigt ein Blockdiagramm eines Warteschlangen-Blocks in jedem der Brücken-Chips.
  • 5 zeigt ein Blockdiagramm des Takt-Routing-Schemas in den Brücken-Chips.
  • 6 zeigt ein Blockdiagramm eines Taktgenerators in jedem der Brücken-Chips.
  • 7 zeigt ein Blockdiagramm einer Master-Kabel-Schnittstelle in jedem der Brücken-Chips zum Übertragen von Daten über ein Kabel, das die Brücken-Chips verbindet.
  • 8 zeigt ein Zeitabstimmungsdiagramm von Signalen in der Master-Kabel-Schnittstelle.
  • 9 zeigt ein Blockdiagramm einer Slave-Kabel-Schnittstelle in jedem der Brücken-Chips zum Aufnehmen von Daten, übertragen über das Kabel.
  • 10 zeigt ein Blockdiagramm von Logik-Erzeugungs-Eingangs- und Ausgangs-Hinweiszeigern für die empfangene Logik in der Slave-Kabel-Schnittstelle.
  • 11 zeigt ein Zeitabstimmungsdiagramm von Signalen in der Slave-Kabel-Schnittstelle.
  • 12 zeigt ein Zeitabstimmungsdiagramm der Eingangs- und Ausgangs-Hinweiszeiger und deren Beziehung zu den aufgenommenen Kabeldaten.
  • 13 zeigt ein Blockdiagramm der Plazierung von Flip-Flop's und Eingangs- und Ausgangsanschlußflächen in jedem der Brücken-Chips.
  • 14 zeigt eine Tabelle der Informationen, geführt durch das Kabel.
  • 15A zeigt eine Tabelle, die den Typ von Informationen darstellt, geführt durch die Kabelsignale, die Einzel-Adressenzyklus-Transaktionen zugeordnet sind.
  • 15B zeigt eine Tabelle, die den Typ von Informationen darstellt, geführt durch die Kabelsignale, zugeordnet zu Dual-Adressen-Zyklus-Transaktionen.
  • 16 zeigt eine Tabelle von Parametern, zugeordnet zu dem Kabel.
  • 17 zeigt ein Logikdiagramm einer Fehlererfassungs- und Korrekturschaltung.
  • 18 zeigt eine Parität-Prüf-Matrix zum Erzeugen von Prüf-Bits in der Fehlererfassungs- und Korrekturschaltung.
  • 19 zeigt eine Syndrom-Tabelle zum Erzeugen von Fix-Bits in der Fehlererfassungs- und Korrekturschaltung.
  • 20A zeigt ein Zustand-Diagramm, das ein Round-Robin Arbitrierungs-Schema darstellt.
  • 20B zeigt ein Zustandsdiagramm, dass ein Zwei-Niveau-Entscheidungs-Schema darstellt.
  • 21 zeigt ein logisches Diagramm einer Entscheidungseinrichtung in jedem der Brücken-Chips.
  • 22 zeigt ein Zustandsdiagramm einer Erteilungs-Zustand-Maschine in einer Entscheidungseinrichtung.
  • 23 zeigt ein Zustandsdiagramm eines Level eins einer Entscheidungs-Zustand-Maschine in der Entscheidungseinrichtung.
  • 24 zeigt eine Tabelle, die eine Erzeugung von neuen Erteilungs-Signalen basierend auf dem momentanen Master darstellt.
  • 25 zeigt ein Blockdiagramm einer Logik zum Erzeugen von Masken-Bits und Master-Indikations-Bits mit Multi-Threading-Fähigkeit.
  • 26A zeigt ein logisches Diagramm von Schaltungen zum Erzeugen der maskierten Bits.
  • 26B zeigt ein Blockdiagramm eines Computersystems mit Mehrfach-Schichten von Bussen.
  • 27A zeigt eine Seitenansicht einer Erweiterungskarte, eingesetzt in einen Schlitz.
  • 27BC zeigen schematische Diagramme einer Hebel-Schaltung.
  • 2831 zeigen schematische Diagramme einer Schaltung des Erweiterungskastens.
  • 32A zeigt ein Zustandsdiagramm von der Schaltung des Erweiterungskastens.
  • 32B zeigt Wellenformen für die Schaltung des Erweiterungskastens.
  • 33A zeigt ein schematisches Diagramm einer Schaltung des Erweiterungskastens.
  • 33B zeigt Wellenformen für die Schaltung des Erweiterungskastens.
  • 33CH zeigen ein Zustandsdiagramm von der Schaltung des Erweiterungskastens.
  • 34 zeigt ein schematisches Diagramm einer Schaltung des Erweiterungskastens.
  • 35A zeigt ein Zustandsdiagramm von der Schaltung des Erweiterungskastens.
  • 35B zeigt Wellenformen von der Schaltung des Erweiterungskastens.
  • 36 zeigt ein schematisches Diagramm einer Schaltung des Erweiterungskastens.
  • 37 zeigt ein Flußdiagramm eines nicht-maskierbaren Unterbrecher-Handler's, aufgerufen in Abhängigkeit einer Erfassung eines Bus-Hängend-Zustands in dem Computer-System.
  • 38 zeigt ein Fluß-Diagramm eine BIOS-Programms, das durch ein Computersystem-Durchsichts-Ereignis aufgerufen wird.
  • 39 zeigt ein Fluß-Diagramm eines BIOS-Isolier-Programms, aufgerufen auf einen Bus-Hängend-Zustand oder das Computer-Durchsichts-Ereignis hin.
  • 40 zeigt ein Blockdiagramm eines Bus-Watcher's in jedem der Brücken-Chips.
  • 41 zeigt ein Zustandsdiagramm einer Logik in dem Bus-Watcher zum Zurückführen des Busses zu einem Leerlaufzustand.
  • 42 zeigt ein logisches Diagramm von Status-Signalen in dem Bus-Watcher.
  • 43 zeigt ein logisches Diagramm von Bus-Historie-FIFOs und Bus-Zustand-Vektor-FIFOs in der Fehler-Isolations-Schaltung.
  • 44 zeigt ein logisches Diagramm einer Schaltung zum Erzeugen von Bereitschafts-Signalen zum Anzeigen, wenn die Bus-Historie- und Zustand-Vektor-Informationen verfügbar sind.
  • 45 zeigt ein Flußdiagramm eines Programms zum Zuordnen einer Bus-Zahl zu einem eingeschalteten oder leeren Schlitz.
  • 46 zeigt ein Flußdiagramm eines Programms zum Zuordnen von Speicherraum für das Computersystem.
  • 47 zeigt ein Flußdiagramm eines Programms zum Zuordnen eines I/O-Raums für das Computersystem.
  • 48 zeigt ein Flußdiagramm eines Programms zum Handhaben einer neu eingeschalteten Karte.
  • 49 zeigt ein Blockdiagramm eines Konfigurationsraums für eine PCI-Brückenschaltung.
  • 50A zeigt ein Blockdiagramm eines Computersystems.
  • 50B zeigt einen Bus-Zahl-Zuordnungs-Baum.
  • 51 zeigt ein Blockdiagramm, das Konfigurations-Transaktionen vom Typ 0 und Typ 1 darstellt.
  • 52 zeigt eine Tabelle, die eine Auflistung einer Adresse von einem primären Bus zu einem sekundären Bus aufweist.
  • 53A und 53B zeigen ein logisches Diagramm einer Schaltung zum Handhaben von Konfigurations-Zyklen vom Typ 0 und Typ 1.
  • 54A zeigt ein Blockdiagramm einer Schaltung zum Speichern von Informationen, um eine Berechnung von Bus-Funktions-Parametern zu ermöglichen.
  • 54B zeigt ein Blockdiagramm von Vorabruf-Zählern.
  • 55 zeigt ein Blockdiagramm eines Computersystems.
  • 56 zeigt ein Blockdiagramm eines PCI-Entscheidungs-Schemas.
  • 57 zeigt ein schematisches Diagramm eines Puffer-Entleerungs-Logik-Blocks.
  • 58 zeigt ein schematisches Diagramm eines Kabel-Decodierers.
  • 5962 zeigen schematische Diagramme einer geposteten Speicher-Schreib-Warteschlange, umfassend eine Steuerlogik.
  • 6365 zeigen schematische Diagramme einer verzögerten Anforderungs-Warteschlange, umfassend eine Steuerlogik.
  • 6669b zeigen schematische Diagramme einer verzögerten Abschluss-Warteschlange, umfassend eine Steuerlogik.
  • 7074 zeigen schematische Diagramme und eine Tabelle einer Master-Zyklus-Entscheidungseinrichtung.
  • 7587 zeigen schematische und Zustand-Übergangs-Diagramme einer Warteschlange-Block-zu-PCI-Bus-Schnittstelle.
  • 88 zeigt ein schematisches Blockdiagramm, das Bus-Vorrichtungen darstellt, verbunden mit einem Expansions-Bus.
  • 89 zeigt ein schematisches Blockdiagramm, dass eine Schaltung darstellt, um Unterbrechungs-Anforderungen weiterzuführen.
  • 90 zeigt ein schematisches Diagramm einer Vorrichtungs-Auswahl-Logik.
  • 9194 zeigen schematische Blockdiagramme von Registern.
  • 95 zeigt eine grafische Darstellung, die Wellenformen für das Computersystem darstellt.
  • 96 zeigt ein schematisches Diagramm der im Multiplex-Betrieb arbeitenden Schaltung.
  • 97AD zeigen schematische Diagramme des Unterbrechungs-Aufnahme-Blocks.
  • 98 zeigt ein schematisches Diagramm des Unterbrechungs-Ausgabe-Blocks.
  • 99 zeigt ein Diagramm, das die Zeitmultiplexverarbeitung von Unterbrechungs-Anforderungs-Signalen darstellt.
  • 100 zeigt ein Diagramm, das eine Unterbrechungs-Anforderungs-Auflistung darstellt.
  • 101 zeigt ein schematisches Blockdiagramm, dass Bus-Vorrichtungen darstellt, verbunden mit einem Erweiterungsbus.
  • ÜBERSICHT
  • In der folgenden Beschreibung geben alle Signal-Mnemoniken, gefolgt durch ein „#", „_" oder „!", oder diesen vorausgehend, invertierte, logische Zustände an.
  • Wie in 1 dargestellt ist, umfasst ein Computersystem 10 einen primären PCI-Bus 24, der mit einem Brücken-Chip 26a und einem Brücken-Chip 26b verbunden ist, wobei beide davon von einem gemeinsamen Design 26 sind. Der Brücken-Chip 26a ist mit einem Brücken-Chip 48a über ein Kabel 31 verbunden und der Brücken-Chip 26b ist mit dem Brücken-Chip 48b über ein Kabel 28 verbunden. Die Brücken-Chips 48a und 48b sind von einem gemeinsamen Design 48, was gemeinsam zu dem Design 26 ist, mit der Ausnahme, das das Design 26 ein eingangsseitiger Mode ist und das Design 48 ein ausgangsseitiger Mode ist.
  • Der PCI-Bus 24 ist mit einem lokalen Bus 22 über eine System-Steuereinheit/Host-Brücken-Schaltung 28 schnittstellenmäßig verbunden. Die Systemsteuereinheit/Host-Brücken-Schaltung 18 steuert auch einen Zugriff zu einem Systemspeicher 20, der auch mit dem lokalen Bus 22 zusammen mit der CPU 14 und einem Level-2-(L2)-Cachespeicher 16 verbunden ist.
  • Eine PCI Extended Industry Standard Architecture (EISA) Brücke 15 verbindet schnittstellenmäßig den PCI-Bus 24 mit einem ISA-Bus 17. Sowohl eine Tastenfeld-Steuereinheit 21 als auch ein Read Only Memory (ROM) 23 sind mit dem ISA-Bus 17 verbunden. Ein nicht-flüchtiger Random Access Speicher (NVRAM) 70, verbunden mit dem ISA-Bus 17, speichert Informationen, die das Computersystem übernehmen sollte, wenn es abgeschaltet wird. Ein automatischer Server-Zurückgewinnungs-Zeitgeber 72 überwacht das Computersystem hinsichtlich einer Inaktivität. Falls sich das System verriegelt, wird der ASR-Zeitgeber 72 nach ungefähr 10 Minuten ablaufen. Ein Tastenfeld 19 wird durch die Tastenfeld-Steuereinheit 21 hinsichtlich einer Erfassung von niedergedrückten Tasten überwacht.
  • Wie 2 zeigt, bildet der Brücken-Chip 48a eine Schnittstelle zu einem PCI-Bus 32a und der Brücken-Chip 48b bildet eine Schnittstelle zu einem PCI-Bus 32b. Die PCI-Busse 32a und 32b sind an zwei Expansionskästen 30a und 30b, mit einem gemeinsamen Design 30, angeordnet, und jeder Expansionskasten 30 besitzt sechs Hot-Plug-Schlitze bzw. Steckplätze 36 (36af), die dazu geeignet sind, herkömmliche Erweiterungskarten 807 aufzunehmen (27A). Ein Schlitz 34 an dem Expansionskasten nimmt eine Karte 46 auf, die den Brücken-Chip 26 besitzt. Jeder Hot-Plug-Schlitz 36 besitzt zugeordnet eine Umschalt-Schaltung 41 zum Verbinden und Trennen des Schlitzes 36 mit und von dem PCI-Bus 32. Sechs mechanische Hebel 802 werden dazu verwendet, selektiv die Karten 807 an entsprechenden Schlitzen zu sichern (wenn sie geschlossen oder verriegelt sind). Jeder Erweiterungskasten 30 umfasst Register 52 und 82 zum Überwachen der Hebel 802 und von Status-Signalen des Erweiterungskastens 30 und ein Register 80 zum Kontrollieren einer Verbindung und einer Trennung von Schlitzen 36 und von dem PCI-Bus 32.
  • Wie 3 zeigt, ist der Brücken-Chip so ausgelegt, um in Paaren 26 und 48 verwendet zu werden, um eine PCI-PCI-Brücke zwischen dem primären PCI-Bus 24 und dem sekundären PCI-Bus 32 zu bilden. Das Programmiermodel ist dasjenige von zwei hierarchischen Brücken. Zu der Systemsoftware hin erscheint das Kabel 28 als ein PCI-Bus, der exakt eine Vorrichtung enthält, und zwar den ausgangsseitigen Brücken-Chip 48. Dies vereinfacht stark die Konfiguration der 2-Chip-PCI-PCI-Brücke, die den primären und sekundären Bus miteinander verbindet. Der Brücken-Chip 26, der näher zu der CPU 14 hin liegt, verbindet den primären PCI-Bus 24 mit dem Kabel 28. Die zweite PCI-PCI-Brücke 48 ist in dem Erweiterungskasten 30 vorhanden und verbindet das Kabel 28 mit dem sekundären Bus 32. Ein Mode-Stift-Upstream-Chip bestimmt, ob der Brücken-Chip in dem ausgangsseitigen Mode oder dem eingangsseitigen Mode arbeitet. Einige Nicht-Brücken-Funktionen, wie beispielsweise ein Bus-Monitor 106 und eine Hot-Plug-Logik in einem SIO 50, werden nur in dem Erweiterungskasten 30 verwendet und sind nicht in dem einlaufseitigen Mode-Chip 26 funktional.
  • Ein Taktgenerator 102 in dem Brücken-Chip 26 erzeugt Takte basierend auf dem Takt PCI CLK1 auf dem primären PCI-Bus 24, wobei einer der erzeugten Takte über das Kabel 28 zu einem Taktgenerator 122 in dem ausgangsseitigen Brücken-Chip 48 vorgesehen wird. Der Taktgenerator 122 erzeugt die PCI-Takte in dem Erweiterungskasten 30 bei derselben Frequenz des primären PCI-Busses 24 und steuert ihn an, was dazu führt, dass beide Brücken-Chips 26 und 48 unter derselben Frequenz laufen. Der ausgangsseitige Brücken-Chip 48 läuft dem eingangsseitigen Brücken-Chip 24 in der Phase mit der Verzögerung des Kabels 28 hinterher. Eine asymmetrische Grenze in dem eingangsseitigen Brücken-Chip 26 an dem Punkt, wo Daten von dem Kabel 28 abgegriffen werden, ermöglicht, dass sich die Phasenverzögerung bei irgendeinem Wert befindet (und deshalb soll das Kabel von irgendeiner Länge sein), wobei das einzige Erfordernis dasjenige ist, dass die Frequenz der zwei Brücken-Chips dieselbe ist.
  • Die Kern-Logik jedes Brücken-Chips ist der Brücken-Logik-Block (100 oder 120), der einen PCI-Master (101 oder 123) zum Arbeiten als ein Master auf dem jeweiligen PCI-Bus, ein PCI-Target oder eine -Slave (103 oder 121) zum Arbeiten als eine Slave-Vorrichtung auf dem jeweiligen PCI-Bus, Konfigurations-Register (105 oder 125), die die Konfigurations-Informationen des entsprechenden Brücken-Chips enthalten, und einen Warteschlangen-Block (107 oder 127), der verschiedene Warteschlangen enthält, in denen Daten, zugeordnet zu Transaktionen zwischen dem primären PCI-Bus und dem sekundären PCI-Bus 32, in die Warteschlange gestellt und gemanagt werden, aufweist. Die Daten, übertragen zwischen dem eingangsseitigen Brücken-Chip 26 und dem ausgangsseitigen Brücken-Chip 48, werden durch Kabelschnittstellen 104 und 130 in den Brücken-Chips 26 und 48 jeweils gepuffert.
  • Eine Unterbrechungs-Programm-Logik ist auch in jedem Brücken-Chip enthalten. Dabei sind 8 Unterbrechungen, 6 von den Sekundär-Bus-Schlitzen, 1 von einer SIO-Schaltung 50 und 1 von dem ausgangsseitigen Brücken-Chip 48, vorhanden. In dem ausgangsseitigen Chip 48 werden die Unterbrechungen durch einen Unterbrechungs-Aufnahme-Block 132 aufgenommen und entlang des Kabels 28 als eine serielle Datenfolge in sequenziellen Zeit-Stücken geschickt. In dem ausgangsseitigen Brücken-Chip 26 werden die Unterbrechungen durch einen Unterbrechungs-Ausgangs-Block 114 empfangen, der die Unterbrechungen zu einer Unterbrechungs-Steuereinheit weiterleitet.
  • Die SIO-Schaltung 50 liefert Steuersignale zum Beleuchten von LED's, zum Steuern eines Reset und für ein selektives Verbinden der Schlitze 36 mit dem Bus 32. Sie umfasst auch eine Logik zum Lesen des Eingriffs-Status der Hebel 802 und des Status-Zustands der Karten 807 in jedem Schlitz 36.
  • Die Brücken-Schaltung 26 umfasst einen Support für Unterbrechungen in dem Erweiterungskasten 30, und, wenn sie in dem Host-System mit der anwendereigenen Schnittstelle zu einer Mehrfachkanal-Unterbrechungs-Steuereinheit installiert ist, schickt sie die Status-Zustände jeder Unterbrechung in einer seriellen Datenfolge. Die Brückenschaltung 26 kann auch so konfiguriert sein, um standardmäßige PCI-INTA, INTB, INTC und INTD Signale anzusteuern, falls sie in einem Standard-Schlitz in dem Host-System installiert ist.
  • Jeder Brücken-Chip umfasst auch einen PCI-Arbitrierer (116 oder 124) zum Steuern eines Zugriffs auf bis zu sieben Bus-Master. Da die eingangsseitige Brücke 26 in einem Schlitz installiert ist, wird der PCI-Arbitrierer 116 in dem eingangsseitigen Brücken-Chip 26 gesperrt. Jeder Brücken-Chip umfasst auch eine I2C-Steuereinheit (108 oder 126) für eine Kommunikation mit Vorrichtungen, wie beispielsweise EEPROMs, Temperatursensoren, usw., einen JTAG-Master (110 oder 128) zum Durchführen von Test-Zyklen, einen Bus-Monitor (106 oder 127) zum Messen einer Bus-Benutzung und einer Effektivität und der Effektivität des Vorabruf-Algorithmus des Brücken-Chips, und einen Bus-Beobachter (Bus-Watcher) (119 oder 129) zum Speichern einer Bus-Historie und von Status-Vektor-Informationen und zum Informieren der CPU 14 über einen Bus-Hängend-Zustand. Bestimmte Blöcke werden in jedem Brücken-Chip gesperrt, wenn sie nicht verwendet werden. In dem eingangsseitigen Brücken-Chip 26 werden Bus-Watcher 119, der SIO 118, der PCI-Arbitrierer 116 und der Bus-Monitor 106 gesperrt. Zusätzlich werden der die Unterbrechung aufnehmende Block 112 in dem eingangsseitigen Chip 126 und der Unterbrechungs-Ausgangs-Block 134 in dem ausgangsseitigen Chip 48 gesperrt.
  • ÜBERSICHT DES WARTESCHLANGEN-BLOCKS
  • Wie 4 zeigt, managen die Warteschlangen-Blöcke 107 und 127 Transaktionen, die zwischen dem primären PCI-Bus 24 (in dem eingangsseitigen Chip) oder dem sekundären PCI-Bus 32 (in dem ausgangsseitigen Chip) und der Kabel-Schnittstelle 130 fließen. (Von hier an wird auf den ausgangsseitigen Brücken-Chip unter der Annahme Bezug genommen, dass der eingangsseitige Chip identisch arbeitet, ohne dass dies ansonsten an gegeben ist). Der Warteschlangen-Block 127 umfasst einen Kabel-Decodierer 146, der von der Kabel-Schnittstelle 130 Transaktionen aufnimmt, die auf dem sekundären PCI-Bus 32 abgeschlossen werden. Nach einem Decodieren einer Transaktion platziert der Decodierer 146 die Transaktionen, zusammen mit allen Informationen, umfasst in der Transaktion, in eine von drei Warteschlangen 140, 142 und 144. Jede Warteschlange enthält verschiedene Transaktions-Puffer, wobei jeder davon eine einzelne Transaktion speichert, und ist deshalb in der Lage, verschiedene Transaktionen simultan zu handhaben.
  • Die erste Warteschlange, eine gepostete Speicher-Schreib-Warteschlange (PMBQ) 140, speichert gepostete Speicher-Schreib-Zyklen, ausgegeben durch die CPU, auf dem primären Bus zusammen mit allen Informationen, die erforderlich sind, um jeden Zyklus auf dem sekundären Bus 32 auszuführen. Die PMWQ 140 besitzt vier Transaktions-Puffer, wobei jeder davon eine gepostete Speicher-Schreib-Transaktion hält, die bis zu 8 Cache-Linien (256 Bytes) an Daten enthält. Unter bestimmten Umständen kann eine gepostete Speicher-Schreib-Transaktion, die mehr als acht Cache-Linien bzw. -Zeilen an Daten besitzt, in einen oder mehrere darauffolgende Puffer überlaufen, wie dies nachfolgend beschrieben ist.
  • Die zweite Warteschlange, eine verzögerte Anforderungs-Warteschlange (Delayed Request Queue – 142), speichert verzögerte Anforderungs-Transaktionen (d. h. verzögerte Lese-Anforderungen (Delayed Read Requests – DRR), wie beispielsweise ein Speicher-Lesen (Memory Read – MR), eine Speicher-Lese-Linie (Memory Read Line – MRL), und Speicher-Lese-Mehrfach-(Memory Read Multiple – MRM)-Anforderungen; und in dem ausgangsseitigen Chip, Eingangs/Ausgangs-(I/O)-Lese-Schreib-Vorgänge und Konfigurationen (config – Lese/Schreib-Vorgänge), ausgegeben durch die CPU auf dem primären Bus, zusammen mit allen Informationen, erforderlich dazu, jede Transaktion auf dem sekundären Bus 32 auszuführen. Die DRQ 142 besitzt drei Transaktions-Puffer, wobei jeder davon in der Lage ist, ein Doppelwort, oder „dword", an Daten für verzögerte Schreibvorgänge zu halten.
  • Die dritte Warteschlange, eine verzögerte Abschluss-Warteschlange (Delayed Completion Queue (DCQ) 144, speichert verzögerte Abschluss-Informationen, geliefert durch den eingangsseitigen Chip, in Abhängigkeit von verzögerten Anforderungs-Transaktionen, erzeugt auf dem sekundären Bus 32. Für eine verzögerte Lese-Anforderung enthalten die entsprechenden Abschluss-Informationen die Lese-Daten, an gefordert durch die initiierende Vorrichtung, und den Lese-Status (d. h. eine Indikation darüber, ob ein Paritäts-Fehler auf dem Target-Abort aufgetreten ist). Die verzögerten Abschluss-Informationen, zurückgeführt für eine verzögerte Schreib-Transaktion, sind dieselben wie diejenigen, zurückgeführt für eine verzögerte Lese-Anforderung, mit der Ausnahme, dass keine Daten für verzögerte Schreibvorgänge zurückgeführt sind. Da I/O- und config-Lese-Schreibvorgänge nur auf dem ausgangsseitigen Bus auftreten, wird nur die eingangsseitige DCQ verzögerte Abschluss-Informationen entsprechend zu einer von diesen Transaktionen enthalten. Die DCQ 144 besitzt acht Abschluss-Puffer, wobei jeder davon bis zu acht Cache-Linien bzw. Zeilen an Abschluss-Informationen für eine einzelne, verzögerte Anforderung halten kann. Zusätzlich zu den Abschluss-Informationen enthält jeder Abschluss-Puffer auch eine Kopie der verzögerten Anforderung, die die Informationen erzeugte. Für verzögerte Lese-Transaktionen kann eine Daten-„Folge" zwischen dem primären Bus 24 und dem sekundären Bus 32 eingerichtet werden, wenn die anfordernde Vorrichtung damit beginnt, die angeforderten Daten aufzusuchen, bevor die Target-Vorrichtung damit stoppt, sie zu der DCQ 144 zu liefern. Unter bestimmten Umständen wird die DCQ 144 automatisch zusätzliche Daten erneut aufsuchen, oder „vorababrufen" („prefetch"), wenn eine anfordernde Vorrichtung alle die angeforderten Daten von dem entsprechenden Puffer in der DCQ 144 aufsucht. Sowohl ein Streaming als auch ein automatisches Vorababrufen (prefetching) werden in weiterem Detail nachfolgend diskutiert.
  • Eine Warteschlangen-zu-PCI-Schnittstelle (Queue-to-PCI Interface – QPIF) 148 verwaltet Transaktionen, die von den Warteschlangen 140, 142 und 144 zu dem PCI-Bus 32 und von dem PCI-Bus 32 zu der DCQ 144 und zu dem eingangsseitigen Chip über die Kabel-Schnittstelle 130 fließen. Die QPIF 148 tritt in einen „Master" Mode ein, um gepostete Speicher-Schreib- und verzögerte Anforderungs-Transaktionen von der PMWQ 140 und der DRQ 142 auf dem sekundären Bus laufen zu lassen. Für sowohl gepostete Speicher-Schreib- als auch verzögerte Lese-Transaktionen kann die QPIF 148 eine Transaktion „unterstützen", die weniger als eine Cache-Zeile an Daten einsetzt (d. h. eine Speicher-Schreib-(Memory Write – MW) oder eine Speicher-Lese-(Memory Read – MR) Transaktion), gegenüber einersolchen, die eine oder mehrere Cache-Zeilen (d. h. eine Speicher-Schreib- und Ungültigkeits-(MWI)-Transaktion oder eine Speicher-Lese-Zeile (MRL) oder eine Speicher-Lese-Mehrfach-(MRM)-Transaktion erfordert, falls bestimmte Zustände erfüllt werden. Die QPIF 148 kann auch eine Lese-Transaktion, die eine Einzel-Cache-Zeile von Daten einsetzt (d. h. eine MRL Transaktion), in eine von mehreren Cache-Zeilen an Daten (d. h. eine MRM-Transaktion) umwandeln. Die QPIF 148 kann auch eine MRL- oder MRM-Transaktion „korrigieren", die in der Mitte einer Cache-Zeile beginnt, und zwar durch Lesen der gesamten Cache-Zeile und dann aussondern des nicht angeforderten Teils der Daten. Eine Transaktion-Unterstützung und eine Lese-Korrektur, wobei beide davon in weiterem Detail nachfolgend beschrieben sind, verbessern eine Systemeffektivität durch Verringern der Zeit, die dazu erforderlich ist, Daten von einer Speichervorrichtung aufzusuchen.
  • Die QPIF 148 gibt einen „Slave" Code ein, um Daten von der DCQ 144 zu einer anfordernden PCI-Vorrichtung zu liefern oder Transaktionen von dem PCI-Bus 32 zu der DCQ 144 und zu dem eingangsseitigen Chip über das Kabel zu schicken. Wenn die QPIF 148 eine gepostete Schreib-Transaktion von dem Bus 32 empfängt, führt sie die Transaktion weiter zu dem eingangsseitigen Chip, falls eine entsprechende Eine einer Gruppe von Transaktionszählern 159 anzeigt, dass die PMWQ in dem anderen Brücken-Chip nicht voll ist, wie dies nachfolgend diskutiert ist. Wenn die QPIF 148 eine verzögerte Anforderung aufnimmt, führt sie zuerst die Anforderung zu der DCQ 144 weiter, um zu bestimmen, ob die Transaktion bereits in der DCQ platziert worden ist, und, falls dies der Fall ist, ob die entsprechenden, verzögerten Abschluss-Informationen zu der DCQ 144 zurückgeführt worden sind. Falls die verzögerten Abschluss-Informationen in der DCQ vorhanden sind, werden die Informationen zu der anfordernden Vorrichtung geführt und die Transaktion wird beendet. Falls die Anforderung bereits in eine Warteschlange gestellt ist, allerdings die Verzögerungs-Abschirmungs-Informationen nicht zurückgeführt worden sind, wird die anfordernde Vorrichtung erneut versucht und die Transaktion wird auf dem PCI-Bus 32 beendet. Falls die Transaktion noch nicht in die Warteschlange gestellt ist, reserviert die DCQ 144 einen Abschluss-Puffer für die Transaktion und die QPIF 148 führt die Transaktion zu dem eingangsseitigen Chip über die Kabel-Schnittstelle 130 weiter, solange wie der entsprechende Transaktionszähler 149 anzeigt, dass der andere Brückenchip nicht voll ist.
  • Falls die DCQ 144 bestimmt, dass einer deren Pufferdaten enthält, vorgesehen für eine anfordernde Vorrichtung, allerdings unterschiedlich als die Daten, die in der momentanen Transaktion angefordert sind, kann der Puffer geleert werden, um zu verhindern, dass der anfordernde Master überholte Daten empfängt. Der Puffer wird dann geleert, wenn er Prefetch-Daten enthält, (d. h. Daten, die in dem Puffer verbleiben, nachdem die anfordernde Vorrichtung einige der Daten aufgesucht hat, oder Daten, die nicht spezifisch durch die Vorrichtung angefordert wurden), allerdings wird er nicht gelöscht, wenn er Abschluss-Daten enthält (d. h. spezifisch angefordert durch eine Vorrichtung, die bis jetzt noch nicht zurückgekehrt ist, um sie zu empfangen). Falls der Puffer-Abschluss-Daten enthält und die anfordernde Vorrichtung eine Anforderung ausgegeben hat, die nicht den Puffer „trifft" („hit"), versieht die DCQ 144 die Vorrichtung mit einem Zeichen als eine „Multi-Threaded" Vorrichtung (d. h. eine solche, die in der Lage ist, mehr als eine Transaktion zu einem Zeitpunkt beizubehalten), und ordnet einen anderen Abschluss-Puffer der neuen Anforderung zu. Die Puffer-Lösch- und Mehrfach-Puffer-Zuordnungs-Schemen werden in weiterem Detail nachfolgend beschrieben.
  • Ein Master-Zyklus-Arbitrierer (MCA) 150 in dem Warteschlangen-Block 127 hält Standard-Reihenfolgen-Einschränkungen zwischen geposteten Speicher-Schreib-, verzögerten Anforderungs- und verzögerten Abschluss-Transaktionen bei, wie dies in der PCI Bridge Architecture Specification, Version 2.1, angegeben ist. Diese Einschränkungen erfordern, dass Bus-Zyklen eine starke Schreib-Reihenfolge beibehalten und dass Entblockungen (Deadlocks) nicht auftreten. Deshalb bestimmt der MCA 150 die Reihenfolge, in der gepostete Speicher-Schreib-Transaktionen in der PMWQ 140 und verzögerte Anforderungs-Transaktionen in der DRQ 142 auf dem PCI-Bus 32 laufen. Der MCA 150 steuert auch die Verfügbarkeit von verzögerten Abschluss-Informationen, gespeichert in der DCQ 144. Um eine Übereinstimmung mit diesen Regeln sicherzustellen, gibt der ausgangsseitige MCA 150 jedem geposteten Speicher-Schreib-Zyklus eine Gelegenheit, früher ausgegebene, verzögerte Anforderungs-Zyklen im Bypass zu passieren, während sowohl der eingangsseitige als auch der ausgangsseitige MCA 150 nicht zulassen, dass verzögerte Anforderungs- und verzögerte Abschluss-Zyklen früher ausgegebene, gepostete Speicher-Schreib-Zyklen im Bypass passieren. Eine Transaktions-Reihenfolge durch den MCA 150 wird in weiterem Detail nachfolgend beschrieben.
  • Die Transaktions-Zähler 159 in dem ausgangsseitigem Warteschlangen-Block 127 behalten eine Zählung der Zahl von Transaktionen, in dem eingangsseitigen Brücken-Chip in die Warteschlange gestellt, bei. Ein Zähler 160 für ein gepostetes Speicher-Schreiben (Posted Memory Write – PMW) zeigt die Zahl von PMW-Transaktionen, gehalten in der eingangsseitigen, geposteten Speicher-Schreib-Warteschlange, an. Der PMW-Zähler 160 wird zu jedem Zeitpunkt erhöht, zu dem eine PMW-Transaktion zu der Kabel-Schnittstelle 130 geschickt wird. Der Zähler 160 wird zu jedem Zeitpunkt erniedrigt, zu dem die QPIF 148 ein Signal von dem Kabel-Decodierer 146 aufnimmt, anzeigend, dass ein PMW-Zyklus auf dem eingangsseitigen PCI-Bus 24 abgeschlossen worden ist. Wenn die eingangsseitige PMWQ die maximale Zahl (vier) der PMW Transaktionen in die Warteschlange gestellt hat, gibt der PMW-Zähler 160 ein PMW-Voll-Signal (tc_pmw_full) aus, und teilt der QPIF 148 mit, zusätzliche PMW-Zyklen von dem PCI-Bus 32 erneut zu versuchen. In ähnlicher Weise zählt ein Zähler 161 für eine verzögerte Anforderung (Delayed Request – DR) die Zahl von DR-Transaktionen, gehalten in der eingangsseitigen, verzögerten Anforderungs-Warteschlange. Wenn die DRQ die maximale Zahl (drei) von DR-Transaktionen hält, stellt der DR-Zähler 161 ein DR-Voll-Signal (tc_dr_full) auf, das anzeigt, dass die QPIF 148 alle darauffolgenden DR-Transaktionen von dem PCI-Bus 32 erneut versuchen muss. Ein Zähler 162 für einen verzögerten Abschluss (Delayed Completion – DC), zählt die Zahl von verzögerten Abschlüssen, die in dem eingangsseitigen Master-Zyklus-Arbitrierer in die Warteschlange gestellt sind. Wenn der MCA die maximale Zahl (vier) von verzögerten Abschlüssen hält, stellt der DC-Zähler 162 ein DC-Voll-Signal (tc_dc_full) auf, das verhindert, dass die ausgangsseitige QPIF 148 verzögerte Anforderungs-Transaktionen auf dem sekundären PCI-Bus 32 laufen lässt. Sobald der Voll-Zustand verschwindet, können Informationen über den verzögerten Abschluss zu der ausgangsseitigen DCQ geschickt werden.
  • Ein PCI-Schnittstellen-Block 152 ist zwischen dem PCI-Bus 32 und dem Warteschlangen-Block 127 vorhanden. Die PCI-Schnittstelle 152 umfasst einen Master-Block 123 und einen Slave-(Target)-Block 121. Der Slave-Block 121 ermöglicht PCI-Vorrichtungen auf dem Bus 32, auf interne Register von Brücken-Chips (z. B. Target-Speicher-Bereichs-Register 155 und Konfigurations-Register) zuzugreifen, um Abschluss-Informationen zu beanspruchen, die in der DCQ 144 gespeichert sind, und um auch Transaktionen zu initiieren, die durch die QPIF 148 und die Kabel-Schnittstelle 130 zu dem primären Bus geführt werden. Der Slave-Block 121 steuert die Verfügbarkeit des PCI-Busses 32 zu den PCI-Vorrichtungen auf dem Bus 32 durch Erkennen, wann jede Vorrichtung auf deren REQ#-Zeile zugreift und die REQ#-Signale zu den PCI-Arbitrierer 124 weiterführt. Wenn der PCI-Arbitrierer 124 eine anfordernde Vorrichtung auswählt, um eine Steuerung des Busses zu empfangen, erteilt der Slave-Block 121 den Bus zu der Vor richtung durch Aufstellen der GNT# Leitung der Vorrichtung. Sobald der Bus 32 zu der anfordernden Vorrichtung erteilt ist und die Vorrichtung deren FRAME# Signal aufstellt, das den Beginn einer Transaktion anzeigt, verriegelt der Slave-Block 121 die Transaktions-Informationen (z. B. Adresse, Befehl, Daten, Byte-Freigaben, Parität, usw.) in ein Slave-Verriegelungsregister 156. Der Warteschlangen-Block 127 ist dann in der Lage, die Transaktions-Informationen von dem verriegelnden Register 156 aufzusuchen und sie zu der DCQ 144 und/oder der Kabel-Schnittstelle 130 zu liefern.
  • Transaktionen, unterstützt durch den PCI-Slave-Block 121, sind in der folgenden Tabelle dargestellt.
  • Figure 00170001
    PCI-Schnittstellen-Slave-Transaktionen
  • Der Master-Block 123 der PCI-Schnittstelle 152 lässt nur einen Zyklus laufen, initiiert durch den Warteschlangen-Block 127 (d. h. Transaktionen, gehalten in der PMWQ 140 und der DRQ 142). Der Warteschlangen-Block 127 fordert von dem PCI-Bus durch Senden eines Anforderungs-Signals (q2p_req) zu dem PCI-Master 123 an, der dann bestimmt, ob ein entsprechendes Anforderungs-Signal (b1req_) zu dem PCI-Arbitrierer 124 aufgestellt ist. Der Master-Block 123 stellt b1req_ auf, falls der Warteschlangen-Block 127 nicht einen verriegelten Zyklus läuft und der PCI-Bus 32 nicht durch eine PCI-Vorrichtung verriegelt ist. Wenn der PCI-Arbitrierer 124 den Warteschlangen-Block 127 auswählt, schickt der Master-Block 123 ein Bestätigungs-Signal (p2q_ack), um den Warteschlangen-Block 127 wissen zu lassen, das er eine Kontrolle des Busses 32 inne hat. Falls der PCI-Arbitrierer 124 keine offenen Anforderungen von anderen Vorrichtungen auf dem Bus 32 vorliegen hat, schickt der Master-Block 123 automatisch das p2q_ack Erteilungs-Signal zu dem Warteschlangen-Block 127, sogar dann, wenn der Warteschlangen-Block 127 nicht das q2p_req Signal aufgestellt hat. Sobald wie der Warteschlangen-Block 127 eine Arbitrierung erhält (d. h. der Arbitrierer 124 stellt das b1gnt_ Signal auf) und sein q2p_frame Signal aufstellt, um den Beginn einer Transaktion anzuzeigen, verriegelt der PCI-Master 123 Informationen über abgehende Transaktionen (d. h. Adresse, Befehl, Daten, Byte-Freigaben, Parität, usw.) in ein Master-Verriegelungs-Register 158 in der PCI-Schnittstelle 152. Die Transaktions-Informationen werden dann verwendet, um die Transaktion auf dem PCI-Bus 32 abzuschließen.
  • Transaktionen, unterstützt durch den Master-Block 123, sind in der folgenden Tabelle dargestellt.
  • Figure 00190001
    PCI-Schnittstellen-Master-Transaktionen
  • Allgemein arbeitet der Master-Block 123 als ein Standard-PCI-Master. Allerdings wird, im Gegensatz zu Standard-PCI-Brücken, der Master-Block nicht eine MRL, MRM oder MWI Transaktion beenden, bis eine Cache-Zeilen-Grenze erreicht ist, gerade nachdem der Master-Latenz-Zeitgeber (Master Latency Timer – MLT) abläuft. Auch stellt der Master-Block 123 nicht „Initiator Ready" (IRDY) Warte-Zustände auf. Der Master-Block 123 läuft einen verriegelten Zyklus auf dem PCI-Bus 32, falls der Warteschlangen-Block 127 sein „Verriegelungs" Signal (q2p_lock) aufstellt und seine Verriegelung auf dem Bus 32 freigibt, wenn der Warteschlangen-Block 127 sein „Entriegelungs" Signal (q2p_unlock) aufstellt.
  • Wie auch 57 zeigt, enthält die PCI-Schnittstelle 152 eine Puffer-Entleerungs-Logik 154, die bestimmt, wann einer oder alle der DCQ Abschluss-Puffer durch den Warteschlangen-Block 127 geleert werden sollten. Die PCI-Slave 121 erzeugt zwei Signale, die durch den Warteschlangen-Block 127 verwendet werden, um die Abschluss-Puffer zu leeren: ein Flush-Signal (p2q_flush), das anzeigt, wann ein Puffer geleert werden sollte, und ein Schlitz- bzw. Steckplatzauswahl-Signal (p2q_slot[2:0]), das anzeigt, welche PCI-Vorrichtung (d. h. welcher Einsteckplatz an dem PCI-Bus) hinsichtlich seiner Daten geleert werden sollte. Die folgende Tabelle stellt die Beziehung zwischen p2q_slot[2:0], und der PCI-Schlitz-Zahl dar.
  • Figure 00200001
    Erzeugung von p2q_slot[2:0]
  • Wenn p2q_flush aufgestellt ist, wird der Warteschlangen-Block 127 entweder alle Abschluss-Puffer in der DCQ 144 entleeren, falls p2q_slot[2:0] gleich zu „000" ist, oder den entsprechenden Einen der acht Abschluss-Puffer, falls p2q_slot[2:0] irgendeinen anderen Wert hat. Der Warteschlangen-Block 127 behält ein Protokoll davon bei, welche Abschluss-Puffer, falls welche vorhanden sind, jedem PCI-Steckplatz zu irgendeinem gegebenen Zeitpunkt entsprechen.
  • Das p2q_flush Signal wird an der ansteigenden Flanke des ersten PCI-Takt-(CLK)-Zyklus aufgestellt, nachdem ein config Schreib-(WR-CFG)-Zyklus auftritt, oder nachdem ein I/O-Schreib-(iowr)-Zyklus auftritt, oder ein Speicher-Schreib-(memwr)-Zyklus ein ausgangsseitiges Target (hit_tmem) während eines Befehl-Prüf-Zustands (cmd_chk_st) trifft. Gates 2014, 2016, 2018 und 2020 und ein Flip-Flop 2022 sind so angeordnet, um p2q_flush auf diese Art und Weise zu erzeugen.
  • In dem eingangsseitigen Brücken-Chip (d. h. wenn das Upstream_chip_i Signal aufgestellt ist) besitzt p2q_slot[2:0] immer einen Wert von „001", da die CPU der einzige Ma ster auf dem primären PCI-Bus ist. In dem ausgangsseitigen Chip hängt der Wert von p2q_slot davon ab, ob der Zyklus, der zu einem Flush-Zustand (Flush Condition) führt, ein Zyklus von dem sekundären Bus 32 zu dem Warteschlangen-Block 127 ist (d. h. falls p2q_qcyc aufgestellt ist). Falls das p2q_qcyc Signal aufgestellt ist, nimmt p2q_slot[2:0] den Wert des reg_slot[2:0] Signals an, erzeugt durch die PCI-Slave 121. Das reg_slot[2:0] Signal zeigt an, welcher der sieben Vorrichtungen auf dem sekundären PCI-Bus 32 eine Kontrolle des Busses 32 erteilt worden ist. Die PCI-Slave 121 erzeugt das reg_slot[2:0] Signal durch Verriegeln des Werts der GNT# Leitung für jeden der sieben Schlitze bzw. Steckplätze auf dem Bus 32, um ein verriegeltes Erteilungs-Signal mit sieben Bits (latched_gnt_[7:1]; die achte Erteilungs-Leitung, die zu dem Warteschlangen-Block gehört, wird ignoriert) zu bilden, und durch Codieren von latched_gnt[7:1] entsprechend einer Durchsichtstabelle 2006, die nachfolgend angegeben ist.
  • Figure 00210001
    Erzeugung von req_slot[2:0]
  • Falls der Zyklus, der zu dem Entleeren führt, nicht ein Sekundär-PCI-zu-Warteschlangen-Block-Zyklus ist, muss er eine I/O-Lesung oder eine config-Lesung zu dem Sollspeicherbereich von einem der Steckschlitze an dem sekundären Bus 32 sein. Wenn der Zyklus eine I/O-Lesung oder eine config-Lesung ist (d. h. !iowr AND !wr_cfg), nimmt p2q_slot[2:0] den Wert des PCI-Schlitzes an, dessen Speicherbereich getroffen worden ist (mrange_slot[2:0]). Ansonsten ist der Zyklus ein I/O-Schreiben oder ein config-Schreiben und p2q_slot[2:0] wird gleich zu „000", so dass alle Abschluss-Puffer geleert werden. Gates 2008 und 2010 und Multiplexer 2002 und 2004 sind so angeordnet, um p2q_flush[2:0] auf diese Art und Weise zu erzeugen.
  • KABEL-DECODIERER
  • Wie 58 zeigt, empfängt der Kabel-Decodierer 146 Transaktionen von der Kabel-Schnittstelle und wählt die geeignete Warteschlange so aus, um jede Transaktion zu empfangen. Wenn sich der Kabeldecodierer in der Daten-Phase befindet (d. h. wenn data_phase oder next_data_phase vorliegt, wird ein asynchrones Signal, das den Wert von data_phase einstellt, an dem nächsten CLK-Zyklus aufgestellt ist), sieht der Kabel-Decodierer 146 an dem Befehl-Code (cd_cmd[3:0]), geschickt über das Kabel, nach, um zu bestimmen, welche Warteschlange die Transaktion empfangen sollte. Wie in der Tabelle nachfolgend dargestellt ist, ist, wenn cd_cmd[3:0] einen Wert von „1001" hat, die Transaktion ein verzögerter Abschluss, so dass der Kabel-Decodierer ein cd_dcq_select Signal aufstellt, das der dcq mitteilt, die Transaktion zu beanspruchen. Wenn die drei LSB des Befehl-Code-Signals (cd_cmd[2:0]) „111" sind, ist die Transaktion ein gepostetes Speicher-Schreiben, so dass der Kabel-Decodierer ein cd_pmwq_select Signal erzeugt, um die pmwq über die ankommende Transaktion zu warnen. Wenn die Transaktion weder ein gepostetes Speicher-Schreiben noch ein verzögerter Abschluss ist und der Befehl-Code nicht ein Streaming-Signal darstellt, stellt der Kabel-Decodierer ein cd_drq_select Signal auf, das der DRQ mitteilt, die Transaktion zu beanspruchen. Gates 2024, 2026, 2028 und 2030 sind so konfiguriert, um die cd_dcq_select, cd_pmwq_select, und cd_drg_select Signale auf diese Art und Weise zu erzeugen.
  • Die nachfolgende Tabelle stellt die Befehl-Code mit vier Bits, zugeordnet zu jedem Typ einer Transaktion, dar.
  • Figure 00230001
    Transaktions-Befehl-Code
  • Wenn der ausgangsseitige Brücken-Chip eine Datenfolge zwischen dem primären Bus und einem sekundären Bus-Master eingerichtet hat, empfängt der eingangsseitige Kabel-Decodierer einen Befehl-Code von „1000". Dieser Code stellt ein Streaming-Signal dar, erzeugt durch den ausgangsseitigen Chip, um den eingangsseitigen Chip zu informieren, dass eine Datenfolge eingerichtet worden ist. Wenn der Kabeldecodierer diesen Befehl-Code empfängt, stellt er ein cd_stream Signal auf, das der QPIF in der eingangsseitigen Vorrichtung mitteilt, die Transaktion fortzuführen. Der Kabel-Decodierer erzeugt auch ein cd_stream_next_data Signal, das den eingangsseitigen Chip instruiert, einen anderen Teil von Daten zu dem sekundären Bus zu liefern. Das cd_stream-next_data Signal wird dann aufgestellt, wenn ein cd_stream Signal aufgestellt ist, wobei sich die Transaktion in der Daten-Phase befindet (d. h. data_phase ist aufgestellt), und ein next_data Signal ist von dem eingangsseitigen Chip über die Kabel-Schnittstelle empfangen worden (das next_data Signal erscheint auf einer der Leitungen des c2q_buff[3:0] Signals, das, wenn keine Datenfolge auftritt, dem Warteschlangen-Block mitteilt, welcher ausgangsseitige DCQ-Puffer der momentanen Transaktion zugeordnet ist). Das cd_stream_next_data Si gnal wird zurückgenommen, wenn entweder das cd_stream Signal zurückgenommen ist oder wenn eine neue Anforderung von der Kabel-Schnittstelle empfangen ist (d. h. c2q_new_req ist aufgestellt). Gates 2032 und 2034 sind so konfiguriert, um die cd_stream und die cd_stream_next_data Signale auf diese Art und Weise zu erzeugen.
  • GESPEICHERTE-SCHREIB-WARTESCHLANGE
  • Wie 59 zeigt, ist die gepostete Speicher-Schreib-Warteschlange (PMWQ) 140 ein Speicherelement, das alle die Befehl-Informationen enthält, die benötigt werden, um gepostete Schreib-Transaktionen auf dem Target-Bus auszuführen. Die PMWQ umfasst einen Zeichen- bzw. Tag-Speicher-Bereich 2036, der Informationen hält, die jede Transaktion identifizieren, einen Daten-RAM 2038, der die Schreib-Daten hält, die jeder Transaktion in der PMWQ zugeordnet sind, und verschiedene Steuerblöcke, um den Fluß von Transaktionen in die PMWQ hinein und von dieser heraus zu verwalten. Für jede Transaktion in der PMWQ behält der Zeichen-Speicher 2036 Informationen bei, wie beispielsweise über die Adresse, zu der geschrieben werden soll, den PCI-Befehl-Code (MW oder MWI), ein Adressen-Paritäts-Bit, und „einen verriegelten Zyklus" und einen „Dual-Adressen-Zyklus" Indikations-Bits, wie in der folgenden Tabelle dargestellt ist. Der Zeichenspeicher 2036 speichert auch einen Hinweiszeiger zu der Daten-RAM-Stelle der Daten entsprechend zu jeder der Transaktionen in der PMWQ.
  • Figure 00240001
    Inhalte von PMWQ
  • Da die PCI Spec. 2.1 fordert, dass gepostete Speicher-Schreib-Transaktionen in der Reihenfolge ausgeführt werden, in der sie empfangen werden, ist der Zeichen- bzw. Tag-Speicher 2036 eine zirkulare FIFO-Vorrichtung. Die PMWQ, und deshalb der Zeichen-Speicher 2036, können bis zu vier gepostete Speicher-Schreib-Transaktionen simultan handhaben.
  • Der Daten-RAM 2038, umfasst vier Daten-Puffer 2042, 2044, 2046 und 2048, einen für jede Transaktion in der PMWQ. Jeder Puffer kann bis zu acht Cache-Zeilen, oder 256 Bytes, an Daten (acht Worte pro Cache-Zeile) speichern. Für jede Cache-Zeile in einem Puffer speichert der Puffer acht Daten-Paritäts-Bits 2040 (eins pro dword) und zweiunddreißig Freigabe-Bits 2050 (eines pro Byte).
  • Ein Kabel-Schnittstellen-Block 2060 empfängt jede Transaktion und die entsprechenden Daten von dem Kabel-Codierer und platziert die Transaktion in dem Zeichen-Speicher 2036. Ein Warteschlangen-Schnittstellen-Block 2053 empfängt die Daten von dem Kabel-Schnittstellen-Block 2060 und platziert sie in der geeigneten Stelle in dem Daten-RAM 2038. Die Warteschlangen-Schnittstelle 2053 empfängt auch Daten von dem Daten-RAM 2038 und liefert sie zu der QPIF, wenn die QPIF die entsprechende Transaktion auf dem PCI-Bus laufen lässt. Ein Eingangs-Hinweis-Zeiger Logik-Block 2054 erzeugt vier Eingangs-Hinweis-Zeiger, einen für jeden Puffer, die der Warteschlangen-Schnittstelle 2053 mitteilen, wo das nächste Wort von Daten zu platzieren ist. Ein Gültigkeits-(Ausgangs)-Hinweiszeiger-Block 2056 erzeugt vier Ausgangs-Hinweiszeiger, einen für jeden Puffer, die die Position des nächsten Worts, das herangezogen werden soll, anzeigen.
  • Wie 60 zeigt, hält ein Gültigkeits-Flag-Logik-Block 2052 ein Acht-Bit-Gültigkeits-Zeilen-Register 2062 für jeden der vier Puffer in dem Daten-RAM 2038 aufrecht. Das Gültigkeits-Zeilen-Register 2062 zeigt an, welche der acht Cache-Zeilen in jedem Puffer gültige Daten enthält. Wenn das letzte Wort in einer Cache-Zeile mit Daten gefüllt worden ist (d. h. valid_pointer[2:0] entspricht „111" und cd_next-data wird aufgestellt was anzeigt, dass das Wort gefüllt worden ist), wird das entsprechende Bit in einem Acht-Bit-Kabel-Gültigkeits-Signal (d. h. q0_cable_valid[7:0], q1_cable_valid[7:0], usw.) eingestellt. Das Bit, das eingestellt werden soll, wird durch die drei signifikantesten Bits des Gültigkeits-Hinweiszeigers (valid_pointer[5:3]) bestimmt, die anzeigen, dass die Cache- Zeile gefüllt ist. Das entsprechende Bit in dem Kabel-Gültigkeits-Signal wird auch eingestellt, wenn ein Einsteckplatz-Gültigkeitssignal (validate_slot) von dem Kabel-Decodierer an dem Ende einer Transaktion empfangen ist. Das Kabel-Gültigkeits-Signal wird in das Gültigkeits-Zeilen-Register 2062 entsprechend dem ausgewählten Daten-Puffer an der ansteigenden Flanke des ersten PCI-Takt-Zyklus (CLK) verriegelt, nachdem das letzte Wort gefüllt ist, oder das valid_slot Signal empfangen ist. Ansonsten hält das Gültigkeits-Zeilen-Register seinen momentanen Wert bei. Die Bits in dem Gültigkeits-Zeilen-Register 2062 werden dann gelöscht, wenn die entsprechenden Bits eines Acht-Bit-Ungültigkeits-Signals (d. h. q0_invalid[7:0], q1_invalid[7:0], usw.) aufgestellt sind.
  • Der Gültigkeits-Flag-Logik-Block 2052 erzeugt ein pmwq_valid[3:0] Signal, das anzeigt, welcher, falls irgendeiner vorhanden ist, der vier Daten-Puffer mindestens eine gültige Zeile an Daten enthält. Der Gültigkeits-Block 2052 erzeugt auch ein pmwq_valid_lines[7:0] Signal, das anzeigt, welche der acht Cache-Zeilen eines ausgewählten Daten-Puffers gültig sind. Ein Warteschlangen-Auswahl-Signal von dem QPIF (p2pif_queue_select[1:0]) wird dazu verwendet, auszuwählen, welches gültige Zeilen-Register 2062 eines Daten-Puffers verwendet wird, um das pmwq_valid_lines[7:0] Signal zu erzeugen. Wenn der Warteschlangen-Block eine Steuerung des Busses erhält, um einen geposteten Speicher-Schreib-Zyklus laufen zu lassen, und zwar von einem ausgewählten Daten-Puffer, überträgt der Warteschlangen-Block alle Daten in jeder Zeile, deren entsprechendes Bit in dem pewg_valid_lines[7:0] Signal eingestellt ist. Gates 2064, 2066, 2068, 2070 und 2072 und ein Flip-Flop 2074 sind so angeordnet, um die Werte in dem Gültigkeits-Zeilen-Register 2062 für den ersten Daten-Puffer (q0_valid[7:0]) einzustellen. Eine ähnliche Schaltung bestimmt die Inhalte der Gültigkeits-Register für die anderen drei Daten-Puffer. Ein Multiplexer 2076 wählt den Wert des pmwg_valid_lines[7:0] Signals aus.
  • Wie nun 61 zeigt, hält ein Voll-Zeilen-Logik-Block 2058 ein Acht-Bit-Voll-Zeilen-Register 2078 für jeden der vier Daten-Puffer aufrecht. Die Inhalte jedes Voll-Zeilen-Registers 2078 zeigen an, welche der acht Cache-Zeilen in dem entsprechenden Daten-Puffer voll sind. Die Bits in jedem Voll-Zeilen-Register 2078 werden durch ein asynchrones next_full_line_bit Signal, erzeugt durch die Voll-Zeilen-Zustand-Maschine 2080, was nachfolgend beschrieben ist, eingestellt. Wenn ein Warteschlangen-Auswahl-Signal von der QPIF (select_next_queue[3:1]) einen der Daten-Puffer auswählt und das next_full_line_bit Signal aufgestellt ist, wird das Bit in dem Voll-Zeilen-Register 2078 ent sprechend zu der Cache-Zeile, angezeigt durch die drei signifikantesten Bits, des Gültigkeits-Hinweiszeigers (valid_pointer[5:3]) eingestellt. Ein 3 × 8 Decodierer 2082 wandelt den Drei-Bit-Gültigkeits-Hinweiszeiger in ein Acht-Bit-Signal um, das bestimmt, welches Bit einzustellen ist. Ein Acht-Bit-Voll-Zeilen-Signal (q0_full_line) wird für jeden Daten-Puffer von den Inhalten des entsprechenden Voll-Zeilen-Registers 2078 erzeugt. Das Voll-Zeilen-Signal zeigt an, welche Zeilen in dem entsprechenden Daten-Puffer voll sind. Der Voll-Zeilen-Logik-Block 2058 erzeugt auch ein pmwg_full_line[7:0] Signal, das anzeigt, welche Cache-Zeilen eines ausgewählten Daten-Puffers voll sind. Der Multiplexer 2084 und das q2pif_queue_select[1:0] Signal werden dazu verwendet, das pmwg_full_line[7:0] Signal zu erzeugen.
  • Wie auch 62 zeigt, wird die Voll-Zeilen-Zustand-Maschine 2080 in einen IDLE Zustand 2086 bei einem Reset platziert. In dem IDLE Zustand 2086 wird das next_full_line_bit auf Null gesetzt. Wenn eine Transaktion in die PMWQ platziert wird, tritt die Transaktion in zwei Phasen auf, eine Adressen-Phase und eine Daten-Phase. Wenn die Daten-Phase beginnt (d. h. ein clock_second_phase Signal wird aufgestellt) und der Gültigkeits-Hinweiszeiger zu dem ersten Wort in der Cache-Zeile hinweist (valid_pointer[2:0] = „000"), geht die Zustand-Maschine 2080 zu einem DATA Zustand 2088 über. In dem Datenzustand wird das next_full_line_bit Signal nur dann aufgestellt, wenn der Gültigkeits-Hinweiszeiger auf das letzte Wort in der Cache-Zeile hinweist (valid_pointer[2:0] = "111"), wird das cd_next_data Signal durch den Kabel-Decodierer aufgestellt (anzeigend, dass das letzte Wort mit Daten gefüllt wurde), und das Byte-Freigabe-Signal von dem Kabel-Decodierer (cd_byte_en[3:0]) gleicht „0000". Die Zustand-Maschine geht auch zurück zu dem IDLE Zustand 2086, wenn diese Zustände auftreten. Falls diese Zustände nicht auftreten, bevor die Transaktion endet (d. h. cd_complete wird aufgestellt), bleibt das next_full_line_bit Signal nicht aufgestellt und die Zustand-Maschine 2080 geht zurück zu dem IDLE Zustand 2086. Die Zustand-Maschine 2080 geht auch zu dem IDLE Zustand 2086 ohne Aufstellen des next_full_line_bit Signals über, wenn das cd_byte_en[3:0] Signal einen Wert, einen anderen als „0000", annimmt.
  • Wie wiederum 59 und auch 63 zeigen, muss die PMWQ normalerweise eine Transaktion von dem Kabel-Decodierer beenden, wenn der Daten-Puffer, der die entsprechenden Daten aufnimmt, voll ist. Allerdings lässt, wenn der Kabel-Decodierer fortfährt, Daten zu verschicken, nachdem der Puffer voll ist, ein Überlauf-Logik-Block 2090 zu, dass die Daten in den nächsten, leeren Puffer überlaufen. Der Überlauf-Logik-Block 2090 führt ein Überlauf-Register 2092, das anzeigt, welche, falls irgendwelche vorhanden sind, der vier Daten-Puffer als Überlauf-Puffer verwendet werden. Die Inhalte des Überlauf-Registers 2092 werden dazu verwendet, ein Vier-Bit-Überlauf-Signal (pmwq_overflow[3:0]) zu erzeugen. Wenn sich die Transaktion in der Daten-Phase befindet (d. h. data_phase ist aufgestellt), erreicht der Gültigkeits-Hinweiszeiger das letzte Wort eines Daten-Puffers (d. h. valid_pointer[5:0] = „111111"), der Kabel-Decodierer zeigt an, dass mehr Daten ankommen (d. h. cd_next_data wird aufgestellt), und der Kabel-Decodierer hat nicht angezeigt, dass die Transaktion abgeschlossen ist (d. h. cd_complete ist nicht aufgestellt), das select_next_queue[3:0] Signal, das auf den am kürzesten vorher gefüllten Daten-Puffer hinweist, wird dazu verwendet, das Überlauf-Register-Bit entsprechend dem nächsten Daten-Puffer einzustellen. Falls die Bedingungen nicht erfüllt sind, wird das Überlauf-Bit gelöscht. Gates 2094 und 2095 werden in Verbindung mit dem select_next_queue[3:0] Signal verwendet, um die geeigneten Überlauf-Register-Bits einzustellen und zu löschen, wenn diese Zustände erfüllt sind.
  • Eine einzelne Transaktion kann fortführen, um in zusätzliche Puffer überzulaufen, bis der letzte, nicht benutzte Puffer voll ist. Falls mehr als ein Puffer als ein Überlauf-Puffer verwendet wird, werden Mehrfach-Überlauf-Register-Bits eingestellt. Aufeinanderfolgende, eingestellte Bits in dem Überlauf-Register zeigen an, dass eine einzelne Transaktion in mehr als einen Puffer übergelaufen ist. Die Überlauf-Bits werden entweder eingestellt oder gelöscht, wenn die gepostete Schreib-Transaktion in die PMWQ hinein platziert ist. Auch kann, falls die QPIF beginnt, die PMW-Transaktion auf dem Target-Bus laufen zu lassen und den originalen Puffer zu entleeren, während sich die Daten noch dabei befinden, in die PMWQ einzutreten, wobei der Original-Puffer wieder verwendet werden, um die Überlauf-Transaktion fortzuführen. Der Überlauf kann fortführen, bis alle verfügbaren Puffer voll sind.
  • WARTESCHLANGE FÜR VERZÖGERTE ANFORDERUNG
  • Wie 64 zeigt, speichert die DRQ 142 alle die Informationen, die dazu benötigt werden, eine verzögerte Lese-Anforderung- (Delayed Read Request – DRR) und eine verzögerte Schreib-Anforderung-(Delayed Write Request – DRW)Transaktionen auf dem Target-Bus abzuschließen. Die DRQ umfasst einen Warteschlangenspeicher 2100, der Informationen hält, wie beispielsweise die Adresse, die davon gelesen oder dazu ge schrieben werden soll, den PCI-Befehl-Code, Byte-Freigaben, Adressen- und Daten-Paritäts-Bits, Indikations-Bits über einen „verriegelten Zyklus" und einen „Dual-Adressen-Zyklus", und die Puffer-Zahl des Puffers für den verzögerten Abschluss, reserviert in dem initiierenden Brücken-Chip für die Abschluss-Informationen. Der Warteschlangen-Speicher 2100 hält auch bis zu zweiunddreißig Bits (ein Wort) an Daten, die zu dem Target-Bus in einem verzögerten Schreib-Zyklus geschrieben werden sollen. Da verzögerte Schreib-Zyklen niemals mehr als ein Wort an Daten einsetzen, wird kein Daten-RAM in der DRQ benötigt. Die DRQ, und deshalb der Warteschlangen-Speicher 2100, ist in der Lage, bis zu drei verzögerte Anforderungs-Transaktionen auf einmal zu halten. Ein Kabel-Schnittstellen-Block 2102 beansprucht verzögerte Anforderungs-Transaktionen von dem Kabel-Decodierer und platziert sie in den Warteschlangen-Speicher 2100. Die folgende Tabelle zeigt die Informationen, die in dem DRQ-Warteschlangen-Speicher beibehalten werden.
  • Figure 00290001
    Inhalte von DRQ
  • Wie auch 65 zeigt, bestimmt ein Gültigkeits-Flag-Logik-Block 2104, wann die DRQ alle die Informationen empfangen hat, die dazu notwendig sind, die Transaktionen in dem Warteschlangen-Speicher 2100 laufen zu lassen. Wenn einer der DRQ-Schlitze durch ein entsprechendes Schlitz-Auswahl-Signal ausgewählt ist (d. h. select_zero für den ersten Schlitz, select_one für den zweiten Schlitz und select_two für den dritten Schlitz) und der Schlitz durch ein validate_slot Signal für gültig erklärt ist, anzeigend, dass der Kabel-Decodierer ein Zuführen der Transaktion zu der DRQ abgeschlossen hat, wird ein Gültigkeits-Signal entsprechend zu dem Schlitz (d. h. q0_valid, q1_valid oder q2_valid) an der ansteigenden Flanke des nächsten PCI-Takt-(CLK)-Zyklus aufgestellt. Falls ein Schlitz nicht ausgewählt ist und durch ein valid_slot Signal für gültig erklärt ist, wird das Gültigkeits-Signal für den Schlitz bzw. den Einsteckplatz wieder zurückgenommen, falls die QPIF den Schlitz ausgewählt hat, durch Aufstellen eines DRQ-Auswahl-Signals (q2pif_drq_select) und durch Identifizieren des Schlitzes bzw. des Einsteckplatzes (q2pif_queue_select = Schlitz-Zahl), allerdings die Transaktion durch Aufstellen eines Zyklus-Aussonderungs-Signals (q2pif_abort_cycle) ausgesondert hat. Das Gültigkeits-Signal wird auch zurückgenommen, falls die DRQ die Transaktion durch Aufstellen eines Zyklus-Abschluss-Signals (z. B. q0_cycle_complete) beendet, während die QPIF auf mehr Daten wartet (d. h. q2pif_next_data ist aufgestellt). Allerdings wird das Zyklus-Abschluss-Signal ignoriert, falls die QPIF momentan Daten zu dem anderen Brücken-Chip (d. h. q2pif_streaming ist aufgestellt) als Datenfolge überträgt. Ansonsten hält, falls das Gültigkeits-Signal des Schlitzes nicht spezifisch aufgestellt oder an einem Takt-Zyklus zurückgenommen ist, er seinen momentanen Wert bei. Der Gültigkeits-Flag-Logik-Block 2104 erzeugt auch ein DRQ Gültigkeits-Signal (drq_valid[3:0]), das anzeigt, welcher, falls irgendeiner vorhanden ist, der drei DRQ-Schlitze eine gültige Transaktion enthält, und zwar durch Kombinieren der Gültigkeits-Signale für jeden individuellen Schlitz (d. h. drq_valid = {0, q2_valid, q1_valid, q0_valid}). Gates 2106, 2108, 2110, 2112 und 2114, Multiplexer 2116 und 2118 und ein Flip-Flop 2120 sind so angeordnet, um die Schlitz-Gültigkeits-Signale und die DRQ-Gültigkeits-Signale auf diese Art und Weise zu erzeugen.
  • Die DRQ umfasst auch Hinweiszeiger-Logik-Blöcke, die Hinweiszeiger zu den Speicher-Stellen beibehalten, von denen Daten während verzögerter Lese-Anforderungs-Transaktionen gelesen werden sollen. Wenn die Adresse, an der die verzögerten Lese-Transaktionen beginnen wird, in den Warteschlangen-Speicher 2100 eingeladen ist, er zeugt ein Gültigkeits-Hinweiszeiger-Logik-Block 2122 einen Sechs-Bit-Gültigkeits-Hinweiszeiger, der anzeigt, wo die Transaktion enden wird. Falls die Transaktion ein einzelnes Wort umfasst (z. B. ein Speicher-Lesen), stellt die Gültigkeits-Hinweiszeiger-Logik 2122 den gültigen Hinweiszeiger gleich zu der Adresse, eingeladen in den Warteschlangen-Speicher 2100 hinein, auf. Für eine Speicher-Lese-Zeilen-Transaktion gibt die Gültigkeits-Hinweiszeiger-Logik 2122 dem gültigen Hinweiszeiger einen Wert von „000111 ", was anzeigt, dass der letzte, gültige Teil der Daten ein acht dwords (d. h. eine Cache-Zeile) über den Startpunkt hinaus ist. Für eine Speicher-Lese-Mehrfach-Transaktion wird der gültige Hinweiszeiger auf „111111" gesetzt, was anzeigt, dass der letzte, gültige Teil an Daten vierundsechzig dwords (d. h. acht Cache-Zeilen) über den Startpunkt ist. Die Gültigkeits-Hinweiszeiger-Logik 2122 behält einen gültigen Hinweiszeiger für jeden Schlitz in der DRQ (valid_pointer_0[5:0], valid_pointer_1[5:0] und valid_pointer_2[5:0]) bei. Die Stelle des gültigen Hinweiszeigers wird durch die DRQ dann ignoriert, wenn sie ein Streaming-Signal von der QPIF (q2pif_streaming) empfängt, wie dies in weiterem Detail nachfolgend beschrieben ist.
  • Ein Ausgangs-Hinweiszeiger-Logik-Block 2124 behält drei Ausgangs-Hinweiszeiger (output_pointer_0[5:0], output_pointer_1[5:0] und output_pointer_2[5:0]), einen für jeden Schlitz in der DRQ, bei, die das nächste Wort an Daten anzeigen, das von dem Speicher gelesen werden soll, und zugeführt zu dem anderen Brücken-Chip. Der Hinweiszeiger wird dann erhöht, wenn die QPIF anzeigt, dass sie bereit ist, den nächsten Teil an Daten zu lesen (d. h. sie stellt das q2pif_next_data Signal auf), einmal für jede Wort-Lesung. Mit Ausnahme in Streaming-Situationen, wird eine Transaktion beendet (abgeschlossen), wenn der Ausgangs-Hinweiszeiger den gültigen Hinweiszeiger erreicht. Wenn eine Transaktion endet, bevor alle Daten gelesen sind (d. h. bevor der Ausgangs-Hinweiszeiger den Eingangs-Hinweiszeiger erreicht), wird die QPIF an der Stelle, angezeigt durch den Ausgangs-Hinweiszeiger, aufnehmen, wenn die Transaktion wieder beginnt. Wenn der Ausgangs-Hinweiszeiger erhöht wird, allerdings die Ausgangs-Hinweiszeiger-Logik 2124 ein Stepback-Signal (q2pif_step_back) empfängt, was anzeigt, dass die Transaktion an dem PCI-Bus beendet wurde, bevor die QPIF in der Lage war, den letzten Teil von Daten zu lesen, erniedrigt die Ausgangs-Hinweiszeiger-Logik 2124 den Zähler einmal, so dass der letzte, nicht gelesene Teil der Daten gelesen werden kann, wenn die Transaktion wieder beginnt. Ein Warteschlangen-Schnittstellen-Block 2126 liefert Transaktions-Informationen und den gültigen und Ausgangs-Hinweiszeiger zu der QPIF.
  • WARTESCHLANGE FÜR VERZÖGERTEN ABSCHLUSS
  • Wie 66 zeigt, speichert die DCQ 144 verzögerte Abschluss-Nachrichten, die die Antwort des Target-Busses auf jede verzögerte Anforderung, ausgegeben zu dem initiierenden Bus hin, enthalten. Verzögerte Abschluss-Nachrichten entsprechend zu verzögerten Lese-Anforderungen umfassen die angeforderten Daten, während verzögerte Abschluss-Nachrichten, entsprechend zu verzögerten Schreib-Anforderungen, keine Daten umfassen. Ein Kabel-Schnittstellen-Block 2130 beansprucht verzögerte Abschluss-Nachrichten von dem Kabel-Decodierer und liefert die verzögerten Abschluss-Informationen zu einem Tag-Speicher 2132. Die DCQ, und deshalb der Tag-Speicher 2132, ist dazu geeignet, bis zu acht verzögerte Abschluss-Nachrichten auf einmal zu speichern. Der Tag-Speicher 2132 speichert Informationen, wie beispielsweise den PCI-Befehl und die Adresse, enthalten in der originalen Anforderung, zu der verzögerten Abschluss-Nachricht führend, Byte-Freigabe-Bits, Adressen- und Daten-Paritäts-Bits und Bits für einen „verriegelten Zyklus" und einen „Dual-Adressen-Zyklus". Für verzögerte Schreib-Transaktionen, die immer nur ein einzelnes Wort an Daten einsetzen, speichert der Tag-Speicher 2132 eine Kopie der geschriebenen Daten. Jeder der acht Schlitze bzw. Steckplätze in dem Tag-Speicher 2132 umfasst einen implizierten Hinweiszeiger zu einem von acht entsprechenden Daten-Puffern in einem DCQ-Daten-RAM 2134. Für verzögerte Lese-Transaktionen werden die zurückgeführten Daten in einem entsprechenden Daten-Puffer 2135ah in dem Daten-RAM 2134 gespeichert. Die folgende Tabelle stellt die Informationen dar, gespeichert in dem Tag-Speicher 2132 für jede Transaktion, gehalten in der DCQ.
  • Figure 00330001
    Inhalte von DCQ
  • Jeder der acht Daten-Puffer in dem DCQ-Daten-RAM 2134 kann bis zu acht Cache-Zeilen (256 Bytes) an verzögerten Abschlussdaten speichern. Deshalb sind die Puffer groß genug, um alle Abschlussdaten für sogar die größten, verzögerten Anforderungs-Transaktionen (Speicher-Lese-Mehrfach-Transaktion) zu speichern. Allerdings kann die Kapazität jedes Daten-Puffers auf vier Cache-Zeilen durch Einstellen eines Konfigurations-Bits (cfg2q_eight_line_) in den Konfigurations-Registern des Brücken-Chips reduziert werden. Jeder Daten-Puffer kann durch Daten gefüllt werden, vorgesehen in einer einzelnen, verzögerten Abschluss-Transaktion, oder falls nicht alle angeforderten Daten in einer einzelnen, verzögerten Abschluss-Transaktion zurückgeführt werden, durch mehrfache, verzögerte Abschluss-Transaktionen. Allerdings kann jeder Daten-Puffer Daten entsprechend zu nur einer originalen, verzögerten Anforderung enthalten, ungeachtet davon, wieviele verzögerte Abschluss-Transaktionen es benötigt, die angeforderten Daten zu liefern.
  • Ein Warteschlangen-Schnittstellen-Block 2136 steuert den Fluss von Abschluss-Daten von der DCQ-Kabel-Schnittstelle 2130 in den Daten-RAM 2134 hinein und aus dem Daten-RAM 2134 zu der QPIF heraus. Drei Logik-Blöcke erzeugen Hinweiszeiger, die die Eingabe und die Ausgabe von Daten, gespeichert in den acht Daten-Puffern, leiten. Der erste Block, ein Eingangs-Hinweiszeiger-Logik-Block 2138, behält einen Sechs-Bit-Eingangs-Hinweiszeiger für jeden der acht Daten-Puffer bei (in_pointer_0[5:0], in_pointer_1[5:0], usw.). Jeder Eingangs-Hinweiszeiger weist auf die Stelle in dem entsprechenden Daten-Puffer hin, um das nächste Wort an Daten zu platzieren. Der zweite Block, ein Ausgangs-Hinweiszeiger-Logik-Block 2140, behält einen Sechs-Bit-Ausgangs-Hinweiszeiger für jeden der acht Puffer bei (out_pointer_0[5:0], out_pointer_1[5:0], usw.). Jeder Ausgangs-Hinweiszeiger weist auf die Stelle des Worts von Daten unmittelbar dem Wort, das als letztes von der QPIF entfernt ist, hin. Der Ausgangs-Hinweiszeiger für einen ausgewählten Daten-Puffer wird dann erhöht, wenn die QPIF anzeigt, dass sie für den nächsten Teil von Daten bereit ist (d. h. wenn q2pif_next_data aufgestellt ist). Falls der Ausgangs-Hinweiszeiger erhöht wird, allerdings der letzte Teil von Daten nicht die anfordernde Vorrichtung erreicht, da die Transaktion durch eine Vorrichtung, eine andere als die QPIF, beendet wurde, stellt die QPIF ein Rückschritt-Signal (q2pif_step_back) auf, das bewirkt, dass der Ausgangs-Hinweiszeiger-Logik-Block 2140 den Ausgangs-Hinweiszeiger um ein Wort erniedrigt.
  • Der dritte Hinweiszeiger-Block, ein gültiger Hinweiszeiger-Logik-Block 2142, behält für jeden der Acht-Daten-Puffer einen Sechs-Bit-Gültigkeits-Hinweiszeiger bei (valid_pointer_0[0:5], valid_pointer_1[5:0], usw.), der das nächste Wort an Daten in dem entsprechenden Daten-Puffer anzeigt, der zu der QPIF verfügbar ist. Da die PCI Spec. 2.1 erfordert, dass Lese-Abschluss-Daten nicht vor einer früher initiierten, geposteten Speicher-Schreib-Transaktion zurückgeführt werden, können verzögerte Abschluss-Daten, platziert in die DCQ hinein, während ein gepostetes Speicher-Schreiben in dem PMWQ anhängig ist, nicht zu der anfordernden Vorrichtung verfügbar gemacht werden, bis das gepostete Speicher-Schreiben auf dem PCI-Bus abgeschlossen ist und von der PMWQ entfernt ist. Deshalb muss, solange wie irgendwelche früher in die Warteschlange gestellten, geposteten Speicher-Schreib-Transaktionen in der PMWQ verbleiben, der gültige Hinweiszeiger bei seiner momentanen Position verbleiben. Dann kann, wenn alle früher in die Warteschlange gestellten, geposteten Speicher-Schreib-Vorgänge von der PMWQ entfernt worden sind, der gültige Hinweiszeiger zu derselben Position wie diejenige in dem Hinweiszeiger bewegt werden. Wenn die PMWQ leer ist, sind alle verzögerten Abschluss-Daten gültig (d. h. zu der anfordernden Vorrichtung hin verfügbar), sobald wie sie in der DCQ gespeichert sind.
  • Wie auch die 67A und 67B zeigen, muss der Gültigkeits-Hinweiszeiger-Logik-Block 2142 den Master-Zyklus-Arbitrierer (Master Cycle Arbiter – MCA) fragen, um alle verzögerten Abschluss-Transaktionen für gültig zu erklären, die in die verzögerte Abschluss-Warteschlange eintreten, während ein gepostetes Speicher-Schreiben in der PMWQ anhängig ist. Allerdings kann, da der MCA nicht mehr als vier verzögerte Abschluss-Transaktionen auf einmal in die Warteschlange stellen kann, wie dies nachfolgend diskutiert ist, der Gültigkeits-Hinweiszeiger-Logik-Block 2142 eine Gültigkeit von nicht mehr als vier verzögerten Abschluss-Daten-Puffern auf einmal anfordern. Der Gültigkeits-Hinweiszeiger-Logik-Block 2142 muss auch eine Protokollierung beibehalten, welche vier verzögerten Abschluss-Transaktionen in dem MCA zu irgendeinem gegebenen Zeitpunkt in die Warteschlange gestellt sind. Um dies so vorzunehmen, behält der Gültigkeits-Hinweiszeiger-Logik-Block 2142 zwei Vier-Schlitz-Register bei: ein DCQ-Puffer-Zahl-Register 2144 und ein Gültigkeits-Anforderungs-Register 2146. Das Puffer-Zahl-Register 2144 behält die Drei-Bit-DCQ-Puffer-Zahl bei, wie dies durch das DCQ-Puffer-Zahl-Signal (cd_dcq_buff_num[2:0]) bestimmt ist, geliefert durch den Kabel-Decodierer, und zwar von jeder verzögerten Abschluss-Transaktion, in dem MCA in die Warteschlange gestellt. Das Gültigkeits-Anforderungs-Register 2146 behält ein Transaktions-Gültigkeits-Anforderungs-Bit für jeden der DCQ-Puffer bei, deren Zahlen in den vier Schlitzen bzw. Einsteckplätzen 2148ad des Puffer-Zahl-Registers 2144 gespeichert sind. Das Anforderungs-Bit in jedem Schlitz 2150ad des Gültigkeits-Anforderungs-Registers 2146 wird aufgestellt, falls eine entsprechende, verzögerte Abschluss-Transaktion in dem MCA in die Warteschlange gestellt ist. Die Werte der Bits in den vier Gültigkeits-Anforderungs-Schlitzen 2150ad werden zusammen mit dem MCA als ein Vier-Bit-Gültigkeits-Anforderungs-Signal (dcq_valid[3:0]) vorgesehen.
  • Wenn eine verzögerte Abschluss-Transaktion in dem MCA in die Warteschlange gestellt werden soll, wird seine entsprechende DCQ-Puffer-Zahl in einen der Puffer-Zahl-Schlitze bzw. -Einsteckplätze 2148ad durch das cd_dcq_buff_num[2:0] Signal eingeladen. Der Schlitz 2148ad, der beladen werden soll, wird durch ein Zwei-Bit-Auswahl-Signal (next_valid_select[1:0]) ausgewählt. Der Wert des Auswahl-Signals hängt von dem Wert des dcq_valid[3:0] Signals, erzeugt durch das Gültigkeits-Anforderungs-Register 2146 und die Durchsichts-Tabelle 2152, ab, wobei die Inhalte davon in der Tabelle nachfolgend gezeigt sind. Der Schlitz wird dann beladen bzw. belegt, wenn er durch next_valid_select[1:0] ausgewählt ist, wenn der Kabel-Decodierer die DCQ ausgewählt hat und die Transaktion abgeschlossen hat (d. h. cd_dcq_select und cd_complete werden aufgestellt), und wenn mindestens eine gepostete Speicher-Schreib-Transaktion in der PMWQ anhängig ist (d. h. pmwq_no_pmw ist nicht aufgestellt). Gates 2154, 2156, 2158, 2160 und 2162 und ein 2 × 4 Decodierer 2164 sind so angeordnet, um das Puffer-Zahl-Register 2144 auf diese Art und Weise zu laden. In ähnlicher Weise wird das entsprechende Bit in dem Gültigkeits-Anforderungs-Register 2146 durch den Ausgang von Gates 2154, 2156, 2158, 2160 und 2162 und den 2 × 4 Decodierer 2164 eingestellt.
  • Figure 00360001
    Puffer-Zahl-Register-Schlitz-Auswahl
  • Auf das dcq_valid[3:0] Signal hin gibt der MCA ein Vier-Bit-DCQ-Lauf-Signal (mca_run_dcq[3:0]) aus, das anzeigt, welcher der DCQ-Puffer, auf den durch das Puffer-Zahl-Register hingewiesen ist, seinen Gültigkeits-Hinweiszeiger aktualisiert haben kann. Das mca_run_dcq[3:0] Signal wird zu einem Gültigkeits-Hinweiszeiger-Aktualisierungs-Logik-Block 2166 geliefert, und zwar zusammen mit dem pmwg_no_pmw Signal und den In-Hinweiszeigern für jeden der acht Daten-Puffer. Falls eine gepostete Speicher-Schreib-Transaktion in der PMWQ verbleibt, nachdem der MCA eines der mca_run_dcq[3:0] Bits aufstellt (was dann auftreten wird, wenn eine gepostete Speicher-Schreib-Transaktion in die Warteschlange gestellt wurde, nachdem die verzögerte Abschluss-Transaktion in die Warteschlange gestellt wurde, allerdings bevor der MCA das entsprechende mca_run_dcq Bit aufgestellt hat), wird der entsprechende Gültigkeits-Hinweiszeiger aktualisiert, solange wie keine anderen, verzögerten Abschluss-Transaktionen entsprechend zu demselben DCQ-Puffer noch in dem MCA in die Warteschlange gestellt sind. Falls eine verzögerte Abschluss-Transaktion für denselben DCQ-Puffer noch in der MCA in die Warteschlange gestellt ist, kann der Gültigkeits-Hinweiszeiger nur aktualisiert werden, wenn das mca_run_dcq Bit entsprechend dieser Transaktion aufgestellt ist. Andererseits werden, sobald das pmwq_no_pmw Signal weggenommen ist, alle Gültigkeits-Hinweiszeiger aktualisiert, um die entsprechenden In-Hinweiszeiger anzupassen, ungeachtet davon, ob verzögerte Abschlüsse noch in der Warteschlange in dem MCA gestellt sind. Wenn ein mca_run_dcq Bit aufgestellt ist, wird das entsprechende Bit in dem Gültigkeits-Anforderungs-Register 2146 gelöscht. Gates 2168, 2170, 2172, 2174 und 2176 sind so angeordnet, um die Gültigkeits-Anforderungs-Register-Bits auf diese Art und Weise zu löschen. Wie wiederum 66 zeigt, bestimmt ein Hit-Logik-Block 2180, wenn eine verzögerte Anforderungs-Transaktion von einer anfordernden Vorrichtung auf dem PCI-Bus eine der verzögerten Abschluss-Nachrichten in der DCQ „getroffen" hat. Entsprechend zu der PCI Spec 2.1 müssen die folgenden Attribute identisch für einen verzögerten Abschluss sein, um zu einer Anforderung angepasst zu werden: Adresse, PCI Befehl, Byte-Freigaben, Adressen- und Daten-Parität (falls eine Schreib-Anforderung vorliegt), REQ64# (falls eine 64-Bit-Daten-Transaktion vorliegt), und LOCK# (falls unterstützt wird). Falls eine Anforderung durch die PCI-Slave verriegelt ist, sucht die QPIF die Anforderungsinformationen auf, schickt sie zu der DCQ und stellt ein Prüf-Zyklus-Signal auf (q2pif_check_cyc), das die DCQ-Hit-Logik 2180 instruiert, die Anforderungs-Informationen zu den verzögerten Abschluss-Nachrichten, gespeichert in dem DCQ-Tag-Speicher 2132, zu vergleichen. Die Hit-Logik 2180 empfängt das 64 Bit-Adressen-Signal (q2pif_addr[63:2]), das Vier-Bit-PCI-Befehls-Signal (q2pif_cmd[3:0]), die vier Freigabe-Bits (q2pif_byte_en[3:0]), das Dual-Adressen-Zyklus-Bit (q2pif_dac), (das dem PCI REQ64# Signal entspricht), das Verriegelungs-Bit (q2pif_lock) von der QPIF, und, falls die Anforderung eine Schreib-Anforderung ist, die Daten, die geschrieben werden sollen (q2pif_data[31:0]). Obwohl es nicht durch die PCI Spec 3.1 erforderlich ist, liefert die QPIF auch die Schlitz-Zahl (q2pif_slot[2:0]) der anfordernden Vorrichtung, um das Puffer-Entleerungs-Programm für den Warteschlangen-Block fortzuführen, wie dies nachfolgend beschrieben ist. Die Hit-Logik 2180 vergleicht dann jedes dieser Signale mit verzögerten Abschluss-Informationen, gespeichert in den acht DCQ-Puffern. Falls alle Signale die Informationen irgendwelcher der verzögerten Abschluss-Nachrichten anpassen, identifiziert die Hit-Logik 2180 den Puffer, der die Anpassungs-Abschluss-Nachricht enthält, durch Aufstellen eines entsprechenden Bits in einem Acht-Bit-Hit-Signal (dcq_hit[7:0]). Wenn ein Treffer bzw. Hit auftritt, sucht die QPIF die Abschluss-Nachricht auf und liefert sie zu der anfordernden Vorrichtung. und, falls die Anforderung eine Lese-Anforderung ist, beginnt sie ein Entfernen der zurückgeführten Daten von dem entsprechenden Daten-Puffer in dem Daten-RAM 2134. Falls die angeforderten Informationen nicht die Abschluss-Informationen irgendeiner der verzögerten Abschluss-Nachrichten in der DCQ anpassen, ist die Anforderung in Bezug auf die DCQ „fehlgeschlagen" („missed"), und wird in dem nächsten, verfügbaren DCQ-Puffer gespeichert und über das Kabel zu dem anderen Brücken-Chip durch die QPIF weitergeführt. Eine PCI-Vorrichtung, die eine Anforderung initiiert, die die DCQ verfehlt hat, kann deren REQ# Leitung maskiert haben, bis deren Abschluss-Nachricht zurückgeführt ist, wie dies in weiterem Detail nachfolgend beschrieben ist.
  • Die Hit-Logik 2180 verbindet sich auch schnittstellenmäßig mit einem Multi-Threaded-Master-Erfassungs-Block 2182, um zu erfassen, welche PCI-Schlitze bzw. -Steckplätze, falls welche vorhanden sind, Multi-Threaded Vorrichtungen enthalten. Multi-Threaded Vorrichtungen sind in der Lage, mehr als eine, verzögerte Transaktion zu einem Zeitpunkt beizubehalten, und müssen deshalb speziell behandelt werden. Wenn ein Multi-Threaded-Master erfasst ist, wird ein entsprechendes Bit in den Konfigurations-Registern eingestellt, um anzuzeigen, dass die Vorrichtung in der Lage ist, mehrere, offenstehende, verzögerte Transaktionen zu unterstützen, und deshalb sollte deren REQ# Zeile nicht maskiert werden. Eine Multi-Threaded-Master-Erfassung wird in weiterem Detail nachfolgend diskutiert.
  • Eine andere Funktion der DCQ ist diejenige, zu bestimmen, wenn eine Gelegenheit existiert, um eine Datenfolge von Lese-Daten zwischen dem primären und dem sekundären PCI-Bus erzeugen. Eine Streaming-Gelegenheit existiert dann, wenn verzögerte Abschluss-Daten in die DCQ durch den Kabel-Decodierer platziert werden, während sie noch auf dem Target-Bus durch die Target-Vorrichtung platziert sind. Falls die PCI-Vorrichtung, die die Transaktion initiierte, wieder deren Anforderung liefert, während die Target-Vorrichtung noch Daten auf dem PCI-Bus platziert, wird eine Lese-Datenfolge eingerichtet. Da ein Lese-Streaming eine effiziente Art und Weise ist, um Daten zwischen dem primären und dem sekundären PCI-Bus zu übertragen, gibt der PCI-Brücken-Chip nicht nur eine höhere Priorität in den Bus-Arbitrierungs-Prozess zu einer Vorrichtung, deren Abschluss-Daten ankommen, sondern wird auch versuchen, eine Nicht-Streaming-Transaktion zu beenden, um die Möglichkeit zu verbessern, dass eine Datenfolge eingerichtet werden wird. Allerdings ist es, während in der Theorie ein Streaming während irgendeines Lese-Zyklus auftreten kann, in der Praxis wahrscheinlich, dass dies nur während Transaktionen auftritt, die eine große Menge an Daten umfassen (d. h. Speicher-Lese-Mehrfach-Transaktionen). Deshalb wird der Warteschlangen-Block versuchen, Transaktionen zugunsten von potentiellen Streaming-Gelegenheiten nur dann zu beenden, wenn eine potentielle Streaming-Transaktion eine Speicher-Lese-Mehrfach-Transaktion ist.
  • Wie auch 68 zeigt, bestimmt ein Stream- bzw. Datenfolge-Logik-Block 2184 in der DCQ, ob eine Streaming-Gelegenheit existiert, und, falls dies der Fall ist, erzeugt er die Signale, erforderlich dazu, die Datenfolge zu unterstützen. Der Datenfolge-Logik-Block 2184 erzeugt die Signale, erforderlich dazu, eine momentane Transaktion zugunsten einer potentiellen Datenfolge zu unterbrechen. Wenn der Kabel-Decodierer eine verzögerte Abschluss-Transaktion in der DCQ platziert, verwendet die Datenfolge-Logik 2184 das DCQ-Puffer-Zahl-Signal, geliefert durch den Kabel-Decodierer (cd_dcq_buff_num), um den PCI-Befehl-Code, gespeichert in dem entsprechenden DCQ-Puffer (q0_cmd[3:0], q1_cmd[3:1] usw.), aufzusuchen. Falls der Befehl-Code eine Speicher-Lese-Mehrfach-Anforderung (d. h. „1100") darstellt, stellt die Datenfolge-Logik 2184 ein Unterbrechungs-Für-Datenfolge-Signal (dcq_disconnect_for_stream) auf, das die QPIF und die PCI-Schnittstelle instruiert, die momentane Transaktion aufgrund einer potentiellen Streaming-Gelegenheit zu beenden. Ein Multiplexer 2186 und ein Komparator 2188 sind so angeordnet, um das dcq_disconnect_for_stream Signal zu erzeugen. Dann liefert, solange wie der Kabel-Decodierer fortfährt, die Abschluss-Daten zu der DCQ zu liefern (d. h. das cd_dcq_select Signal verbleibt aufgestellt) und keine geposteten Speicher-Schreibvorgänge in der PMWQ erscheinen (d. h. pmwq_no_pmw verbleibt aufgestellt), liefert die Datenfolge-Logik 2184 ein Streaming-Request-Signal (q2a_stream) direkt zu dem PCI-Arbitrierer. Die Datenfolge-Logik 2184 liefert auch die Schlitz- bzw. Einsteckplatz-Zahl der potentiellen Streaming-Vorrichtung (q2a_stream_master[2:0]) zu dem PCI-Arbitrierer unter Verwendung des cd_dcq_buff_num[2:0] Signals, um die PCI-Schlitz-Zahl, gespeichert in dem ausgewählten DCQ-Puffer (q0_master[2:0] für DCQ-Puffer-Null 2135a, q1_master[2:0] für DCQ-Puffer-Eins 2135b, usw.), auszuwählen. Der PCI-Arbitrierer hebt dann die Bus-Arbitrierungs-Priorität der potentiellen Streaming-Vorrichtung an, wie dies in weiterem Detail nachfolgend diskutiert ist. Falls dem potentiellen Streaming-Master nicht der Bus erteilt wird, bevor die Streaming-Gelegenheit verschwindet, wird deren Priorität zu Normal zurückgeführt. Da der eingangsseitige Bus nur eine Master-Vorrichtung (die CPU) besitzt, wird dieses Merkmal in dem eingangsseitigen Chip gesperrt. Das Gate 2190 und der Multiplexer 2192 sind so angeordnet, um die q2a_stream und q2a_stream_master Signale zu erzeugen.
  • Wenn eine anfordernde Vorrichtung eine verzögerte Abschluss-Nachricht, gespeichert in der DCQ, trifft, wird das entsprechende Bit eines Acht-Bit-Hit-Signals (hit[7:0]) aufgestellt. Das hit[7:0] Signal zeigt an, welcher der acht DCQ-Puffer durch die momentane Anforderung getroffen ist. Wenn dies auftritt, verriegelt, falls der entsprechende DCQ-Puffer Daten enthält (d. h. dcq_no_data wird nicht aufgestellt), die Datenfolge-Logik 2118 den Wert des Hit-Signals für die Dauer der Transaktion (d. h. solange, wie q2pif_cyc_complete aufgestellt ist). Die verriegelte Version des Hit-Signals bildet ein „verzögertes" Hit-Signal (dly_hit[7:0]). Wenn entweder das Hit-Signal oder das verzögerte Hit-Signal anzeigt, dass ein DCQ-Puffer getroffen worden ist, liefert ein Drei-Bit-DCQ-Datenfolge-Puffer-Signal (dcq_stream_buff[2:0]) die Puffer-Zahl des getroffenen bzw. Hit-DCQ-Puffers. Dann stellt, falls der Kabel-Decodierer verzögerte Abschluss-Daten in den Puffer platziert, während sich der Zyklus, der den Puffer traf, in Arbeit befindet (d. h. cd_dcq_select wird aufgestellt und cd_dcq_buff_num[2:0] entspricht dcq_stream_buff[2:0]), der Datenfolge-Logik-Block 2180 ein Datenfolge-Verbindungs-Signal auf (dcq_stream_connect), das der QPIF mitteilt, dass eine Datenfolge eingerichtet worden ist. Die QPIF informiert dann den Brücken-Chip auf dem Target-Bus, dass eine Datenfolge eingerichtet worden ist. Falls bestimmte Bedingungen erfüllt sind, wird die Target-QPIF fortfahren im Datenfluss zu arbeiten, bis sie mitteilt, zu stoppen, durch Initiieren von QPIF, wie dies in weiterem Detail nachfolgend diskutiert ist. Gates 2194 und 2196, Multiplexer 2198 und 2200 und ein Flip-Flop 2202 sind so angeordnet, um das verzögerte Hit-Signal zu erzeugen. Gates 2204, 2206 und 2208 und ein Codieren 2210 sind so angeordnet, wie dies dargestellt ist, um die dcq_stream_connect und dcq_stream_buff[2:0] Signale zu erzeugen.
  • Wie wiederum 66 zeigt, wird die DCQ, unter bestimmten Umständen, automatisch Daten von dem Target-Bus zu Lasten eines PCI-Masters bei der Antizipierung automatisch vorab Abrufen, dass der Master zurückkommen wird und die Daten anfordern wird. Ein Prefetch-Logik-Block 2212 in der DCQ stellt Daten vorab ein, wenn der lesende Master alle die Daten in seinem DCQ-Puffer verbraucht und die Prefetch-Logik 2212 er wartet, dass die anfordernde Vorrichtung mit einer sequenziellen Lese-Anforderung zurückkehren wird (d. h. eine Anforderung, die Daten aufnimmt, angeordnet an der nächsten, sequenziellen Stelle in dem Speicher). Da einige Vorrichtungen, wie beispielsweise Multi-Threaded-Master, routinemäßig alle die Daten lesen, angefordert in einer Transaktion, und dann mit einer unterschiedlichen, nicht-sequenziellen Anforderung zurückkehren, umfasst die Prefetch-Logik 2212 eine Vorhersageschaltung, die die Prefetch-Fähigkeiten für jede Vorrichtung auf dem PCI-Bus sperrt, bis die Vorrichtung eine Tendenz dahingehend gezeigt hat, sequenzielle Lese-Anforderungen auszugeben. Sobald sie eine Vorrichtung, die vorab eingestellte Daten empfangen hat, mit einer nicht-sequenziellen Lese-Anforderung zurückkehrt, wird die Voraussage-Schaltung die Prefetching-Funktion für diesen Master sperren.
  • Unter Bezugnahme auch auf die 69a und 69b umfasst der Prefetch-Logik-Block 2212 ein Prefetch-Vorhersage-Register 2214, wobei der Ausgang davon ein Acht-Bit-Prefetch-Freigabe-Signal (prefetch_set[7:0]) ist, das beurteilt, ob die Prefetch-Funktion für jede der Vorrichtungen auf dem PCI-Bus verfügbar ist. Alle Bits in dem Prefetch-Freigabe-Signal werden bei einem Reset (RST) gelöscht und wenn die QPIF ein allgemeines Löschen aller der DCQ-Register fordert (d. h. general_flush wird aufgestellt und q2pif_slot[2:0] entspricht „000"). Das general_flush Signal wird in weiterem Detail nachfolgend diskutiert. Gates 2216 und 2218 erzeugen das Signal, das die prefetch_set Bits wiedereinstellt.
  • Ein individuelles Bit in dem Prefetch-Freigabe-Signal wird dann eingestellt, wenn der entsprechende PCI-Schlitz bzw. PCI-Einsteckplatz durch das q2pif_slot Signal ausgewählt ist und die folgenden Zustände auftreten: die anfordernde Vorrichtung trifft einen verzögerten Abschluss-Puffer in der DCQ (d. h. eines der Bits in den cycle_hit[7:0) Signal wird aufgestellt), die momentane Transaktion ist eine Speicher-Lese-Zeile oder ein Speicher-Lese-Mehrfach-Zyklus (d. h. q2pif_cmd[3:0] entspricht „1100" oder „11110"), die QPIF hat angezeigt, dass der Zyklus vollständig ist, (d. h. q2pif_cyc_complete wird aufgestellt) und das letzte Wort von Daten wurde von dem DCQ-Puffer herangezogen (d. h. last_word ist aufgestellt). Gates 2220, 2222, 2224 und 2228ah und ein Decodierer 2226 sind so angeordnet, um die Vorhersage-Bits auf diese Art und Weise einzustellen. Das last_word Signal wird durch die Prefetch-Logik 2212 aufgestellt, wenn die anfordernde Vorrichtung versucht, hinter dem Ende des DCQ-Puffers zu lesen. Dies tritt dann auf, wenn der Out- Pointer (Out-Hinweiszeiger) und der In-Pointer (In-Hinweizeiger) gleich sind, was anzeigt, dass das Ende des DCQ-Puffers erreicht worden ist (d. h. für einen Vier-Cache-Zeilen-Puffer, out_pointer_x[4:0] entspricht valid_pointer_x[4:0] oder, für einen Acht-Cache-Zeilen-Puffer, out_pointer_x[5:0] entspricht valid_pointer_x[5:0]), und wenn die anfordernde Vorrichtung versucht, einen anderen Teil von Daten zu lesen (d. h. q2pif_next_data ist aufgestellt). Gates 2230, 2232 und 2234 sind so angeordnet, um das last_word Signal zu erzeugen.
  • Ein individuelles Bit in dem Prefetch-Freigabe-Signal wird dann gelöscht, wenn der entsprechende PCI-Schlitz ausgewählt ist und entweder ein PCI-Lösch-Zustand auftritt (p2q_flush wird aufgestellt), die QPIF mitteilt des DCQ, den Gültigkeits-Hinweiszeiger des Puffers zurückzusetzen (q2p_step_back ist aufgestellt), oder die anfordernde Vorrichtung eine Transaktion initiiert, die alle der DCQ-Puffer verfehlt (q2pif_check_cyc wird aufgestellt und dcq_hit wird nicht aufgestellt). Gates 2236, 2238 und 2240ah und ein Decodierer 2226 sind so angeordnet, um die Vorhersage-Freigabe-Bits in dieser Art und Weise zu löschen.
  • Wenn die Prefetch-Funktion für eine Vorrichtung auf dem PCI-Bus freigegeben ist, kann die Prefetch-Logik 2212 zwei Typen von Prefetch-Signalen für die Vorrichtung erzeugen: ein Prefetch-Zeilen-Signal (dcq_prefetch_line) und ein Prefetch-Mehrfach-Signal (dcq_prefetch_mul). Das Prefetch-Leitungs-Signal wird dann erzeugt, wenn der momentane PCI-Befehl von der anfordernden Vorrichtung ein Speicher-Lese-Leitungs-Zeilen-Signal ist, und das Prefetch-Mehrfach-Signal wird dann erzeugt, wenn der momentane PCI-Befehl ein Speicher-Lese-Mehrfach-Signal ist. In jedem Fall wird das entsprechende Prefetch-Signal erzeugt, wenn die folgenden Zustände auftreten: das prefetch_set Bit für den anfordernden PCI-Schlitz wird eingestellt; ein entsprechendes Prefetch-Freigabe-Bit in den Konfigurations-Registern wird eingestellt (cfg2q_auto_prefetch_enable); die DRQ in dem eingangsseitigen Chip ist nicht voll (!tc_dc_full); der DCQ-Puffer hat Raum für die entsprechende Menge an Prefetch-Daten (_!dcq_no_prefetch_room); der momentane Zyklus trifft den DCQ-Puffer; und der anfordernde Master hat versucht, hinter das Erde des DCQ-Puffers zu lesen (last_word und q2pif_cyc_complete). Gates 2242, 2244, 2246, 2248, 2250, und 2252, ein Decodierer 2254 und Multiplexer 2256 und 2258 sind so angeordnet, um die Prefetch-Signale auf diese Art und Weise zu erzeugen.
  • Wenn die Prefetch-Logik 2212 ein Prefetch-Signal erzeugt, erzeugt sie ein entsprechendes Prefetch-Adressen-Signal (dcq_prefetch_addr[63:2]) durch Verknüpfen der oberen siebenundfünfzig Bits der Adresse, gespeichert in dem entsprechenden DCQ-Puffer (q0_addr[63:7] für Puffer Null, q1_addr[63:7] für Puffer Eins, usw.) mit den unteren fünf Bits des Ausgangs-Hinweiszeigers des Puffers (out_pointer_0[4:0], usw.). Ein Dual-Adressen-Zyklus Signal (dcq_prefetch_dac) zeigt an, ob die Prefetch-Transaktion ein Dual- oder Einzel-Adressen-Zyklus ist. Das dcq_prefetch_cycle Signal nimmt den Wert des Dual-Adressen-Bits, gespeichert in dem DCQ-Puffer (q0_dac, q1_dac, usw.), an. Für sowohl die Prefetch-Adressen- und Dual-Adressen-Zyklus-Signale wird der geeignete Wert von einem Multiplexer 2260 oder 2262 ausgegeben und durch das Drei-Bit-DCQ-Puffer-Zahl-Signal ausgewählt, anzeigend, welcher DCQ-Puffer durch die momentane Anforderung getroffen wurde.
  • Wiederum unter Bezugnahme auf 66, besitzt jeder DCQ-Daten-Puffer verschiedene mögliche Zustände, wobei jeder davon durch einen Puffer-Zustand-Logik-Block 2264 in der DCQ bestimmt wird. Das Folgende sind die möglichen Puffer-Zustände.
    • 1. Leer (Empty). Verfügbar für eine Zuordnung. Ein Puffer ist leer (empty) nach einem Laden bzw. Hochfahren und nachdem er geleert ist.
    • 2. Complete. Der Puffer enthält Abschluss-Informationen für einen verzögerten Abschluss von einer realen, verzögerten Anforderung von einer Vorrichtung auf dem PCI-Bus (d. h. keine Prefetch-Anforderung). Die PCI-Vorrichtung hat noch nicht wieder verbunden und Daten von dem Puffer genommen. Die verzögerte Abschluss-Transaktion ist abgeschlossen.
    • 3. Prefetch. Der Puffer enthält Abschluss-Daten für eine Prefetch-Anforderung oder angeforderte Daten, die in dem Puffer belassen wurden, nachdem der anfordernde Master von dem Puffer getrennt ist. Alle Abschluss-Daten sind von dem Target angekommen.
    • 4. PartComplete. Der Puffer ist für Abschluss-Informationen für eine reale, verzögerte Anforderung reserviert und kann diese enthalten (d. h. keine Prefetch-Anforderung). Der Master hat noch nicht wieder verbunden und Daten von dem Puffer genommen, und nicht alle Abschluss-Informationen sind von dem Target angekommen.
    • 5. PartPrefetch. Der Puffer ist für Abschluss-Informationen für eine Prefetch-Anforderung reserviert oder enthält sie, oder der Puffer enthält angeforderte Daten, die in dem Puffer verblieben, nachdem der anfordernde Master von dem Puffer getrennt ist. Nicht alle Abschluss-Informationen sind von dem Target angekommen.
    • 6. Discard. Der Puffer wurde gelöscht, während er in dem PartPrefetch-Zustand war, allerdings sind die letzten Abschluss-Daten bis jetzt noch nicht von dem Target angekommen. Der Puffer wird in den Discard-Zustand versetzt, um zu verhindern, dass er verwendet wird, bis die Transaktion auf dem Target-Bus abgeschlossen ist und die letzten Daten ankommen.
  • Wenn die QPIF einen DCQ-Puffer für eine verzögerte Anforderungs-Transaktion anfordert, ordnet die Puffer-Zustand-Logik 2264 die Puffer in der folgenden Reihenfolge zu. Falls kein Puffer in dem Empty-Zustand oder dem Prefetch-Zustand vorliegt, muss der anfordernde Master erneut versucht werden.
  • Figure 00450001
    DCQ-Puffer-Zuordnung
  • Wenn eine Vorrichtung auf dem PCI-Bus eine verzögerte Lese-Anforderung initiiert und ein DCQ-Abschluss-Puffer daneben eingestellt ist, ändert die Puffer-Zustand-Logik 2264 den Zustand des Puffers zu PartComplete. Falls die DCQ eine Prefetch-Lesung initiiert, wird der Puffer-Zustand zu PartPrefetch geändert. Wenn der letzte Teil von Abschluss-Daten ankommt, wird der Zustand des Puffers von PartComplete oder PartPrefetch zu Complete oder Prefetch jeweils hin geändert. Wenn die anfordernde Vorrichtung wieder eine neu versuchte Lese-Anforderung zuführt und den Puffer trifft, werden irgendwelche gültigen Abschluss-Daten zu dem Master hin gegeben, falls sich der Puffer in dem Complete, Prefetch, PartComplete oder PartPrefetch-Zustand befindet.
  • Wenn der Master nicht alle die Daten vor einer Unterbrechung nimmt, wird der Zustand des Puffers zu Prefetch oder PartPrefetch hin geändert, um anzuzeigen, dass nicht beanspruchte Daten dahingehend angesehen werden, dass sie Prefetch-Daten sind. Falls der Master den letzten Teil von Daten heranzieht, wenn sich der Puffer in dem Complete oder Prefetch-Zustand befindet, wird der Zustand des Puffers zu Empty hin geändert.
  • Falls ein Lösch-Signal empfangen wird, während sich ein Puffer in dem Prefetch-Zustand befindet, werden die Prefetch-Daten in dem Puffer ausgesondert und der Puffer-Zustand wird zu Empty hin geändert. Falls ein Lösch-Ereignis auftritt, während sich der Puffer in dem PartPrefetch-Zustand befindet und Abschluss-Daten noch ankommen, wird der Puffer zu dem Discard-Zustand geändert, bis alle Prefetch-Daten ankommen. Wenn die Transaktion abgeschlossen ist, werden die Prefetch-Daten ausgesondert und der Puffer-Zustand wird zu Empty hin geändert. Falls sich der Puffer in dem Complete oder Part-Complete-Zustand befindet, wenn ein Lösch-Signal empfangen wird, werden die Abschluss-Daten in dem Puffer belassen und der Puffer-Zustand verbleibt ungeändert. Falls das Lösch-Signal auftritt, da die entsprechende PCI-Vorrichtung eine neue Anforderung ausgegeben hat, d. h. eine Anforderung, die nicht momentan in die Warteschlange gestellt ist, und die alle die Abschluss-Puffer „verfehlt"), wie dies nachfolgend diskutiert worden ist, ordnet die DCQ einen neuen Puffer für die Transaktion zu, wie dies vorstehend diskutiert ist. Deshalb kann eine PCI-Vorrichtung mehr als einen Abschluss-Puffer zugeordnet haben. Mehrfach-Puffer können zu einer PCI-Vorrichtung zugeordnet werden, wenn die Vorrichtung einen Puffer besitzt, der Abschluss-Daten enthält oder erwartet (d. h. der Puffer befindet sich in dem Complete oder PartComplete-Zustand) und die Vorrichtung eine neue Anforderung ausgibt. Da Multi-Threaded-Vorrichtungen die einzigen Vorrichtungen sind, die mehrere Transaktionen auf einmal beibehalten können, können nur Multi-Threaded-Vorrichtungen Mehrfach-Abschluss-Puffer gleichzeitig reserviert haben.
  • MASTER-ZYKLUS-ARBITRIERER
  • Der Master-Zyklus-Arbitrierer (Master Cycle Arbiter – MCA) bestimmt die Ausführungs-Reihenfolge von geposteten Speicher-Schreib- und verzögerten Anforderungs-Transaktionen, während die Reihenfolgen-Einschränkungen zwischen geposteten Speicher-Schreib-, verzögerten Anforderungs- und verzögerten Abschluss-Zyklen beibehalten werden, angegeben in PCI Spec. 2.1. Entsprechend der PCI Spec 2.1 muss der MCA garantieren, dass ausgeführte Zyklen eine starke Schreib-Reihenfolge beibehalten und dass keine Deadlocks auftreten. Um sicherzustellen, dass keine Deadlocks auftreten werden, muss geposteten Speicher-Schreib-Zyklen ermöglicht werden, früher in die Warteschlange gestellte, verzögerte Anforderungs-Zyklen zu passieren, und die geforderten Reihenfolgen-Einschränkungen beizubehalten, wobei verzögerten Anforderungs-Zyklen und verzögerten Abschluss-Zyklen niemals erlaubt werden muss, früher in die Warteschlange gestellte, gepostete Speicher-Schreib-Zyklen zu passieren.
  • Unter Bezugnahme wiederum auf 70 verwendet der MCA zwei Transaktions-Warteschlangen, eine Transaktions-Lauf-Warteschlange (Transaction Run Queue – TRQ) oder (Transaktions-Ausführungs-Warteschlangen) 2270 und eine Transaktions-Reihenfolge-Warteschlange (Transaction Order Queue – TOQ) 2272, um Zyklen, in die PMWQ, die DRQ und die DCQ warteschlangenmäßig gestellt, zu verwalten. Ein MCA-Steuerblock 2274 nimmt Transaktionen von der PMWQ, DRQ und DCQ in der Form von Vier-Bit-Gültigkeits-Anforderungs-Signalen (pmwq_valid[3:0], drq_valid[3:0] und dcq_valid[3:0]) auf und gibt Lauf-Befehle in der Form von Vier-Bit-Lauf-Signalen (mca_run_pmwq[3:0], mca_run_drq[3:0] und mca_run_dcq[3:0]) aus. Die Transaktionen werden in die TRQ 2270 und die TOQ 2272 durch einen TRQ-Steuerblock 2276 und einen TOQ-Steuerblock 2278 jeweils hinein- und herausbewegt.
  • Unter Bezugnahme auch auf 71 ist die TRQ 2270 die Warteschlange, von der der MCA die Transaktions-Ausführungs-Reihenfolge bestimmt. Transaktionen in der TRQ 2270 können in irgendeiner Reihenfolge ausgeführt werden, ohne die Transaktions-Reihenfolge-Regeln zu verletzten, allerdings kann, wenn einmal ein geposteter Speicher-Schreib-Zyklus in der TRQ 2270 platziert ist, kein anderer Zyklus in die TRQ 2270 platziert werden, bis das gepostete Speicher-Schreiben entfernt ist. Transaktionen in der TRQ 270 werden in zirkularer Reihenfolge versucht und sind allgemein in der Reihenfolge, in der sie empfangen wurden, abgeschlossen. Allerdings kann, falls eine Transaktion in der TRQ 2270 auf dem PCI-Bus versucht wird, der MCA die nächste Transaktion in der TRQ 2270 auswählen, die auf dem PCI-Bus versucht werden soll. Da verzögerte Abschluss-Transaktionen Slave-Zyklen, im Gegensatz zu Master-Zyklen, sind, werden sie niemals in der TRQ 2270 platziert. Weiterhin werden, da verzögerte Abschluss-Informationen zu der anfordernden Vorrichtung verfügbar gemacht werden können, sobald sie in die DCQ eintreten, falls keine geposteten Speicher-Schreib-Zyklen in der PMWQ anhängig sind, verzögerte Abschluss-Transaktionen in der TOQ 2272 nur dann platziert, wenn ein geposteter Speicher-Schreib-Zyklus in der TRQ 2270 anhängig ist, wie dies in weiterem Detail nachfolgend diskutiert ist.
  • Die TRQ 2270 ist eine zirkulare Warteschlange, die bis zu vier Transaktionen auf einmal hält. Da die MCA immer in der Lage sein muss, mindestens eine gepostete Speicher-Schreib-Transaktion laufen zu lassen, um die erforderlichen Reihenfolgen-Beschränkungen zu wahren, kann die TRQ 2270 niemals mehr als drei verzögerte Anforderungs-Transaktionen auf einmal halten. Weiterhin kann die TRQ nur eine gepostete Schreib-Transaktion zu einem Zeitpunkt halten, da gepostete Schreibvorgänge nicht durch irgendeine später initiierte Transaktion, umfassend andere gepostete Schreibvorgänge, hindurchgeführt werden können. Jeder Schlitz 2280ad in der TRQ 2270 enthält drei Bits an Informationen: ein Ein-Bit-Zyklus-Typ-Indikator 2282 („1" gleich für gepostete Speicher-Schreib-Transaktionen und „0" gleich für verzögerte Anforderungs-Transaktionen), und einen Zwei-Bit-Gültigkeits-Hinweiszeiger 2284, wobei die vier möglichen Werte davon identifizieren, welche der Puffer in der PMWQ oder der DRQ die in die Warteschlangen gestellten Transaktionen belegen. Die TRQ 2270 umfasst auch einen Eingabe/Ausgabe-Freigabe-Block 2286, der bestimmt, wann eine Transaktion in die TRQ 2270 hinein oder aus dieser heraus bewegt werden kann, einen Eingangs-Logik-Block 2288, der die Platzierung einer Transaktion in die TRQ 2270 hinein steuert, und einen Ausgangs-Logik-Block 2290, der eine Entfernung einer Transaktion von der TRQ 2270 steuert. Diese Logik-Blöcke enthalten eine standardmäßige Warteschlangen-Management-Schaltung.
  • Ein zirkularer Eingangs-Hinweiszeiger 2292 wählt den nächsten, verfügbaren Schlitz bzw. Einsteckplatz zur Platzierung einer ankommenden Transaktion aus. Der Eingangs-Hinweiszeiger ist zirkular, um so umfangreich wie möglich eine historische Reihenfolge der ankommenden Transaktionen beizubehalten.
  • Ein zirkularer Ausgangs-Hinweiszeiger 2294 arbitriert zwischen den Transaktionen in der TRQ 2270 und bestimmt deren Reihenfolge einer Ausführung. Der Ausgangs-Hinweiszeiger 2294 beginnt immer mit dem oberen Schlitz 2286a in der TRQ 2270 beim Startup und schreitet zirkular durch die TRQ 2270 hindurch. Der Ausgangs-Hinweiszeiger 2294 kann konfiguriert sein, um in entweder einem infiniten Retry- oder einem Null-Retry-Mode zu arbeiten, durch Einstellen oder Löschen, jeweils, eines infiniten Retry-Bits in den Konfigurations-Registern (cfg2q_infretry). In einem infiniten Retry-Mode verbleibt der Ausgangs-Hinweiszeiger 2294 auf einer Transaktion, bis die Transaktion erfolgreich auf dem PCI-Bus läuft. In einem Null-Retry-Mode wird der Ausgangs-Hinweiszeiger 2294 zu jedem Zeitpunkt erhöht, zu dem eine Transaktion auf dem Bus versucht wird (d. h. q2pif_cyc_complete war dem vorherigen PCI-Takt-Zyklus aufgestellt), ungeachtet davon, ob die Transaktion erfolgreich abschließt oder erneut versucht wird. Da die PCI Spec 2.1 vorschreibt, dass gepostete Speicher-Schreib-Transaktionen dahingehend zugelassen werden, im Bypass an verzögerten Anforderungs-Transaktionen vorbeizuführen, muss der Ausgangs-Hinweiszeiger 2294 in mindestens einem der Brücken-Chips so konfiguriert werden, um in einem Null-Retry-Mode zu arbeiten. Hierbei ist der ausgangsseitige Chip immer so konfiguriert, um in einem Null-Retry-Mode zu arbeiten. Alternativ kann der Ausgangs-Hinweiszeiger so konfiguriert sein, um in einem finiten Retry-Mode zu arbeiten, indem jede Transaktion auf dem PCI-Bus eine vorbestimmte Anzahl (z. B. drei) von Malen versucht werden kann, bevor sich der Ausgangs-Hinweiszeiger erhöht. Sowohl der eingangsseitige als auch der ausgangsseitige Chip können so konfiguriert sein, um in einem finiten Retry-Mode zu arbeiten, mit einem Verletzen der Reihenfolgen-Beschränkungen der PCI Spec 2.1. In jedem Fall versucht der Ausgangs-Hinweiszeiger, die historische Reihenfolge von Transaktionen, gespeichert in der TRQ 2270, beizubehalten, was sich nur dann erhöht, wenn eine Transaktion nicht erfolgreich auf dem Target-PCI-Bus abgeschlossen werden kann.
  • Wenn ein geposteter Speicher-Schreib- oder verzögerter Anforderungs-Zyklus aus der TOQ 2272 ausgesondert ist (new_toq_cycle wird aufgestellt), wie dies nachfolgend diskutiert ist, oder wenn die TOQ 2272 nicht freigegeben ist (!toq_enabled) und ein neuer Zyklus durch die MCA empfangen wird (new_valid_set), werden das Zyklus-Typ-Bit und die Gültigkeits-Bits für den neuen Zyklus in den nächsten, leeren Schlitz in die TRQ eingeladen. Falls der Zyklus von der TOQ 2272 kommt, werden die gültigen Bits und das Zyklus-Typ-Bit durch die TOQ als gültig geliefert und Zyklus-Typ-Signale (toq_valid[1:0] und toq_cyctype[0]) jeweils. Ansonsten werden die neuen Zyklus-Informationen durch die MCA als gültige und Zyklus-Typ-Signale (d_valido[1:0] und d_cyctype[0]) geliefert. Gates 2296 und 2298 und Multiplexer 2300 und 2302 sind angeordnet, um die Auswahl von Zyklen zu steuern, die in die TRQ 2270 hineingeladen werden sollen. Wenn ein Zyklus erfolgreich auf dem PCI-Bus läuft, wird der Zyklus von der Transaktions-Reihenfolge-Warteschlange entfernt und sein Zyklus-Typ-Bit und Gültigkeits-Bits werden zu dem MCA-Steuer-Block 2274 als TRQ-Zyklus-Typ und Gültigkeits-Signale (trq_cyctype[0]) und trq_valido[1:0]) jeweils geliefert.
  • Der TRQ-Steuer-Block 2276 erzeugt ein trq_pmw Signal, das anzeigt, wenn eine gepostete Speicher-Schreib-Transaktion in die TRQ 2270 warteschlangenmäßig gestellt wird. Wenn dieses Signal aufgestellt ist, müssen darauffolgend ausgegebene, verzögerte Anforderungs- und verzögerte Abschluss-Transaktionen in die TOQ 2272 in die Warteschlange gestellt werden, wie dies nachfolgend diskutiert ist. Das trq_pmw Signal wird dann aufgestellt, wenn der MCA-Steuer-Block 2274 die TRQ 2270 instruiert hat, einen neuen, geposteten Speicher-Schreib-Zyklus (trq_slot_valid_set entspricht nicht „0000" und d_trq_cyctype entspricht „1") in die Warteschlange zu stellen, oder, alternativ, wenn irgendeiner der TRQ-Schlitze 2280ad einen Zyklus (trq_slot_valid[3:0] entspricht nicht „0000"), ist mindestens einer der Zyklen ein geposteter Speicher-Schreib-Zyklus (trq_cyctype entspricht „1") und der gepostete Speicher-Schreib-Zyklus ist nicht von dem entsprechenden Schlitz 2280ad gelöscht worden (!trq_slot_valid_rst[3:0]). Gates 2304, 2306, 2308, 2310, und 2312 sind so angeordnet, um das trq_pmw Signal in dieser Art und Weise zu erzeugen.
  • Wie nun die 72 zeigt, ist die TOQ 2272 eine First-In-First-Out (FIFO) Warteschlange, die die historische Reihenfolge von Transaktionen enthält, empfangen durch die Brücke, nachdem eine gepostete Speicher-Schreib-Transaktion in der TRQ 2270 platziert ist. Da alle Transaktionen auf früher ausgegebene, gepostete Speicher-Schreibvorgänge warten müssen, damit diese laufen, werden alle Transaktionen, umfassend gepostete Speicher-Schreib-, verzögerte Anforderungs- und verzögerte Abschluss-Transaktionen, in der TOQ 2270 platziert, wenn ein gepostetes Speicher-Schreiben in die TRQ 2270 warteschlangenmäßig gestellt ist. Transaktionen in der TOQ 2272 müssen in der TOQ 2272 verbleiben, bis die gepostete Speicher-Schreib-Transaktion von der TRQ 2270 entfernt ist.
  • Die TOQ 2270, die acht Schlitze 2314ah hat, kann bis zu drei gepostete Speicher-Schreib-Transaktionen (die vierte wird in der TRQ 2270 gespeichert werden), drei verzögerte Anforderungs-Transaktionen und vier verzögerte Abschluss-Transaktionen halten. Jeder der Schlitze 2314ah in der TOQ 2272 enthält zwei Zyklus-Typ-Bits 2316, die die entsprechende Transaktion („01" ist ein gepostetes Speicher-Schreiben, „00" ist eine verzögerte Anforderung, und „1×" ist ein verzögerter Abschluss) identifizieren, und zwei Gültigkeits-Bits 2318, die identifizieren, welcher der Puffer in der PMWQ, DRQ und DCQ die entsprechende Transaktion belegt. Die TOQ 2272 umfasst auch Standard-Eingabe- und Ausgabe-Logik-Blöcke 2320 und 2322, die die Bewegung von Transaktionen in die TOQ 2272 hinein und aus dieser heraus steuern.
  • Die Positionen, an denen Transaktionen in die TOQ 2272 hinein platziert und von dieser entfernt werden, werden durch einen Drei-Bit-Eingangs-Zähler 2326 (inputr[2:0]) und einen Drei-Bit-Ausgangszähler 2324 (outputr[2:0]) jeweils bestimmt. Beide Zähler beginnen an dem ersten Schlitz 2314a in der TOQ 2272 und erhöhen sich durch die Warteschlange hindurch, wenn Transaktionen in die Warteschlange eingegeben und von dieser entfernt werden. Der Eingangs-Zähler 2326 erhöht sich an der ansteigenden Flanke jedes PCI-Takt-Zyklus, wo die TOQ 2272 freigegeben wird (toq_enabled wird aufgestellt), und der MCA-Steuer-Block 2274 liefert einen neuen Zyklus zu der TOQ 2272 (new_valid_set wird aufgestellt). Die Gültigkeits-Bits und die Zyklus-Typ-Bits für jeden neuen Zyklus werden durch den MCA als gültig und die Zyklus-Typ-Signale (d_valido[1:0] und d_cyctype[1:0]) geliefert. Der Ausgangs-Zähler 2324 erhöht sich an der ansteigenden Flanke jedes PCI-Takt-Zyklus, an dem der MCA-Steuerblock 2274 die TOQ 2272 instruiert, zu dem nächsten Zyklus (next_toq_cycle wird aufgestellt) zu gehen, und die TOQ 2272 ist nicht leer: d. h. inputr[2:0] entspricht nicht outputr[2:0]). Zyklen, die in der TOQ 2272 existieren, werden durch die TOQ-Gültigkeits- und cycletype Signale (toq_valido[1:0] und toq_cyctypeo [1:0]) dargestellt. Gates 2328 und 2330 und ein Komparator 2332 sind so angeordnet, um geeignet den Eingangs-Hinweiszeiger 2326 und den Ausgangs-Hinweiszeiger 2324 zu takten.
  • Wenn eine verzögerte Anforderungs-Transaktion oder eine gepostete Speicher-Schreib-Transaktion aus der TOQ 2272 ausgesondert ist, wird die Transaktion in die TRQ 2270 platziert, um auf eine Arbitrierung zu warten. Da allerdings verzögerte Abschluss-Transaktionen Target-Transaktionen sind und keine Master-Transaktionen, werden verzögerte Abschlüsse nicht in die TRQ 2270 platziert. Anstelle davon werden verzögerte Abschlüsse einfach aus der TRQ 2272 ausgesondert und dazu verwendet, die entsprechenden Daten in den DCQ-Daten-Puffern für gültig zu erklären. Allerdings müssen, solange wie eine gepostete Speicher-Schreib-Transaktion in der TRQ 2270 warteschlangenmäßig hineingestellt ist, alle verzögerten Abschlüsse in die TOQ 2272 platziert werden, sogar dann, wenn zwei oder mehr verzögerte Abschlüsse derselben, verzögerten Anforderung entsprechen, und deshalb denselben, verzögerten Abschluss-Puffer, wie dies vorstehend beschrieben ist.
  • Wie die 73A bis 73D zeigen, steuert der MCA-Steuerblock 2274 den Fluss von Transaktionen über den MCA. Wie vorstehend diskutiert ist, wird die PMWQ, DRQ und DCQ Anforderungs-Gültigkeit von Transaktionen in den Warteschlangen durch Vorsehen von Vier-Bit-Gültigkeits-Signalen pmwq_valid[3:0], drq_valid[3:0] und dcq_valid[3:0] jeweils, zu dem MCA, gehalten. Unter diesen Signalen kann sich nur ein Bit während jedes Takt-Impulses ändern, da nur eine einzelne, neue Transaktion in den Warteschlangen-Block bei jedem Taktimpuls platziert werden kann. Deshalb identifiziert der MCA-Steuer-Block neue Gültigkeits-Anforderungen durch Überwachen der sich ändernden Bits in den pmwq_valid, drq_valid und dcq_valid Signalen. Um dies zu vorzunehmen, verriegelt der MCA-Steuer-Block jedes Signal und invertiert es an der ansteigenden Flanke jedes PCI-Takts, um ein verzögertes, invertiertes Signal zu erzeugen, und vergleicht das verzögerte, invertierte Signal mit dem momentanen Signal (d. h. dem Signal an dem nächsten Taktimpuls). Da nur ein neu geändertes Bit denselben Wert wie sein verzögertes und invertiertes Gegenstück haben wird, ist der MCA-Steuer-Block in der Lage, zu erfassen, welches Bit geändert ist. Unter Verwendung von Flip-Flops 2340, 2342 und 2344 und Gates 2346, 2348 und 2350, erzeugt die MCA-Steuereinheit new_pmwq_valid[3:0], new_drq_valid[3:0] und new_dcq_valid[3:0] Signale, die, bei jedem Taktimpuls, zusammen identifizieren, ob die DMWQ, DRQ oder DCQ, falls irgendeine vorhanden ist, irgendeine neue Transaktion für eine Validitierung lieferte und welcher Puffer in der entsprechenden Warteschlange die neue Transaktion enthält. Wie auch 74 zeigt, verwendet der MCA-Steuer-Block eine Durchsichts-Tabelle 2352, um die zwölf Bits der new_pmwq_valid, new_drq_valid und new_dcq_valid Signale in die Zwei-Bit d_valid[1:0] und d_cyctype[1:0] Signale, geliefert zu der TRQ und der TOQ, wie dies vorstehend diskutiert ist, umzuwandeln.
  • Die MCA-Steuereinheit gibt die TOQ durch Verriegeln des toq_enabled Signals auf einen Wert von „1" frei, wenn entweder das trq_pmw aufgestellt ist, was anzeigt, dass ein geposteter Speicher-Schreib-Zyklus in der TRQ in die Warteschlange gestellt ist, oder wenn das toq_enable Signal bereits aufgestellt ist und die TOQ nicht leer ist (!toq_empty). Gates 2354 und 2356 und ein Flip-Flop 2358 sind so angeordnet, um toq_enabled auf diese Art und Weise zu erzeugen.
  • Der MCA-Steuerblock stellt das new_toq_cycle Signal auf, das die TRQ instruiert, den Zyklus in die Warteschlange zu stellen, der von der TOP ausgesondert ist, wenn dort nicht ein geposteter Speicher-Schreib-Zyklus in TRQ während des vorherigen Takt-Zyklus (!s1_trq_pmw) vorhanden war, wenn die TOQ nicht leer ist (!toq_empty), und wenn der Zyklus, der von der TOQ ausgesondert werden soll, nicht eine verzögerte Abschluss-Transaktion ist (!(toq_cyctypeo[1] = „DC")). Die MCA-Steuereinheit verwendet ein Gate 2360, um das new_toq_cycle Signal zu erzeugen.
  • Das next_toq_cycle Signal, das verwendet wird, um den TOQ-Ausgangs-Zähler auf den nächsten Zyklus in der TOQ zu erhöhen, wird aufgestellt, wenn die TOQ nicht leer ist (!toq_empty) und entweder wenn keine geposteten Speicher-Schreib-Zyklen momentan in der TRQ in die Warteschlange gestellt sind (!trq_pmw) und der nächste Zyklus in der TOQ ein verzögerter Abschluss ist (toq_cyctype[1] = „DC"), oder wenn der nächste TOQ-Zyklus ein geposteter Speicher-Schreiben oder eine verzögerte Anforderungs-Transaktion ist (!(toq_cyctype[1] = „DC")) und dabei keine geposteten Speicher-Schreib-Transaktionen während des vorherigen Taktzyklus vorhanden waren (!s1_trq_pmw). Der Steuerblock verwendet Gates 2362, 2364, 2366 und 2368, um das next_toq_cycle Signal zu erzeugen.
  • Die MCA-Steuereinheit erzeugt das mca_run_dcq[3:0] Signal, um anzuzeigen, dass eine verzögerte Abschluss-Transaktion von der TOQ ausgesondert worden ist. Wenn die TRQ keine geposteten Speicher-Schreib-Zyklen enthält (!trq_pmw), ist die TOQ nicht leer (!toq_empty), und der TOQ-Zyklus ist ein verzögerter Abschluss (toq_cyctype[1] = „DC"), das mca_run_dcq[3:0] Signal nimmt den Wert des decodierten toq_valido[1:0] Signals an, was vorstehend diskutiert ist. Ansonsten ist das mca_run_dcq[3:0] Signal gleich „0000". Das Gate 2370, der Decodierer 2372 und der Multiplexer 2374 sind so angeordnet, um mca_run_dcq[3:0] auf diese Art und Weise zu erzeugen.
  • Der MCA-Steuer-Block erzeugt new_mca_run_dr[3:0] und new_mca_run_pmw[3:0] Signale, um anzuzeigen, dass er eine neue, verzögerte Anforderungs-Transaktion und eine gepostete Speicher-Transaktion jeweils hat, die in die Warteschlange gestellt werden sollen. Das new_mca_run_dr[3:0] Signal nimmt den Wert von dem 2 × 4 decodierten d_valido[1:0] Signal an, was vorstehend diskutiert ist, wenn der neue Zyklus ein verzögerter Anforderungs-Zyklus ist (d_cyctype[0] = „DR"). Ansonsten werden alle Bits des new_mca_run_dr[3:0] Signals auf Null gesetzt. Ähnlich nimmt das new_mca_run_pmw[3:0] Signal den Wert des 2 × 4 decodierten d_valido[1:0] Signals an, wenn der neue Zyklus eine gepostete Speicher-Schreib-Transaktion ist, und wird ansonsten auf „0000" eingestellt. Decodierer 2376 und 2380 und Multiplexer 2378 und 2382 sind so angeordnet, um die new_mca_run_dr und die new_mca_run_pmw Signale auf diese Art und Weise zu erzeugen.
  • Die MCA-Steuereinheit erzeugt toq_mca_run_dr[3:0] und toq_mca_run_pmw[3:0] Signale, um anzuzeigen, wenn eine neue, verzögerte Anforderungs-Transaktion oder eine gepostete Speicher-Schreib-Transaktion, jeweils, von der TOQ ausgesondert wurde. Das toq_mca_run_dr[3:0] Signal nimmt den Wert des 2 × 4 decodierten toq_valido[1:0] Signals an, wenn ein verzögerter Anforderungs-Zyklus von der TOQ ausgesondert ist, und einen Wert von „0000" ansonsten. In ähnlicher Weise nimmt das toq_mca_run_pmw[3:0] Signal den Wert des 2 × 4 decodierten toq_valido[1:0] Signals an, wenn ein geposteter Speicher-Schreib-Zyklus von der TOQ ausgesondert ist, und einen Wert von „0000" ansonsten. Decodierer 2384 und 2388 und Multiplexer 2386 und 2390 werden verwendet, um die toq_mca_run_dr und toq_mca_run_pmw Signale auf diese Art und Weise zu erzeugen.
  • Die MCA-Steuereinheit erzeugt die trq_mca_run_dr[3:0] und trq_mca_run_pmw[3:0] Signale, um anzuzeigen, wenn eine neue, verzögerte Anforderungs-Transaktion oder eine gepostete Speicher-Schreib-Transaktion jeweils die Arbitrierung in der TRQ erlangt hat, und bereit ist, auf dem PCI-Bus zu laufen. Das trq_mca_run_dr[3:0] Signal nimmt den Wert des 2 × 4 decodierten trq_valido[1:0] Signals an, wenn ein verzögerter Anforderungs-Zyklus die Arbitrierung erlangt hat und die TRQ nicht leer ist. Das trq_mca_run_dr[3:0] nimmt einen Wert von „0000" ansonsten an. In ähnlicher Weise nimmt das trq_mca_run_pmw[3:0] Signal den Wert des 2 × 4 decodierten trq_valido[1:0] Signals an, wenn ein geposteter Speicher-Schreib-Zyklus die Arbitrierung erlangt hat und die TRQ nicht leer ist. Das trq_mca_run_pmw[3:0] Signal wird auf einen Wert von „0000" ansonsten eingestellt. Die Gates 2392 und 2398, die Decodieren 2394 und 2400 und die Multiplexer 2396 und 2402 werden dazu verwendet, die trq_mca_run_dr und trq_mca_run_pmw Signale in dieser Art und Weise zu erzeugen.
  • Wenn die TRQ leer ist, kann der MCA eine Anforderung ausgeben, um die nächste Transaktion in der TOQ laufen zu lassen, während die Transaktion in die TRQ platziert wird. Wenn sowohl die TRQ als auch die TOQ leer sind, können Transaktionen damit beginnen, zu laufen, sogar bevor sie in die TRQ warteschlangenmäßig gestellt sind. Deshalb umfasst der MCA-Steuer-Block eine Logik, die bestimmt, wenn die new_mca_run oder die toq_mca_run Signale asynchron verwendet werden können, um anzuzeigen, dass eine Transaktion auf dem PCI-Bus versucht werden kann. Durch Umwandeln der new_mca_run oder der der toq_mca_run Signale in asynchrone Laufsignale, sichert die MCA-Steuereinheit einen PCI-Takt-Warte-Zustand. Wenn das new_valid_set Signal durch den MCA-Steuerblock aufgestellt ist und die TOQ nicht freigegeben ist (!toq_enabled), nehmen die async_mca_run_dr[3:0] und async_mca_run_mw[3:0] Signale die Werte der new_mca_run_dr[3:0] und new_mca_run_pmw[3:0] Signale jeweils an. Ansonsten nehmen die asynchronen Laufsignale die Werte von toq_mca_run_dr[3:0] und toq_mca_run_pmw[3:0] Signale an. Die MCA-Steuereinheit verwendet das Gate 2404 und die Multiplexer 2406 und 2408 dazu, die asynchronen Laufsignale zu erzeugen.
  • Wenn ein PCI-Bus-Master eine Transaktion abgeschlossen hat (s1_q2pif_cyc_complete ist aufgestellt), ist die TRQ nicht leer (!trq_empty) und ist für einen Betrieb in dem Null-Retry-Mode konfiguriert (!cfg2q_infretry), und irgendeine neue Transaktion ist von der TOQ ausgesondert worden (new_toq_cycle) oder die TOQ ist nicht freigegeben (!toq_enabled) und die MCA hat einen neuen Zyklus empfangen, der für gültig erklärt wird (new_valid_set), die MCA kann nicht einen Zyklus auswählen, um auf dem PCI-Bus zu laufen, so dass sowohl das mca_run_dr[3:0] als auch das mca_run_pmw[3:0] Signal auf „0000" gesetzt werden. Ansonsten nehmen, falls die TRQ leer ist (trq_empty) und entweder eine neue Transaktion von der TOQ ausgesondert ist (new_toq_cycle) oder die TOQ nicht freigegeben ist (!toq_enabled) und die MCA einen neuen Zyklus empfangen hat, der für gültig erklärt wird (new_valid_set), dann die mca_run_dr[3:0] und mca_run_pmw[3:0] Signale den Wert der asynchronen Lauf-Signale async_mca_run_dr[3:0] und async_mca_run_pmw[3:0], jeweils, an. Ansonsten nimmt das mca_run_dr[3:0] Signal den Wert des trq_mca_run_dr[3:0] Signals an und das mca_run_pmw[3:0] Signal nimmt den Wert des trq_run_pmw[3:0] Signals an, mit AND mit dem Gültigkeits-Anforderungs-Signal von der PMWQ verknüpft (pmwq_valid[3:0]). Gates 2410, 2412, 2414, 2416 und 2418 und Multiplexer 2420, 2422, 2424 und 2426 sind so angeordnet, um die MCA-Lauf-Signale auf diese Art und Weise zu erzeugen.
  • DIE WARTESCHLANGEN-BLOCK-ZU-PCI-SCHNITTSTELLE (QPIF)
  • Wie wiederum die 4 und 75 zeigen, leitet die QPIF 148 den Fluss von Transaktionen zwischen dem Warteschlangen-Block 127 und dem PCI-Bus 32. Die QPIF 148 liefert auch Transaktionen, initiiert auf dem PCI-Bus 32, zu der Kabel-Schnittstelle 130. Die QPIF 148 arbeitet in zwei Moden: einem Master-Mode und einem Slave-Mode. In dem Master-Mode hat die QPIF 148 eine Kontrolle über den PCI-Bus und führt deshalb Transaktionen, vorgesehen für Target-Vorrichtungen auf dem Bus, aus. Eine Master-Zustand-Maschine 2500 in der QPIF 148 sucht Transaktionen von der PMWQ und DRQ auf und führt sie auf dem PCI-Bus aus, wenn sich die QPIF in dem Master-Mode befindet. In dem Slave-Mode empfängt die QPIF 148 Transaktionen, initiiert durch eine Vorrichtung auf dem PCI-Bus, und liefert entweder die angeforderten Informationen zu der initiierenden Vorrichtung (falls die Informationen verfügbar sind) oder sucht die initiierende Vorrichtung erneut auf (falls die Transaktion eine verzögerte Anforderung ist) und führt die Transaktion weiter zu dem eingangsseitigen Chip. Die Transaktion wird auch aufgesucht, wenn der entsprechende eine der Transaktions-Zähler 159 anzeigt, dass der andere Brücken-Chip voll ist, wie dies vorstehend diskutiert ist. Eine Slave-Zustand-Maschine 2502 empfängt eine ankommende Transaktion von dem PCI-Bus und prüft dann die DCQ nach einer entsprechenden Abschluss-Nachricht und/oder führt die Transaktion zu einem Kabel-Nachrichten-Generator 2504 weiter, der wiederum die Transaktion über das Kabel zu dem eingangsseitigen Brücken-Chip weiterführt.
  • Unter Bezugnahme auch auf die 76A und 76B umfasst die QPIF eine Adressen- und Daten-Verriegelungs-Logik 2506, die die ankommenden Adressen-Phasen- und Daten-Phasen-Informationen, zugeordnet zu jeder Transaktion, initiiert durch eine Vorrichtung auf dem PCI-Bus, verriegelt. Die QPIF-Slave-Zustand-Maschine 2502 kontrolliert die Betriebsweise der Adressen- und Daten-Verriegelungs-Logik 2506. Wenn eine neue Transaktion, initiiert auf dem PCI-Bus, für die QPIF vorgesehen ist, stellt die Slave-Zustand-Maschine 2502 ein Adressen-Phasen-Verriegelungs-Signal (reg_latch_first_request) auf, das anzeigt, dass die Adressen-Phasen-Informationen von dem PCI-Bus verriegelt werden sollten. An der nächsten, abfallenden Flanke des PCI-Takt-Signals bewirkt die Aufstellung des reg_latch_first_request Signals, dass ein verzögertes Adressen-Phasen-Verriegelungs-Signal (dly_reg_latch_first_request) aufgestellt werden soll. Wenn sowohl das originale als auch das verzögerte Adressen-Phasen-Verriegelungs-Signal aufgestellt sind, erzeugt die Verriegelungs-Logik 2506 ein erstes Verriegelungs-Signal (latch1). Ein Flip-Flop 2508 und ein Gate 2510 sind so angeordnet, um das erste, verriegelnde Signal auf diese Art und Weise zu erzeugen.
  • Die Verriegelungs-Logik 2506 lädt die Adressen-Phasen-Informationen von dem PCI-Bus (über die PCI-Schnittstelle) in drei Adressen-Phasen-Register ein, wenn das erste Verriegelungs-Signal aufgestellt ist. Das erste Register ist ein dreißig-Bit-Adressen-Register 2512, das die Start-Adresse der momentanen Transaktion anzeigt. Wenn das erste Verriegelungs-Signal aufgestellt ist, wird das Adressen-Signal von der PCI-Schnittstelle (p2q_ad[31:2]) in das Adressen-Register 2512 eingeladen. Das Adressen-Register 2512 gibt das Adressensignal aus, verwendet durch die QPIF (q2pif_addr[31:2]). Das zweite Register ist ein Vier-Bit-Befehls-Register 2514, das den PCI-Befehl-Code von dem PCI-Bus empfängt (p2q_cmd[3:0]), und das QPIF-Befehls-Signal ausgibt (q2pif_cmd[3:0]). Das dritte Register ist ein Drei-Bit-Schlitz-Auswahl-Register 2516, das das p2q_slot[2:0] Signal empfängt, das anzeigt, welche PCI-Vorrichtung der momentane Bus-Master ist, und gibt das QPIF-Schlitz-Auswahl-Signal aus (q2pif_slot[2:0]).
  • Wenn die Adressen-Phase der PCI-Transaktion endet, stellt die Slave-Zustand-Maschine 2502 ein Daten-Phasen-Verriegelungs-Signal auf (reg_latch_second_request), das anzeigt, dass die Daten-Phasen-Informationen von dem PCI-Bus verriegelt werden sollten. An der nächsten, abfallenden Flanke des PCI-Takt-Signals bewirkt das aufgestellte reg_latch_first_request Signal, dass ein verzögertes Daten-Phasen-Verriegelungs-Signal (dly_reg_latch_second_request) aufgestellt wird. Wenn sowohl das originale als auch das verzögerte Daten-Phasen-Verriegelungs-Signal aufgestellt sind, erzeugt die Verriegelungs-Logik 2506 ein zweites Verriegelungs-Signal (latch2). Ein Flip-Flop 2518 und ein Gate 2520 sind so angeordnet, um das zweite Verriegelungs-Signal auf diese Art und Weise zu erzeugen.
  • Die Verriegelungs-Logik 2506 lädt dann die Daten-Phasen-Informationen von dem PCI-Bus (über die PCI-Schnittstelle) in drei Daten-Phasen-Register, wenn das zweite Verriegelungs-Signal aufgestellt ist. Das erste Daten-Phasen-Register ist ein Zweiunddreißig-Bit-Daten-Register 2522, das die Daten empfängt, die der momentanen Transaktion zugeordnet sind, und zwar auf den PCI-Adressen/Daten-Leitungen (p2q_ad[31:0]), und gibt das QPIF-Daten-Signal aus (q2pif_data[31:0]). Das zweite Daten-Phasen-Register ist ein Vier-Bit-Freigabe-Register 2524, das Freigabe-Bits von dem PCI-Bus empfängt (p2q_cbe[3:0]), und das QPIF-Byte-Freigabe-Signal ausgibt (qq2pif_byte_en[3:0]). Das dritte Register ist ein Drei-Bit-Verriegelungs-Register 2526, das das PCI-Verriegelungs-Signal empfängt (p2q_lock), das anzeigt, dass die momentane Transaktion als eine verriegelte Transaktion laufen sollte, und das QPIF-Verriegelungs-Signal ausgibt (q2pif_lock).
  • Wie wiederum die 75 und auch die 77 zeigen, umfasst das QPIF einen „Verriegelungs"-Logik-Block 2528, der den „Verriegelungs"-Zustand des QPIF kontrolliert. Die QPIF besitzt drei Verriegelungs-Zustände: einen nicht verriegelten Zustand 2530 (lock_state[1:0] = „00"), der anzeigt, dass keine verriegelten Transaktionen in der DCQ anhängig sind; einen verriegelten Zustand 2532 (lock_state[1:0] = „01"), der anzeigt, dass eine verriegelte Transaktion in der DCQ empfangen worden ist oder sich im Abschluss auf dem PCI-Bus befindet; und einen unlocked-but-retry Zustand 2534 (lock_state[1:0] = „10"), der anzeigt, dass die Verriegelung entfernt worden ist, allerdings eine gepostete Speicher-Schreib-Transaktion, die in dem anderen Brücken-Chip anhängig ist, laufen muss, bevor die nächste Transaktion angenommen werden kann.
  • Bei einem Power-up bzw. Einschalten und einem Reset tritt die Verriegelungs-Logik 2528 in den nicht verriegelten Zustand 2530 ein und wartet auf eine verriegelte Transaktion, um in die DCQ einzutreten (angezeigt durch die Aufstellung des dcq_locked Signals). Bei dem ersten Takt-Impuls, nachdem das dcq_locked Signal aufgestellt ist, tritt die Verriegelungs-Logik in den verriegelten Zustand 2532 ein, der die QPIF-Slave-Zustand-Maschine 2502 dazu bringt, alle Transaktions-Anforderungen von dem PCI-Bus erneut zu versuchen. Die PCI-Schnittstelle stellt auch ein Verriegelungs-Signal (p2q_lock) auf, das anzeigt, dass sie den PCI-Bus für die Transaktion verriegelt hat. Nachdem die Verriegelungs-Transaktion abgeschlossen ist und die anfordernde Vorrichtung die verriegelten Abschluss-Daten von der DCQ aufgesucht hat, wird das dcq_locked Signal weggenommen. Bei dem ersten Taktimpuls, nachdem das dcq_locked weggenommen ist, während das p2q_lock Signal noch aufgestellt ist, falls keine geposteten Speicher-Schreib-Vorgänge in dem anderen Brücken-Chip anhängig sind (d. h. das pmw_empty Signal wird durch den Kabel-Decodierer aufgestellt), kehrt die Verriegelungs-Logik 2528 zu dem nicht verriegelten Zustand 2530 zurück und die Slave-Zustand-Maschine 2502 ist wieder in der Lage, Transaktions-Anforderungen zu akzeptieren. Allerdings tritt, falls das pwm_empty Signal nicht bei dem ersten Taktimpuls aufgestellt ist, nachdem das dcq_lock Signal weggenommen ist, die Verriegelungs-Logik 2528 in den unlocked-but-retry Zustand 2534 ein, der die Slave-Zustand-Maschine 2502 dazu bringt, alle Transaktionen erneut zu versuchen, bis der gepostete Speicher-Schreib-Zyklus auf dem anderen PCI-Bus abgeschlossen ist.
  • Nachdem der gepostete Speicher-Schreib-Zyklus abgeschlossen ist, wird das pmw_empty Signal aufgestellt, und die Verriegelungs-Logik 2528 kehrt zu dem nicht verriegelten Zustand 2530 zurück.
  • Wie wiederum die 75 und auch die 78 zeigen, umfasst die QPIF eine Puffer-Flush-Logik 2536, die bestimmt, wann die die DCQ Daten von einem oder allen deren Daten-Puffer entleeren sollte. Wie vorstehend diskutiert ist, erzeugt die PCI-Schnittstelle in dem ausgangsseitigen Chip ein p2q_flush Signal, wenn der eingangsseitige Chip ein I/O oder config Schreiben oder ein Speicher-Schreiben ausgibt, das das Soll-Speicher-Bereichs-Register (Target Memory Range Register – TMRR) einer ausgangsseitigen Vorrichtung trifft. Die QPIF-Puffer-Flush-Logik 2536 stellt ein QPIF-Flush-Signal auf (general_flush), das den entsprechenden Daten-Puffer oder alle Daten-Puffer entleert (in Abhängigkeit von dem Wert des p2q_slot Signals, wie dies vorstehend diskutiert ist), wenn das p2q_flush Signal empfangen ist. Ansonsten stellt die Puffer-Flush-Logik 2536 das allgemeine Flush-Signal nur dann auf, wenn eine Vorrichtung auf dem sekundären Bus eine verzögerte Anforderung ausgibt, die alle der DCQ-Puffer verfehlt, wenn durch die DCQ-Steuer-Logik geprüft ist (d. h. !dcq_hit und q2pif_check_cyc sind aufgestellt). In jedem Fall wird das general_flush Signal dazu verwendet, nur Puffer zu entleeren, die sich in dem „prefetch" Zustand befinden, wie dies vorstehend diskutiert ist. Deshalb werden Prefetch-Daten in der DCQ gehalten, bis die PCI-Schnittstelle ein Entleeren verlangt oder bis die entsprechende PCI-Vorrichtung eine nicht-sequenzielle Anforderung ausgibt (d. h. verfehlt die DCQ). Gates 2538 und 2540 sind so angeordnet, um das general_flush Signal auf diese Art und Weise zu erzeugen.
  • Wenn eine Multi-Threaded-Vorrichtung mehr als einen Abschluss-Puffer zugeordnet besitzt, wobei mindestens einer davon Prefetch-Daten enthält, verbleiben die Prefetch-Daten in dem entsprechenden Puffer so lange, wie die Vorrichtung nicht eine Anforderung ausgibt, die alle die DCQ-Puffer verfehlt. Sobald die Vorrichtung eine neue Anforderung ausgibt, werden alle deren Prefetch-Puffer entleert. Alternativ könnte ein Prefetch-Puffer, zugeordnet einer Multi-Threaded-Vorrichtung, entleert werden, sobald die Vorrichtung eine Anforderung ausgibt, die einen anderen DCQ-Puffer trifft.
  • Wie wiederum 75 zeigt, umfasst die QPIF einen Lese-Befehl-Logik-Block 2542, der Lese-Befehle von der PCI-Schnittstelle und Prefetch-Befehle von der DCQ empfängt und ein abgehendes Nachrichten-Befehl-Signal (message_cmd) zu dem Kabel zuführt. In Nicht-Streaming-Situationen kann der abgehende Nachrichten-Befehl derselbe wie der Befehl sein, der von dem PCI-Bus oder der DCQ empfangen ist, oder die Lese-Befehl-Logik 2542 kann den Befehl in einen solchen umwandeln, der eine größere Menge an Daten einsetzt. Da Transaktionen, ausgeführt dword-by-dword, länger benötigen, um auf dem Host-Bus abzuschließen, als Transaktionen, die eine gesamte Cache-Zeile von Daten einsetzen, und da einzelne Cache-Zeilen-Transaktionen länger benötigen, um auf dem Host-Bus abzuschließen, als Mehrfach-Cache-Zeilen-Transaktionen, unterstützt die Lese-Befehl-Logik oft „kleinere" Befehle zu „größeren" solchen, um die Zahl von Takt-Zyklen, verbraucht durch die Transaktion, zu reduzieren („read promotion"). Zum Beispiel ist, wenn eine Vorrichtung auf dem sekundären PCI-Bus einen Speicher-Lese-Befehl ausgibt und dann nach jedem dword von Daten in einer Cache-Zeile fragt, die Lese-Befehl-Logik 2542 in der Lage, die Host-Latenzzeit durch Unterstützen des PCI-Befehls zu einer Speicher-Lese-Zeile zu reduzieren, was ermöglicht, dass der eingangsseitige Chip die gesamte Cache-Zeile an Daten auf einmal liest anstelle davon, jedes dword individuell zu lesen.
  • Wie auch 79 zeigt, erzeugt, wenn die DCQ anzeigt, dass eine Lese-Datenfolge eingerichtet worden ist (d. h. dcq_stream_connect ist aufgestellt), wie dies vorstehend diskutiert ist, die Lese-Befehl-Logik 2542 einen Nachrichten-Befehl von „1000", was den eingangsseitigen Chip darüber informiert, dass eine Datenfolge auftritt. Wenn keine Datenfolge eingerichtet worden ist, muss die Lese-Befehl-Logik 2542 entscheiden, ob ein Speicher-Lese-, ein Speicher-Lese-Zeilen- oder ein Speicher-Lese-Mehrfach-Befehl zu verschicken ist. Falls der Befehl, empfangen von dem PCI-Bus, ein Speicher-Lese-(MR)-Befehl ist (q2p_CMD[2:0] entspricht „0110") und das entsprechende Speicher-Lese-zu-Speicher-Lese-Zeilen-Unterstützungs-Bit (cfg2q_mr2mr1) in den Konfigurations-Registern eingestellt ist, erzeugt die Lese-Befehl-Logik 2542 einen Speicher-Lese-Zeilen-Befehl („1110"). Andererseits erzeugt, falls der PCI-Befehl ein Speicher-Lese-Befehl ist, und das entsprechende Speicher-Lese-zu-Speicher-Lese-Mehrfach-Bit (cfg2q_mr2mrm) eingestellt ist, oder falls der Befehl ein Speicher-Lese-Zeilen-Befehl (q2pif_cmd[3:0] gleich zu „1110") von dem PCI-Bus ist oder ein Prefetch-Zeilen-Befehl (dcq_prefetch_linie ist aufgestellt) von der DCQ ist und das entsprechende Speicher-Lese-Zeilen-zu-Speicher-Mehrfach-Bit (cfg2q_mrl2mrm) eingestellt ist, oder falls der Befehl ein Prefetch-Mehrfach-Befehl (dcq_prefetch_mu1) von der DCQ ist, die Lese-Befehl-Logik 2542 einen Speicher- Lese-Mehrfach-Befehl (d. h. message_cmd entspricht „1100"). Falls der Befehl ein Prefetch-Zeilen-Befehl ist und das entsprechende Speicher-Lese-Zeilen-zu-Speicher-Lese-Mehrfach-Bit nicht eingestellt ist, erzeugt die Lese-Befehl-Logik 2542 einen MRL-Befehl („1110"). Ansonsten gibt die Lese-Befehl-Logik 2542 den empfangenen PCI-Befehl (q2pif_cmd[2:0]) als das Nachrichten-Befehl-Signal aus. Gates 2544, 2546, 2548, 2550, 2552, 2554, 2556 und 2558 und Multiplexer 2560, 2562 und 2564 sind so angeordnet, um das message_cmd Signal auf diese Art und Weise zu erzeugen.
  • Wie wiederum 75 zeigt, erzeugt, wenn die QPIF im Master-Mode arbeitet und eine Steuerung über den Bus empfangen hat, um eine Transaktion, gespeichert in der PMWQ, laufen zu lassen, ein Schreib-Befehl-Logik-Block 2566 den Befehl-Code, der auf dem PCI-Bus ausgeführt wird. Um Transaktions-Zeit zu reduzieren, wie dies vorstehend diskutiert ist, kann eine Schreib-Befehl-Logik Speicher-Schreib-(MW)-Befehle umwandeln, was Daten-Übertragungen ein dword zu einem Zeitpunkt in Speicher-Schreib- und Ungültigkeits-Befehle (MWI) hinein einsetzt, was Übertragungen von mindestens einer gesamten Cache-Zeile an Daten einsetzt. Der Schreib-Befehl-Logik-Block 2566 kann einen Befehl-Midstream umwandeln; wenn z. B. die Transaktion als ein Speicher-Schreiben in der Mitte einer Cache-Zeile beginnt und Daten enthält, die die nächste Cache-Zeilen-Grenze kreuzt und alle acht dwords an Daten in der nächsten Cache-Zeile umfasst. In dieser Situation beendet die Schreib-Befehl-Logik 2566 die Speicher-Schreib-Transaktion, wenn sie die erste Cache-Zeilen-Grenze erreicht, und initiiert ein Speicher-Schreiben und erklärt eine Transaktion für ungültig, um nächste, volle Cache-Zeilen an Daten zu übertragen. Die Schreib-Befehl-Logik 2566 kann auch einen MWI-Transaktions-Midstream zugunsten einer MW-Transaktion beenden, falls weniger als eine Cache-Zeile an Daten zu dem Target-Bus hin geschrieben werden soll, nachdem eine Cache-Zeiten-Grenze gekreuzt wird.
  • Wie wiederum 75 und auch 80 zeigen, hält die Slave-Zustand-Maschine 2502 auch zwei Zähler aufrecht, die anzeigen, wenn eine gepostete Schreib-Transaktion, initiiert auf dem PCI-Bus, beendet werden sollte. Ein 4K Seiten-Grenzen-Zähler (Page Boundary Counter) 2594 erzeugt ein Seiten-Zähl-Signal (page_count_reg[11:2]), das anzeigt, wenn Daten, übertragen von dem PCI-Bus, eine 4K Seiten-Grenze erreichen. Da ein einzelner Speicher-Zugriff nicht erlaubt ist, um eine 4K Seiten-Grenze zu überqueren, muss die gepostete Schreib-Transaktion auf dem initiierenden Bus beendet werden, wenn eine Grenze erreicht ist. Der 4K Seiten-Grenzen-Zähler 2594 wird mit dem dritten bis zwölften Bit der Transaktions-Adresse (q2pif_addr[11:2]) geladen, wenn die Zustand-Maschine ein load_write_counter Signal aufstellt (die Umstände, die eine Aufstellung von diesem Signal mit sich bringen, werden in weiterem Detail nachfolgend diskutiert). Der Zähler 2594 erhöht sich dann um eins an der ansteigenden Flanke jedes Takt-Impulses, nachdem das load_write_counter Signal weggenommen ist. Der Zähler 2594 wird nicht bei Takt-Impulsen erhöht, während denen die intiierende Vorrichtung einen Initiator-Warte-Zustand eingesetzt hat (d. h. p2q_irdy aufgestellt). Der Ausgang von Gate 2592 bestimmt, wann dem Zähler erlaubt wird, sich zu erhöhen. Wenn alle Bits in dem page_count_reg[11:2] Signal hoch sind, ist eine 4K Seiten-Grenze erreicht worden und die Slave-Zustand-Maschine muss die gepostete Schreib-Transaktion beenden und erneut die initiierende Vorrichtung versuchen.
  • Ein dword Zähler 2598 erzeugt ein pmw_counter[5:0] Signal, das die Zahl von dwords, geschrieben von dem initiierenden Bus, während einer geposteten Schreib-Transaktion anzeigt. Das pmw_counter[5:0] Signal wird dann verwendet, um anzuzeigen, wann ein Überlauf aufgetreten ist oder wann die letzte Zeile der Transaktion erreicht worden ist, wie dies nachfolgend diskutiert ist. Wenn die Slave-Zustand-Maschine 2503 das load_write_counter Signal aufstellt, werden die dritten bis fünften Bits des Adressen-Signals (q2pif_addr[4:2]) in die unteren drei Bits des Zählers 2598 eingeladen, während die oberen drei Bits auf Null gesetzt werden. Dieses Adressen-Offset zeigt an, an welchem dword in einer Cache-Zeile eine gepostete Schreib-Transaktion gestartet wurde. Der Zähler 2598 erhöht sich dann um eins an der ansteigenden Flanke jedes Takt-Impulses, nachdem das load_write_counter Signal weggenommen ist. Der Zähler 2598 wird nicht bei Takt-Impulsen erhöht, während denen die initiierende Vorrichtung einen Initiator-Warte-Zustand eingesetzt hat (d. h. p2q_irdy ist aufgestellt). Der Ausgang des Gates 2596 bestimmt, wann dem Zähler erlaubt wird, sich zu erhöhen. Wenn alle Bits in dem pmw_counter[5L0] Signal hoch sind, hat das gepostete Schreiben das Ende der achten Cache-Zeile erreicht.
  • Wie wiederum die 81A bis 81C zeigen, erzeugt der Schreib-Befehl-Logik-Block 2566 ein Vier-Bit-Schreib-Befehl-Signal (write_cmd[3:0]), das den Befehl-Code der geposteten Schreib-Transaktion anzeigt, die auf dem PCI-Bus ausgeführt werden soll. Falls der Befehl-Code, gespeichert in der PMWQ, einen Speicher-Schreib- und Ungültigkeits-Befehl darstellt (pmwq_cmd[3] = „1"), erzeugt die Schreib-Befehl-Logik 2566 einen Schreib-Befehl-Code von „1111". Falls der PMWQ-Befehl-Code einen Speicher-Schreib-Befehl darstellt, verriegelt sich die Schreib-Befehl-Logik 2566 an dem Speicher-Schreib-zu-Speicher-Schreib- und Ungültigkeits-Konfigurations-Bit (cfg2q_mw2mwi) entsprechend dem Target-PCI-Schlitz. Falls das cfg2q_mw2mwi Bit nicht eingestellt ist, erzeugt die Schreib-Befehl-Logik 2566 einen Speicher-Schreib-Befehl („0111"). Falls das Konfigurations-Bit eingestellt ist, erzeugt die Schreib-Befehl-Logik 2566 einen MWI-Befehl, falls die nächste Zeile in dem PMWQ-Daten-Puffer voll ist (pmwg_full_line ist aufgestellt), und erzeugt einen MW-Befehl ansonsten. Die Multiplexer 2568 und 2570 sind so angeordnet, um das write_cmd Signal auf diese Art und Weise zu erzeugen.
  • Wenn die QPIF eine Transaktion auf dem PCI-Bus ausführt und eine Cache-Zeilen-Grenze erreicht hat, kann die Schreib-Befehl-Logik 2566 ein new_write_cmd Signal aufstellen, das anzeigt, dass die momentane Transaktion zugunsten eines neuen Schreib-Befehls beendet werden muss. Falls die Transaktion die letzte Cache-Zeile in dem PMWQ-Daten-Puffer erreicht hat (d. h. pmwq_pointer[5:3] entspricht „111"), wird das new_write Befehl-Signal aufgestellt, um anzuzeigen, dass die Transaktion beendet werden sollte, falls der nächste PMWQ-Puffer nicht ein Überlauf-Puffer ist, gültige Daten enthaltend, falls das entsprechende cfg2q_mw2mwi Bit nicht eingestellt ist, oder falls die full_line Bits entsprechend zu der momentanen Cache-Zeile und der nächsten Cache-Zeile unterschiedlich sind (d. h. pmwq_full_line[7] entspricht nicht pmwq_next_full_line). Falls die Transaktion nicht das Ende des PMWQ-Puffers erreicht hat, wird das new_write_cmd Signal aufgestellt, entweder falls die nächste Zeile in dem PMWQ-Puffer nicht gültige Daten enthält (!pmwq_valid_lines[x + 1]), oder falls das cdfg2q_mw2mwi Bit eingestellt ist und die Voll-Zeilen-Bits für die momentane Zeile und die nächste Zeile unterschiedlich sind (d. h. pmwq_full_line[x] entspricht nicht pmwq_full_line[x + 1]). Gates 2572, 2474, 2576, 2578 und 2580 und ein Multiplexer 2582 sind so angeordnet, um das new_write Befehl-Signal auf diese Art und Weise zu erzeugen.
  • Nachdem das new_write_cmd Signal aufgestellt ist, wird die Transaktion nicht beendet, bis der Schreib-Befehl-Logik-Block 2566 ein synchrones, neues Schreib-Befehl-Signal aufstellt (held_new_write_cmd). Das held_new_write_cmd Signal wird an dem ersten Taktimpuls aufgestellt, nachdem das new_write_cmd Signal aufgestellt ist und das end_of_line Signal aufgestellt ist, was anzeigt, dass das Ende der Cache-Zeile erreicht worden ist, so lange wie die PCI-Schnittstelle nicht die Transaktion beendet hat (d. h. p2q_start_pulse ist aufgestellt). Der held_new_write Befehl wird bei einem Reset und bei dem ersten Takt-Impuls weggenommen, nachdem die new_write_cmd, end_of_line und p2q_start_pulse Signale weggenommen sind und die QPIF die Transaktion beendet (d. h. das asynchrone early_cyc_complete Signal ist aufgestellt). Ansonsten behält das held_new_write_cmd Signal seinen momentanen Wert. Gates 2584 und 2586, ein Invertierer 2588 und ein Flip-Flop 2590 sind so angeordnet, um das held_new_write_cmd Signal auf diese Art und Weise zu erzeugen.
  • Wie wiederum 75 und auch 82A zeigen, umfasst die QPIF einen Überlauf-Logik-Block 2600, der der Master-Zustand-Maschine 2500 ermöglicht, Überlauf-Daten zu verwalten, falls irgendwelche vorhanden sind, wenn eine gepostete Schreib-Transaktion auf dem Target-Bus ausgeführt wird. Wenn die QPIF ein Transaktions-Lauf-Signal (mca_run_pmw oder mca_run_dr, wie vorstehend diskutiert ist) von dem MCA empfängt, erzeugt die Überlauf-Logik 2600 ein Zwei-Bit-Initial-Warteschlangen-Auswahl-Signal (start_queu_select[2:0]), was anzeigt, welcher der Puffer in der PMWQ oder der DRQ ausgewählt werden sollte, um die momentane Transaktion laufen zu lassen. Die folgende Tabelle stellt dar, wie das start_queue_select Signal erzeugt wird.
  • Figure 00640001
    Erzeugung eines start_queue_select Signals
  • Wenn die QPIF eine gepostete Schreib-Transaktion auf dem Target-Bus ausführt, wird ein Zwei-Bit-QPIF-Warteschlangen-Auswahl-Signal (q2pif_queue_select[1:0]) verwendet, um den geeigneten Puffer in der PMWQ auszuwählen. Wenn die Transaktion initiiert wird, stellt die Master-Zustand-Maschine 2500 ein Warteschlangen-Auswahl-Signal auf (initial_queue_select), das bewirkt, dass das q2pif_queue_select Signal den Wert des anfänglichen Warteschlangen-Auswahl-Signals annimmt (start_queue_select). Zu demselben Zeitpunkt wird ein Warteschlangen-Auswahl-Zähler 2602 mit dem Wert des start_queue_select Signals geladen. Nachdem das initial_queue_select Signal weggenommen ist, nimmt das q2pif_queue_select Signal den Wert des count_queue_select Signals an, erzeugt durch den Zähler 2602. Wenn die gepostete Speicher-Schreib-Transaktion in den nächsten PMWQ-Puffer überläuft, stellt die Master-Zustand-Maschine 2500 ein Erhöhungs-Warteschlangen-Auswahl-Signal (inc_queue_select) auf, das bewirkt, dass sich der Zähler 2602 um Eins erhöht. Als Folge wird das q2pif_select_signal erhöht und der nächste Puffer in der PMWQ wird ausgewählt, um die Transaktion fortzuführen. Ein Mulitplexer 2604 bestimmt den Wert des q2pif_queue_select Signals.
  • Wie auch 82B zeigt, stellt die Überlauf-Logik 2600 ein overflow_next_queue Signal auf, wenn die Master-Zustand-Maschine 2500 fortführen sollte, Informationen von dem nächsten PMWQ-Puffer während einer geposteten Speicher-Schreib-Transaktion zu sammeln. Unter Verwendung des q2pif_queue_select[1:0] Signals um zu bestimmen, welche PMWQ momentan ausgewählt ist, stellt die Überlauf-Logik 2600 das overflow_next_queue Signal auf, wenn das gültige Bit (pmwq_valid) und ein Überlauf-Bit (pwq_overflow) entsprechend zu dem nächsten PMWQ-Puffer eingestellt sind. Die pmwq_valid und die pmwq_overflow Zeichen werden nachfolgend diskutiert. Gates 2606, 2608, 2610 und 2612 und ein Multiplexer 2614 sind so angeordnet, um das overflow_next_queue Signal auf diese Art und Weise zu erzeugen.
  • Wie wiederum 75 zeigt, umfasst die QPIF einen Lese-Ausrichtungs-Logik-Block 2616, der der QPIF ermöglicht, fehlausgerichtete Speicher-Lese-Zeilen- und Speicher-Lese-Mehrfach-Transaktionen zu korrigieren. Eine Lese-Zeilen Korrektur tritt dann auf, wenn die QPIF, während sie in dem Master-Mode arbeitet, eine MRL- oder MRM-Transaktion empfängt, die in der Mitte einer Cache-Zeile beginnt. Um Transaktions-Zeit zu reduzieren, beginnt die QPIF die Lese-Transaktion an der Cache-Zeilen-Grenze und ignoriert die nicht angeforderten dwords anstelle eines individuellen Lesens nur der angeforderten dwords von Daten.
  • Unter Bezugnahme auch auf 83 aktiviert die Lese-Ausrichtungs-Logik 2616 das Lese-Ausrichtungs-Merkmal durch Aufstellen eines align_read Signals. Dieses Signal wird dann aufgestellt, wenn der Befehl, gespeichert in dem entsprechenden DRQ-Puffer, ein Speicher-Lese-Zeilen oder ein Speicher-Lese-Mehrfach-Befehl ist (d. h. drq_cmd[3:0] entspricht „1110" oder „1100" jeweils), und wenn das Lese-Ausrichtungs-Konfigurations-Bit (cfg2q_read_align) entsprechend zu der Target-PCI-Vorrichtung eingestellt ist. Gates 2618 und 2620 sind so angeordnet, um das align_read Signal auf diese Art und Weise zu erzeugen.
  • Wie wiederum die 84A bis 84C zeigen, umfasst die Lese-Ausrichtungs-Logik 2616 einen Lese-Ausrichtungs-Abwärts-Zähler 2622, der die dwords von jeder Cache-Zeilen-Grenze zählt und anzeigt, wenn die Master-Zustand-Maschine 2500 das erste, angeforderte dword erreicht. Der Zähler 2622 umfasst eine Zustand-Maschine 2624, die die Betriebsweise des Zählers 2622 steuert.
  • Bei einem Reset tritt der Zähler 2622 in einen IDLE_CNT Zustand 2626 ein, in dem keine Zählung auftritt. Wenn der MCA die QPIF dahingehend instruiert, eine verzögerte Anforderungs-Transaktion auf dem PCI-Bus laufen zu lassen (d. h. wenn irgendwelche Bits in dem mca_run_dr[3:0] aufgestellt sind), stellt die QPIF ein verzögertes Anforderungs-Lauf-Signal auf (any_drq_run), was anzeigt, dass sie versucht, eine verzögerte Anforderungs-Transaktion laufen zu lassen. Während sich der Zähler in dem IDLE_CNT Zustand 2622 befindet, wird sein Drei-Bit-Ausgangs-Signal (throw_cnt[2:1]) mit dem dword offset der Transaktion-Adresse (drq_addr[4:2]) geladen, wenn das any_run_drq Signal aufgestellt ist und die QPIF die Steuerung des PCI-Busses erhält (d. h. p2q_ack wird aufgestellt). Das Gate 2623 erzeugt das Lade-Freigabe-Signal. Dann tritt, an der ansteigenden Flanke des nächsten PCI-Takt-Zyklus, der Zähler 2622 in den COUNT Zustand 2628 ein. Falls die Transaktion an einer Cache-Zeilen-Grenze beginnt, gleicht das dword offset „000" und keine Zählung wird benötigt. Wenn eine Lese-Ausrichtung aktiviert wird, beginnt die Master-Zustand-Maschine 2500 jede MRL- und MRM-Transaktion an der Cache-Zeilen-Grenze, ungeachtet der tatsächlichen Start-Adresse.
  • Während sich der Zähler 2622 in dem COUNT Zustand 2628 befindet, verringert er sich um Eins bei jedem Takt-Impuls, solange wie das p2q_ack Signal aufgestellt ist, throw_cnt nicht Null erreicht hat, sich die Transaktion in der Daten-Phase befindet (d. h. das asynchrone Signal eary_data_phase ist aufgestellt) und die Target-Vorrichtung nicht einen Target-Ready-Warte-Zustand (!p2q_trdy) ausgegeben hat. Das Gate 2625 bestimmt, wann der Zähler erniedrigt wird. Falls die PCI-Schnittstelle den Bus von der QPIF wegnimmt (p2q_ack wird weggenommen) oder falls die Daten-Phase endet (early_data_phase wird weggenommen), beendet der Zähler 2622 ein Erniedrigen und tritt erneut in den IDLE_CNT Normalzustand 2626 ein. Falls das throw_cnt Signal „000" erreicht, während das p2q_ack Signal noch aufgestellt ist, stoppt der Zähler 2622 ein Zählen und tritt in den DONE Zustand 2630 ein. Ansonsten verbleibt der Zähler in dem COUNT Zustand 2628.
  • Wenn der Zähler „000" erreicht, stellt die Lese-Ausrichtungs-Logik 2616 ein read_data_start Signal auf, das die Master-Zustand-Maschine 2500 instruiert, ein Lesen von Daten von der Target-Vorrichtung zu beginnen. Ein Komparator 2632 erzeugt das read_data_start Signal. Nachdem das read_data_start Signal aufgestellt ist, verbleibt der Zähler 2622 in dem DONE Zustand 2630 bis die Daten-Phase endet (early_data_phase wird weggenommen).
  • Wie 85 zeigt, steuert die Master-Zustand-Maschine die Betriebsweise der QPIF, wenn die QPIF in dem Master-Mode arbeitet. In dem Master-Mode führt die QPIF gepostete Schreib-Transaktionen und verzögerte Anforderungs-Transaktionen auf dem PCI-Bus aus. Die folgende Tabelle stellt die Ereignisse dar, die Zustand-Übergänge in der Master-Zustand-Maschine bewirken.
  • Figure 00680001
    Master-Zustand-Transaktionen
  • Bei einem Reset tritt die Master-Zustand-Maschine in einen IDLE Zustand 2700 ein, in dem die QPIF auf Instruktionen wartet, um eine Transaktion auf dem PCI-Bus laufen zu lassen. Wenn die QPIF ein Lauf-Signal von dem MCA empfängt (any_run wird aufgestellt, wenn irgendein Bit in dem mca_run_pmw Signal oder dem mca_run_dr Signal aufgestellt ist), ist das Kabel nicht belegt, eine Nachricht weiterleitend (!cable_busy), und die PCI-Schnittstelle versucht nicht, die vorherige Transaktion zu beenden (!p2q_master_dphase), die Master-Zustand-Maschine versucht, die Transaktion auf dem PCI-Bus laufen zu lassen. Falls die Transaktion eine verzögerte Anforderungs-Transaktion ist (any_run_drq ist aufgestellt) und der andere Chip keinen Raum für einen verzögerten Abschluss hat (tc_dc_full ist aufgestellt), ist die Master-Zustand-Maschine nicht in der Lage, die Anforderung laufen zu lassen, und führt den MCA zu der nächsten Transaktion weiter. Ansonsten beginnt, falls die PCI-Schnittstelle die QPIF Steuerung des Busses (p2q_ack ist aufgestellt) gegeben hat, die Master-Zustand-Maschine damit, die Transaktion auf dem PCI-Bus auszuführen. In dem IDLE Zustand 2700 liefert der Master die Adressen-Phasen-Informationen, die vorstehend diskutiert sind, zu dem PCI-Bus. Falls die Transaktion, die laufen soll, ein Dual-Adressen-Zyklus ist (q2pif_dac_flag ist aufgestellt), tritt die Master-Zustand-Maschine in einen MASTER_DAC Zustand 2702 ein, in dem die zweite Hälfte der Adressen-Informationen geliefert wird. Falls die Transaktion nicht ein Dual-Adressen-Zyklus ist und eine verzögerte Anforderungs-Transaktion ist (any_run_drq ist aufgestellt), dann tritt die Master-Zustand-Maschine in einen RDATA1 Lese-Zustand 2704 ein, indem die Master-Zustand-Maschine die Datenphase der verzögerten Anforderungs-Transaktion beginnt. Falls die Transaktion nicht ein Dual-Adressen-Zyklus ist und nicht eine verzögerte Anforderung ist, ist sie eine gepostete Speicher-Schreib-Transaktion, so dass die Master-Zustand-Maschine in einen WDATA1 Schreib-Zustand 2706 eintritt, indem die Master-Zustand-Maschine in die Datenphase der geposteten Speicher-Schreib-Transaktion eintritt.
  • In dem MASTER_DAC Zustand 2704 = 2 liefert die Master-Zustand-Maschine die zweite Hälfte der Adressen-Phasen-Informationen. Dann tritt, falls das p2q_ack Signal noch aufgestellt ist und die Transaktion eine verzögerte Anforderung ist, die Master-Zustand-Maschine in den RDATA1 Zustand 2704 ein, wenn sie das Start-Signal (p2q_start_pulse) von der PCI-Schnittstelle empfängt. Falls die Transaktion nicht eine verzögerte Anforderung ist, tritt die Master-Zustand-Maschine in den WDATA1 Zustand 2706 ein, wenn sie den PCI-Start-Impuls empfängt. Die Master-Zustand-Maschine initiiert auch eine verzögerte Abschluss-Nachricht auf dem Kabel, wenn der PCI-Start-Impuls empfangen ist, durch Aufstellen eines Asynchron-Abschluss-Nachrichten-Signals (early_master_send_message). Falls das p2q_ack Signal durch die PCI-Schnittstelle weggenommen worden ist, kehrt die Master-Zustand-Maschine zu dem IDLE Zustand 2700 zurück und wartet darauf, erneut die Transaktion zu versuchen.
  • Der RDATA1 Zustand 2704 ist der Anfangs-Zustand für verzögerte Lese- und verzögerte Schreib-Anforderungen. In diesem Zustand wartet die Master-Zustand-Maschine auf den PCI-Start-Impuls, und zwar vor Eintreten in eine RBURST Burst-Daten-Phase 2708. Wenn die Zustand-Maschine zuerst in den RDATA1 Zustand 2704 eintritt, initiiert sie eine Abschluss-Nachricht auf dem Kabel, falls dies nicht schon bereits in dem MASTER_DAC Zustand 2702 vorgenommen ist. Dann beendet, falls das p2q_ack durch die PCI-Schnittstelle weggenommen ist, die Master-Zustand-Maschine die Transaktion, führt den MCA zu der nächsten Transaktion weiter, und tritt erneut in den IDLE Zustand 2700 ein. Ansonsten präpariert, wenn der PCI-Start-Puls erscheint, sich die Master-Zustand-Maschine so, um in den RBURST Zustand 2708 einzutreten. Falls die QPIF das Ende der Transaktion anzeigt (queue_cyc_complete) oder falls die Transaktion eine 4K Seiten-Grenze erreicht hat (read_page_disconnect ist aufgestellt, da alle Bits in dem drq_addr[11:2] Signal hoch sind), entfernt die Master-Zustand-Maschine das frame_signal von der QPIF und zeigt an, dass der nächste Teil an Daten der letzte Teil ist (asynchrones Signal early_last_master_data ist aufgestellt), bevor in den RBURST Zustand 2708 eingetreten wird. Die Master-Zustand-Maschine stellt auch ein asynchrones early_master_lastline Signal auf, das anzeigt, dass die letzte Zeile von Daten erreicht worden ist, falls das read_page_disconnect_lastline Signal aufgestellt ist oder falls das DRQ-Last-Zeilen-Signal (drq_lastline) aufgestellt ist und die QPIF nicht ein Streaming-Signal von dem anderen Brücken-Chip empfangen hat (cd_stream oder stream_match sind nicht aufgestellt oder cfq2q_stream_disable ist nicht eingestellt). Falls der PCI-Start-Impuls nicht aufgestellt ist, verbleibt die Master-Zustand-Maschine in dem RDATA1 Zustand 2704, bis die QPIF die Transaktion beendet oder eine 4K Seiten-Grenze erreicht ist, was die Zustand-Maschine zu dem IDLE Zustand 2700 zurückführen wird, oder bis der PCI-Start-Impuls erscheint, was die Zustand-Maschine dazu bringt, in den RBURST Zustand 2708 einzutreten.
  • In dem RBURST Zustand 2708 führt die Master-Zustand-Maschine burstmäßig Daten zu dem PCI-Bus. Falls eine Abschluss-Nachricht bis jetzt noch nicht initiiert worden ist, initiiert die Master-Zustand-Maschine eine Abschluss-Nachricht unter Eintreten in den RBURST Zustand 2708. Dann beendet, falls das p2q_ack Signal weggenommen ist, oder falls die QPIF Transaktion erneut durch die PCI-Schnittstelle versucht wird (p2q_retry ist aufgestellt), oder falls die PCI-Schnittstelle die Transaktion aussondert (p2q_target_abort ist aufgestellt), beendet die Master-Zustand-Maschine die Transaktion auf dem PCI-Bus, sondert die Abschluss-Nachricht auf dem Kabel aus und kehrt zu dem IDLE Zustand zurück. Wenn das p2q_ack Signal weggenommen ist, fährt der Master-Zyklus-Arbitrierer fort, die momentane Transaktion auszuwählen. Wenn allerdings die Transaktion erneut aufgesucht oder ausgesondert ist, führt die Master-Zustand-Maschine den MCA zu der nächsten Transaktion weiter.
  • Während das p2q_ack Signal noch aufgestellt ist und die QPIF-Transaktion nicht erneut versucht oder ausgesondert wird, beendet die Master-Zustand-Maschine niemals die Transaktion und kehrt zu dem IDLE Zustand 2700 zurück, falls eine 4K Seiten-Grenze erreicht ist und die PCI-Schnittstelle anzeigt, dass die Target-Vorrichtung aufgehört hat, Daten aufzunehmen (p2q_trdy ist nicht länger aufgestellt). Falls die Target-Vorrichtung den letzten Teil von Daten nimmt, verbleibt die Zustand-Maschine in dem RBURST Zustand 2708.
  • Falls die QPIF das queue_cyc_complete Signal aufstellt, was anzeigt, dass die Transaktion abgeschlossen ist, wird der Master allgemein die Transaktion beenden und zu dem IDLE Zustand 2700 zurückkehren, falls das p2q_trdy Signal weggenommen ist oder in dem RBURST Zustand 2708 verbleibt, bis das letzte dword an Daten übertragen wird, falls das p2q_trdy Signal aufgestellt verbleibt. Falls sich allerdings die Transaktion in der Daten-Phase befindet und sich nicht in der letzten Daten-Phase befindet (p2q_master_dphase und !p2q_last_dphase) und eine Datenfolge mit dem anderen Brücken-Chip eingerichtet worden ist (cd_stream und stream_match und !cfg2q_stream_disable), wird die Master-Zustand-Maschine in der RBURST-Phase indefinit verbleiben. Wenn sich die QPIF in einem Streaming-Vorgang befindet, stellt die Master-Zustand-Maschine ein Streaming-Signal auf (q2pif_streaming), das die QPIF dazu bringt, fortzufahren, Daten zu der anfordernden Vorrichtung auf dem anderen PCI-Bus zu liefern, bis die Vorrichtung die Transaktion beendet.
  • Falls das p2q_ack Signal aufgestellt verbleibt und weder das p2q_retry, das p2q_target_abort oder das queue_cyc_complete Signal aufgestellt ist, sieht die Master-Zustand-Maschine bei dem p2q_trdy Signal nach. Falls das Signal nicht aufgestellt ist, was anzeigt, dass die Target-Vorrichtung den letzten Teil von Daten genommen oder geliefert hat, stellt die Master-Zustand-Maschine deren nächstes Daten-Signal auf (early_next_data), das anzeigt, dass die QPIF bereit ist, einen anderen Teil von Daten zu übertragen. Das nächste Daten-Signal wird nur dann aufgestellt, falls die Transaktion nicht eine korrekte Lesung ist (align_read ist nicht aufgestellt) oder falls die Transaktion eine korrekte Lesung ist und das read_data_start Signal aufgestellt worden ist. Falls das p2q_trdy Signal aufgestellt ist, was anzeigt, dass das Target nicht die letzte Daten-Übertragung durchgeführt hat, verbleibt die Zustand-Maschine in dem RBURST Zustand 2708.
  • In dem WDATA1 Zustand 2706 beginnt die Master-Zustand-Maschine die Daten-Phase einer geposteten Speicher-Schreib-Transaktion. Falls das p2q_ack Signal weggenommen ist oder die p2q_retry oder das p2q_target_abort Signal aufgestellt ist, während sich die Master-Zustand-Maschine in diesem Zustand befindet, wird die Transaktion auf dem PCI-Bus beendet und die Zustand-Maschine kehrt zu dem IDLE Zustand 2700 zurück. Wenn das p2q_ack Signal weggenommen ist, verbleibt der MCA bei dem momentanen Zyklus; ansonsten führt die Master-Zustand-Maschine die MCA schrittmäßig zu der nächsten Transaktion weiter.
  • Falls das p2q_ack Signal aufgestellt verbleibt und die Transaktion weder erneut aufgesucht noch ausgesondert wird, muss die Master-Zustand-Maschine bestimmen, ob der Schreibvorgang ein einzelnes dword oder mehr als ein dword einsetzt. Falls in dem WDATA1 Zustand das queue_cyc_complete Signal aufgestellt ist, wird das neue Halte-Schreib-Befehl-Signal aufgestellt, die end_of_line und new_write_cmd Signale werden aufgestellt, oder die Transaktion hat das letzte dword von Daten erreicht, die Transaktion setzt ein einzelnes dword ein. In dieser Situation endet die Transaktion und die Zustand-Maschine kehrt zu dem IDLE Zustand 2700 nur dann zurück, wenn das Target den letzten Teil von Daten nahm (!p2q_trdy). Ansonsten verbleibt die Zustand-Maschine in dem WDATA2 Zustand 2710. Falls die Transaktion mehr als ein dword von Daten einsetzt, tritt die Master-Zustand-Maschine in einen WDATA2-Burst-Daten-Phasen-Zustand 2710 ein. Unmittelbar vor einem Eintreten in den WDATA2 Zustand setzt die Master-Zustand- Maschine einen q2p_irdy Warte-Zustand ein, falls das overflow_next_queue Signal aufgestellt worden ist.
  • In dem WDATA2 Zustand 2710 leitet die Master-Zustand-Maschine die Daten burstmäßig zu dem PCI-Bus weiter. Falls das p2q_ack Signal weggenommen ist oder die Transaktion durch die PCI-Schnittstelle ausgesondert ist, wird die Transaktion in der QPIF beendet und die Master-Zustand-Maschine tritt erneut in den IDLE Zustand 2710 ein. Falls die Transaktion erneut durch die PCI-Schnittstelle versucht wird, allerdings die PCI-Schnittstelle die Daten nahm, die geliefert sind (!p2q_trdy), tritt die Master-Zustand-Maschine erneut in den IDLE Zustand 2700 ein. Ansonsten tritt die Zustand-Maschine in einen WRETRY-Stepback-Zustand 2712 ein, der die PMWQ außerhalb des Hinweiszeigers zurück zu dem vorherigen Teil von Daten durch Erzeugen des Rückschreit-Signals, das vorstehend diskutiert ist, führt. Von dem WRETRY Zustand 2712 tritt die Zustand-Maschine immer wieder in den IDLE Zustand 2700 ein.
  • Falls das p2q_ack Signal aufgestellt verbleibt und die Transaktion weder erneut versucht noch ausgesondert ist, bestimmt die Master-Zustand-Maschine, ob die Transaktion abgeschlossen ist. Falls die QPIF das Ende der Transaktion anzeigt (queue_cyc_complete ist aufgestellt) oder das Ende einer Cache-Zeile erreicht ist und ein neuer Schreib-Befehl benötigt wird (end_of_line und new_write_command sind aufgestellt), tritt die Zustand-Maschine in einen WSHORT_BURST Zustand 2714 ein, wenn entweder der letzte Teil der Daten genommen wurde (!p2q_trdy) oder der PCI-Start-Impuls empfangen ist. In jedem Fall müssen nur zwei dwords an Daten zu dem PCI-Bus hingeschrieben werden. Ansonsten verbleibt die Zustand-Maschine in dem WDATA2 Zustand 2710. Wenn die Zustand-Maschine in den WSHORT_BURST Zustand 2714 eintritt, verbleibt das QPIF frame_signal aufgestellt, falls die Transaktion in die nächste Warteschlange überlaufen kann, und ein neuer Schreib-Befehl wird nicht benötigt.
  • In dem WSHORT_BURST Zustand 2714 präpariert sich die Master-Zustand-Maschine, um die abschließenden zwei dwords Daten zu dem PCI-Bus zu schreiben. Falls das p2q_ack Signal weggenommen ist oder der Zyklus erneut versucht wird oder durch die PCI-Schnittstelle ausgesondert wird, beendet die Zustand-Maschine die Transaktion und kehrt zu dem IDLE Zustand 2700 zurück. Wenn das PCI-Kenntnis-Signal verschwindet oder der Zyklus ausgesondert wird, stellt die Master-Zustand-Maschine das Stepback-Signal auf, um anzuzeigen, dass der PMWQ-Out-Pointer zurück zu dem vorherigen dword schrittmäßig geführt werden sollte. Wenn die Transaktion erneut durch die PCI-Schnittstelle versucht wird, wird der Out-Pointer zurück nur dann schrittmäßig geführt, falls die Target-Vorrichtung nicht den letzten Teil an Daten nahm (p2q_trdy ist aufgestellt). Wenn die Transaktion nicht beendet ist und sie in den nächsten PMWQ-Puffer überlaufen kann (overflow_next_queue ist aufgestellt) und ein neuer Schreib-Befehl nicht benötigt wird, behält die Master-Zustand-Maschine das QPIF-Frame-Signal, das aufgestellt ist, bei, und tritt dann in einen WCOMPLETE Zustand 2716 ein, falls die Target-Vorrichtung den letzten Teil an Daten genommen hat oder in dem WSHORT_BURST Zustand 2714 hat, oder verbleibt ansonsten in dem WSHORT-BURST Zustand 2714. Falls die Transaktion nicht in die nächste Warteschlange überlaufen kann oder ein neuer Schreib-Befehl benötigt wird, nimmt die Zustand-Maschine das Frame-Signal weg, um das Ende der QPIF-Transaktion anzuzeigen, und tritt dann in den WCOMPLETE Zustand 2716 ein, falls der letzte Teil von Daten durch die Target-Vorrichtung genommen wurde, oder verbleibt in dem WSHORT_BURST Zustand 2714 ansonsten.
  • In dem WCOMPLETE Zustand 2716 beendet die Master-Zustand-Maschine die gepostete Speicher-Schreib-Transaktion. Die Zustand-Maschine tritt in den IDLE Zustand 2700 ein, wenn die Transaktion erneut versucht oder durch die PCI-Schnittstelle ausgesondert ist. Falls die Transaktion erneut versucht wird, wird der PMWQ-Out-Pointer nur dann erhöht, falls die Target-Vorrichtung den letzten Teil an Daten nahm. Falls die Transaktion in die nächste Warteschlange überlaufen kann, wird ein neuer Schreib-Befehl nicht benötigt, und die Transaktion befindet sich nicht in der Letzten Daten-Phase, die Master-Zustand-Maschine erhöht den Warteschlangen-Auswahl-Zähler und kehrt zu dem WDATA1 Zustand 2706 zurück, um die Transaktion von der Überlauf-Warteschlange fortzuführen, solange wie die Target-Vorrichtung den letzten Teil an Daten nahm. Falls die Target-Vorrichtung nicht den letzten Teil an Daten nahm, verbleibt die Master-Zustand-Maschine in dem WCOMPLETE Zustand 2716.
  • Falls die Transaktion nicht in den nächsten PMWQ-Puffer überlaufen wird, beendet die Master-Zustand-Maschine die Transaktion und kehrt zu dem IDLE Zustand 2700 zurück, falls das Target den letzten Teil an Daten nahm. Ansonsten verbleibt die Zustand-Maschine in dem WCOMPLETE Zustand 2716, bis eines der beendenden Ereignisse, diskutiert vorstehend, auftritt.
  • Wie die 86 zeigt, steuert die Slave-Zustand-Maschine die Operation der QPIF, wenn die QPIF in dem Slave-Mode arbeitet. In dem Slave-Mode empfängt die QPIF gepostete Schreib-Transaktionen und verzögerte Anforderungs-Transaktionen von Vorrichtungen auf dem PCI-Bus und führt die Transaktionen weiter zu dem Target-Bus über das Kabel. Die folgende Tabelle stellt die Ereignisse dar, die Zustand-Übergänge in der Slave-Zustand-Maschine verursachen.
  • Figure 00750001
    Slave-Zustand-Übergänge
  • Bei einem Reset tritt die Slave-Zustand-Maschine in einen IDLE Zustand 2720 ein, in dem die QPIF auf eine Transaktion wartet, die initiiert werden sollte, und zwar durch eine Vorrichtung auf dem PCI-Bus. Falls eine Transaktion, initiiert auf dem Bus, nicht die QPIF als Ziel trifft (q2p_qcyc ist nicht aufgestellt), fährt die Slave-Zustand-Maschine in dem IDLE Zustand 2720 fort. Wenn eine Transaktion auf dem PCI-Bus nicht die QPIF als Ziel trifft, tritt die Slave-Zustand-Maschine in einen SLAVE_DAC-Dual-Adressen-Zyklus-Zustand 2722 ein, falls das p2q_dac_flag aufgestellt ist und ein Adressen-Paritäts-Fehler nicht aufgetreten ist (p2q_perr_ ist niedrig). Falls die Transaktion nicht ein Dual-Adressen-Zyklus ist und eine gepostete Speicher-Schreib-Anforderung ist, und falls ein Paritäts-Fehler nicht in der Adressen-Phase aufgetreten ist, lädt die Slave-Zustand-Maschine die Schreib-Zähler (d. h. stellt load_write_counter auf) und bestimmt, ob sie die Transaktion akzeptieren kann. Falls die PMWQ in dem anderen Brücken-Chip voll ist (tc_dc_full ist durch den DC-Transaktions-Zähler aufgestellt) oder die DCQ verriegelt ist (dcq_locked ist aufgestellt) oder sich die QPIF-Verriegelungs-Logik in dem unlocked-but-retry Zustand befindet (lock_state[1] entspricht „1"), dann beendet die Slave-Zustand-Maschine die Transaktion durch Aufstellen eines asynchronen Retry-Signals (early_retry), das zu der PCI-Schnittstelle als q2pif_retry zugeführt wird, und verbleibt in dem IDLE Zustand 2720. Falls die QPIF die Transaktion annehmen kann, initiiert die Slave-Zustand-Maschine die gepostete Speicher-Schreib-Nachricht auf dem Kabel und tritt in einen PMW1 Zustand 2724 ein, in dem die Transaktion weiter zu dem Kabel geführt wird.
  • Falls die Transaktion nicht ein Dual-Adressen-Zyklus oder eine gepostete Speicher-Schreib-Anforderung ist, lädt die Slave-Zustand-Maschine den dword Zähler (stellt load_write_counter auf), und, falls nicht ein Paritäts-Fehler aufgetreten ist, analysiert sie die verzögerte Anforderungs-Transaktion. Falls die Transaktion eine MRL- oder eine MRM-Transaktion ist und die QPIF-Verriegelungs-Logik sich nicht in dem unlocked-but-retry Zustand befindet, stellt die Slave-Zustand-Maschine das QPIF-Prüf-Zyklus-Signal (q2pif_check_cyc) auf, was die DCQ instruiert, die verriegelte Anforderung zu den verzögerten Abschluss-Nachrichten in den DCQ-Puffern zu vergleichen. Falls die Anforderung einen DCQ-Puffer trifft, der nicht leer ist (dcq_hit und !dcq_no_data), tritt die Slave-Zustand-Maschine in einen STEP_AHEAD Zustand 2726 ein, in dem die QPIF beginnt, die angeforderten Informationen zu dem PCI-Bus zuzuführen. Falls die MRL- oder MRM-Anforderung alle die DCQ-Daten-Puffer verfehlt (!dcq_hit), ist die DCQ nicht voll (!dcq_full), die verzögerte Anforderungs-Warteschlange in dem anderen Brücken-Chip ist nicht voll (!tc_dr_full) und die DCQ und QPIF sind nicht verriegelt (!dcq_locked und !lock_state[1]) stellt die Slave-Zustand-Maschine das q2pif_retry Signal auf, führt die Anforderung weiter zu dem Kabel, und verbleibt in dem IDLE Zustand 2720. Falls die Anforderung die DCQ verfehlt und die Anforderung nicht entlang des Kabels geschickt werden kann, versucht die QPIF einfach erneut die anfordernde Vorrichtung und verbleibt in dem IDLE Zustand 2720.
  • Falls die verzögerte Anforderung nicht eine MRL- oder MRM-Transaktion ist, wird ein zweiter Takt-Zyklus benötigt, um die Anforderung zu prüfen, da die Daten- oder Byte-Freigaben mit den Inhalten der DCQ-Puffer verglichen werden müssen, so dass die Slave-Zustand-Maschine in einen SECOND_CHECK Zustand 2728 eintritt. Falls ein Paritäts-Fehler auftritt oder falls sich die Verriegelungs-Logik in dem unlocked-but-retry Zustand befindet, versucht die Zustand-Maschine erneut die anfordernde Vorrichtung und verbleibt in dem IDLE Zustand 2720.
  • In dem SLAVE_DAC Zustand 2722 empfängt die Slave-Zustand-Maschine die zweite Hälfte der Adressen-Phasen-Informationen. Falls die anfordernde Vorrichtung nicht target-mäßig die QPIF getroffen hat, ignoriert die Slave-Zustand-Maschine die Transaktion und verbleibt in dem IDLE Zustand 2720. Wenn die QPIF die Target-Vorrichtung ist, sind die Zustand-Übergangs-Ereignisse dieselben wie solche in dem IDLE Zustand 2720. Genauergesagt lädt, falls die Transaktion eine gepostete Speicher-Schreib-Anforderung ist und ein Paritäts-Fehler nicht aufgetreten ist, die Slave-Zustand-Maschine die Schreib-Zähler und bestimmt, ob sie die Transaktion annehmen kann. Falls die PMWQ in dem anderen Brücken-Chip voll ist (tc_pmw_full ist aufgestellt), wird die DCQ verriegelt, oder die QPIF-Verriegelungs-Logik befindet sich in dem unlocked-but-retry Zustand, die Slave-Zustand-Maschine versucht erneut die anfordernde Vorrichtung und kehrt zu dem IDLE Zustand 2720 zurück. Falls die QPIF die Transaktion annehmen kann, initiiert die Slave-Zustand-Maschine die gepostete Speicher-Schreib-Nachricht auf dem Kabel und tritt in den PMW1 Zustand 2724 ein.
  • Falls die Transaktion nicht eine gepostete Speicher-Schreib-Anforderung ist, lädt die Slave-Zustand-Maschine den dword Zähler, und, falls kein Paritäts-Fehler aufgetreten ist, analysiert sie die verzögerte Anforderungs-Transaktion. Falls die Transaktion eine MRL- oder MRM-Transaktion ist und sich die QPIF-Verriegelungs-Logik nicht in dem un locked-but-retry Zustand befindet, stellt die Slave-Zustand-Maschine das QPIF-Prüf-Zyklus-Signal auf. Falls die Anforderung einen DCQ-Puffer trifft, der nicht leer ist, tritt die Slave-Zustand-Maschine in den STEP_ADHEAD Zustand 2726 ein. Falls die MRL- oder MRM-Anforderung alle die DCQ-Daten-Puffer verfehlt, ist die DCQ nicht voll, die verzögerte Anforderungs-Warteschlange in dem anderen Brücken-Chip ist nicht voll (tc_dr_full ist nicht aufgestellt) und die DCQ und die QPIF sind nicht verriegelt, stellt die Slave-Zustand-Maschine stellt das q2pif_retry Signal auf, führt die Anforderung weiter entlang des Kabels und kehrt zu dem IDLE Zustand 2720 zurück. Falls die Anforderung die DCQ verfehlt und die Anforderung nicht entlang des Kabels geschickt werden kann, versucht die QPIF einfach erneut die anfordernde Vorrichtung und kehrt zu dem IDLE Zustand 2720 zurück.
  • Falls die verzögerte Anforderung nicht eine MRL- oder MRM-Transaktion ist, wird ein zweiter Takt-Zyklus benötigt, um die Anforderung zu prüfen, da die Daten- oder Byte-Freigaben mit den Inhalten der DCQ-Puffer verglichen werden müssen, so dass die Slave-Zustand-Maschine in den SECOND_CHECK Zustand 2728 eintritt. Falls ein Parität-Fehler auftritt oder falls sich die Verriegelungs-Logik in dem unlocked-but-retry Zustand befindet, versucht die Zustand-Maschine erneut die anfordernde Vorrichtung und kehrt zu dem IDLE Zustand 2720 zurück.
  • In dem PMW1 Zustand 2724 führt die Slave-Zustand-Maschine eine gepostete Speicher-Schreib-Transaktion über das Kabel zu der Target-Vorrichtung weiter. Wenn die Zustand-Maschine zuerst in den PMW1 Zustand 2724 eintritt, nimmt sie das load_write_counter Signal weg. Falls der dword Zähler anzeigt, dass die gepostete Speicher-Schreib-Transaktion die letzte Cache-Zeile ist (pmw_counter[5:3] entspricht „111") und die PMWQ in der anderen Brücke voll ist (tc_pmw_full) und das Schreib-Überlauf-Merkmal gesperrt ist (!cfg2q_write_overflow), oder falls das write_page_disconnect Signal aufgestellt ist, da die Transaktion eine 4K Seiten-Grenze erreicht hat, oder falls die DCQ das dcq_disconnect_for_stream Signal aufgestellt hat und das Schreib-Unterbrechungs-Merkmal nicht gesperrt ist (!cfg2q_wr_discnt_disable), stellt die Slave-Zustand-Maschine das slave_lastline Signal auf, das anzeigt, dass die momentane Cache-Zeile die letzte sein wird, die übertragen werden soll. Die Slave-Zustand-Maschine verbleibt dann in dem PMW1 Zustand 2724, bis das p2q_qcyc Signal weggenommen ist, was anzeigt, dass die Transaktion auf dem PCI-Bus abgeschlossen wurde. Nach Verlassen des PMW1 Zustands 2724, tritt die Slave-Zustand-Maschine wieder in den IDLE Zustand 2720 ein.
  • In dem SECOND_CHECK Zustand 2728 hat die Slave-Zustand-Maschine die DCQ die zweite Phase der Anforderungs-Informationen zu den verzögerten Abschluss-Informationen in den DCQ-Puffern vergleichen lassen. Falls die Transaktion nicht eine verzögerte Schreib-Anforderung ist (!io_write und !config_write) oder dabei ein Paritäts-Fehler vorhanden ist (!p2q_perr) und falls die DCQ nicht verriegelt ist und das dwr_check_ok Signal aufgestellt ist, stellt die Slave-Zustand-Maschine das q2pif_check_cyc auf. Das dwr_check_ok Signal wird entweder dann aufgestellt, wenn die Transaktion nicht eine verzögerte Schreib-Anforderung ist oder wenn sie eine verzögerte Schreib-Anforderung ist und ein p2q_irdy Warte Zustand nicht eingesetzt worden ist. Falls die Anforderung einen der DCQ-Puffer trifft und der Puffer nicht leer ist, tritt die Slave-Zustand-Maschine in den STEP_AHEAD Zustand 2726 ein. Falls die Anforderung alle der DCQ-Puffer verfehlt, allerdings die QPIF die Nachricht entlang des Kabels schicken kann, versucht die Slave-Zustand-Maschine die anfordernde Vorrichtung erneut, führt die Transaktion entlang des Kabels weiter und tritt erneut in den IDLE Zustand 2720 ein. Ansonsten wird, falls die Anforderung alle der DCQ-Puffer verfehlte, und die QPIF nicht die Transaktion entlang des Kabels schicken konnte, oder falls ein Paritäts-Fehler an einer verzögerten Schreib-Anforderung auftritt, die Zustand-Maschine erneut die anfordernde Vorrichtung versuchen und wieder in den IDLE Zustand 2720 eintreten.
  • In dem STEP_AHEAD Zustand 2726 erhöht die Slave-Zustand-Maschine den DCQ-Ausgangs-Hinweiszeiger zu dem nächsten dword. Dieser Zustand ist notwendig, unmittelbar nachdem ein DCQ-Puffer getroffen wird, da die PCI-Schnittstelle das erste dword von Daten ohne Zugreifen auf das !p2q_trdy Signal verriegelt. Von dem STEP_AHEAD Zustand 2726 tritt die Zustands_Maschine in einen HIT_DCQ Zustand 2730 ein, in dem Daten von dem geeigneten DCQ-Puffer zu der anfordernden Vorrichtung geliefert werden, falls das letzte dword von Daten nicht genommen worden ist. Ansonsten tritt die Zustand-Maschine in einen HIT_DCQ_FINAL Zustand 2732 ein, in dem die anfordernde Vorrichtung erneut versucht wird, da der DCQ-Puffer keine weiteren Daten enthält.
  • Von dem HIT_DCQ Zustand 2730 beendet, wenn die verzögerte Anforderungs-Transaktion auf dem PCI-Bus endet, bevor sie in der QPIF endet (d. h. p2q_qcyc wird weggenommen), die Zustand-Maschine die Transaktion in der QPIF und stellt das Step back-Signal auf, das anzeigt, dass der DCQ Out-Pointer verringert werden sollte, da der letzte Teil von Daten nicht durch die anfordernde Vorrichtung genommen wurde. Die Zustand-Maschine tritt dann erneut in den IDLE Zustand 2720 ein. Falls der DCQ-Puffer „Out-Of-Data" läuft, während die anfordernde Vorrichtung fortfährt, ihn anzufordern (dcq_no_data und !p2q_irdy), oder falls der pmw_counter anzeigt, dass das letzte dword erreicht worden ist und das read_disconnect_for_stream Signal aufgestellt worden ist, versucht die Slave-Zustand-Maschine erneut die anfordernde Vorrichtung und tritt in den HIT_DCQ_FINAL Zustand 2732 ein. Falls die Transaktion endet, um eine Datenfolge einzurichten, wird das Stepback-Signal aufgestellt und der Ausgangs-Hinweiszeiger des geeigneten DCQ-Puffers wird erniedrigt. In irgendeiner anderen Situation fährt die Slave-Zustand-Maschine fort, Daten in dem HIT_DCQ_FINAL Zustand 2732 vorzusehen.
  • In dem HIT_DCQ_FINAL Zustand 2732 besitzt die Slave-Zustand-Maschine ein dword an Daten übrig, um sie zu übertragen. Falls der PCI-Bus die Transaktion beendet, bevor die anfordernde Vorrichtung den letzten Teil von Daten nimmt (d. h. p2q_qcyc wird weggenommen), stellt die Slave-Zustand-Maschine das Stepback-Signal auf und kehrt zu dem IDLE Zustand 2720 zurück. Falls das p2q_qcyc Signal aufgestellt verbleibt und die anfordernde Vorrichtung nicht einen Initiator-Warte-Zustand aufgestellt hat (!p2q_irdy), wird die anfordernde Vorrichtung erneut versucht, da der letzte Teil an Daten genommen worden ist. Die Zustand-Maschine tritt dann erneut in den IDLE Zustand 2720 ein. Ansonsten verbleibt die Slave-Zustand-Maschine in dem HIT_DCQ_FINAL Zustand 2732.
  • Wie die 87 zeigt, ist der Kabel-Nachrichten-Generator eine Zustand-Maschine, die Kabel-Nachrichten von Transaktions-Informationen erzeugt, erhalten von der Master- und der Slave-Zustand-Maschine. Zusätzlich zu einem IDLE Zustand 2740 umfasst der Nachrichten-Generator auch einen Dual-Adressen-Zyklus-(CABLE_DAC) Zustand 2742, einen Master-Daten-Phasen-(MASTER_DPHASE) Zustand 2744 und einen Slave-Daten-Phasen-(SLAVE_DPHASE) Zustand 2746. Die folgende Tabelle stellt die Ereignisse dar, die Zustand-Übergänge in dem Kabel-Nachrichten-Generator zu erzeugen.
  • Figure 00810001
  • Kabel-Nachrichten-Generator-Zustand-Übergänge
  • Bei einem Reset tritt der Kabel-Nachrichten-Generator in den IDLE Zustand 2740 ein, in dem er auf Transaktions-Informationen wartet, damit sie von der Master- oder Slave-Zustand-Maschine ankommen. Von dem IDLE Zustand 2740 entspricht, falls der Kabel-Nachrichten-Generator ein Prefetch-Mehrfach-Signal (dcq_prefetch_mul) oder ein Prefetch-Leitungs-Signal (dcq_prefetch_line) empfängt, das Kabel-Adressen-Signal (early_cad[31:2]) dem Prefetch-Adressen-Signal (dcq_prefetch_addr[31:2]). Ansonsten nimmt das early_cad[31:2] Signal den Wert des QPIF-Adressen-Signals (q2pif_addr[31:2]) an. Wenn die Kabel-Nachricht durch die Master-Zustand-Maschine initiiert wird, ist die Nachricht eine verzögerte Abschluss-Nachricht, so dass der Befehl-Code (early_ccbe[3:0]) „1001" entspricht. Wenn die Kabel-Nachricht durch die Slave-Zustand-Maschine initiiert wird, nimmt der Befehl-Code den Wert des message_cmd[3:0] Signals an, wie dies vorstehend diskutiert ist.
  • Falls das send_message Signal aufgestellt ist, anzeigend, dass entweder die Master-Zustand-Maschine oder die Slave-Zustand-Maschine eine Nachricht initiiert hat, und die entsprechende Transaktion nicht ein Dual-Adressen-Zyklus ist, oder falls der Kabel-Nachrichten-Generator eine Prefetch-Anforderung empfängt, die nicht ein Dual-Adressen-Zyklus ist, oder falls der Kabel-Nachrichten-Generator ein Datenfolgen-Verbindungs-Signal empfängt und keine verzögerten Anforderungen von der CPU in der ausgangsseitigen DRQ anhängig sind, stellt der Kabel-Nachrichten-Generator ein sent_pmw Signal auf, das anzeigt, dass eine gepostete Speicher-Schreib-Anforderung von dem PCI-Bus entlang des Kabels geschickt werden wird. Das sent_pmw Signal wird nicht aufgestellt, falls eine Datenfolge durch die DCQ eingerichtet worden ist. Der Kabel-Nachrichten-Generator stellt ein sent_dr Signal auf, wenn eine Lese-Anforderung oder eine verzögerte Schreib-Anforderung von der Slave-Zustand-Maschine empfangen ist oder ein Prefetch-Signal emfpangen ist, und wenn eine Datenfolge nicht durch die DCQ eingerichtet worden ist.
  • Falls die DCQ eine Datenfolge eingerichtet hat (dcq_stream_connect ist aufgestellt), nimmt die Pufferzahl für das Kabel-Signal (early_cbuff[2:0]) den Wert des DCQ-Datenfolge-Puffers an (dcq_stream_buff[2:0]), der Kabel-Befehl-Code (early_ccbe[3:0]) wird gleich zu „1000" eingestellt, und der Kabel-Nachrichten-Generator tritt in den SLAVE_DPHASE Zustand 2746 ein. Ansonsten nimmt, falls sich die QPIF in dem Slave-Mode befindet und der Kabel-Nachrichten-Generator entweder ein Prefetch-Mehrfach- oder ein Prefetch-Leitungs-Signal empfängt, das Kabel-Puffer-Signal den Wert der DCQ-Puffer-Zahl an (dcq_buff[2:0]) und der Kabel-Nachrichten-Generator tritt in den SLAVE_DPHASE Zustand 2746 ein. Ansonsten arbeitet die QPIF in dem Master-Mode und der Kabel-Nachrichten-Generator tritt in den MASTER_DPHASE Zustand 2744 ein.
  • Wenn der Kabel-Nachrichten-Generator das send_message Signal und eine Transaktion, die ein Dual-Adressen-Zyklus ist, empfängt, oder wenn er eine Prefetch-Anforderung empfängt, die ein Dual-Adressen-Zyklus ist, tritt der Nachrichten-Generator in den CABLE_DAC Zustand 2742 ein. Für ein Prefetch-Signal wird das Kabel-Adressen-Signal gleich zu den oberen zweiunddreißig Bits des dcq_prefetch_addr[63:0] Signals eingestellt; ansonsten entspricht die Kabel-Adresse den oberen zweiunddreißig Bits des q2pif_addr[63:0] Signals. Auch entspricht, falls der Kabel-Nachrichten-Generator die Transaktion von der Slave-Zustand-Maschine empfängt, die Kabel-Puffer-Zahl der DCQ- Puffer-Zahl; ansonsten entspricht die Kabel-Puffer-Zahl der DRQ-Puffer-Zahl (keine Abschluss-Nachrichten werden für gepostete Speicher-Schreib-Transaktionen erzeugt).
  • In dem CABLE_DAC Zustand 2742 erzeugt der Kabel-Nachrichten-Decodierer die zweite Hälfte der Adressen-Phasen-Informationen. Wie in dem IDLE Zustand 2740 nimmt das Kabel-Adressen-Signal den Wert der Prefetch-Adresse an, wenn die empfangene Transaktion eine Prefetch-Leitungs- oder Prefetch-Mehrfach-Anforderung ist, und nimmt den Wert von q2pif_addr[31:2] ansonsten an. Das sent_pmw Signal wird dann aufgestellt, wenn der Nachrichten-Generator eine gepostete Speicher-Schreib-Transaktion von der Slave-Zustand-Maschine empfängt, und das sent_dr Signal wird dann aufgestellt, wenn sie eine Prefetch-Anforderung oder eine verzögerte Anforderung von der Slave-Zustand-Maschine empfängt. Falls eine Prefetch-Anforderung oder eine Anforderung von der Slave-Zustand-Maschine empfangen wird, tritt der Kabel-Nachrichten-Generator in den SLAVE_DPHASE Zustand 2746 ein. Ansonsten tritt der Nachrichten-Generator in den MASTER_DPHASE Zustand 2744 ein.
  • In dem MASTER_DPHASE Zustand 2744 versucht der Kabel-Nachrichten-Generator, eine verzögerte Abschluss-Nachricht entlang des Kabels zu schicken. Allerdings muss, falls die PCI-Schnittstelle den Bus zu einer Vorrichtung auf dem PCI-Bus erteilt, bevor die QPIF eine Kontrolle des Busses erhält, der Kabel-Nachrichten-Generator den MASTER_DPHASE Zustand 2744 verlassen, um die neu empfangene Nachricht zu schicken. Deshalb wird, falls das send_message Signal aufgestellt ist, während sich der Nachrichten-Generator in dem MASTER_DPHASE Zustand 2744 befindet, das q2c_new_req Signal aufgestellt, um den Start einer neuen Nachricht anzuzeigen. Falls das q2pif_dac_flag aufgestellt ist, ist die neue Transaktion ein Dual-Adressen-Zyklus und der Kabel-Nachrichten-Generator tritt in den CABLE_DAC Zustand 2742 ein. Ansonsten tritt der Nachrichten-Generator in den SLAVE_DPHASE Zustand 2746 ein.
  • Falls das send_message Signal nicht aufgestellt ist, schickt der Kabel-Nachrichten-Generator eine verzögerte Abschluss-Nachricht von der Master-Zustand-Maschine aus. Wenn die Master-Zustand-Maschine die letzte Daten-Übertragung mit dem PCI-Bus abgeschlossen hat und die Target-Vorrichtung die Übertragung bestätigt hat (!p2q_trdy), oder wenn der Master die Transaktion auf dem Kabel ausgesondert hat, stellt der Kabel-Nachrichten-Generator ein sent_dc Signal auf, das anzeigt, dass die verzögerte Abschluss-Nachricht entlang des Kabels geschickt worden ist, und tritt erneut in den IDLE Zustand 2740 ein. Ansonsten verbleibt der Nachrichten-Generator in dem MASTER_DPHASE Zustand 2744 und fährt fort, die verzögerte Abschluss-Nachricht zu erzeugen.
  • Von dem SLAVE_DPHASE Zustand 2746 sind, solange wie eine Datenfolge mit dem eingangsseitigen Chip eingerichtet wird, keine verzögerten Anforderungen von der CPU in der ausgangsseitigen DRQ anhängig, und die anfordernde Vorrichtung fährt fort, Daten zu der QPIF zu schicken (q2p_qcyc ist aufgestellt), der Kabel-Nachrichten-Generator verbleibt in dem SLAVE_DPHASE Zustand 2746 und fährt fort, die Transaktion von der anfordernden Vorrichtung weiterzuführen. Ansonsten führt, falls der Kabel-Nachrichten-Generator eine verzögerte Anforderung oder eine Prefetch-Anforderung empfängt, der Kabel-Nachrichten-Generator die Anforderung weiter, und, in dem Fall einer verzögerten Schreib-Anforderung, das eine dword an Daten zu der eingangsseitigen Vorrichtung weiter, und tritt dann in den IDLE Zustand 2740 ein. Ansonsten hat der Kabel-Nachrichten-Generator eine gepostete Speicher-Schreib-Anforderung empfangen. In dieser Situation verbleibt der Kabel-Nachrichten-Generator in dem SLAVE_DPHASE Zustand 2746 und fährt fort, die geposteten Speicher-Schreib-Informationen entlang des Kabels weiterzuführen, bis das early_last_slave_data Signal aufgestellt ist, was anzeigt, dass der letzte Teil an Daten durch die Slave-Zustand-Maschine geschickt worden ist. Der Nachrichten-Generator beendet dann die Kabel-Transaktion und tritt erneut in den IDLE Zustand 2740 ein.
  • KABEL-SCHNITTSTELLE
  • Um die gültige Übertragung von Daten zwischen den zwei Brücken-Chips sicherzustellen, müssen Daten, geschickt über das Kabel 28, geeignet zu den Takten von den Takt-Generatoren 102 und 122 synchronisiert werden. Der ausgangsseitige Takt-Generator 122 legt seine Takte basierend auf einem eingangsseitigen Takt (der wiederum auf dem PCI-Bus-Takt PCICLK1 basiert) fest, übertragen entlang des Kabels 28 mit den Daten. Als Folge werden eingangsseitige Daten, übertragen zur Ausgangsseite hin, zu den Takten synchronisiert, erzeugt in dem ausgangsseitigen Brücken-Chip 48. Allerdings ist die Phasen-Verzögerung, zugeordnet zu dem Kabel 28, zwischen den Haupt-Takten, erzeugt in dem eingangsseitigen Chip 26, und die Daten, übertragen zurück eingangsseitig von dem ausgangsseitigen Chip 48, unbekannt. Die Länge des Kabels 28 reicht von 10 bis zu 100 Fuß (falls eine geeignet Schnittstellen-Technologie verwendet wird). Die emp fangende Logik in der eingangsseitigen Kabel-Schnittstelle 104 ist effektiv eine asynchrone Grenze in Bezug auf den eingangsseitigen Takt. Demzufolge muss die empfangende Logik die eingangsseitigen-zu-ausgangsseitigen Daten zu dem Takt von dem eingangsseitigen Takt-Generator 102 erneut synchronisieren.
  • In 5 nun ist das Takt-Verteilungs-Schema in dem 2-Chip in der 2-Chip-PCI-PCI-Brücke dargestellt. Transaktionen, die nach vorne zwischen den Brücken-Chips 46 und 48 geführt werden, werden zu mehrfachen, zeit-multiplexierten Nachrichten codiert. Das Format der Nachrichten ist ähnlich zu dem PCI-Transaktions-Format (mit der Ausnahme eines Zeit-Multiplexing) und umfasst eine Adresse und eine oder mehrere Daten-Phasen und modifizierte Handshake-Signale zusätzlich zu den Signalen, die hinzugefügt sind, um eine Puffer-Zahl und spezielle Brücken-Funktions-Befehle anzuzeigen. Jede Kabel-Schnittstelle 104 oder 130 umfasst eine Master-Kabel-Schnittstelle (192 oder 194) und eine Slave-Kabel-Schnittstelle (196 oder 198). Die Master-Kabel-Schnittstelle 192 oder 194 überträgt Nachrichten weiter zu dem Kabel 28 und die Slave-Kabel-Schnittstelle 196 oder 198 empfängt Nachrichten von dem Kabel 28.
  • Der Takt-Generator 102 oder 122 in jedem Brücken-Chip umfasst zwei sich auf dem Chip befindliche PLLs für eine Takt-Erzeugung. Eine PLL 184 in dem eingangsseitigen Brücken-Chip 26 verriegelt sich auf dem Primär-PCI-Bus-Eingangs-Takt PCICLK1. In dem ausgangsseitigen Brücken-Chip 48 verriegelt sich die PLL 180 auf einem ankommenden Takt PCICLK2 von einem Takt-Puffer 181.
  • In der nachfolgenden Beschreibung bezieht sich ein „1 × Takt" auf einen Takt, der dieselbe Frequenz wie der Takt PCICLK1 besitzt, während sich ein „3 × Takt" auf einen Takt bezieht, der dreimal die Frequenz des Takts PCICLK1 besitzt. Ein 1 × Takt PCLK, erzeugt durch die PLL 184 oder 180 (in dem Brücken-Chip 26 oder 48 jeweils), wird für die PCI-Bus-Schnittstellen-Logik 188 oder 190 für den Brücken-Chip verwendet, und der 3 × Takt PCLK3 wird dazu verwendet, die Kabel-Nachrichten-Erzeugungs-Logik in der Master Kabel-Schnittstelle 192 oder 194 laufen zu lassen. Die andere PLL 186 oder 182 wird dazu verwendet, sich auf einen Kabel-Eingangs-Takt CABLE_CLK1 (von Eingangsseite) oder einen CABLE_CLK2 (von Ausgangsseite) zu verriegeln, und um einen 1 × Takt CCLK und einen 3 × Takt CCLK3 zu erzeugen, um ankommende Kabel-Daten zu erfassen. Die Taktausgänge der PLL 186 und 182 werden zu der Slave-Kabel-Schnittstelle 196 und 198 jeweils weitergeführt.
  • Die PLLs sind in dem Layout so angeordnet, um die 1 × und 3 × Takte so nahe wie möglich auszubalancieren, um die Verschiebung dazwischen zu minimieren.
  • Die PLL 184 oder 180 erzeugt ein Phasen-Indikator-Signal PCLKPHI1, das der Master-Kabel-Schnittstelle 192 oder 194 anzeigt, wenn die erste Phase von Daten zu dem Kabel 28 vorhanden sein sollte. Auf der Eingangsseite ist das Signal PCLKPHI1 auf dem PCI-Takt PCICLK1 basierend; auf der Ausgangsseite ist das Signal PCLKPHI1 auf dem PCI-Takt PCICLK2 basierend. Die PLL 186 oder 182 erzeugt ein Phasen-Indikator-Signal CCLKPHI1, basierend auf dem Kabel-Takt CABLE_CLK1 oder CABLE_CLK2, um zu der Slave-Kabel-Schnittstelle 196 oder 198 anzuzeigen, wenn die erste Phase von Daten entlang des Kabels 28 angekommen ist. Der PCI-Takt PCICLK2 für den sekundären PCI-Bus 32 wird außerhalb eines 1 × Takts BUFCLK der PLL 182 in dem ausgangsseitigen Brücken-Chip 48 erzeugt. Der Takt BUFCLK steuert den Takt-Puffer 181 über einen Treiber 179 an. Der Puffer 181 gibt ein separates Taktsignal für jeden der sechs Schlitze auf dem sekundären PCI-Bus 32 ebenso wie den Takt PCICLK2 aus, was zurück zu dem Bus-Eingangs-Takt zu dem ausgangsseitigen Brücken-Chip 48 geführt wird. Indem der Takt PCLK auf dem Takt PCICLK2 von dem Takt-Puffer 181 basierend ist, werden die Takt-Schemen der eingangsseitigen und ausgangsseitigen Chips so gestaltet, um ähnlicher zu erscheinen, da beide auf dem externen Bus-Takt basierend sind.
  • Der Kabel-Takt CABLE_CLK1 ist ein 33% Taktzyklus. Die PLL 182 wandelt erst den 33% Taktzyklus zu einem 50% Taktzyklus zur Ausgabe als BUFCLK um.
  • Die PCI-Spezifikation, Version 2.1, fordert, dass der PCI-Bus-Takt die folgenden Erfordernisse erfüllen muss: Takt-Zyklus-Zeit größer als oder gleich zu 30 ns; Takt-Hoch-Zeit größer als 11 ns; Takt-Niedrig-Zeit größer als oder gleich zu 11 ns und Taktanstiegsrate zwischen 1 und 4 ns.
  • Wenn das Computersystem hochgefahren wird, wird der eingangsseitige Chip zuletzt hochgefahren, die eingangsseitige PLL 184 schickt den Takt CABLE_CLK1 (über die Master-Schnittstelle 122) nach unten entlang des Kabels 28, das dann durch die ausgangsseitige PLL 182 und PLL 180 verriegelt wird. Die ausgangsseitige PLL 180 schickt dann den Takt CABLE_CLK2 zurück eingangsseitig, um durch die PLL 186 verriegelt zu werden. Das System ist nicht vollständig betriebsfähig, bis alle vier PLLs eine Verriegelung erhalten haben.
  • Falls der eingangsseitige Brücken-Chip 26 hochfährt und der ausgangsseitige Brücken-Chip 48 noch nicht eingeschaltet ist, verhält sich der eingangsseitige Brücken-Chip 26 als eine PCI-PCI-Brücke, wobei nichts mit dem ausgangsseitigen Bus (das Kabel 28) verbunden ist. Als Folge nimmt der eingangsseitige Brücken-Chip 26 nicht irgendwelche Zyklen an, bis der ausgangsseitige Brücken-Chip 48 hochgefahren bzw. eingeschaltet ist und die ausgangsseitige PLL 186 eine „Verriegelung" von dem Kabel-Takt CABLE_CLK2 erhalten hat.
  • Der eingangsseitige Brücken-Chip 26 floatiert alle seiner PCI-Ausgangs-Puffer und Zustand-Maschinen asynchron mit einem Aufstellen des PCI-Reset-Signals PCIRST1_ auf dem primären Bus 24. Während eines Resets kann die PLL 184 versuchen, eine Verriegelung auf dem PCI-Bus-Takt PCICLK1 zu erhalten. Da die PCI Spezifikation garantiert, dass das Signal PCIRST1_ aktiv für mindestens 100 μs verbleiben wird, nachdem der PCI-Bus-Takt stabil wird, hat die PLL 184 ungefähr 100 μs, um eine Verriegelung zu erhalten.
  • Der ausgangsseitige Brücken-Chip 48 setzt alle internen Zustand-Maschinen beim Erfassen des Signals PCIRST1_ für den primären Bus zurück. Daraufhin stellt der ausgangsseitige Brücken-Chip ein Schlitz-spezifisches Reset zu jedem Schlitz auf dem sekundären PCI-Bus 32 ebenso wie ein Reset-Signal PCIRST2_ für einen sekundären PCI-Bus auf.
  • Wie 6 zeigt, umfasst jede PLL einen spannungs-gesteuerten Oszillator (VCO) 200, der einen Ausgang 201 (den 3 × Takt) zwischen 75 Mhz (für einen 25-Mhz PCI-Bus) und 100 Mhz (für einen 33-Mhz PCI-Bus) erzeugt. Der VCO 200 empfängt einen Referenz-Takt 197, der der PCI-Bus-Takt ist. Jede PLL besitzt eine Verriegelungs-Erfassungs-Schaltung 205, die durch ein Verriegelungs-Indikations-Bit anzeigt, dass die PLL-Phase auf deren Referenz genau genug verriegelt ist, um deren vorgesehene Funktion durchzuführen.
  • Die Verriegelungs-Anzeige-Bits werden zu einem Status-Register in dem Konfigurations-Raum 105 oder 125 jedes Brücken-Chips geschrieben. Auf der Ausgangsseite wird ein power-good/lock-Status-Bit zu dem eingangsseitigen Brücken-Chip 26 übertragen, um anzuzeigen, dass die Hauptelemente des ausgangsseitigen Brücken-Chips 48 stabil sind (Energie ist stabil) und die ausgangsseitigen PLLs verriegelt sind (Verriegelungs-Anzeige-Bits der zwei PLLs sind aktiv). Das Verriegelungs-Anzeige-Bit wird auch tormäßig mit den EDC-Status-Bits gesteuert, so dass EDC-Fehler nicht als solche berichtet werden, bis die PLLs verriegelt sind. Demzufolge kann das Brücken-Chip-Paar zu einem fehlerfreien-Kommunikations-Zustand ohne eine Software-Intervention gelangen. Das Verriegelungs-Anzeige-Bit liefert auch bestimmte, diagnostische Informationen, die zwischen einem PLL-Verriegelungs-Fehler und anderen Daten-Fehlern unterscheiden können. Die Takt-Erzeugungs-Schaltung umfasst eine Vier-Zustand-Maschine 202, um einen durch 3 geteilten Takt (1 × Takt) des VCO Ausgangs 201 zu erzeugen. Der 1 × Takt wird zurück zu der PLL an dem Eingang 203 geführt.
  • Daten werden entlang des Kabels 28 unter einer 3 × Takt (PCLK3) Rate in drei Zeit-multiplexierten Phasen geführt, um eine 1 × Takt Nachrichten-Übertragungs-Rate zu erzeugen. Wie 7 zeigt, umfasst die Schaltung in der Master-Kabel-Schnittstelle 192 oder 194 zum Zerlegen und Übertragen der Kabel-Nachricht ein Register 204, das die abgehende Nachricht unter einer lokalen PCLK-Grenze abtastet. Das Flip-Flop 208 liefert eine zusätzliche Zone für eine Halte-Zeit in der dritten Phase der übertragenden Nachricht durch Halten dieser Phase für eine zusätzliche Hälfte eines PCLK. Da das Ausgangs-Register 212 mit dem 3 × Takt PCLK3 getaktet ist, verringert dies das Erfordernis für eine enge Kontrolle in Bezug auf den Versatz zwischen den 1 × und 3 × Takten. Von dem Phasen-Indikations-Signal PCLKPHI1 erzeugt ein Satz von drei Flips-Flops 210 aufeinanderfolgende PHI1, PHI2 und PHI3 Signale, die Phasen 1, 2 und 3 jeweils darstellen, was wiederum einen 60:20 Multiplexer 206 steuert. Die drei Phasen von Daten (LMUXMSG[19:0], LMUXMSG[39:20], {LMUXMSG[51:40], EDC[7:0]}) werden aufeinanderfolgend in das Register 212 multiplexiert und über das Kabel 28 angesteuert. Die dritte Phase an Daten umfasst Fehler-Korrektur-Bits EDC[7:0], erzeugt durch einen ECC-Generator 206 (17), von den Ausgangs-Bits LMUXMSG[51:0] des Registers 204. Das Flip-Flop 214, getaktet durch PCLK3, empfängt das PHI1 Signal und taktet es als den Kabel-Takt CABLE_CLK1 oder CABLE_CLK2 heraus.
  • Da die Master-Kabel-Schnittstelle 192 oder 194 eine 1×-zu-3× Kommunikations-Schnittstelle ist, wird eine EIN-3×-Takt-Latenz hervorgerufen, die zu einer einzelnen 3 × Takt-Phasen-Verschiebung der übertragenden Kabel-Nachricht von dem PCI-Bus-Takt führt, wie dies in 8 dargestellt ist. In der Periode T0 wird eine Nachricht A dem Eingang des Registers 204 präsentiert und der erste Phasen-Takt-Indikator PCLKPHI1 wird auf hoch gesetzt. Das Signal PHI1 wird auf hoch von einem vorherigen Zyklus gesetzt. In der Periode P1 wird der Kabel-Takt CABLE_CLK1 oder CABLE_CLK2 auf hoch in Abhän gigkeit des Signals PHI1, das zu hoch übergeht, angesteuert. Der PCLKPHI1 Impuls bewirkt, dass das Signal PHI2 auf hoch in der Periode T1 gepulst wird. Als nächstes wird, in der Periode T2, das Signal PHI3 in Abhängigkeit des Signals PHI2 gepulst. In der Periode T3 wird das Signal PHI1 auf hoch in Abhängigkeit des Signals PHI3, das hoch ist, gepulst. Eine Nachricht A wird auch in das Register 204 an der ansteigenden Flanke des Takts PCLK in der Periode T3 eingeladen. Als nächstes bewirkt, in der Periode T4, das Signal PHI1, dass der Multiplexer 206 die ersten Phasen-Daten A1 zum Einladen in das Register 212 auswählt. Als nächstes werden, in der Periode T5, die zweiten Phasen-Daten A2 ausgewählt und in das Register 212 eingeladen. Dann werden, in der Periode T6, die dritten Phasen-Daten A3 in das Register 212 eingeladen. Dieser Prozess wird für die Nachrichten B, C, D und E in den darauffolgenden Takt-Perioden wiederholt.
  • Wie in 8 dargestellt ist, besitzt der Kabel-Takt CABLE_CLK einen 33% Taktzyklus. Alternativ kann der Kabel-Takt CABLE_CLK so ausgelegt werden, um einen durchschnittlichen Taktzyklus von 50% zu haben, was, zum Beispiel, durch Abschicken des Kabel-Taktes als 33% hoch – 66% niedrig – 66% hoch – 33% niedrig vorgenommen werden kann. In dem man einen durchschnittlichen 50% Taktzyklus hat, könnte dies zu besseren Durchgangscharakteristika in dem Kabel 28 führen.
  • Wie 9 zeigt, stellt ein Slave-Kabel-Schnittstellen-First-in-First-out-Puffer (FIFO) 216 ankommenden Daten von dem Kabel 28 zusammen und überträgt die zusammengestellten Daten zu den Warteschlangen und den PCI Zustand-Maschinen in dem empfangenden Brücken-Chip. Der FIFO 216 ist 4 Eintritte tief, wobei jeder Eintritt in der Lage ist, eine vollständige Kabel-Nachricht zu halten. Die Tiefe des FIFO 216 ermöglicht, dass Kabel-Daten zu dem Takt des lokalen Brücken-Chips ohne Verlieren irgendeiner effektiven Bandbreite in der Kabel-Schnittstelle synchronisiert werden können. Zusätzlich ist, auf der Eingangsseite, der FIFO 216 eine asynchrone Grenze für die Kabel-Daten, die von dem ausgangsseitigen Brücken-Chip 48 ankommen. Der FIFO 216 stellt sicher, dass die Kabel-Daten geeignet in Bezug auf PCLK synchronisiert sind, bevor sie zu dem Rest des Chips ausgegeben werden.
  • Die Eintritte des FIFO 216 werden durch einen Eingangs-Hinweiszeiger INPTR[1:0] von einem Eingangs-Hinweiszeiger-Zähler 226 ausgewählt, der durch das Signal CCLK3 getaktet wird, gelöscht wird, wenn ein Signal EN_INCENT niedrig ist, und durch den Phasen-Indikator CCLKPHI1 freigegeben wird. Die negative Flanke des 3 × Takts CCLK3 von der PLL 186 oder 182 wird dazu verwendet, ankommende Daten von dem Kabel 28 zu verriegeln, zuerst in ein 20-Bit Register 218 hinein und dann in ein Register 220 hinein, falls ein Phasen-Ein-Indikations-Signal PHI1_DLY aufgestellt ist, oder in ein Register 222 hinein, falls ein Phasen-2-Indikationssignal PHI2_DLY aufgestellt ist. Die Phase-1-Daten, die Phase-2-Daten und die Phase-3-Daten von den Registern 220, 222 und 218 jeweils werden in den ausgewählten Eingang des FIFO 216 an der negativen Flanke von CCLK3 ausgewählt, wenn das Phasen-3-Indikations-Signal PHI3_DLY aufgestellt ist. Die vier Sätze von Ausgängen von dem FIFO 216 werden durch einen 240:60 Multiplexer 228 empfangen, der durch einen Ausgangs-Hinweiszeiger OUTPTR[1:0] von einem Ausgangs-Hinweiszeiger-Zähler 224, getaktet durch PCLK und gelöscht dann, wenn ein Signal EN_OUTCNT niedrig ist, ausgewählt wird.
  • Wie die 10 zeigt, laufen die Eingangs-Hinweiszeiger- und Ausgangs-Hinweiszeiger-Zähler 226 und 224 kontinuierlich durch den FIFO 216, was Daten füllt und leert. Die Zähler 226 und 224 sind in einer solchen Art und Weise versetzt, um gültige Daten in einer Stelle zu garantieren, bevor sie ausgelesen werden. Die Initialisierung der Hinweiszeiger ist unterschiedlich für einen eingangsseitigen Brücken-Chip 26 gegenüber einem ausgangsseitigen Brücken-Chip 48, aufgrund von Synchronisierungsunsicherheiten.
  • Flip-Flops 236 und 238 synchronisieren das Reset-Signal C_CRESET, das synchron zu den Takten in dem Brücken-Chip ist, zu der CLK-Takt-Grenze. Das Signal EN_INCNT wird durch das Flip-Flop 238 erzeugt. Der Eingangs-Hinweiszeiger wird an der ansteigenden Flanke des Takts CCLK3 erhöht, wenn das erste Phasen-Indikations-Signal CCLKPHI1 und das Signal EN_INCNT vorliegen. Der Ausgangs-Hinweiszeiger wird dann an einer späteren, lokalen PCLK-Takt-Grenze PCLK gestartet, wenn garantiert werden kann, dass die Daten in dem FIFO 216 gültig sein werden. Der eingangsseitige und der ausgangsseitige Brücken-Chip müssen das Starten des Ausgangs-Hinweiszeigers unterschiedlich handhaben, da die Phasen-Beziehung des Kabel-Taktes zu dem lokalen Takt nicht für den eingangsseitigen Brücken-Chip 26 bekannt ist, sondern für den ausgangsseitigen Brücken-Chip 48 bekannt ist.
  • In dem ausgangsseitigen Brücken-Chip 48 ist die Phasen-Beziehung zwischen dem ankommenden Kabel-Takt CABLE_CLK1 und dem sekundären PCI-Bus-Takt PCICLK2 bekannt, da der PCI-Takt PCICLK2 von dem Kabeltakt erzeugt wird. Als Folge existiert keine Synchronisations-Strafe für den Ausgangs-Hinweiszeiger OUTPTR[1:0] in dem ausgangsseitigen Brücken-Chip 48, und der Ausgangs-Hinweiszeiger kann den Eingangs-Hinweiszeiger INPTR[1:0] so nahe wie möglich nachführen. Ein Flip-Flop 230, das an der negativen Flanke des Takts PCLK getaktet wird, wird dazu verwendet, irgendwelche Taktverschiebungsprobleme zwischen dem Takt CCLK, erzeugt durch die PLL 182, und dem Takt PCLK, erzeugt durch die PLL 180, zu vermeiden. Obwohl diese zwei Takte identische Frequenzen haben und in Phase miteinander sein sollten, ist dabei eine unbekannte Verschiebung zwischen den zwei Takten vorhanden, da sie von zwei unterschiedlichen PLLs erzeugt werden. Auf der Ausgangsseite ist das Signal EN_OUTCNT das Signal EN_INCNT, verriegelt auf der negativen Flanke des Signals PCLK durch das Flip-Flop 230. Ein Multiplexer 234 wählt den Ausgang des Flip-Flops 230 aus, da das Signal UPSTREAM_CHIP niedrig ist.
  • In dem eingangsseitigen Brücken-Chip 26 wird die Kabel-Schnittstelle bzw. das Kabel-Interface als vollständig asynchron behandelt. Die Phasen-Unsicherheit erfolgt aufgrund der unbekannten Phasenverschiebung des Kabels 28 selbst. Das Auslegen in Bezug auf diese Unsicherheit führt zu einer vollständigen Freiheit in Bezug auf die Länge des Kabels 28. Dasjenige, was bekannt ist, ist das, dass die Takte in den eingangsseitigen und ausgangsseitigen Brücken-Chips dieselbe Frequenz haben, da sie beide deren Ursprung in dem eingangsseitigen PCI-Bus-Takt PCICLK1 haben. In dem eingangsseitigen Brücken-Chip 26 ist das Signal EN_OUTCNT das Signal EN_INCNT verriegelt auf der positiven Flanke des Takts PCLK durch ein Flip-Flop 232. Der Multiplexer 234 wählt den Ausgang des Flip-Flops 232 aus, da das Signal UPSTREAM_CHIP hoch ist. Das Flip-Flop 232 garantiert, dass gerade für das „Lineup" im schlechtesten Fall des Kabel-Taktes CABLE_CLK2 und des lokalen PCI-Taktes PCLK (eine vollständige PCLK Periode-Phasen-Verschiebung) gültige Daten in dem FIFO 216 vorhanden sind, bevor die Daten zu dem Rest des Chips übertragen werden.
  • Wie 11 zeigt, werden die Kabel-Daten durch die Slave-Kabel-Schnittstelle 196 oder 198 als Drei-Phasen-, in der Zeit multiplexierte, Signale A1, A2 und A3; B1, B2 und B3; C1, C2 und C3; usw., empfangen. Eine vorherige Transaktion wird in den Perioden T0, T1 und T2 abgeschlossen. Beginnend in der Periode T3 werden die ersten Phasen-Daten A1 dem Register 218 präsentiert und der erste Phasen-Indikator CCLKPHI1 wird auf hoch gepulst. An der abfallenden Flanke von CCLK3 in der Periode T3 werden die Daten A1 in das Register 218 eingeladen und das Indikations-Signal PHI_DLY der lokalen Phase 1 wird auf hoch gepulst. In der Periode T4 werden, an der abfallenden Flanke des Takts, die Daten A1 der Phase 1 in das Register 220 eingeladen, die Daten A2 der Phase 2 werden in das Register 218 eingeladen und das Indikations-Signals PHI2_DLY der Phase 2 wird auf hoch gepulst. In der Periode T5 werden, an der abfallenden Flanke von CCLK3, die Daten der Phase 2 in das Register 222 eingeladen, die Daten A3 der Phase 3 werden in das Register 218 eingeladen und das Indikations-Signal PHI3_DLY der Phase 3 wird auf hoch gepulst. In der Periode T6 werden die Inhalte der Register 220, 222 und 218 in den ausgewählten Eingang des FIFO 216 an der folgenden Flanke CCLK3 eingeladen. Auch werden in der Periode T6 die Daten B1 dem Register 218 zusammen mit dem Indikations-Signal CCLKPHI1 präsentiert. Nachrichten B und C werden in das FIFO 216 in derselben Art und Weise wie eine Nachricht A in darauffolgenden Perioden eingeladen.
  • Wie 12 zeigt, beginnt der Eingangs-Hinweiszeiger INPTR[1:0] bei dem Wert 0 in der Periode T0 an der ansteigenden Flanke des Takts CCLK3. Auch wird, in einer Periode T0, eine Nachricht A in das FIFO0 an der abfallenden Flanke des Takts CCLK3 eingeladen. In dem ausgangsseitigen Brücken-Chip 48 wird der Ausgangs-Hinweiszeiger OUTPTR[1:0] auf den Wert 0 an der nächsten, ansteigenden Flanke des Takts PCLK in der Periode T3 erhöht. Auch wird, in der Periode T3, der Eingangs-Hinweiszeiger INPTR[1:0] auf den Wert 1 an der ansteigenden Flanke des Takts CCLK3 erhöht, und die Nachricht B wird in den FIFO1 an der abfallenden Flanke von CCLK3 eingeladen. Kabel-Daten werden demzufolge in FIFO0, FIFO1, FIFO2 und FIFO3 in einer zirkularen Weise eingeladen.
  • Auf der Ausgangsseite wird, falls der Eingangs-Hinweiszeiger INPTR[1:0] in der Zeitperiode T0 den Wert 0 hat, der Ausgangs-Hinweiszeiger OUTPTR[1:0] auf den Wert 0 in der Periode T6 erhöht, zwei PCLK Perioden nach dem Eingangs-Hinweiszeiger INPTR[1:0]. Die zwei PCLK Perioden-Verzögerungen in dem ausgangsseitigen Brücken-Chip 26 ermöglicht, dass die Phasenverschiebung in dem Kabel 28 irgendein Wert ist, was den Vorteil hat, dass die Kabellänge nicht von einem spezifischen, festgelegten Wert sein muss.
  • Wie 13 zeigt, werden die Eingangs- und Ausgangs-Flips-Flops an der Kabel-Schnittstelle kundenseitig durch den Hersteller der Chips platziert, um die Verschiebung zwischen den Kabeldaten und dem Takt, der dadurch hindurchgeführt wird, zu minimieren.
  • Die Menge an Draht zwischen jedem Flip-Flop und der I/O wird als so konsistent wie möglich zwischen allen Kabel-Schnittstellen-Signalen beibehalten.
  • KABEL-NACHRICHT
  • Sechzig Bits an Kabel-Daten bilden eine Nachricht. Die 60 Bits werden auf 20 Kabel-Zeilen multiplexiert und werden alle 10 ns über das Kabel 28 übertragen. Die Tabelle in 14 stellt die Bits dar und die Phase jedes Bits ist zugeordnet. Die ersten drei Spalten stellen das eingangsseitige-zu-ausgangsseitige Daten-Format dar, und die letzten drei Spalten stellen das ausgangsseitig-zu-eingangsseitig Daten-Übertragungs-Format dar. Das Folgende ist eine Beschreibung der Signale.
  • EDC[7:0]: Die Signale sind die acht Syndrom-Bits, verwendet dazu, Fehler zu erfassen und zu korrigieren, die beim Übertragen von Daten über das Kabel 28 vorgefunden werden.
  • CAD[31:0]: Die Signale sind die 32 Adressen- oder Daten-Bits.
  • CFRAME_: Das Signal wird dazu verwendet, den Beginn und das Ende einer Kabel-Transaktion zu signalisieren, ähnlich zu dem PCI FRAME_ Signal.
  • CCBE[3:0]_: Die vier Bits bilden Byte-Freigaben in einigen PCI-Takt-Phasen und entweder einen PCI-Befehl oder einen Nachrichten-Code in anderen PCI-Takt-Phasen.
  • CBUFF[3:0]: In der Adressen-Phase zeigen die Signale eine Puffer-Zahl zum Initialisieren der verzögerten Abschluss-Warteschlange (DCQ) des Brücken-Chips, 148, an, um einen eingangsseitigen und ausgangsseitigen, verzögerten Lese-Abschluss (Delayed Read Completion – DRC) und eine verzögerte Lese-Anforderung (Delayed Read Request – DRR) Transaktionen festzulegen. Nach der Adressen-Phase enthalten die Signale das Paritäts-Bit, eine Paritäts-Fehler-Indikation und das Daten-Bereitschafts-Signal.
  • COMPLETION REMOVED: Das Bit wird dazu verwendet, zu signalisieren, dass ein verzögerter Abschluss von der Transaktions-Reihenfolge-Warteschlange (Transaction Ordereing Queue – TOC) auf der anderen Seite des Kabels 28 entfernt worden ist.
  • PMW ACKNOWLEDGE: Das Bit wird dazu verwendet, zu signalisieren, dass ein gepostetes Speicher-Schreiben (PMW) auf der anderen Seite abgeschlossen worden ist und von der Transaktions-Lauf-Warteschlange (Transaction Run Queue – TRQ) entfernt worden ist.
  • LOCK_: Das Bit wird zum Ausgang (allerdings nicht zum Eingang) hin übertragen, um verriegelte Zyklen zu identifizieren.
  • SERR_: Das Bit wird dazu verwendet, eine SERR_ Indikation zur Eingangsseite hin zu übertragen, wird allerdings nicht zur Ausgangsseite hin übertragen.
  • INTSYNC und INTDATA: Die Bits führen die acht Unterbrechungen von der Ausgangsseite zu der Eingangsseite in einem seriell multiplexierten Format. Das Signal INTSYNC ist das Synchronisations-Signal, das den Start f0 der Unterbrechungs-Sequenz anzeigt, und das Signal INTDATA ist das serielle Daten-Bit. Die Signale INTSYNC und INTDATA werden auf separaten Leitungen (Lines) über das Kabel 28 geführt.
  • RESET SECONDARY BUS: Das Bit wird dann aufgestellt, wenn die CPU 14 zu dem sekundären Reset-Bit in einem Brücken-Steuer-Register in dem eingangsseitigen Brücken-Chip 26 schreibt. Es bewirkt, dass sich der ausgangsseitige Brücken-Chip 48 auf einen Power-Up Zustand zurücksetzt. Die Reset Signale für die Schlitze werden auch aufgestellt. Das Signal RESET für den sekundären Bus wird auf einer separaten Leitung über das Kabel 28 weitergeführt.
  • Da die Adresse und die Daten in jeder PCI Transaktion über dieselben Leitungen multiplexiert werden, umfasst jede PCI-Transaktion eine Adressen-Phase und mindestens eine Daten-Phase (mehr als eine für Burst-Transaktion). Die PCI-Spezifikation unterstützt auch Einzel-Adressen-Transaktionen (ein 32-Bit Adressieren) und Dual-Adressen-Transaktionen (ein 64-Bit Adressieren).
  • In 15A stellt eine Tabelle dar, welche Informationen an jedem Bereich des Busses während Adressen und Daten-Phasen der Einzel-Adressen-Transaktionen erscheinen. Für eine Einzel-Adressen-Transaktion ist die erste Phase die Adressen-Phase und die zweite und die darauffolgenden Phasen sind Daten-Phasen. In der Adressen-Phase einer verzögerten Lese/Schreib-Anforderungs-Transaktion zeigen die Signale CBUFF[3:0] die DCQ-Puffer-Zahl zum Initialisieren des Brücken-Chips DCQ 148 an, um eingangsseitige und ausgangsseitige DRC- und DRR-Transaktionen festzulegen. Nach der Adressen-Phase enthält das Signal CBUFF[3:0] das Paritäts-Bit. Die Signale CCBE[3:0]_ enthalten den PCI-Befehl in der Adressen-Phase und die Byte-Freigabe-Bits in den Daten-Phasen.
  • Für gepostete Speicher-Schreib-Transaktionen sind die Signale CBUFF[3:0] „nicht sicher" in der Adressen-Phase und enthalten die Data-Ready-Indikation, die Parität-Fehler-Indikation und ein Parität-Bit in den Daten-Phasen.
  • In einer verzögerten Lese/Schreib-Abschluss-Transaktion enthalten die Signale CBUFF[3:0] die DCQ-Puffer-Zahlen in der Adressen-Phase und die End-Completion-Indikation, eine Daten-Ready-Indikation, eine Parität-Fehler-Indikation und ein Parität-Bit in den Daten-Phasen. Die Signale CCBE[3:0]_ enthalten einen Code, der eine DRC-Transaktion in der Adressenphase und die Status-Bits der DRC-Transaktion in den Daten-Phasen darstellen. Verzögerte Abschluss-Transaktionen führen den Status des Bestimmungs-Busses für jede Daten-Phase zurück. Das Daten-Parität-Bit wird auf CCBE[3]_ übertragen. Andere Status-Zustände werden auf den CCBE[2:0]_BUS codiert, wobei ein binärer Wert 000 einen normalen Abschluss anzeigt und ein binärer Wert 001 einen Target-Aussonderungs-Zustand anzeigt. Die Adressen/Daten-Bits CAD[31:0] sind „nicht sicher" in der Adressen-Phase und enthalten Daten während der Daten-Phasen.
  • In der Datenfolge-Verbindungs-Transaktion enthalten die Signale CBUFF[3:0] eine Puffer-Zahl in der Adressen-Phase und das Signal CBUFF[2] enthält die Daten-Ready-Indikation in den Daten-Phasen. Die Signale CCBE[3:0] enthalten einen Code, der eine Datenfolge-Verbindungs-Transaktion in der Adressen-Phase darstellt, und sind nicht in den Daten-Phasen „sicher". Die Adressen-Daten-Bits CAD[31:0] werden nicht während einer Datenfolge-Verbindungs-Transaktion verwendet.
  • Die Tabelle in 15B stellt das Codieren der Signale für Dual-Adressen-Transaktionen dar. In verzögerten Lese/Schreib-Anforderungs-Transaktionen enthalten die Signale CBUFF[3:0] eine Puffer-Zahl in der ersten und der zweiten Adressen-Phase und das Signal CBUFF[0] enthält das Paritäts-Bit in der Daten-Phase. Die Signale CCBE[3:0]_ enthalten einen Code, der einen Dual-Adressen-Zyklus in der ersten Adressen-Phase darstellt, den PCI-Befehl in der zweiten Phase und die Byte-Freigabe-Bits in der Daten-Phase. Die Signale CAD[31:0] enthalten die signifikantesten Adressen-Bits in der ersten Adressen-Phase, die am wenigsten signifikanten Adressen-Bits in der zweiten Adressen-Phase und die Daten-Bits in der Daten-Phase. In einer geposteten Dual-Adressen-Speicher-Schreib-Transaktion sind die Signale CBUFF[3:0] „nicht sicher" in den ersten zwei Adressen-Phasen, allerdings enthalten die Signale CBUFF[1:0] das Paritäts-Fehler-Indikations-Bit und das Paritäts-Bit in den Daten-Phasen. Die Signale CCBE[3:0]_ enthalten einen Code, der einen Dual-Adressen-Zyklus in der ersten Adressen-Phase darstellt, die PCI-Befehl-Bits in der zweiten Adressen-Phase und die Byte-Freigabe-Bits in den Daten-Phasen. Die Signale CAD[31:0] enthalten die signifikantesten Adressen-Bits in der ersten Adressen-Phase, die verbleibenden Adressen-Bits in der zweiten Adressen-Phase und die Daten-Bits in den Daten-Phasen.
  • Dabei sind drei mögliche Zustände für die Daten-Übertragung vorhanden: nicht-letzte (not-last), letzte einer Kabel-Übertragung (last-of-cable-transfer) und letzte von (last-of) Anforderung. Der nicht-letzte Zustand wird durch Aufstellen des Bits CBUFF[2] angezeigt, während FRAME_ aktiv ist, was anzeigt, dass ein anderes Wort von Daten vorhanden ist. Der last-of-cable Übertragungs-Zustand wird durch Aufstellen des Bits CBUFF[2] angezeigt, während das Signal CFRAME_ inaktiv ist. Der last-of-request Zustand wird durch Aufstellen der Bits CBUFF[3] und CBUFF[2] angezeigt, während das Signal CFRAME_ inaktiv ist.
  • Die folgenden vier IEEE 1149.1 Boundary-Scan (JTAG) Signale sind in dem Kabel 48 umfasst, um eine JTAG-Test-Kette zu bewirken: TCK (der Test-Takt), TDI (Test-Daten-Eingang), TDO (Test-Daten-Ausgang) und TMS (Test-Mode-Auswahl). Das optimale TRST_ wird nicht entlang des Kabels übertragen, allerdings kann TRST_ aus „power-good" erzeugt werden.
  • Die JTAG Signale werden von dem System-PCI-Verbinder über den eingangsseitigen Brücken-Chip 26, umfassend JTAG Master 110, entlang des Kabels 28 zu dem ausgangsseitigen Brücken-Chip 28 zu dem JTAG Master 128 übertragen, was die JTAG Signale zu jedem der sechs PCI-Schlitze auf dem sekundären PCI-Bus 32 verteilt. Der Rückführpfad reicht von dem JTAG Master 128 bis zum Kabel 28 zurück zu dem eingangsseitigen Brücken-Chip 26 und dann zu dem PCI-Schlitz auf dem primären PCI-Bus 24. Die Signale TDO, TCK und TMS sind ausgangsseitige Bound-Signale. Das Signal TDI ist ein eingangsseitiges Bound-Signal.
  • Ein Typ eines Kabels 28, das verwendet werden kann, ist ein zylindrisches 50-Paar abgeschirmtes Kabel, ausgelegt dazu, einen High Performance Parallel Interface (HIPPI) Standard zu unterstützen. Ein zweiter Typ eines Kabels ist ein abgeschirmtes fünf-Paar Band-Kabel. Die Vorteile des ersten sind Standardisierung, Robustheit und zuverlässige, gleichförmige Herstellung. Die Vorteile des zweiten sind größere, mechanische Flexibilität, automatisches Verbinden mit dem Verbinder bei der Montage und möglicherweise geringere Kosten.
  • Die Tabelle der 16 stellt einige der HIPPI Kabel-Spezifikationen dar. Die Erdungs-Abschirmung besteht aus einem umwickelten Aluminium-Band und führt nur mini mal DC-Ströme aufgrund der unterschiedlichen Art der Puffer, die verwendet werden sollen. Das Verfahren eines Signalisierens ist tatsächlich differenziell, was verschiedene Nachteile liefert, wobei die differenziellen Puffer verwendet werden, um Signale über das Kabel 28 zu verschicken und zu empfangen. Zunächst ist das einzige, differenzielle Verfahren weniger kostspielig als Faseroptiken für diese kurze Distanz und weniger komplex, um sich schnittstellenmäßig zu verbinden, als andere, serielle Verfahren. Ein differenzielles Signalisieren liefert eine wesentliche Rausch-Immunität für einen üblichen Mode und einen Betriebsbereich für einen üblichen Mode, ist in ASICs verfügbar und schneller als TTL. Wenn Twisted Pair und eine Abschirmung verwendet werden, minimiert dies die elektromagnetische Strahlung. Wenn niedrige Spannungsschwingungen verwendet werden, minimiert es eine Energieabnahme.
  • Die signalisierenden Pegel, die als ein Target ausgewählt werden, sind in dem IEEE Draft Standard für Low-Voltage Differential Signals (LVDS) für Scaleable Coherent Interface (SCI), Draft 1.10 (5. Mai 1995) beschrieben.
  • Der Kabel-Verbinder ist ein AMP-Metall-Mantel-Verbinder mit 100 Stiften, mit zwei Reihen von Stiften. Die Reihen sind 100 mils voneinander beabstandet und die Stifte sind bei 50 mil zentriert. Die Metallhülle liefert eine EMI-Abschirmung und gibt Verbindungen mit dem Massepfad von der Kabelabschirmung zu dem Leiterplattenverbinder. Der passende, rechtwinklige Leiterplattenverbinder passt nur zu einem PCI-Träger. Der Verbinder ist so, dass er einen Stab besitzt, der zwischen den zwei Reihen und Stiften verläuft, um elektrostatische Entladungen von Signalstiften abzuleiten, wenn der Verbinder getrennt wird. Ein Paar Flügelschrauben, befestigt an dem Kabelverbinder, wird die passenden Verbinder sichern.
  • FEHLER-ERFASSUNG UND -KORREKTUR
  • Ein Fehlererfassungs- und Korrektur-(EDC)-Verfahren wird an jedem Brücken-Chip ausgeführt, um eine Kommunikation über das Kabel 28 zu schützen. Da die Daten in drei 20-Bit-Gruppen zeit-multiplexiert werden, um über 20 Paare von Drähten verschickt zu werden, ist jedes Triplet von „angrenzenden" Bits (d. h. Bits, die demselben Draht in dem Kabel 28 zugeordnet sind) so angeordnet, um auf einem einzelnen Draht-Paar übertragen zu werden. Das EDC-Verfahren kann Einzel-Bit-Fehler und Mehrfach-Bit-Fehler korrigieren, die in derselben Bit-Position in jeder der drei zeit-multiplexierten Phasen auftreten. Die Multi-Bit-Fehler sind typischerweise einem Hardware-Fehler zugeordnet, z. B. einem gebrochenen oder defekten Draht oder einem fehlerhaften Stift an den Brücken-Chips 26, 48.
  • Zwanzig Draht-Paare des Kabels 28 werden für eine ausgangsseitige Kommunikation verwendet und 20 weitere für eine eingangsseitige Kommunikation. Für die verbleibenden 10 Paare in dem 50-Paar-HIPPI-Kabel 28 (das solche Informationen, wie die Takt-Signale CABLE_CLK1 und CABLE_CLK2, Reset-Signale und das Power Good/PLL-Lock Signal durchlässt), wird eine Fehler-Erfassung und -Korrektur nicht durchgeführt.
  • Das Folgende sind die Hintergrundannahmen für den EDC-Algorithmus. Die meisten Fehler sind Einzel-Bit-Fehler. Die Wahrscheinlichkeit, zufällige Mehrfach-Bit-Fehler in derselben Transaktion zu haben, ist extrem weit weg, da das Kabel 28 nicht für eine Interferenz von internen oder externen Quellen anfällig ist. Fehler, verursacht durch einen defekten Draht, können bewirken, dass ein einzelnes Bit oder eine Gruppe von Bits auf diesem Draht übertragen wird. Wenn ein Hardware-Fehler auftritt, ist der logische Zustand des entsprechenden, differenziellen Puffers ein Einzel-Gültigkeits-Logik Zustand.
  • Wie 17 zeigt, werden die Ausgangs-Signale FIFOOUT[59:0] von dem Multiplexer 228 in der Slave-Kabel-Schnittstelle 196 oder 198 zu dem Eingang eines Prüf-Bit-Generators 350 zugeführt, der Prüf-Bits CHKBIT[7:0] erzeugt. Die Prüf-Bits werden entsprechend der Parität-Prüf-Matrix, dargestellt in 18, erzeugt, in der die erste Reihe zu CHKBIT[0] entspricht, die zweite Reihe zu CHKBIT[1] entspricht, usw. Die Bits über eine Reihe entsprechen Daten-Bits FIFOOUT[0:59].
  • Die Prüf-Bits werden durch ein Exklusiv-ODER aller der Daten-Bits FIFOOUT[X] (X ist gleich zu 0–59) erzeugt, die einen Wert von „1" in der Parität-Prüf-Matrix haben. Demzufolge ist das Prüf-Bit CHKBIT[0] ein Exklusiv-ODER von Daten-Bits FIFOOUT[7], FIFOOUT[8], FIFOOUT[9], FIFOOUT[12], FIFOOUT[13], FIFOOUT[16], FIFOOUT[22], FIFOOUT[23], FIFOOUT[24], FIFOOUT[26], FIFOOUT[32], FIFOOUT[33], FIFOOUT[34], FIFOOUT[35], FIFOOUT[38], FIFOOUT[39], FIFOOUT[45], FIFOOUT[46], FIFOOUT[48], FIFOOUT[49], FIFOOUT[51] und FIFOOUT[52]. Ähnlich ist das Prüf-Bit CHKBIT[1] ein Exklusiv-ODER von Bits 0, 1, 4, 5, 9, 10, 12, 14, 15, 16, 23, 27, 35, 37, 38, 40, 43, 46, 47, 48, 50 und 53. Prüf-Bits CHKBIT[2:7] werden in einer ähnlichen Art und Weise entsprechend der Parität-Prüf-Matrix von 18 erzeugt. Die Parität-Prüf-Matrix ist auf den 20 Unterkanälen oder Drähten pro zeit-multiplexierter Phase, und einer Wahrscheinlichkeit, dass mehrere Fehler in den akkumulierten Daten einem fehlerhaften Unterkanal oder Draht zuzuschreiben sind, der dieselbe Daten-Position in jeder zeit-multiplexierten Phase beeinflusst, basierend.
  • In der Master-Kabel-Schnittstelle 192 oder 194 werden die Prüf-Bits CHKBIT[7:0] als Fehlererfassungs- und Korrektur-Bits EDC[7:0] zusammen mit anderen Kabel-Daten geliefert, um einer Fehler-Korrektur-Logik in der Slave-Kabel-Schnittstelle 196 oder 198 zu ermöglichen, Daten-Fehler zu erfassen und zu korrigieren.
  • Die Prüf-Bits CHKBIT[7:0] werden zu einem Fix-Bit-Generator 352 zugeführt, der Fix-Bits FIXBIT[59:0] entsprechend der Syndrom-Tabelle, dargestellt in 19, erzeugt. Die Prüf-Bits CHKBIT[7:0] besitzen 256 (28) mögliche Werte. Die Syndrom-Tabelle in 19 enthält 256 mögliche Positionen. Jede der 256 Positionen in der Syndrom-Tabelle enthält zwei Eintritte, wobei der erste Eintritt der hexadezimale Wert der Prüf-Bits CHKBIT[7:0] ist und der zweite Eintritt den Kabel-Daten-Status anzeigt, der dieser Position zugeordnet ist. Demzufolge zeigt, zum Beispiel, ein hexadezimaler Wert von 00 einen Nicht-Fehler-Zustand an, ein hexadezimaler Wert von 01 zeigt einen Fehler in einem Daten-Bit 52 an, ein hexadezimaler Wert von 02 zeigt einen Fehler in dem Daten-Bit 53 an, ein hexadezimaler Wert von 03 zeigt einen nicht-korrigierbaren Fehler (UNCER) an, usw.
  • Die EDC-Logik ist dazu geeignet, bis zu drei fehlerhafte Bits zu erfassen, so lange wie diese Daten-Bits benachbart zueinander sind, d. h. demselben Draht zugeordnet sind. Demzufolge sind, zum Beispiel, falls die Prüf-Bits CHKBIT[7:0] einen hexadezimalen Wert 3D enthalten, dann die Daten-Bits 3, 23 und 43 fehlerhaft. Das Kabel 28 führt Kabel-Daten CABLE_DATA[19:0]. Demzufolge sind die Daten-Bits FIFOOUT[3], FIFOOUT[23] und FIFOOUT[43] der vierten Position der Kabel-Daten zugeordnet, d. h. CABLE_DATA[3]. Das EDC-Verfahren kann auch Zwei-Bit-Fehler korrigieren, die demselben Kabel-Draht zugeordnet sind. Demzufolge zeigt, zum Beispiel, ein hexadezimaler Prüf-Bit-Wert von 0F Fehler in Daten-Bits FIFOOUT[4] und FIFOOUT[24] an, beide dem CABLE_DATA[4] zugeordnet.
  • Der Fix-Bit-Generator 352 erzeugt auch Signale NCERR (nicht-korrigierbarer Fehler) und CRERR (korrigierbarer Fehler). Falls kein Fehler durch die Prüf-Bits angezeigt wird, dann sind die Signale CRERR (korrigierbarer Fehler) und NCERR (nicht-korrigierbarer Fehler) beide auf niedrig zurückgenommen. In diesen Positionen in der Syndrom-Tabelle, die den nicht-korrigierbaren Zustand UNCER enthält, wird das Signal NCERR auf hoch gesetzt und das Signal CRERR wird auf niedrig zurückgenommen. An sonsten wird dort, wo ein korrigierbarer Daten-Fehler angezeigt wird, das Signal NCERR auf niedrig zurückgenommen und die Signale CRERR werden auf hoch zurückgesetzt.
  • Die unteren 52 Bits der Fix-Bits FIXBIT[51:0] werden zu einem Eingang von 52 Exklusiv-ODER-Gates 354 zugeführt, deren anderer Eingang eines von jedem der unteren 52 Bits der FIFO-Daten FIFOOUT[51:0] empfängt. Die oberen 8 FIFO-Bits FIFOOUT[59:52], zugeordnet zu der Fehler-Erfassung und den Korrektur-Bits EDC[7:0], werden dazu verwendet, die Prüf-Bits und die Syndrom-Bits zu erzeugen, werden allerdings nicht einer Fehlerkorrektur unterworfen. Die Exklusiv-ODER-Gates 354 führen eine Bit-weise Exklusiv-ODER-Operation der festgelegten Bits FIXBIT[51:0] und der Daten-Bits FIFOOUT[51:0] aus. Falls die Daten-Signale FIFOOUT[51:0] korrigierbare, fehlerhafte Daten-Bits enthalten, werden diese Daten-Bits durch die Exklusiv-ODER-Operation „geflipped". Die Exklusiv-ODER-Gates 354 liefern die korrigierten Daten CORRMSG[51:0] zu dem 1-Eingang eines Multiplexers 360. Der 0-Eingang des Multiplexers 360 nimmt die Daten-Bits FIFOOUT[51:0] auf und der Multiplexer 360 wird durch ein Konfigurations-Signal CFG2C_ENABLE_ECC ausgewählt. Der Ausgang des Multiplexers 360 erzeugt Signale MUXMSGI[51:0]. Falls die System-Software eine Fehler-Erfassung und eine Korrektur durch Einstellen des Signals CFG2C_ENABLE_ECC auf hoch freigibt, dann wählt der Multiplexer 360 die korrigierten Daten CORRMSG[51:0] für eine Ausgabe aus. Ansonsten werden, falls die Fehler-Erfassung und -Korrektur gesperrt ist, die Daten-Bits FIFOOUT[51:0] verwendet.
  • Die nicht-korrigierbaren und die korrigierbaren Fehler-Indikatoren NCERR und CRERR werden zu Eingängen von UND-Gates 356 und 358 jeweils geliefert. Die UND-Gates 356 und 358 werden durch das Signal CFG2C_ENABLE_ECC freigegeben. Die Ausgänge der UND-Gates 356 und 358 erzeugen Signale C_NLERR und C_CRERR jeweils. Die Signale C_NLERR und C_CRERR können nur dann aufgestellt werden, wenn eine Fehler-Erfassung und eine Korrektur freigegeben ist. Wenn ein Fehler erfasst ist, werden die festgelegten Bits (Fix-Bits) verriegelt und für diagnostische Zwecke verwendet.
  • Falls ein korrigierbarer Fehler angezeigt wird (das Signal C_CRERR ist hoch), dann wird eine Unterbrechung zu dem Unterbrechungs-Empfangs-Block 132 hin erzeugt, weitergeführt zu dem Unterbrechungs-Ausgangs-Block 114, und dann zu der System-Unterbrechungs-Steuereinheit übertragen, und dann zu der CPU 14, um einen Unterbrechungs-Händler aufzurufen. Die nicht-korrigierbaren Fehler, angezeigt durch das Signal C_NCERR, werden bewirken, dass der System-Fehler SERR_ aufgestellt wird, was wiederum bewirkt, dass die System-Unterbrechungs-Steuereinheit (nicht dargestellt) die nicht-maskierbare Unterbrechung (Non-Maskable Interrupt – NMI) zu der CPU 14 hin aufstellt. In dem ausgangsseitigen Brücken-Chip 48 werden nicht-korrigierbare Fehler bewirken, dass das Power-Good/PLL-Lock-Indikations-Bit weiter zu dem Kabel 28 geschickt wird, um vernachlässigt zu werden, so dass der eingangsseitige Brücken-Chip 26 keine Zyklen zur Ausgangsseite hin schickt.
  • Um zufällige Unterbrechungen während und nach einem Power-up-Vorgang zu verhindern, wird eine Fehlererfassung und -korrektur an sowohl dem eingangsseitigen als auch dem ausgangsseitigen Brücken-Chip während eines Power-up-Vorgangs gesperrt, bis sich die eingangsseitge PLL 186 und die ausgangsseitige PLL 182 auf den Takt CABLE_CLK1 oder CABLE_CLK2 verriegelt haben.
  • Eine System-Mangament-Software, die auf die Unterbrechung für korrigierbare Fehler anspricht, bestimmt die Ursache durch Lesen der verriegelten Fix-Bits. Falls ein Hardware-Fehler bestimmt wird (z. B. Mehrfach-Daten-Fehler-Bits, zugeordnet demselben Kabel-Draht), dann kann die System-Management-Software den Benutzer auf den Zustand hinweisen, um den Hardware-Fehler zu beseitigen. Die System-Management-Software spricht auf SERR_ an, verursacht durch einen nicht-korrigierbaren Fehler, unter Abschalten des Systems oder unter Durchführen von anderen Funktionen, die durch den Benutzer programmiert sind.
  • SEKUNDÄR-BUS-ARBITRIERER
  • Wie die 3 zeigt, umfasst jeder Brücken-Chip einen PCI-Arbitrierer 116 oder 124. Da der eingangsseitige Brücken-Chip 26 normalerweise in einem Schlitz installiert ist, wird der PCI-Arbitrierer 116 gesperrt. Der PCI-Arbitrierer 124 unterstützt 8 Master: 7 allgemeine PCI-Master (REQ[7:1]_, GNT[7:1]_), umfassend die sechs PCI-Schlitze und die Hot-Plug-Steuereinheit in der SIO 50, und den Brücken-Chip selbst (BLREQ_, BLGNT_). Die Signale BLREQ_ und BLGNT_ werden von und zu dem PCI-Master-Block 123 geführt. Der Brücken-Chip stellt das Signal BLREQ_ auf, falls eine Transaktion von der CPU 14, zielmäßig vorgesehen für den sekundären PCI-Bus 32, durch den eingangsseitigen und ausgangsseitigen Brücken-Chip 26 und 48 empfangen ist. Die Anforderungs- und Erteilungs-Leitungen REQ[1]_ und GNT[1]_ für die SIO 50 werden intern in den ausgangsseitigen Brücken-Chip 48 weitergeleitet. Der PCI-Arbitrierer 124 setzt eine PCICLK2 Verzöge rung zwischen einer Negation eines GNT_ Signals für einen Master und das Aufstellen eines GNT_ Signals für einen anderen Master ein.
  • In dem ausgangsseitigen Brücken-Chip 48 wird der PCI-Arbitrierer 124 freigegeben oder gesperrt, und zwar basierend auf dem abgetasteten Wert von REQ[7]_ an der ansteigenden Flanke des Signals PCIRST2_. Falls der Brücken-Chip 48 REQ[7]_ niedrig auf PCIRST2_ abtastet, wird er den PCI-Arbitrierer 124 sperren. Falls der PCI-Arbitrierer 124 gesperrt ist, dann wird ein externer Arbitrierer (nicht dargestellt) verwendet, und die Hot-Plug-Anforderung wird auf dem REQ[1]_ Stift angesteuert und die Hot-Plug-Erteilung wird auf dem GNT[1]_ Stift eingegeben. Die Brücken-PCI-Bus-Anforderung ist auf dem REQ[2]_ Stift angesteuert und deren Erteilung wird auf dem GNT[2]_ Stift eingegeben. Falls der Brücken-Chip 48 REQ[7]_ auf hoch auf PCIRST2_ abtastet, wird er den PCI-Arbitrierer 124 freigeben.
  • Der PCI-Arbitrierer 124 negiert ein GNT_ Signal des Masters, entweder um einen Initiator mit höherer Priorität zu bedienen, oder auf das REQ_ Signal des Masters hin, das negiert werden soll. Wenn einmal sein GNT_ Signal negiert ist, hält der momentane Bus-Master den Besitz über den Bus bei, bis der Bus zu seinem Leerlauf zurückkehrt.
  • Falls keine PCI-Agenten momentan den Bus verwenden oder anfordern, nimmt der PCI-Arbitrierer 124 eines von zwei Dingen in Abhängigkeit von dem Wert eines PARKMSTRSEL Konfigurations-Registers in dem Konfigurations-Raum 125 vor. Falls das Register den Wert von 0 enthält, verwendet der PCI-Arbitrierer 124 den letzten, aktiven Master, um auf dem Bus 32 zu parken; falls er den Wert 1 enthält, dann wird der Bus an dem Brücken-Chip 48 geparkt.
  • Der PCI-Arbitrierer 124 umfasst einen PCI-Minimal-Erteilungs-Zeitgeber 304 (21), der die minimale, aktive Zeit aller der GNT_ Signale steuert. Der Fehler-Wert für den Zeitgeber 304 ist der hexadezimale Wert 0000, der anzeigt, dass dort kein minimales Erteilungszeit-Erfordernis vorhanden ist. Der Zeitgeber 304 kann mit einem Wert von 1 bis 255 programmiert sein, um anzuzeigen, dass die Zahl von PCICLK2 Taktperioden der GNT_ Leitung aktiv ist. Alternativ kann der individuelle, Minimum-Erteilungs-Zeitgeber jedem PCI-Master auf dem sekundären Bus 32 zugeordnet sein, um eine größere Flexibilität zu erzielen. Die Minimum-Erteilungs-Zeit ist nur dann anwendbar, wenn der momentane Master sein REQ_ Signal aufstellt. Wenn einmal das REQ_ Signal weggenommen ist, kann das GNT_ Signal ungeachtet des minimalen Erteilungs-Zeitwerts erteilt werden.
  • Wie 20A zeigt, führt, in einem normalen Betrieb, der PCI-Arbitrierer 124 ein Round-Robin-Prioritäts-Schema (Arbitrierungs-Schema auf dem zweiten Niveau) aus. Die acht Master in dem Round-Robin-Schema umfassen Vorrichtungen, die mit den sechs Schlitzen bzw. Einsteckplätzen des Erweiterungskastens 30, dem SIO 50 und einer geposteten Speicher-Schreib-(PMW)-Anforderung von dem eingangsseitigen Brücken-Chip 26 verbunden sind. Alle Master auf dem PCI-Bus 32 in diesem Schema besitzen dieselbe Priorität wie der Brücken-Chip 48. Nachdem der Master den sekundären PCI-Bus 32 erteilt hat und der Master das FRAME_ Signal aufgestellt hat, wird der Bus erneut arbitriert und der momentane Master wird an die Unterseite des Round-Robin-Stapels gesetzt. Falls der Master diese Anforderung negiert oder der Minimum-Erteilungs-Zeitgeber 304 abläuft, wird der PCI-Bus 32 dem Master mit der nächsten, höchsten Priorität erteilt. Verriegelte Zyklen werden nicht in irgendeiner Weise unterschiedlich durch den PCI-Arbitrierer 124 behandelt.
  • Auf bestimmte Ereignisse hin wird das Arbitrierungs-Schema so modifiziert, um eine System-Funktion zu optimieren. Die Ereignisse umfassen: 1) eine eingangsseitig-zu-ausgangsseitig verzögerte Lese- oder verzögerte Schreib-Anforderung ist anhängig, 2) eine ausgangsseitig-zu-eingangsseitig verzögerte Lese-Anforderung ist anhängig, ohne dass eine Lese-Abschluss-Indikation geliefert wird, und 3) eine Streaming-Möglichkeit existiert, während der Brücken-Chip 26 der momentane Master auf dem eingangsseitigen Bus 24 ist.
  • Wenn eine verzögerte Anforderung erfasst ist, wird der Brücken-Chip 48 der nächste Master, der dem sekundären PCI-Bus 32 erteilt werden soll. Wenn einmal dem Brücken-Chip 48 der Bus 32 erteilt ist, behält er einen Besitz über den Bus 32 bei, bis er alle offenstehenden, verzögerten Anforderungen abschließt oder einer seiner Zyklen erneut versucht wird. Falls der Brücken-Chip 48 erneut versucht wird, wird ein Zwei-Level-Arbitrierungs-Schema durch den Arbitrierer 124 ausgeführt. Eine primäre Ursache dafür, dass der Brücken-Chip-Lese-Zyklus erneut versucht wird, ist diejenige, dass die Target-Vorrichtung eine Brücke mit einem geposteten Schreib-Puffer ist, der gelöscht werden muß. In diesem Fall ist die optimale Operation diejenige, den Bus 32 zu dem erneut versuchenden Target zu erteilen, um ihm zu ermöglichen, seinen geposteten Schreib-Puffer zu entleeren, so dass er die Brücken-Chip-Lese-Anforderung annehmen kann.
  • Wie 20B zeigt, umfasst ein Zwei-Level-Arbitrierungs-Protokoll ein Arbitrierungs-Schema auf dem ersten Level, das ein Round-Robin-Schema ist, und zwar unter drei möglichen Mastern: die verzögerte Anforderung von der CPU 14, eine Anforderung von dem erneut versuchenden Master und ein Master, der durch das Arbitrierungs-Schema auf dem zweiten Level ausgewählt ist. Jeder dieser drei Master in dem Arbitrierungs-Schema unter dem ersten Level wird jedem dritten Arbitrierungs-Schlitz erteilt. Für Speicher-Zyklen kann der Schlitz, der dem erneut versuchenden Target zugeordnet ist, von den Target-Speicher-Bereich-Konfigurations-Registern in dem Konfigurations-Raum 125 des Brücken-Chips 48 bestimmt werden, der den Speicherbereich speichert, der jeder PCI-Vorrichtung zugeordnet ist. Falls der erneut versuchende Master nicht bestimmt werden kann (wie in dem Fall einer I/O-Lesung), oder falls der erneut versuchende Master nicht den sekundären Bus 32 anfordert, dann würde das Arbitrierungs-Schema auf dem ersten Level zwischen dem Brücken-Chip 48 und einem Level-Two-Master vorliegen.
  • Der erneut versuchende Master wird nicht von der Level-Zwei-Arbitrierung maskiert. Demzufolge ist es für ihn möglich, zwei Back-to-Back-Arbitrierungs-Gewinne zu haben, falls er der nächste Master in dem Level-Two-Arbitrierungs-Schema ist.
  • Zum Beispiel würde, falls eine Eingangs-zu-Ausgangs-Lesung erneut versucht wird und der Master C (der erneut versuchende Master) den Bus 32 ebenso wie einen Master B und einen Master E anfordert, die Reihenfolge der Bus-Erteilungen wie folgt in einer absteigenden Reihenfolge sein: der Brücken-Chip 48, der erneut versuchende Master (Master C), der Master C, der Brücken-Chip 48, der erneut versuchende Master C, der Master E, der Brücken-Chip 48, usw., bis der Brücken-Chip 48 in der Lage ist, seine Transaktion abzuschließen, und der PCI-Arbitrierer 152 zurück zu seinem Level-Two-Arbitrierungs-Schema für einen normalen Betrieb kehrt.
  • Falls, als ein anderes Beispiel, die Brücken-Chip-Lesung erneut versucht wird und die einzigen anderen die anfordernden Master Master A und Master D sind (d. h. der erneut versuchende Master fordert nicht den Bus an, oder er könnte nicht identifiziert werden, da er auf einen I/O-Raum gerade zugreift), ist die Reihenfolge der Bus-Erteilungen wie folgt: der Brücken-Chip 48, der Master A, der Brücken-Chip 48, der Master D, usw.
  • Das Zwei-Level-Arbitrierungs-Schema gibt verzögerten Anforderungen von der CPU 14 die höchste Priorität. Obwohl dieses Arbitrierungs-Verfahren stark die CPU 14 favorisiert, wird jeder anfordernden Vorrichtung auf dem Bus 32 schließlich der PCI-Bus 32 erteilt. Indem dies so vorgenommen wird, ist dabei eine geringere Chance vorhanden, dass die anderen, sekundären Bus-Master vernachlässigt werden würden, wenn eine PCI-Brücken-Chip-Anforderung erneut versucht wird.
  • Unter Bezugnahme auf 21 umfasst der PCI-Arbitrierer 124 eine L2 Zustand-Maschine 302, um das Level-Two-Round-Robin-Arbitrierungs-Schema auszuführen. Die L2 Zustand-Maschine 302 empfängt Signale RR_MAST[2:0], die den momentanen Round-Robin-Master anzeigen. Die L2 Zustand-Maschine 302 empfängt auch Anforderungs-Signale RR_REQ[7:0], entsprechend zu den 8 möglichen Mastern des sekundären PCI-Busses 32. Basierend auf dem momentanen Master und dem Zustand der Anforderungs-Signale, erzeugt die L2 Zustand-Maschine 302 einen Wert, der den nächsten Round-Robin-Master darstellt. Der Ausgang der L2 Zustand-Maschine 302 wird zu dem 0-Eingang eines 6:3 Multiplexers 306 geliefert, dessen 1-Eingang Signale Q2A_STRMAST[2:0] empfängt. Der Auswahl- bzw. Select-Eingang des Multiplexers 306 empfängt ein Signal STREAM_REQ, das auf hoch durch ein UND-Gate 308 gesetzt wird, wenn eine Streaming-Gelegenheit existiert (Q2A_STREAM ist hoch), der Streaming-Master auf dem sekundären PCI-Bus 32 seine Anforderungs-Zeile (MY_REQ[Q2A_STRMAST[2:0]] ist hoch) und eine verzögerte Anforderung nicht anhängig ist (BAL_DEL_REQ ist niedrig).
  • Der Ausgang des Multiplexers 306 steuert Signale N_RR_MAST[2:0] an, die den nächsten Round-Robin-Master in dem Level-Two-Arbitrierungs-Schema darstellen. Die Signale N_RR_MAST[2:0] werden durch eine L1 Zustand-Maschine 300 empfangen, die auch die folgenden Signale empfängt: ein Signal RTRYMAST_REQ (das die Anforderung des erneut versuchenden Bus-Masters darstellt); ein Signal MIN_GRANT (das dann aufgestellt wird, wenn der Minimal-Erteilungs-Zeitgeber 304 zeitmäßig abläuft); das verzögerte Anforderungs-Signal BAL_DEL_REQ; das Datenfolge-Anforderungs-Signal STREAM_REQ; ein Signal CURMAST_REQ (das anzeigt, dass der momentane Master ein Aufstellen seines Anforderungs-Signals beibehält); ein Signal ANY_SLOT_REQ (das auf hoch gestellt wird, falls irgendeines der Anforderungs-Signale REQ[7:0]_ auf hoch, allerdings nicht die Brücken-Chip-Anforderung BLREQ_ umfassend, aufgestellt ist); und Signale L1STATE[1:0] (die den momentanen Zustand der L1 Zustand-Maschine 300 darstellt). Die L1 Zustand-Maschine 300 wählt eine von drei möglichen L1-Mastern aus, umfassend den erneut versuchenden Master (RTRYMAST_REQ), die verzögerte Anforderung von dem Brücken-Chip 48 (BAL_DEL_REQ) und den Level-Two-Master (ANY_SLOT_REQ).
  • Das Anforderungs-Signal des erneut versuchenden Master RTRYMAST_REQ wird durch ein UND-Gate 312 erzeugt, das das Signal BAL_DEL_REQ, das Signal MY_REQ[RTRY_MAT[2:0]] (das anzeigt, ob der erneut versuchende Master seine Anforderung aufstellt) und den Ausgang eines ODER-Gates 310 empfängt. Die Eingänge des ODER-Gates 310 nehmen die Signale RTRY_MAST[2:0] auf. Demzufolge ist, falls ein erneut versuchender Master identifiziert worden ist (RTRY_MAST[2:0] ist Nicht-Null), eine verzögerte Anforderung vorhanden ist (BAL_DEL_REQ ist hoch) und ein erneut versuchender Master seine Anforderung aufgestellt hat, dann das Signal RTRYMAST_REQ aufgestellt.
  • Die L1 Zustand-Maschine 300 erzeugt Signale N_L1STATE[2:0] (die den nächsten Zustand der L1 Zustand-Maschine 300 darstellen), ebenso wie Signale N_CURMAST[2:0] (die den nächsten Master gemäß dem Level-Two-Arbitrierungs-Schema darstellen). Die L1 Zustand-Maschine 300 erzeugt auch ein Signal OPEN_WINDOW, das anzeigt, wenn ein erneut arbitrierendes Fenster für eine Erteilungs-Zustand-Maschine 306 existiert, um Master auf dem sekundären PCI-Bus 32 zu ändern. Ein Signal ADV_RR_MAST, geliefert durch die L1 Zustand-Maschine 300, zeigt zu der Erteilungs-Zustand-Maschine 306 hin an, wenn der Wert der Signale N_RR_MAST[2:0] in die Signale RR_MAST[2:0] zu laden sind, um den nächsten Level-Two-Round-Robin-Master weiterzuführen.
  • Die Erteilungs-Zustand-Maschine 306 gibt Erteilungs-Signale GNT[7:0] ebenso wie ein Signal CHANGING_GNT aus, um anzuzeigen, dass die Inhaberschaft des Busses 32 geändert wird. Die Erteilungs-Signale GNT[7:1]_ werden von den GNT[7:1] Signalen invertiert, und das Erteilungs-Signal BLGNT_ wird von dem GNT[0] Signal invertiert. Die Erteilungs-Zustand-Maschine 306 erzeugt auch Signale L1STATE[1:0] und Signale RR_MAST[2:0].
  • Der Minimum-Erteilungs-Zeitgeber 304 wird durch das Signal PCLK getaktet und erzeugt das Signal MIN_GRANT. Der Minimum-Erteilungs-Zeitgeber 304 empfängt auch das Signal CHANGING_GNT und NEW_FRAME (anzeigend, dass ein neues FRAME_ Signal aufgestellt worden ist). Der Anfangs-Wert des Minimum-Erteilungs-Zeitgebers 304 wird als ein Wert geladen {CFG2A_MINGNT[3:0], 0000}, wobei die Signale CFG2A_MINGNT[3:0] gespeicherte Konfigurations-Bits in dem Konfigurations-Raum 125 sind, die den Anfangs-Wert des Minimum-Erteilungs-Zeitgebers 304 definieren. Der Minimum-Erteilungs-Zeitgeber 304 wird erneut geladen, nachdem er herunter auf Null gezählt hat, und das Signal CHANGING_GNT wird auf hoch gesetzt. Nachdem der Minimum-Erteilungs-Zeitgeber 304 mit einem neuen Wert geladen ist, beginnt er sich zu erniedrigen, wenn das Signal NEW_FRAME auf hoch gesetzt ist und das Signal CHANGING_GNT auf niedrig durch die Erteilungs-Zustand-Maschine 306 zurückgenommen ist, was anzeigt, dass eine neue Transaktion auf dem PCI-Bus 32 begonnen hat.
  • Signale MY_REQ[7:1] werden durch ein NOR-Gate 314 erzeugt, dessen Eingänge die Anforderungs-Signale REQ[7:1]_ und Maskierungs-Signale Q2AMASKREQ[7:1] empfangen. Ein Aufstellen des Maskierungs-Bits Q2AMASKREQ[X], X = 1–7, maskiert die Anforderung REQ[X]_ des entsprechenden Masters, was verhindert, dass der PCI-Arbitrierer 124 auf das Anforderungs-Signal anspricht. Ein Signal MY_REQ[0] wird durch einen Invertierer 316 angesteuert, der die Brücken-Anforderung BLREQ empfängt.
  • Wie 22 zeigt, umfasst die Erteilungs-Zustand-Maschine 306 vier Zustände: PARK, GNT, IDLE4GNT und IDLE4PARK. Beim Aufstellen eines RESET-Signals (erzeugt von dem PCI-Reset-Signal PCIRST2_), tritt die Erteilungs-Zustand-Maschine 306 in einen Zustand PARK ein, wo sie verbleibt, während ein Signal ANY_REQ weggenommen wird. Das Signal ANY_REQ wird auf hoch gesetzt, falls irgendeine der Anforderungs-Zeilen zu dem PCI-Arbitrierer 124 aufgestellt ist. In dem PARK Zustand wird die PCI-PCI-Brücke 48 als der Inhaber des PCI-Busses 32 geparkt, wenn eine andere Anforderung nicht vorhanden ist.
  • Falls das Signal ANY_REQ aufgestellt ist, geht die Erteilungs-Zustand-Maschine 306 von dem Zustand PARK zu dem Zustand IDLE4GNT über, und das Signal CHANGING_GNT wird auf hoch gesetzt, um anzuzeigen, dass der PCI-Arbitrierer 124 Master ändert. Die Erteilungs-Signale GNT[7:0] werden alle auf Null'en gelöscht, und die Signale CURMAST[2:0] werden mit dem Wert des nächsten Master N_CURMAST[2:0] aktualisiert. Zusätzlich werden die Round-Robin-Master-Signale RR_MAST[2:0] mit dem nächsten Round-Robin-Master-Wert N_RR_MAST[2:0] aktualisiert, wenn das Signal ADV_RR_MAST durch die L1 300 aufgestellt ist. Das Signal ADV_RR_MAST zeigt, wenn es hoch ist, an, dass der nächste L1-Master einer der L2 Master ist.
  • Von einem Zustand IDLE4GNT geht die Erteilungs-Zustand-Maschine 306 als nächstes zu dem GNT Zustand über, und die Signale GNT[7:0] werden auf den Zustand von neuen Erteilungs-Signalen NEWGNT[7:0] eingestellt und das Signal CHANGING_GNT werden auf niedrig gesetzt. Die Signale NEWGNT[7:0] sind auf dem Zustand der momentanen Master-Signale CURMAST[2:0] basierend, wie dies in 24 dargestellt ist.
  • Von dem Zustand GNT sind drei Übergänge möglich. Die Erteilungs-Zustand-Maschine 306 kehrt zu dem PARK Zustand zurück, falls ein Arbitrierungs-Fenster offen ist (OPEN_WINDOW ist hoch), keine Anforderung anhängig ist (ANY_REQ ist niedrig), der PCI-Bus 32 leer ist (BUS_IDLE ist hoch) und der nächste Master der momentane Master ist (d. h. der momentane Master ist der parkende Master). Bei dem Übergang zurück von dem GNT Zustand zu dem PARK Zustand werden die Signale L1STATE[1:0] mit den Signalen N_L1STATE[1:0] aktualisiert. Allerdings wird, falls keine Anforderungen anhängig sind und der Bus leer ist, aber der momentane Master nicht der parkende Master ist (d. h. die Signale N_CURMAST[2:0] sind nicht gleich zu dem Wert der Signale CURMAST[2:0]), ein Leerlauf-Zustand benötigt und die Erteilungs-Zustand-Maschine 306 geht von dem GNT Zustand zu dem IDLE4PARK Zustand über. Die L1 Zustand-Werte L1STATE[1:0] werden aktualisiert. Von dem IDLE4PARK Zustand geht die Erteilungs-Zustand-Maschine 306 zu dem PARK Zustand über, die Erteilungs-Signale GNT[7:0] gleich zu den neuen Erteilungs-Signalen NEWGNT[7:0] einstellend, um den PCI-Bus 32 dem neuen Master zu erteilen. Das Signal CHANGING_GNT wird auch auf niedrig gesetzt.
  • Falls sich das Arbitrierungs-Fenster öffnet (OPEN_WINDOW ist hoch) und der nächste Master nicht der momentane Master ist (die Signale N_CURMAST[2:0] sind nicht gleich zu den Signalen CURMAST[2:0]), dann geht die Erteilungs-Zustand-Maschine 306 zu dem Leerlauf Zustand IDLE4GNT über, um Bus-Master-Erteilungen zu ändern. Bei dem Übergang wird das Signal CHANGING_GNT hoch gesetzt, die Signale GNT[7:0] werden alle auf Null'en gelöscht, die Signale CURMAST[2:0] werden mit dem nächsten Master-Wert N_CURMAST[2:0] aktualisiert, und die L1 Zustand-Signale L1STATE[1:0] werden mit dem nächsten Zustand-Wert N_L1STATE[1:0] aktualisiert. Zusätzlich werden die Round-Robin-Master-Signale RR_MAST[2:0] mit dem nächsten Round-Robin-Master RR_MAST[2:0] aktualisiert, falls das Signal ADV_RR_MAST auf hoch gesetzt ist. Die Erteilungs-Signale GNT[7:0] werden dann auf den Wert NEWGNT[7:0] bei dem Übergang von dem IDLE4GNT Zustand zu dem GNT Zustand gesetzt.
  • Wie 23 zeigt, startet die L1 Zustand-Maschine 300 (21) in eine, Zustand RR unter Aufstellen des RESET-Signals, wo die Zustand-Maschine 300 verbleibt, während ein verzögertes Anforderungs-Signal BAL_DEL_REQ auf niedrig gesetzt wird (anzeigend, dass dort keine verzögerte Anforderung anhängig ist). In dem RR Zustand wird das Signal ADV_RR_MAST auf hoch gesetzt, um der Erteilungs-Zustand-Maschine 300 zu ermöglichen, den Round-Robin-Master zu aktualisieren (d. h. Einstellen von Signalen RR_MAST[2:0] gleich zu dem Wert N_RR MAST[2:0]). Der RR Zustand ist der Round-Robin Zustand, in dem das Level-Two-Arbitrierungs-Schema verwendet wird. In dem RR Zustand werden die nächsten Master-Signale N_CURMAST[2:0] gleich zu dem nächsten Round-Robin-Master N_RR_MAST[2:0] gesetzt, und das Signal OPEN_WINDOW wird auf hoch gesetzt, falls die Datenfolge-Anforderungs-Gelegenheit existiert (STREAM_REQ ist hoch), oder der Minimum-Erteilungs-Zeitgeber 304 abgelaufen ist (MIN_GRANT ist hoch), oder der momentane Master seine Anforderung aufgestellt hat (CURMAST_REQ geht auf niedrig). Wenn hoch aufgestellt ist, ermöglicht das Signal OPEN_WINDOW, dass eine neue Arbitrierung stattfindet.
  • Falls eine verzögerte Anforderung erfasst wird (BAL_DEL_REQ geht zu hoch über) geht die L1 Zustand-Maschine 300 von dem RR Zustand zu dem BAL Zustand über, den nächsten Master Zustand N_CURMAST[2:0] als den Brücken-Chip 48 einstellend und das Signal ADV_RR_MAST wegnehmend, um die Level-Two-Round-Robin-Arbitrierung zu sperren. In dem BAL Zustand wird das Signal OPEN_WINDOW auf hoch gesetzt, falls die verzögerte Anforderung weggenommen ist (BAL_DEL_REQ geht zu niedrig über), oder die verzögerte Anforderung erneut versucht worden ist (BAL_RETRIED geht zu hoch über). Falls das Signal BAL_DEL_REQ auf niedrig gesetzt ist oder falls die verzögerte Anforderung BAL_DEL_REQ auf hoch gesetzt ist, allerdings die Anforderung des erneut versuchenden Masters auf niedrig gesetzt wird (RTRYMAST_REQ ist niedrig) und die Schlitz-Anforderung ANY_SLOT_REQ auf hoch gesetzt wird, dann geht die L1 Zustand-Maschine 300 zurück zu dem RR Zustand. Bei dem Übergang wird das Signal ADV_RR_MAST auf hoch gesetzt und die nächsten Master-Signale N_CURMAST[2:0] werden gleich zu dem nächsten Round-Robin-Master N_RR_MAST[2:0] gesetzt. Falls das Signal BAL_DEL_REQ weggenommen ist, zeigt dies an, dass der Arbitrierer 124 zurück zu dem Level-Two-Round-Robin-Schema kehren sollte. Falls das Signal der verzögerten Anforderung aufgestellt ist, allerdings die Anforderung des erneut versuchenden Masters weggenommen wird, dann ist das Level-One-Arbitrierungs-Schema zwischen den Schlitzen auf dem PCI-Bus 32 und dem Brücken-Chip 48.
  • Falls sowohl die verzögerte Anforderung BAL_DEL_REQ als auch die Anforderung des erneut versuchenden Masters RTRYMAST_REQ aufgestellt sind, dann geht die L1 Zustand-Maschine 300 von dem Zustand BAL zu dem Zustand RETRY_MAST über, und der erneut versuchende Master wird als der nächste Master eingestellt (N_CURMAST[2:0] wird gleich zu RTRY_MAST[2:0]) eingestellt. Das Signal ADV_RR_MAST wird auf niedrig beibehalten. In dem RETRY_MAST Zustand ist, falls keiner der PCI-Schlitz-Master eine Anforderung aufstellt (ANY_SLOT_REQ ist niedrig), dann das Level-One-Arbitrierungs-Schema zwischen dem erneut versuchenden Master und dem Brücken-Chip 48, und die L1 Zustand-Maschine 300 geht zurück zu dem BAL Zustand. Der Brücken-Chip 48 wird als der nächste Master eingestellt (N_CURMAST[2:0] ist gleich zu dem Zustand BAL-BOA), und das Signal ADV_RR_MAST wird auf niedrig beibehalten. Allerdings geht die L1 Zustand-Maschine 300 von dem RETRY_MAST Zustand zu dem RR Zustand über, falls irgendeiner der Schlitz-Master eine Anforderung aufstellt (ANY_SLOT_REQ ist hoch). Bei dem Übergang wird das Signal ADV_RR_MAST auf hoch gesetzt, und der nächste Round-Robin-Master wird als der nächste Master eingestellt (N_CURMAST[2:0] wird gleich zu N_RR_MAST[2:0] eingestellt).
  • Um von dem Vorteil der Streaming-Fähigkeiten des Brücken-Chips Gebrauch zu machen, wenn Daten für eine DRC damit beginnen, von dem Kabel 28 anzukommen, wird der Master, zugeordnet zu dieser DRC, die Vorrichtung mit der höchsten Priorität (unter der Annahme, dass deren REQ_ aufgestellt ist). Dies ermöglicht dem Master, die Daten-Folge, von dem Kabel 28 ankommend, aufzunehmen, während das Auswahl-Fenster dort für ein Streaming vorhanden ist. Falls der Brücken-Chip 48 nicht den Master verbinden kann, bevor die DRC-Warteschlange aufgefüllt ist, dann wird sich der eingangsseitige Brücken-Chip 24 trennen, und nur ein Teil der Daten würde zu dem anfordernden Master hindurchgeführt werden, was erfordert, dass der Master eine andere Lese-Anforderung auf den eingangsseitigen Bus 24 abgibt. Der Streaming-Master behält die höchste Priorität bei, so lange wie DRC-Daten fortfahren, von dem Kabel 28 anzukommen. Falls der Master eine unterschiedliche Zyklus-Adresse wiederholt, wird dies erneut versucht werden, allerdings wird er den Besitz über den sekundären PCI-Bus 32 beibehalten, bis seine Anforderung weggeht oder die Gelegenheit für ein Streaming vorüber ist.
  • ERNEUT VERSUCHENDE ANFORDERUNGEN UND MULTI-THREADED MASTER
  • Da jeder Brücken-Chip eine Vorrichtung mit verzögerter Transaktion ist, falls eine Vorrichtung auf dem ausgangsseitigen Bus 32 eine Lese-Anforderung abgibt, bestimmt für ein eingangsseitiges Target, wird der ausgangsseitige Brücken-Chip 48 eine Wiederversuch-Transaktion (beschrieben in der PCI Spezifikation) auf dem sekundären Bus 32 ausgeben und die Anforderung weiter zu dem Kabel 28 führen. Die Wiederversuch-Transaktion bewirkt, dass der anfordernde Master die Steuerung von dem PCI-Bus 32 aufgibt und seine REQ_ Zeile wegnimmt. Nach Wegnehmen seiner REQ_ Zeile wird der erneut versuchende Master wieder eine Anforderung für denselben Zyklus zu einer späteren Zeit aufstellen, was dazu führt, dass seine GNT_ aufgestellt wird (falls seine REQ_ Zeile nicht maskiert ist) und der Bus-Master erneut versucht, bis die Lese-Abschluss-Indikation in dem ausgangsseitigen Brücken-Chip 48 aufgestellt ist.
  • Wie die 25 zeigt, wird, um die unnötige Bearbeitung von Wiederversuch-Anforderungen zu vermeiden, die REQ_ Zeile einen sekundären Bus-Master, er eine erneut versuchte, verzögerte Lese- oder Schreib-Anforderung ausgibt, durch Aufstellen des geeigneten einen der Signale Q2A_MASK_REQ[7:1] (Anforderung von dem Brücken-Chip 48, die erneut versucht sind, werden nicht maskiert), maskiert, bis der verzögerte Abschluss zurückführt. Auf diese Art und Weise wird anderen, anfordernden Mastern eine Priorität gegeben, um deren Anforderungen hineinzubringen. Sobald die ersten Informationen, zugeordnet dem verzögerten Abschluss, zurückgeführt werden, wird die REQ_ Zeile des entsprechenden Masters von der Maskierung befreit und der erneut versuchende Master ist in der Lage, in eine Arbitrierung erneut einzutreten.
  • Allerdings existiert ein spezieller Fall für Multi-Threaded- (oder Multi-Headed) Master auf dem ausgangsseitigen Bus 32 (26B), die in der Lage sind, eine erste Anforderung aufzustellen, erneut versucht zu werden und zurückzukommen mit einer unterschiedlichen Anforderung. Eine solche Multi-Threaded-Bus-Vorrichtung ist eine PCI-PCI-Brücke 323, die den sekundären PCI-Bus 32 und einen untergeordneten PCI-Bus 325 verbindet. Der Bus 325 ist mit Netzwerk-Schnittstellen-Karten (Network Interface Cards – NICs) 327A und 327B verbunden, die mit zwei unterschiedlichen Netzwerken verbunden sind. Demzufolge kann, falls die Anforderung von der NIC 327A für den primären PCI-Bus 32 erneut durch den Brücken-Chip 48 versucht wird, die NIC 327B eine unterschiedliche Anforderung erzeugen. In diesem Fall werden die REQ_ Zeilen der Multi-Threaded-Master nicht maskiert, wie dies durch das Signal CFG2Q_MULTI_MASTER[X], das auf hoch gesetzt wird, angezeigt ist.
  • Ein Status-Register 326 bestimmt, ob ein Schlitz ein einzelner oder ein Multi-Threaded ist. Bei einem Reset wird das Register 326 gelöscht, um anzunehmen, dass jede sekundäre Bus-Vorrichtung Einzel-Threaded ist. Der Schlitz wird dann überwacht, um zu bestimmen, ob er einen unterschiedlichen Zyklus anfordert, während ein anderer Zyklus von demselben Master anhängig ist. Falls ein Multi-Threaded-Verhalten in einem Master beobachtet wird, dann wird ein solcher durch Einstellen des entsprechenden Bits CFG2Q_MULTI_MASTER[X] auf hoch markiert.
  • Der Eingang des Status-Registers 326 wird mit dem Ausgang eines 14:7 Multiplexers 328 verbunden, dessen 0-Eingang mit dem Ausgang eines 14:7 Multiplexers 330 verbunden ist, dessen 1-Eingang mit Adressen-Bits P2Q_AD[22:16] verbunden ist. Ein Auswahl-Signal CFGWR_MM wählt die 0- und 1-Eingänge des Multiplexers 328 aus. Wenn hoch aufgestellt ist, bewirkt das Signal CFGWR_MM ein Konfigurations-Schreiben des Status-Registers 326 von den Daten-Bits P2Q_AD[22:16], was eine Software-Steuerung der Bits in dem Register 326 ermöglicht. Der 1-Eingang des Multiplexers 330 nimmt Multi-Master-Signale MULTI_MASTER[7:1] auf, der 0-Eingang empfängt den Ausgang des Registers 326 und der Multiplexer 330 wird durch ein Signal MULTI_SEL ausgewählt. Das Signal MULTI_SEL wird durch ein UND-Gate 338 erzeugt, dessen erster Eingang ein Signal Q2PIF_CHECK_CYC aufnimmt (gesetzt auf hoch, um anzuzeigen, dass die momentanen Transaktions-Informationen gegenüber von Informationen geprüft werden sollten, die in dem Warteschlangen-Block 127 gespeichert sind, und zwar hinsichtlich einer Anpassung, wie beispielsweise während einer verzögerten Speicher-Lese- oder Schreib-Anforderung von einer Bus-Vorrichtung auf dem sekundären PCI-Bus 32), und der andere Eingang nimmt den invertierten Zustand des Signals DCQ_HIT auf (was anzeigt, dass die momentanen Adressen-Informationen nicht die Adressen-Informationen anpassen, die einer anhängigen Anforderung des anfordernden Master in der DCQ 148 zugeordnet sind). Demzufolge wird, falls ein fehlerhafter Vergleich auftrat, der Wert der Signale CFG2Q_MULTI_MASTER[7:1] aktualisiert.
  • Ein Bit MULTI_MASTER[X] wird auf hoch gesetzt, falls der Master X eine anhängige Anforderung hat, die erneut versucht worden ist, und der Master X darauffolgend zu rück zu einer unterschiedlichen Anforderung kommt. Dies wird durch Vergleichen der Transaktions-Informationen (z. B. Adresse, Byte-Freigaben, Daten für ein Schreiben) der anhängigen Anforderung mit der Adresse der neuen Anforderung geprüft. Ein fehlgeschlagener Vergleich zeigt an, dass der Master im Multi-Threaded-Betrieb ist. Wenn einmal ein Multi-Master-Konfigurations-Bit CFG2Q_MULTI_MASTER[X] (X = 1–7) auf hoch gesetzt ist, wird das Bit auf hoch beibehalten.
  • Die Signale MULTI_MASTER[7:1] werden durch einen Decodierer 336 erzeugt. Der Decodierer 336 nimmt Signale Q2PIF_SLOT[2:0] (Schlitz-Zahl für die momentane, verzögerte Anforderung von einem Master), Q[7:0]_MASTER[2:0] (der Master, zugeordnet zu jedem der acht Puffer in der DCQ 148), Q[7:0]_COMPLETE (der Abschluss-Status jeder der acht Warteschlangen), und Q[7:0]_PART_COMPLETE (der Teil-Abschluss-Status jedes der Puffer in der verzögerten Abschluss-Warteschlange) auf. Zum Beispiel zeigt dann, falls das Signal Q0_MASTER[2:0] den Wert 4 enthält, dies an, dass der DCQ-Puffer 0 die Transaktions-Informationen einer verzögerten Anforderung von der Bus-Vorrichtung in dem Schlitz 4 speichert. Das Signal QY_COMPLETE, Y = 0–7, zeigt an, falls „hoch" aufgestellt ist, ob der DCQ-Puffer Y alle die Daten empfangen hat, die der verzögerten Anforderungs-Transaktion zugeordnet sind. Das Signal QY_PART_COMPLETE, Y = 0–7, zeigt an, falls hoch aufgestellt ist, dass der DCQ-Puffer Y als der DCQ-Puffer für eine verzögerte Transaktion von einem der Master zugeordnet worden ist, allerdings alle die Daten, die der verzögerten Transaktion zugeordnet sind, noch nicht empfangen worden sind.
  • Falls die momentane Schlitz-Zahl Q2PIF_SLOT[2:0] gleich zu dem Wert irgendeines der acht Warteschlangen-Master-Indikations-Signale Q[7:0]_MASTER[2:0] ist, und sich der entsprechende DCQ-Puffer in dem Abschluss- oder Teil-Abschluss-Zustand befindet, dann wird das entsprechende eine der Bits MULTI_MASTER[7:1] auf hoch gesetzt, falls das Signal DCQ_HIT niedrig ist, und das Signal Q2PIF_CHECK_CYC[2:0] hoch ist. Demzufolge wird, zum Beispiel, falls das Signal Q2PIF_SLOT[2:0] den Wert 2 enthält, was anzeigt, dass die Vorrichtung im Schlitz 2 der momante Master der verzögerten Anforderung ist, und der DCQ-Puffer 5 eine anhängige Anforderung für den Schlitz-2-Master speichert (Q5_MASTER[2:0] = 5), und irgendeines der Signale Q5_COMPLETE oder Q5_PART_COMPLETE hoch ist, und falls das Signal Q2PIF_CHECK_CYC hoch ist und das Signal DCQ_HIT niedrig ist, dann das Bit MULTI_MASTER[2] auf hoch gesetzt, um so anzuzeigen, dass die Schlitz-2-Vorrichtung ein Multi-Threaded-Master ist.
  • Ein Maskierungs-Anforderungs-Erzeugungs-Block 332 erzeugt Signale Q2A_MASK_REQ[X] (X = 1–7) in Abhängigkeit von Signalen Q[7:0]_MASTER[2:0], Q[7:0]_STATE[3:0], (was den Zustand von verzögerten Abschluss-Warteschlangen 0–7 anzeigt), SLOT_WITH_DATA[7:0] (was anzeigt, ob ein verzögerter Abschluss Qs 0–7 gültige Daten enthält), CFG2Q_MULTI_MASTER[X] (X = 1–7), CFG2Q_ALWAYS_MASK und CFG2Q_NEVER_MASK.
  • Wie 26A zeigt, umfasst der Masken-Anforderungs-Erzeugungs-Block 332 einen 2:1 Multiplexer 320 zum Erzeugen des Signals Q2A_MASK_REQ[X] (X = 1–7). Der 1-Eingang des Multiplexers 320 ist mit dem Ausgang eines ODER-Gates 322 verbunden und der 0-Eingang ist auf niedrig gesetzt. Der Auswahl-Eingang des Multiplexers 320 wird durch ein Signal MASK_MUXSEL angesteuert. Ein Eingang des ODER-Gates 322 ist mit dem Ausgang eines NOR-Gates 324 verbunden, der ein Signal CFG2Q_MULTI_MASTER[X] aufnimmt (anzeigend einen Multi-Threaded-Master), und der andere Eingang empfängt ein Signal CFG2Q_NEVER_MASK (ein Konfigurations-Bit, das anzeigt, dass die Anforderungs-Zeile nicht maskiert werden sollte, falls ein Multi-Threaded-Master erfasst ist). Der andere Eingang des ODER-Gates 322 empfängt ein Signal CFG2Q_ALWAYS_MASK, das ein Konfigurations-Bit ist, das anzeigt, dass das entsprechende Masken-Bit Q2A_MASK_REQ[X] immer maskiert werden sollte, falls das Signal MUXSEL auf hoch gesetzt ist. Das Signal MASK_MUXSEL wird auf hoch gesetzt, falls die Anforderung von dem sekundären Bus-Master nicht zu Daten vorliegt, die bereits in dem Warteschlangen-Block 127 existieren, d. h. die Anforderung muss zu dem primären PCI-Bus 24 übertragen werden. Demzufolge wird, zu jedem Zeitpunkt, zu dem eine Anforderung von einer Vorrichtung auf dem sekundären PCI-Bus 32 eingangsseitig zu dem primären PCI-Bus 24 übertragen wird, eine Prüfung in Bezug auf Bits CFG2Q_MULTI_MASTER[7:1] durchgeführt werden, um zu bestimmen, ob ein Multi-Threaded-Master erfasst worden ist.
  • Die Maskierung von Anforderungen kann durch Einstellen der geeigneten Bits in den Konfigurations-Registern 125 übergangen werden. Die verfügbaren Moden umfassen: 1) normaler Mode, in dem die Anforderungs-Maskierung freigegeben ist, mit der Ausnahme, falls ein Multi-Threaded-Master (CFG2Q_NEVER_MASK = 0, CFG2Q_ALWAYS_MASK = 0), 2) immer ein Maskierungs-Mode, in dem Anforderungen von erneut versuchenden Mastern maskiert werden, gerade wenn Multi-Threaded (CFG2Q_ALWAYS_MASK = 1) vorliegt, und 3) niemals Maskierungs-Mode, in dem die Anforderungen niemals maskiert sind (CFG2Q_NEVER_MASK = 1, CFG2Q_ALWAYS_MASKED = 0).
  • ERWEITERUNGS-KARTEN-EINSETZEN UND ENTFERNEN VON VERBINDUNGS-EXPANSIONS-KARTEN
  • Wie in den 1 und 27A dargestellt ist, besitzen die zwei Expansionskästen 30a und 30b, von einem gemeinsamen Design 30, jeweils die sechs Hot-Plug-Schlitze 36 (36af), in denen die herkömmlichen Erweiterungskarten 807 eingesetzt und entfernt werden können (Hot-Plugged), während das Computersystem 10 hochgefahren bzw. eingeschaltet verbleibt. Die sechs mechanischen Hebel 802 werden dazu verwendet, selektiv die Expansionskarten 807 zu sichern (wenn geschlossen, oder verriegelt, ist), die in die entsprechenden Hot-Plug-Schlitze 36 eingesetzt werden. Zu Zwecken eines Entfernens oder eines Einsetzens der Expansionskarten 807 in einen der Schlitze 36 muss der entsprechende Hebel 802 geöffnet werden, oder entriegelt werden, und so lange wie der Hebel 802 geöffnet ist, verbleibt der entsprechende Schlitz 36 abgeschaltet.
  • Wenn der Hebel 802, der die Expansionskarte 807 an seinem Schlitz 36 sichert, geöffnet ist, erfasst das Computersystem 10 dieses Auftreten und fährt die Karte 802 herunter (und den entsprechenden Schlitz 36), bevor die Karte 807 von deren Schlitz bzw. Einsteckplatz 36 entfernt werden kann. Schlitze bzw. Einsteckplätze 36, die heruntergefahren sind, ähnlich anderen Schlitzen 36, die keine Karten 807 halten, verbleiben heruntergefahren bzw. abgeschaltet, bis eine Software des Computersystems 10 selektiv die Schlitze bzw. Einsteckplätze 36 hochfährt.
  • Die Karte 46, eingesetzt in den Kartenschlitz 34, besitzt den Brücken-Chip 48, der den Sicherungs-Status (offen oder geschlossen) der Hebel 802 überwacht und irgendeine Karte 807 (und einen entsprechenden Schlitz 36) herunterfährt, der nicht durch seinen Hebel 802 gesichert ist. Eine Software des Computersystems 10 kann auch selektiv irgendeinen der Schlitze 36 herunterfahren.
  • Die Karten 807 werden durch eine Hochfahrsequenz hochgefahren und durch eine Herunterfahrsequenz heruntergefahren. In der Hochfahrsequenz (the power up sequence) wird Energie zuerst zu der Karte 807 zugeführt, die hochgefahren werden soll, und danach wird ein PCI-Takt-Signal (von dem PCI-Bus 32) zu der Karte 807 geliefert, die hochgefahren wird. Verbleibende PCI-Bus-Signal-Leitungen der Karte 807 werden dann mit entspre chenden Leitungen des PCI-Busses 32 verbunden. Zuletzt wird das Reset-Signal für die Karte 807, die hochgefahren wird, weggenommen, was die Karte 807 außerhalb eines Reset-Zustands bringt.
  • Die Hochfahrsequenz ermöglicht der Schaltung der Karte 807, dass sie hochgefahren wird, um vollständig funktional mit dem PCI-Takt-Signal zu werden, bevor die verbleibenden PCI-Bus-Signale geliefert werden. Wenn das Taktsignal und die verbleibenden PCI-Bus-Signale mit der Karte 807 verbunden werden und bevor die Karte 807 zurückgesetzt wird, besitzt der Brücken-Chip 48 eine Kontrolle des PCI-Busses 32. Da der Brücken-Chip 48 eine Kontrolle über den PCI-Bus 32 während dieser Zeiten besitzt, stören potentielle Defekte auf dem PCI-Bus 32 von der Power-up-Sequenz nicht die Operationen der Karten 807, die hochgefahren sind.
  • In der Herunterfahr- bzw. Power-Down-Sequenz wird die Karte 807, die heruntergefahren werden soll, zuerst zurückgesetzt. Als nächstes werden die PCI-Bus-Signale, ohne das PCI-Takt-Signal, von der Karte 807 entfernt. Der Brücken-Chip 48 unterbricht darauffolgend das PCI-Takt-Signal von der Karte 807, bevor Energie von der Karte 807 entfernt wird. Die Herunterfahr- bzw. Power-Down-Sequenz minimiert die Propagation von falschen Signalen von der Karte 807, die heruntergefahren werden soll, zu dem Bus 32, da die Schaltung auf der Karte 807 deren vollständige Funktion beibehält, bis die PCI-Bus-Signal-Leitungen entfernt sind.
  • Wenn das PCI-Taktsignal und die verbleibenden PCI-Bus-Signale unterbrochen werden, und wenn die Karte 807 zurückgesetzt bzw. in einen Reset-Zustand versetzt wird, besitzt der Brücken-Chip 48 eine Kontrolle des PCI-Busses 32. Da der Brücken-Chip 48 eine Kontrolle über den PCI-Bus 32 während dieser Zeitpunkte besitzt, stören potentielle Defekte auf dem PCI-Bus 32 von der Power-Down- bzw. Herunterfahr-Sequenz nicht die Operationen der Karten 807, die sie hochgefahren haben.
  • Der Brücken-Chip 48 umfasst die Seriell-Eingangs/Ausgangs-(SIO)-Schaltung 50, die die Hochfahr- und Herunterfahr-Sequenzen der Schlitze bzw. Einsteckplätze 36 über vierundzwanzig Steuersignale POUT[39:16] steuert. Die Steuersignale POUT[39:16] sind ein Untersatz von vierzig Ausgangs-Steuersignalen POUT[39:0], erzeugt durch die SIO-Schaltung 50. Die Steuersignale POUT[39:16] sind verriegelte Versionen von Schlitz-Bus-Freigabe-Signalen BUSEN#[5:0], Schlitz-Energie-Freigabe-Signalen PWREN[5:0], Schlitz-Takt-Freigabe-Signalen CLKEN#[5:0] und Schlitz-Reset-Signalen RST#[5:0], alle internen Signale der SIO-Schaltung 50, wie weiter nachfolgend beschrieben ist. Die Steuersignale POUT[39:0] und deren Beziehung zu den Signalen BUSEN#[5:0], PWREN[5:0], CLKEN#[5:0] und RST#[5:0] sind in der nachfolgenden Tabelle beschrieben:
  • PARALLEL-AUSGANGS-STEUER-SIGNALE (POUT[39:01])
    Figure 01170001
  • Wie in den 2 und 28 dargestellt ist, besitzt jeder Hot-Plug-Schlitz 36 die zugeordnete Umschalt-Schaltung 41 zum Verbinden und Trennen des Schlitzes 36 mit und von dem PCI-Bus 32. Die Umschalt-Schaltung 41 für jeden Schlitz 36 empfängt vier der Steuersignale POUT[39:16]. Als ein Beispiel wird, für den Schlitz 36a, wenn das Steuersignal POUT[28] aufgestellt ist, oder niedrig ist, der Schlitz 36a mit den Bus-Signal-Leitungen des PCI-Busses 32 durch eine Umschalt-Schaltung 47 verbunden. Wenn das Steuersignal POUT[28] weggenommen ist, oder hoch ist, wird der Schlitz 36a von den Bus-Signal-Leitungen des PCI-Busses 32 getrennt.
  • Wenn das Steuersignal POUT[22] aufgestellt ist, oder niedrig ist, wird der Schlitz 36a mit einem PCI-Takt-Signal CLK über eine Umschalt-Schaltung 43 verbunden. Wenn das Steuersignal POUT[22] weggenommen ist, oder hoch ist, wird der Schlitz 36a von dem Taktsignal CLK getrennt.
  • Wenn das Steuersignal POUT[34] aufgestellt ist, oder hoch ist, wird der Schlitz 36a mit einem Karten-Spannungs-Versorgungs-Pegel VSS über eine Umschalt-Schaltung 45 verbunden. Wenn das Steuersignal POUT[34] weggenommen ist, oder niedrig ist, wird der Schlitz 36a von dem Karten-Spannungs-Versorgungs-Pegel VSS getrennt.
  • Wenn das Steuersignal POUT[16] aufgestellt ist oder niedrig ist, wird der Schlitz 36a zurückgesetzt, und wenn das Steuersignal POUT[16] weggenommen ist, oder hoch ist, gelangt der Schlitz 36a aus seinem Reset-Zustand.
  • Wie in 2 zu sehen ist, kann die SIO-Schaltung 50 selektiv bis zu einhundertachtundzwanzig (sechzehn Bytes) von verriegelten Status-Signalen STATUS[127:0], geliefert durch den Erweiterungskasten 30, überwachen. Die Status-Signale STATUS[127:0] bilden einen „Snapshot" von ausgewählten Zuständen des Erweiterungskastens 30. Die Status-Signale STATUS[127:0] umfassen sechs Status-Signale STATUS[5:0], die den Sicherungs-Status (geöffnet oder geschlossen) jedes der Hebel 802 anzeigen. Die SIO-Schaltung 50 überwacht die Status-Signale STATUS[31:0] hinsichtlich Änderungen in deren logischen Spannungspegeln. Die SIO-Schaltung 50 verschiebt seriell die Status-Signale STATUS[127:32] in die SIO-Schaltung 50 hinein, wenn durch die CPU 14 angewiesen ist, dies so vorzunehmen.
  • Die SIO-Schaltung 50 empfängt seriell die Status-Signale STATUS[127:0], das am wenigsten signifikanteste Signal zuerst, und zwar über ein serielles Daten-Signal NEW_CSID. Das Daten-Signal NEW_CSID wird durch den seriellen Ausgang des paral lelen Eingangs-Verschieberegisters 82 mit zweiunddreißig Bits, angeordnet auf einer Leiterplatte des Erweiterungskastens 30, zusammen mit den Schlitzen bzw. Einsteckplätzen 36, geliefert.
  • Das Register 82 empfängt, über dessen parallele Eingänge, vierundzwanzig Parallel-Status-Signale PIN[23:0], vier zugeordnet zu jedem der Hot-Plug-Schlitze 36, die in den zweiunddreißig am wenigsten signifikanten Status-Signalen STATUS[31:0] umfasst sind. Wenn sich der Status, angezeigt durch eines oder mehrere der Status-Signale STATUS[31:0], ändert (der logische Spannungs-Pegel ändert sich), erzeugt der Brücken-Chip 48 eine Unterbrechungs-Anforderung zu der CPU 14 durch Aufstellen, oder Ansteuern auf niedrig, eines seriellen Unterbrechungs-Anforderungs-Signals SI_INTR#, das über einen Unterbrechungs-Empfangs-Block 132 empfangen wird. Die Status-Signale PIN[23:0] umfassen zwei PCI-Karten-Präsenz-Signale (PRSNT1# und PRSNT2#), zugeordnet zu jedem Schlitz 36.
  • Sechs Status-Signale PIN[5:0], entsprechend zu deren verriegelten Versionen, Status-Signale STATUS[5:0], zeigen den Sicherungs- oder Eingriffs-Status (offen oder geschlossen) jedes der Hebel 802 an. Sechs Gleit-Schalter 805 (27A27C) werden durch die Bewegung deren entsprechender Hebel 802 betätigt und werden dazu verwendet, elektrisch den Sicherungs-Status des entsprechenden Hebels 802 anzuzeigen. Jeder Schalter 805 besitzt ein erstes Terminal, verbunden mit Masse, und ein zweites Terminal, das das entsprechende eine der Status-Signale PIN[5:0] zuführt. Das zweite Terminal ist mit einem Versorgungs-Spannungs-Pegel VDD über einen von sechs Widerständen 801 verbunden.
  • Falls sich einer der Hebel 802 öffnet und die Karte 807, gesichert durch den Hebel 802, entsichert wird, wird das entsprechende eine der Status-Signale PIN[5:0] aufgestellt, oder auf hoch angesteuert. Als ein Beispiel wird, für den Schlitz 36a, das Status-Signal PIN[0] weggenommen oder auf niedrig angesteuert, wenn der entsprechende Hebel 802 geschlossen ist. Wenn der Hebel 802 für den Schlitz 36a geöffnet ist, wird das Status-Signal PIN[0] aufgestellt, oder auf hoch angesteuert.
  • Das Register 82 empfängt auch eine serielle Datenfolge von verriegelten Status-Signalen STATUS[127:32], die keine Unterbrechungen verursachen, wenn sich der logische Spannungs-Pegel eines der Signale STATUS[127:32] ändert. Die Status-Signale STATUS[127:32] werden durch das Verschiebe-Register 52 mit sechzehn Bits, angeord net auf der Leiterplatte des Expansionskastens 30, mit den Schlitzen 36, gebildet. Das Verschiebe-Register 52 empfängt Status-Signale an seinen parallelen Eingängen und verriegelt die Status-Signale STATUS[127:32], wenn durch die SIO-Schaltung 50 instruiert ist, dies so vorzunehmen. Das Verschiebe-Register 52 serialisiert die Status-Signale STATUS[127:32] und liefert die Signale STATUS[127:32] zu dem seriellen Eingang des Registers 82 über ein serielles Daten-Signal CSID_I.
  • Wenn durch die SIO-Schaltung 50 instruiert ist, verriegelt das Register 82 Status-Signale PIN[23:0], bildet die Status-Signale STATUS[31:0], liefert die Status-Signale STATUS[31:0] und liefert ein Byte oder mehr der Status-Signale STATUS[127:32] (wenn dies durch die CPU 14 angefordert ist), in einem am wenigsten signifikanten Signal einer ersten Art, zu der SIO-Schaltung 50, und zwar über das serielle Daten-Signal NEW_CSID. Die Status-Signale STATUS[127:0] werden durch die nachfolgende Tabelle beschrieben:
  • STATUS[127:0]
    Figure 01200001
  • Figure 01210001
  • Wie in den 2 und 30 dargestellt ist, verriegelt, wenn eine SIO-Schaltung 50 ein Register-Lade-Signal CSIL_O_ aufstellt, oder auf niedrig ansteuert, das Schiebe-Register 52 die Status-Signale STATUS[127:32] und das Schiebe-Register 82 verriegelt die Status-Signale STATUS[31:0]. Wenn die SIO-Schaltung 50 das Signal CSIL_O_wegnimmt, oder auf hoch ansteuert, verschieben beide Register 52 und 82 seriell deren Daten zu der SIO-Schaltung 50 an der positiven Flanke des Taktsignals CSIC_O, geliefert durch die SIO-Schaltung 50. Das Taktsignal CSIC_O wird zu der und auf einem Viertel der Frequenz des PCI-Taktsignals CLK synchronisiert.
  • Wie in 29 dargestellt ist, verwendet, zu Zwecken einer Überwachung, oder für ein Abtasten, der Status-Signale STATUS[31:0], die SIO-Schaltung 50 ein 32-Bit- Unterbrechungs-Register 800, dessen Bit-Positionen den Signalen STATUS[31:0] entsprechen. Die SIO-Schaltung 50 aktualisiert die Bits des Unterbrechungs-Registers 800, um die entsprechenden Status-Signale STATUS[31:0] anzugleichen, die entprellt (debounced) worden sind, wie weiter nachfolgend beschrieben ist. Zwei Status-Signale STATUS[7:6] werden für zusätzliche Hot-Plug-Schlitze 36 reserviert, und das siebte und achte, signifikanteste Bit des Unterbrechungs-Registers 800 werden auch für die zusätzlichen Schlitze 36 reserviert. Das Unterbrechungs-Register 800 ist ein Teil eines Register-Logik-Blocks 808 der SIO-Schaltung 50, die mit dem PCI-Bus 32 gekoppelt ist.
  • Eine serielle Abtast-Eingangs-Logik 804 der SIO-Schaltung 50 tastet sequenziell, oder überwacht, die Status-Signale STATUS[31:0], das am wenigsten signifikante Signal zuerst, hinsichtlich Änderungen, wie dies durch Übergänge in deren logischen Spannungs-Pegeln angezeigt ist. Falls sich der Status von einem oder mehr der Status-Signale STATUS[5:0], zugeordnet den Hebeln 802, ändert, tritt die Seriell-Abtast-Eingangs-Logik 804 in einen langsamen Abtast-Mode ein, so dass die Status-Signale STATUS[5:0] zweiunddreißigmal innerhalb eines vorbestimmten Entprell- bzw. Debounce-Zeit-Intervalls abgetastet werden. Falls sich eines oder mehrere der Status-Signale STATUS[5:0] ändert, aktualisiert die serielle Abtast-Eingangs-Logik 804 das Unterbrechungsregister 800 (und stellt. das serielle Unterbrechungs-Signal SI_INTR# auf), falls das geänderte Status-Signal STATUS[5:0] auf demselben, logischen Spannungsniveau für zumindest ein vorbestimmtes Entprell-Zeit-Intervall verbleibt. Die Seriell-Abtast-Eingangs-Logik 804 ist mit programmierbaren Zeitgebern 806 gekoppelt, die das Ende des Entprell-Verzögerungs-Intervalls erzeugen und anzeigen, initiiert durch die Seriell-Abtast-Logik 804. Unter Fordern des Status, stabil für die Entprell-Zeit zu bleiben, minimiert das Intervall das unbeabsichtigte Power-Down von einem der Hot-Plug-Schlitze 36 aufgrund eines falschen Werts (d. h. eines „Defekts"), angezeigt durch eines der Status-Signale STATUS[5:0]. Wenn alle der Status-Signale STATUS[5:0] auf demselben, logischen Spannungspegel für mindestens das Entprell-Zeit-Intervall verbleiben, dann schreitet die Seriell-Abtast-Eingangs-Logik 804 fort, um noch einmal erneut alle zweiunddreißig Status-Signale STATUS[31:0] in dem schnelleren Abtast-Mode abzutasten.
  • Falls die Seriell-Abtast-Eingangs-Logik 804 eine Änderung in einem der Status-Signale STATUS[31:6] erfasst, instruiert die Seriell-Abtast-Eingangs-Logik 804 die Zeitgeber 806, ein anderes Debounce- bzw. Entprell-Verzögerungs-Intervall zu messen, stellt darauf das Seriell-Unterbrechungs-Signal SI_INTR# auf, aktualisiert das Unterbrechungs-Register 800 mit den Signalen STATUS[31:6], die sich geändert haben, und ignoriert weitere Änderungen in den Status-Signalen STATUS[31:6], bis das Entprell-Zeit-Intervall abläuft. Nach Ablaufen des Entprell-Zeit-Intervalls schreitet die Seriell-Abtast-Eingangs-Logik 804 fort, um Änderungen in den zweiunddreißig Status-Signalen STATUS[31:0] zu erkennen.
  • Wenn das Seriell-Unterbrechungs-Signal SI_INTR# aufgestellt ist, liest die CPU 14 darauffolgend das Unterbrechungs-Register 800, bestimmt, welche (es können mehr als eins sein) Status-Signale STATUS[3:0] die Unterbrechung verursachten, und nimmt das Seriell-Unterbrechungs-Signal SI_INTR# durch Schreiben einer „1" zu dem Bit oder den Bits des Unterbrechungs-Registers 800, die sich geändert haben, weg.
  • Die CPU 14 kann selektiv Unterbrechungs-Anforderungen, verursacht durch die Status-Signale STATUS[31:0], durch Schreiben einer „1" zu einem entsprechenden Bit eines Unterbrechungs-Maskierungs-Registers 810 mit zweiunddreißig Bits maskieren. Die CPU 14 kann auch selektiv irgendein Byte der Status-Signale STATUS[47:0] durch Schreiben einer Byte-Zahl des ausgewählten Bytes zu einem Seriell-Eingangs-Byte-Register 812 lesen. Die SIO-Schaltung 50 überträgt dann das erwünschte Byte in ein Seriell-Daten-Register 815 hinein.
  • Zum Beispiel schreibt, um das dreißigste Byte (Byte-Zahl zwei) der Status-Signale STATUS[23:16] zu lesen, die CPU 14 eine „2" in das Seriell-Eingangs-Byte-Register 812. Die Seriell-Abtast-Eingangs-Logik 804 verschiebt dann seriell Byte zwei der Status-Signale STATUS[23:16] in das Seriell-Daten-Register 815 hinein. Ein Busy-Status-Bit BS des Seriell-Eingangs-Byte-Registers 812 ist gleich zu „1", wenn die CPU 14 zu Anfang die erwünschte Byte-Zahl zu dem Seriell-Eingangs-Byte-Register 812 schreibt. Das Bit BS wird durch die SIO-Schaltung 50 gelöscht, nachdem das angeforderte Byte in das Seriell-Daten-Register 815 hinein verschoben worden ist.
  • Die CPU 14 kann einen der Schlitze 36 durch Schreiben einer „1" zu einem entsprechenden Bit eines Schlitz-Freigabe-Registers 817 hochfahren und den Schlitz 36 durch Schreiben einer „0" zu diesem Bit sperren. Weiterhin kann die CPU 14 einen der Schlitze 36 durch Schreiben einer „1" zu einem entsprechenden Bit eines Schlitz-Reset-Registers 819 zurücksetzen. Die Inhalte der Schlitz-Freigabe- 817 und der Schlitz-Reset-819 Register sind durch Signale SLOT_EN[5:0] und SLOT_RST_[5:0] jeweils dargestellt.
  • Um die Anforderung zu initiieren, angezeigt durch das Schlitz-Freigabe- 817 und Reset- 819 Register, zu initiieren, schreibt die CPU 14 eine „1" zu einem SO-Bit eines Steuer-Registers 814. Nachdem das SO-Bit aufgestellt ist (was ein GO_UPDATE Signal aufstellt, oder auf hoch ansteuert), initiiert die SIO-Schaltung 50 die erforderlichen Power-down- und/oder Power-up-Sequenzen und steuert sie.
  • Die Seriell-Abtast-Eingangs-Logik 804 ist mit einer EIN/AUS-Steuer-Logik 820 verbunden, die die Power-up- und Power-down-Sequenzen steuert. Die EIN/AUS-Steuer-Logik 820 liefert die Signale BUSEN#[5:0], CLKEN#[5:0], RST#[5:0] und PWREN[5:0] zu einer Seriell-Ausgangs-Logik 824.
  • Jede Power-up- und Power-down-Sequenz umfasst vier Verschiebe-Phasen, während denen ein anderer Schritt der Power-down- oder Power-up-Sequenz durchgeführt wird. Während jeder Verschiebe-Phase instruiert die EIN/AUS-Steuer-Logik 820 die Seriell-Ausgangs-Logik 824, die Steuer-Signale BUSEN#[5:0], CLKEN#[5:0], RST#[5:0] und PWREN[5:0] zu kombinieren; diese Signale zu verriegeln; und liefert seriell diese Signale (über ein serielles Daten-Signal CSOD_O) zu dem seriellen Eingang eines Ausgangs-Verschiebe-Registers 80. An dem Ende jeder Verschiebe-Phase instruiert die EIN/AUS-Steuer-Logik 820 das Verschiebe-Register 80, die Steuersignale POUT[35:12] zu aktualisieren.
  • Die EIN/AUS-Steuer-Logik 820 wird auch schnittstellenmäßig mit der Register-Logik 808 und einer Steuer-Logik 822 für eine Licht emittierende Diode (Light Emitting Diode – LED) verbunden. Die LED-Steuer-Logik 122 steuert den Ein/Aus-Status der sechs LEDs 54, die visuell anzeigen, ob die entsprechenden Hebel 802 verriegelt sind oder entriegelt sind. Die LEDs 54 können so programmiert werden, um dann zu blinken, wenn sie eingeschaltet sind, und zwar über LED-Steuerregister (nicht dargestellt) der Register-Logik 808.
  • Wie in 31A dargestellt ist, umfasst die Seriell-Abtast-Eingangs-Logik 804 eine Abtast-Zustand-Maschine 840, die das Abtasten der Status-Signale STATUS[31:0] hinsichtlich Änderungen steuert und das Verschieben eines ausgewählten Bytes der Status-Signale STATUS[47:0] in das Seriell-Eingangs-Byte-Register 815 hinein steuert.
  • Die Abtast-Zustand-Maschine 840 wird an der negativen Flanke eines Takt-Signals DIV2CLK getaktet, das zu einem PCI-Taktsignal CLK synchronisiert ist, und von einer Hälfte der Frequenz des PCI-Taktsignals CLK ist. Die Last- und Taktsignale, CSIL_O_ und CSIC_O, jeweils, werden durch die Abtast-Zustand-Maschine 840 geliefert. Das Taktsignal wird, wenn es freigegeben wird, zu dem Taktsignal CSIC_O synchronisiert.
  • Ein Bit/Byte-Zähler 841 zeigt, über ein Zweiunddreißig-Bit-Signal BIT_ACTIVE[31:0] an, welches Bit der Status-Signale STATUS[3:0] momentan durch das Seriell-Daten-Signal NEW_CSID repräsentiert wird. Das aufgestellte Bit des Signals BIT_ACTIVE[31:0] besitzt dieselbe Bit-Position wie das Status-Signal STATUS[31:0], dargestellt durch das Daten-Signal NEW_CSID.
  • Der Zähler 841 liefert auch ein Drei-Bit-Signal BIT[2:0], das darstellt, welches Bit des momentanen Bytes der Status-Signale STATUS[31:0] momentan durch die Abtast-Zustand-Maschine 840 abgetastet wird. Der Zähler 841 wird an der negativen Flanke eines Signals SHIFT_ENABLE getaktet. Die Ausgänge des Zählers 841 werden zurückgesetzt, oder gelöscht, wenn der Ausgang eines UND-Gates 842, verbunden mit dem Lösch-Eingang des Zählers 840, negiert wird.
  • Die Abtast-Zustand-Maschine 840 liefert ein Signal SCAN_IN_IDLE, das, wenn es aufgestellt wird, oder auf hoch gesetzt wird, anzeigt, dass sich die Abtast-Zustand-Maschine 840 in einem IDLE Zustand befindet, und momentan nicht irgendeines der Status-Signale STATUS[127:0] abtastet. Das Signal SCAN_IN_IDLE wird ansonsten weggenommen.
  • Das Signal SCAN_IN_IDLE wird zu einem Eingang des UND_Gates 842 geliefert. Der andere Eingang des UND-Gates 842 ist mit dem Ausgang eines ODER-Gates 843 verbunden. Ein Eingang des ODER-Gates 843 empfängt ein invertiertes HOLD_OFF Signal, und der andere Eingang des ODER-Gates 843 empfängt ein Signal GETTING_BYTE.
  • Das Signal HOLD_OFF zeigt, wenn es aufgestellt ist, oder auf hoch angesteuert ist, an, dass eine Änderung in dem einen der Status-Signale STATUS[5:0] erfasst worden ist, und die Seriell-Abtast-Logik 804 in den Langsam-Abtast-Mode eingetreten ist. In diesem Langsam-Abtast-Mode bzw. Slow-Scan-Mode wartet die Seriell-Abtast-Eingangs-Logik 804 auf ein vorbestimmtes Langsam-Abtast-Intervall, bevor die Status-Signale STATUS[31:0] erneut weitergeführt werden. Die Seriell-Abtast-Eingangs-Logik 804 zählt die Zahl von Malen, für die die Seriell-Abtast-Signale STATUS[5:0] während des Langsam-Abtast-Modes abgetastet werden, und verwendet diese Zählung, um zu bestimmen, wenn eines von dem Status-Signal STATUS[5:0] unverändert für das Entprell-Verzögerungs-Intervall verblieb, wie weiterhin nachfolgend beschrieben werden wird.
  • Deshalb werden, wenn sich die Abtast-Zustand-Maschine 840 in dem IDLE Zustand befindet und entweder das HOLD_OFF Signal weggenommen ist oder sich die Abtast-Zustand-Maschine 840 beim Lesen eines ausgewählten Bytes (ausgewählt durch die CPU 14) der Status-Signale STATUS[47:0] befindet, alle Ausgänge des Zählers 841 gelöscht oder gleich zu Null gesetzt.
  • Das Signal SHIFT_ENABLE wird durch den Ausgang eines UND-Gates 844 geliefert. Ein Eingang des UND-Gates 844 nimmt das Takt-Signal CSIC_O auf. Ein anderer Eingang des UND-Gates 844 nimmt ein Signal DIV2CLK# auf. Das Signal DIV2CLK# wird aufgestellt, oder auf niedrig angesteuert, an der negativen Flanke des Signals CLKDIV4. Der dritte Eingang des UND-Gates 844 empfängt ein Signal SCAN_IN_PROGRESS, das, wenn es aufgestellt wird, oder auf hoch angesteuert ist, anzeigt, dass die Abtast-Zustand-Maschine 840 momentan die Status-Signale STATUS[127:0] abtastet, und das Signal SCAN_IN_PROGRESS wird ansonsten weggenommen.
  • Deshalb wird, wenn die Abtast-Zustand-Maschine 840 nicht die Status-Signale STATUS[127:0] verschiebt, der Zähler 841 gesperrt. Weiterhin wird, wenn freigegeben ist, der Zähler 841 an der negativen Flanke des Taktsignals DIV2CLK getaktet.
  • Das Unterbrechungs-Register 800 empfängt Eingangs-Signale D_INTR_REG[31:0] an deren entsprechenden zweiunddreißig Eingängen. Die Last-Freigabe-Eingänge des Unterbrechungs-Registers 800 nehmen entsprechende Last-Freigabe-Signale UP-DATE_IRQ[31:0] auf. Das Unterbrechungs-Register 800 wird an der positiven Flanke des PCI-Taktsignals CLK getaktet.
  • Für die Zwecke, ein Protokoll über die Status-Signale STATUS[5:0] nach jeder Abtastung beizubehalten, liefert ein Mehrfach-Bit, D-Typ-Flip-Flop 836 Status-Signale SCAN_SW[5:0]. Der Lösch-Eingang des Flip-Flops 836 nimmt das Reset-Signal RST auf, und das Flip-Flop 836 wird an der positiven Flanke des Taktsignals CLK getaktet. Der Eingang des Flip-Flops 836 ist mit dem Ausgang eines Mehrfach-Bit-ODER-Gates 850 verbunden, das einen Eingang mit dem Ausgang eines Multi-Bit-UND-Gates 846 verbunden und einen Eingang mit dem Ausgang eines Multi-Bit-UND-Gates 847 verbunden besitzt. Ein Eingang des UND-Gates 846 nimmt sechs Bit-Freigabe-Signale BIT_ENABLE[5:0] auf (nachfolgend beschrieben) und der andere Eingang des UND-Gates 846 nimmt das Seri ell-Daten-Signal NEW_CSID auf. Ein Eingang des UND-Gates 847 nimmt invertierte Bit-Freigabe-Signale BIT_ENABLE[5:0] auf, und der andere Eingang des UND-Gates 847 nimmt die Signale SCAN_SW[5:0] auf.
  • Nur eines der Bit-Freigabe-Signale BIT_ENABLE[5:0] wird zu einem Zeitpunkt aufgestellt (wenn die Abtast-Zustand-Maschine 840 abtastet), und das aufgestellte Bit zeigt an, welches eine der entsprechenden Status-Signale STATUS[31:0] durch das Signal NEW_CSID dargestellt wird. Demzufolge werden, wenn die Abtast-Zustand-Maschine 840 abtastet, und zwar an jeder positiven Flanke des Taktsignals CLK, die Signale SCAN_SW[5:0] aktualisiert.
  • Die Bit-Freigabe-Signale BIT_ENABLE[31:0] werden durch den Ausgang eines Mehrfach-Bit-Multiplexers 832 geliefert, der die Bits BIT_ACTIVE[31:0] an seinem einen Eingang empfängt. Der Null-Eingang des Multiplexers 832 empfängt ein Zweiunddreißig-Bit-Signal, das für eine logische Null Indikativ ist. Der Auswahl-Eingang des Multiplexers 832 empfängt das Signal SHIFT_ENABLE.
  • Zu Zwecken einer Erfassung einer Änderung in den Status-Signalen STATUS[5:0], liefert ein Multi-Bit-, Exklusiv-Oder-(XOR)-Gate 848 Umschalt-Änderungs-Signale SW_CHG[5:0]. Wenn eines der Signale SW_CHG[5:0] aufgestellt ist oder hoch ist, änderte sich die logische Spannung des entsprechenden Status-Signals STATUS[5:0] während aufeinanderfolgender Abtastungen. Ein Eingang des XOR-Gates 848 ist mit dem Eingang des Flip-Flops 836 verbunden, und der andere Eingang des XOR-Gates 848 empfängt die Signale SCAN_SW[5:0].
  • Wie in 31D dargestellt ist, besitzt, zu Zwecken eines Anzeigens, wenn der logische Spannungs-Pegel eines ausgewählten Status-Signals STATUS[5:0] bei einem logischen Spannungs-Pegel für mindestens die Dauer des Debounce-Verzögerungs-Intervalls verblieben war, die Abtast-Eingangs-Logik 804 sechs Signale LSWITCH[5:0]. Der nicht-invertierende Eingang eines Flip-Flops 900 vom D-Typ liefert das Signal LSWITCH[5] an seinem nicht-invertierenden Ausgang. Das Signal LSWITCH[5] wird aufgestellt oder auf hoch angesteuert, um den vorstehend beschriebenen Zustand anzuzeigen, und wird ansonsten weggenommen. Das Flip-Flop 900 wird an der positiven Flanke des Taktsignals CLK getaktet, und der Lösch-Eingang des Flip-Flops 900 nimmt das RST-Signal auf.
  • Der Eingang des Flip-Flops 900 ist mit dem Ausgang eines Multiplexers 902 verbunden, der ein D_LSWITCH[5] Signal liefert. Der Auswahl-Eingang des Multiplexers 902 ist mit dem Ausgang eines UND-Gates 903 verbunden, der ein MAX5 Signal und ein SCAN_END Signal aufnimmt. Das SCAN_END Signal zeigt, wenn es aufgestellt ist, an, dass die Abtast-Zustand-Maschine 840 deren momentane Abtastung abgeschlossen hat. Fünf Signale (MAX5, MAX4, MAX3, MAX2, MAX1 und MAX0) zeigen an, ob das entsprechende Status-Signal STATUS[5], STATUS[4], STATUS[3], STATUS[2], STATUS[1] oder STATUS[0], jeweils, auf demselben, logischen Spannungs-Niveau für mindestens die Dauer des Debounce-Zeit-Intervalls verblieben ist. Der Null-Eingang des Multiplexers 902 empfängt das Signal LSWITCH[5], und der eine Eingang des Multiplexers 902 empfängt das Signal SCAN_SW[5]. Das Signal SCAN_END wird durch den Ausgang eines UND-Gates 851 geliefert (31B). Das UND-Gate 851 empfängt ein Signal STOP_SCAN und ein Signal SCAN_DONE. Das Signal STOP_SCAN wird aufgestellt, oder auf hoch angesteuert, wenn Zustände zum Beenden des Abtastens durch die Abtast-Zustand-Maschine 840 vorhanden sind, wie weiter nachfolgend beschrieben ist. Das Signal SCAN_END ist eine gepulste Version (für einen Zyklus des CLK-Signals) des Signals STOP_SCAN. Die Signale LSWITCH[4]–LSWITCH[0] und D_LSWITCH[4]–D_LSWITCH[0] werden in einer ähnlichen Weise aus den jeweiligen SCAN_SW[4]–SCAN_SW[0] Signalen und den jeweiligen Signalen MAX4–MAX0 erzeugt.
  • Zu Zwecken einer Aktualisierung wird der logische Spannungspegel der Status-Signale STATUS[31:6] als diese Signale eingetastet, ein Multi-Bit-D-Typ-Flip-Flop 905 (31D) liefert sechsundzwanzig Signale SCAN_NSW[31:6]. Eines der Signale SCAN_NSW[31:6] wird aufgestellt, oder auf hoch angesteuert, um diesen Zustand anzuzeigen, und wird ansonsten weggenommen. Das Flip-Flop 905 wird an der positiven Flanke des Taktsignals CLK getaktet und der Löscheingang des Flip-Flops 905 nimmt das RST-Signal auf.
  • Der Eingang des Flip-Flops 905 ist mit dem Ausgang eines Multi-Bit-Multiplexers 906 verbunden. Der Auswahl-Eingang des Multiplexers 906 nimmt ein invertiertes CHECK_SWITCH_ONLY Signal auf. Das CHECK_SWITCH_ONLY Signal wird aufgestellt, oder auf hoch angesteuert, wenn die Abtast-Zustand-Maschine 850 nur die Status-Signale STATUS[5:0] oder die Status-Signale STATUS[127:32] abtastet (d. h. Änderungen in den Signalen STATUS[31:6] ignorieren), und sie ansonsten wegnimmt. Der Null-Eingang des Multiplexers 906 empfängt die Signale SCAΝ_NSW[31:6], und der eine Eingang des Multiplexers 906 ist mit dem Ausgang eines Multi-Bit-ODER-Gates 907 verbun den. Ein Eingang des ODER-Gates 907 ist mit dem Ausgang eines Multi-Bit-UND-Gates 908 verbunden, und der andere Eingang des ODER-Gates 907 ist mit dem Ausgang eines Multi-Bit-UND-Gates 872 verbunden.
  • Ein Eingang des UND-Gates 908 empfängt die Signale BIT_ENABLE[31:6]. Der andere Eingang des UND-Gates 908 ist mit dem Ausgang eines Multi-Bit-Multiplexers 909 verbunden. Falls das NEW_CSID Signal aufgestellt ist, oder hoch ist, liefert der Multiplexer 909 ein Signal mit sechsundzwanzig Bits gleich zu „h3FFFFFF". Ansonsten liefert der Multiplexer ein Signal mit sechsundzwanzig Bits gleich zu „0". Ein Eingang des UND-Gates 872 ist mit dem invertierten Ausgang des UND-Gates 908 verbunden und der andere Eingang des UND-Gates 872 nimmt die Signale SCAN_NSW[31:6] auf.
  • Zu Zwecken eines Speicherns des logischen Spannungs-Pegels der Status-Signale STATUS[31:6] nach jeder Abtastung liefert ein Multi-Bit-D-Typ-Flip-Flop 871 sechsundzwanzig Signale LNON_SW[31:6]. Eines der Signale LNON_SW[31:6] wird aufgestellt, oder auf hoch gesetzt, um diesen Zustand anzuzeigen, und wird ansonsten weggenommen. Das Flip-Flop 871 wird auf der positiven Flanke des Taktsignals CLK getaktet, und der Lösch-Eingang des Flip-Flops 871 empfängt das RST-Signal.
  • Der Eingang des Flip-Flops 871 ist mit dem Ausgang eines Multi-Bit-Multiplexers 870 verbunden, der die Signale D_LNON_SW[31:6] liefert. Der Auswahl-Eingang des Multiplexers 870 empfängt das Signal SCAN_END. Der Null-Eingang des Multiplexers 870 empfängt die Signale LNON_SW[31:6], und der eine Eingang des Multiplexers 807 empfängt die Signale SCAN_NSW[31:6].
  • Wie in 31B dargestellt ist, umfasst, zu Zwecken eines Erzeugens der MAX0, MAX1, MAX2, MAX3, MAX4 und MAX5 Signale, die Seriell-Eingangs-Logik 804 sechs Zähler 831af, jeweils, von einem gemeinsamen Design 831. Jeder Zähler 831 wird initialisiert (auf einen vorbestimmten Zähl-Wert), wenn ein UND-Gate 892 seinen Ausgang aufstellt, oder auf hoch ansteuert. Für den Zähler 831a empfängt das UND-Gate 892 das Signal BIT_ENCABLE[0], das Signal SW_CHG[0] und ein invertiertes Signal QUICK_FILTER. Das Signal QUICK_FILTER kann, wenn es aufgestellt ist, oder hoch ist, dazu verwendet werden, das Debounce-Zeit-Intervall zu umgehen. Das QUICK_FILTER Signal wird normalerweise weggenommen oder auf niedrig gesetzt. Der Takt-Eingang des Zählers 831 ist mit dem Ausgang eines UND-Gates 893 verbunden. Für den Zähler 831a empfängt das UND-Gate 893 das BIT_ENABLE[0] Signal, das invertierte SW_CHG[0] Si gnal, das invertierte GETTING_BYTE Signal und das invertierte MAX0 Signal. Deshalb wird, für den Zähler 831a, wenn sich einmal die logische Spannung des Status-Signals STATUS[0] ändert, zu jedem Zeitpunkt, zu dem die Seriell-Abtast-Logik 804 das Status-Signal STATUS[0] abtastet, der Zähler 831a erhöht. Wenn der Zähler 831a seinen maximalen Wert erreicht, wird das Signal MAX0 aufgestellt, was anzeigt, dass das Debounce-Zeit-Intervall abgelaufen ist. Falls sich die logische Spannung des Status-Signals STATUS[0] während der Zählung ändert, wird der Zähler 831a reinitialisiert, und die Zählung beginnt erneut. Die anderen Zähler 831bf arbeiten in einer ähnlich Weise in Bezug auf deren entsprechende Status-Signale STATUS[5:1].
  • Das HOLD_OFF Signal instruiert, wenn es aufgestellt ist, einen der Zeitgeber 806, ein vorbestimmtes Langsam-Abtast-Intervall zu messen, das die serielle Abtast-Zustand-Maschine 840 in den Langsam-Abtast-Mode versetzt. Wenn der Zeitgeber 806 eine Messung dieses Verzögerungs-Intervalls abschließt, stellt der Zeitgeber 806 ein FTR_TIMEOUT Signal auf, oder steuert es auf hoch an, das ansonsten weggenommen wird, oder negiert wird. Das Produkt dieses Langsam-Abtast-Intervalls und der Zahl von Zählungen für den Zähler 831, um seinen maximalen Wert zu erreichen, ist gleich zu dem Debounce-Zeit-Intervall (8 ms).
  • Das HOLD_OFF Signal wird durch den Ausgang eines JK-Flip-Flops 885 geliefert. Das Flip-Flop 885 wird an der positiven Flanke des CLK Signals getaktet, und der Lösch-Eingang des Flip-Flops 885 empfängt das RST-Signal. Der J-Eingang ist mit dem Ausgang eines UND-Gates 883 verbunden und der K-Eingang ist mit dem Ausgang eines UND-Gates 884 verbunden. Ein Eingang des UND-Gates 884 ist mit dem Ausgang eines Flip-Flops 896 vom JK-Typ verbunden, und der andere Eingang des UND-Gates 893 empfängt das SCAN_END Signal. Ein Eingang des UND-Gates 884 ist mit dem invertierten Ausgang des UND-Gates 883 verbunden, ein Eingang des UND-Gates 884 empfängt das FTR_TIMEOUT Signal, und ein anderer Eingang des UND-Gates 884 empfängt ein SCAN_IN_IDLE Signal, das aufgestellt wird, wenn sich die Abtast-Zustand-Maschine 840 in deren IDLE Zustand befindet, wie dies weiter nachfolgend beschrieben ist.
  • Das Flip-Flop 895 wird an der positiven Flanke des CLK Signals getaktet und der Lösch-Eingang des Flip-Flops 895 empfängt das RST-Signal. Der J-Eingang ist mit dem Ausgang eines NAND-Gates 894 verbunden, der die MAX0, MAX1, MAX2, MAX3, MAX4 und MAX5 Signale aufnimmt. Der K-Eingang ist mit dem Ausgang eines UND-Gates 826 verbunden, der mit dem invertierten J-Eingang des Flip-Flops 895 verbunden ist, und empfängt ein invertiertes SCAN_IN_PROGRESS Signal, das dann aufgestellt wird, wenn die Abtast-Zustand-Maschine 840 die Status-Signale STATUS[31:0] abtastet.
  • Zu Zwecken einer Erzeugung des CHECK_SWITCH_ONLY Signals umfasst die Seriell-Abtast-Eingangs-Logik 804 ein Flip-Flop 864 vom JK-Typ, das das CHECK_SWITCH_ONLY Signal an dem nicht-invertierendem Ausgang liefert, und wird an der positiven Flanke des CLK-Signals getaktet. Der Lösch-Eingang des Flip-Flops 864 empfängt das RST-Signal, und der J-Eingang des Flip-Flops 864 empfängt ein DEBOUNCE Signal, das, wenn es aufgestellt, oder auf hoch angesteuert, ist, anzeigt, dass sich einer des logischen Spannungs-Pegels eines oder mehrere der Status-Signale STATUS[31:6] geändert hat. Der K-Eingang des Flip-Flops 864 ist mit dem Ausgang eines UND-Gates 865 verbunden. Ein Eingang des UND-Gates 865 nimmt das invertierte DEBOUNCE Signal auf und ein Eingang des UND-Gates 865 nimmt das SCAN_IN_IDLE Signal auf.
  • Wie in 31C dargestellt ist, wird das Debounce-Signal DEBOUNCE durch den nicht-invertierenden Ausgang eines Flip-Flops 860 vom JK-Typ geliefert. Das Flip-Flop 860 wird durch die positive Flanke des Taktsignals CLK getaktet, und der Lösch-Eingang des Flip-Flops 860 empfängt das Reset-Signal RST. Der J-Eingang des Flip-Flops 860 empfängt ein Signal CHANGE_ON_INPUT. Das Signal CHANGE_ON_INPUT wird aufgestellt, oder auf hoch angesteuert, wenn eine Änderung in einem der Status-Signale STATUS[31:6] an dem Ende einer Abtastung durch die Seriell-Eingangs-Logik 804 erfasst wird, und wird ansonsten weggenommen. Der K-Eingang ist mit dem Ausgang eines UND-Gates 861 verbunden, das ein DB_TIMEOUT Signal an einem seiner Eingänge aufnimmt. Der andere Eingang des UND-Gates 861 nimmt das invertierte CHANGE_ON_INPUT Signal auf. Das DB_TIMEOUT Signal wird durch die Zeitgeber 106 für einen Zyklus des CLK-Signals aufgestellt, wenn die Debounce-Zeit-Verzögerung (initiiert durch das Aufstellen des DEBOUNCE Signals) abgelaufen ist. Das Aufstellen des DB_TIMEOUT Signals negiert das DEBOUNCE Signal an der nächsten, positiven Flanke des CLK-Signals.
  • Das CHANGE_ON_INPUT Signal wird durch den nicht-invertierenden Ausgang eines Flip-Flops 866 vom JK-Typ geliefert, das an der positiven Flanke des CLK-Signals getaktet wird. Der Lösch-Eingang des Flip-Flops empfängt das RST-Signal. Der J-Eingang des Flip-Flops 866 ist mit dem Ausgang eines UND-Gates 869 verbunden, das das SCAN_END Signal aufnimmt, und der andere Eingang des UND-Gates 869 ist mit dem Ausgang eines ODER-Gates 867 verbunden. Das ODER-Gate 867 verknüpft logisch ODER-mäßig alle eines Satzes von NSW_CHG[31:6] Signalen. Die Bit-Positionen der Signale NSW_CHG[31:6] entsprechen den Bit-Positionen der Status-Signale STATUS[31:6] und zeigen an, durch deren Aufstellen, ob sich das entsprechende Status-Signal STATUS[31:6] nach der letzten Abtastung geändert hat. Das UND-Gate 869 nimmt weiterhin das SCAN_END Signal auf. Der K-Eingang des Flip-Flops 866 ist mit dem Ausgang eines UND-Gates 868 verbunden, der das invertierte SCAN_IN_PROGRESS Signal und den invertierten Ausgang des UND-Gates 869 aufnimmt. Die Signale NSW_CHG[31:6] werden durch den Ausgang eines Multi-Bit-XOR-Gates 862 geliefert, das die Signale D_LNON_SW[31:6] und LNON_SW[31:6] aufnimmt.
  • Der nicht-invertierende Ausgang eines Multi-Bit-D-Typ-Flip-Flops 912 liefert Bits SI_DATA[7:0] für das Seriell-Daten-Register 815. Der Lösch-Eingang des Flip-Flops 912 empfängt das Signal RST und das Flip-Flop 912 wird an der positiven Flanke des CLK-Signals getaktet. Der Signal-Eingang des Flip-Flops 912 ist mit dem Ausgang eines Multi-Bit-Multiplexers 916 verbunden. Der Auswahl-Eingang des Multiplexers 916 ist mit dem Ausgang eines UND-Gates 914 verbunden, und der Null-Eingang des Multiplexers 916 nimmt die Bits SI_DATA[7:0] auf. Das UND-Gate 914 nimmt die Signale GETTING_BYTE und SHIFT_ENABLE auf. Demzufolge werden, wenn die Seriell-Abtast-Logik 804 nicht ein angefordertes Byte der Status-Signale STATUS[47:0] verschiebt, die Werte der Bits SI_DATA[7:0] bewahrt.
  • Der eine Eingang des Multiplexers 916 ist mit dem Ausgang eines Multi-Bit-Multiplexers 910 verbunden. Der eine Eingang des Multiplexers 910 ist mit dem Ausgang eines Multi-Bit-ODER-Gates 911 verbunden, und der Null-Eingang des Multiplexers ist mit dem Ausgang eines Multi-Bit-UND-Gates 915 verbunden. Der Auswahl-Eingang des Multiplexers 910 empfängt das Signal NEW_CSID.
  • Ein Eingang des UND-Gates 915 empfängt die Bits SI_DATA[7:0], und ein invertierender Eingang des UND-Gates 915 ist mit dem Ausgang eines 3 × 8 Decodierers 913 verbunden. Der Decodieren 913 empfängt das Signal BIT[2:0]. Ein Eingang des ODER-Gates 911 empfängt die Bits SI_DATA[7:0], und der andere Eingang des ODER-Gates 911 empfängt den Ausgang des Decodierers 913.
  • Die Seriell-Eingangs-Logik 804 liefert fünf Signale RST_SWITCH[5:0] (entsprechend den Bit-Positionen der Status-Signale STATUS[5:0]) zu der EIN/AUS-Steuer-Logik 820, was, durch deren Aufstellen, anzeigt, ob der entsprechende Schlitz 36af heruntergefahren werden sollte. Die EIN/AUS-Steuer-Logik 820 zeigt an, wenn der Schlitz 36 (angezeigt durch die RST_SWIITCH[5:0] Signale) durch das darauffolgende Einstellen eines von fünf Signalen CLR_SWITCH[5:0] heruntergefahren worden ist, deren Bit-Positionen den Signalen RST_SWITCH[5:0] entsprechen. Nach Empfangen der Anzeige, dass der Schlitz bzw. Einsteckplatz 36 heruntergefahren worden ist, nimmt die serielle Logik 804 dann das entsprechende RST_SWITCH[5:0] Signal zurück.
  • Die Signale RST_SWITCH[5:0] werden durch den nicht-invertierenden Ausgang eines Multi-Bit-Flip-Flops 891 vom D-Typ (31B) geliefert. Der Lösch-Eingang des Flip-Flops 891 empfängt das Reset-Signal RST und das Flip-Flop 891 wird an der positiven Flanke des Taktsignals CLK getaktet. Der Eingang des Flip-Flops 891 ist mit dem Ausgang eines Multi-Bit-ODER-Gates 857 verbunden, der einen Eingang mit dem Ausgang eines Multi-Bit-UND-Gates 859 verbunden besitzt und einen Eingang mit dem Ausgang eines Multi-Bit-UND-Gates 855 verbunden besitzt. Ein Eingang des UND-Gates 859 ist mit dem Ausgang eines Multiplexers 853 verbunden, und der andere Eingang des UND-Gates 859 empfängt verriegelte Schlitz-Freigabe-Signale LSLOT_EN[5:0], die anzeigen, durch deren Aufstellen, ob der entsprechende Schlitz bzw. Einsteckplatz 36af hochgefahren ist. Ein Eingang des UND-Gates 855 nimmt die Signale CLR_SWITCH_[5:0] auf. Ein anderer Eingang des UND-Gates 855 nimmt die Signale RST_SWITCH[5:0] auf. Ein anderer Eingang des UND-Gates 855 ist mit dem invertierten Ausgang des Multiplexers 853 verbunden.
  • Der Null-Eingang des Multiplexers 853 empfängt ein Sechs-Bit-Signal, das für Null Indikativ ist. Der eine Eingang des Multiplexers 853 ist mit dem Ausgang eines Multi-Bit-UND-Gates 849 verbunden. Ein Eingang des UND-Gates 849 empfängt die Signale D_LSWITCH[5:0], und der andere Eingang des UND-Gates 849 empfängt die invertierten Signale L_SWITCH[5:0]. Der Auswahl-Eingang des Multiplexers 853 empfängt das SCAN_END Signal.
  • Zu Zwecken einer Erzeugung des SI_INTR# Signals umfasst die Seriell-Abtast-Logik 804 ein Flip-Flop 882 vom D-Typ, das das Seriell-Unterbrechungs-Signal SI_INTR# an seinem invertierenden Ausgang liefert. Das Flip-Flop 882 wird an der positiven Flanke des CLK-Signals getaktet, und der Löscheingang des Flip-Flops 882 empfängt das RST-Signal. Der Eingang des Flip-Flops 882 ist mit dem Ausgang eines ODER-Gates 881 verbunden, der zweiunddreißig anhängige Unterbrechungs-Signale PENDING_IRQ[31:0] aufnimmt, die, durch deren Aufstellen, oder Ansteuern auf hoch, anzeigen, ob eine Unterbrechung für das entsprechende eine der Status-Signale STATUS[31:0] anhängig ist. Die Signale PENDING_IRQ[31:0] werden ansonsten weggenommen.
  • Wie in 31E dargestellt ist, liefert ein Multi-Bit-Flip-Flop 979 vom D-Typ die Signale PENDING_IRQ[31:0] an seinem nicht-invertierenden Ausgang. Das Flip-Flop 979 wird an der positiven Flanke des Signals CLK getaktet und empfängt das Signal RST an seinem Lösch-Eingang. Der Eingang des Flip-Flops 979 ist mit dem Ausgang eines Multi-Bit-UND-Gates 981 verbunden, das invertierte Unterbrechungs-Maskierungs-Signale INTR_MASK[31:0] an einem Eingang aufnimmt. Die Signale INTR_MASK[31:0] sind für ein entsprechendes Bit des Unterbrechungs-Masken-Registers 810 indikativ. Der andere Eingang des UND-Gates 981 ist mit dem Ausgang eines Multi-Bit-ODER-Gates 835 verbunden. Ein Eingang des ODER-Gates 835 ist mit dem Ausgang eines Multi-Bit-UND-Gates 862 verbunden und der andere Eingang des ODER-Gates 835 ist mit dem Ausgang eines Multi-Bit-UND-Gates 834 verbunden.
  • Das UND-Gate 862 nimmt invertierte PENDING_IRQ[31:0] Signale auf und signalisiert SET_IRQ[31:0]. Die Signale SET_PIRQ[31:0] werden aufgestellt, um anzuzeigen, dass eine Unterbrechungs-Anforderung für das entsprechende eine der Status-Signale STATUS[31:0] erzeugt werden sollte. Deshalb werden die Signale PENDING_IRQ[31:0] mit den Signalen SET_PIRQ[31:0] aktualisiert, falls sie nicht durch die Signale INTR_MASK[31:0] maskiert sind.
  • Das UND-Gate 834 empfängt die Signale PENDING_IRQ[31:0], invertierte Signale SET_PIRQ[31:0] und invertierte WR_INTR_REG[31:0] Signale. Die Signale WR_INTR_REG[31:0] zeigen die Schreib-Daten an, geliefert durch die CPU 14, und zwar zu dem Unterbrechungs-Register 800 hin. Die CPU löscht eine Unterbrechung durch Schreiben einer „1" zu dem entsprechenden Bit des Unterbrechungs-Registers 800. Deshalb wird, falls dies auftritt, und keine neuen Unterbrechungs-Anforderungen für das entsprechende eine der Status-Signale STATUS[31:0] angezeigt werden, das entsprechende eine der Signale PENDING_IRQ[31:0] gelöscht.
  • Die Signale SET_PIRQ[31:0] werden durch den Ausgang eines Multi-Bit-UND-Gates 839 geliefert. Ein Eingang des UND-Gates 839 empfängt die Signale UPDATE_IRQ[31:0]. Der andere Eingang des UND-Gates 839 ist mit dem Ausgang eines Multi-Bit-XOR-Gates 837 verbunden. Ein Eingang des XOR-Gates 837 empfängt die Signale D_INTR_REG[31:0], der andere Eingang des XOR-Gates 837 empfängt die Signale INTR_REG[31:0]. Deshalb wird, wenn die Bits des Unterbrechungs-Registers 800 von einem logischen Zustand zu einem anderen übergehen, eine Unterbrechungs-Anforderung erzeugt.
  • Zu Zwecken einer Aktualisierung der Bits des Unterbrechungs-Registers 800 werden die Signale UPDATE_IRQ[31:0] zu den entsprechenden Last-Eingängen des Registers 800 geliefert. Wenn eines der Signale UPATE_IRQ[31:0] aufgestellt ist, oder auf hoch angesteuert ist, wird das entsprechende Bit mit dem entsprechenden einen der Signale D_INTR_REG[31:0] geladen.
  • Die Signale UPDATE_IRQ[31:0] werden durch den Ausgang eines Multi-Bit-ODER-Gates 971 geliefert. Ein Eingang des ODER-Gates 971 ist mit dem Ausgang eines Multi-Bit-UND-Gates 973 verbunden. Ein Eingang des UND-Gates 973 ist mit dem Ausgang eines Multi-Bit-Multiplexers 977 verbunden, und der andere Eingang des UND-Gates 973 nimmt invertierte PENDING_IRQ[31:0] Signale auf. Der Auswahl-Eingang des Multiplexers 977 empfängt das Signal SCAN_END, der eine Eingang des Multiplexers 977 empfängt ein Zweiunddreißig-Bit-Signal, indikativ für „hFFFFFFFF", und der Null-Eingang des Multiplexers 977 empfängt ein Zweiunddreißig-Bit-Signal, indikativ für „0". Deshalb ermöglichen, an dem Ende einer Abtastung, die Signale UPDATE_IRQ[31:0], dass die Bits des Unterbrechungs-Registers 800 aktualisiert werden, die den aufgestellten PENDING_IRQ[31:0] Signalen entsprechen.
  • Ein anderer Eingang des ODER-Gates 971 ist mit dem Ausgang eines Multi-Bit-UND-Gates 975 verbunden. Ein Eingang des UND-Gates 975 empfängt die invertierten INTR_MASK[31:0] Signale, ein anderer Eingang des UND-Gates 975 empfängt die Signale PENDING_IRQ[31:0], und der andere Eingang des UND-Gates 975 empfängt die Signale WR_INTR_REG[31:0]. Deshalb kann die CPU 14 selektive Bits der Signale PENDING_IRQ[31:0] löschen.
  • Die Signale D_INTR_REG[5:0] werden durch den Ausgang eines Multi-Bit-Multiplexers 830 geliefert. Wenn das SCAN_END Signal aufgestellt ist, sind die Signale D_INTR_REG[5:0] gleich zu den Signalen D_LSWITCH[5:0]. Wenn das SCAN_END Signal weggenommen ist, sind die Signale D_INTR_REG[5:0] gleich zu den Signalen LSWITCH[5:0].
  • Die Signale D_INTR_REG[31:6] werden durch den Ausgang eines Multi-Bit-Multiplexers 845 geliefert. Wenn das SCAN_END Signal aufgestellt ist, sind die Signale D_INTR_REG[31:6] gleich zu den Signalen D_LNON_SW[31:6]. Wenn das SCAN_END Signal weggenommen ist, sind die Signale D_INTR_REG[5:0] gleich zu den Signalen LNON_SW[31:6]. Das Unterbrechungs-Register 800 nimmt neue Werte nur dann auf, wenn das Signal SCAN_END aufgestellt ist.
  • Wie in den 32AB dargestellt ist, tritt die Abtast-Zustand-Maschine 840 in einen IDLE Zustand nach dem Aufstellen des RESET-Signals RST ein. Wenn sie sich nicht in dem IDLE Zustand befindet, toggelt die Abtast-Zustand-Maschine 840 die Zustände des Seriell-Eingangs-Taktsignals CSIC_O, um das Schiebe-Register 82 zu takten. Weiterhin stellt, wenn sie sich nicht in einem ersten Lade-Zustand LD1 befindet, die Abtast-Zustand-Maschine 840 das Lade-Signal CSIL_O_ auf oder steuert es auf hoch an, um die Register 82 und 52 freizugeben, um seriell die Status-Signale STATUS[127:0] zu der SIO-Schaltung 50 zu verschieben. In dem IDLE Zustand setzt die Abtast-Zustand-Maschine 840 das Signal SCAN_DONE gleich zu Null.
  • Die Abtast-Zustand-Maschine 840 geht von dem IDLE Zustand zu dem Zustand LD1 über, wenn entweder das Signal GETTING_BYTE aufgestellt ist oder das Signal HOLD_OFF weggenommen ist. Ansonsten verbleibt die Abtast-Zustand-Maschine 840 in dem IDLE Zustand. In dem LD1 Zustand stellt die Abtast-Zustand-Maschine 840 das Lade-Signal CSIL_O_ auf oder steuert es auf niedrig an, das die Register 82 und 52 freigibt, um zu verriegeln und damit zu beginnen, die Status-Signale STATUS[127:0] aufzunehmen.
  • Die Abtast-Zustand-Maschine 840 geht von dem LD1 Zustand zu einem Lade-Zwei-Zustand LD2 über. In dem LD2 Zustand wird das Lade-Signal CSIL_O_ aufgestellt beibehalten, was den Registern 82 und 52 ermöglicht, seriell die Status-Signale STATUS[127:0] zu verschieben.
  • Die Abtast-Zustand-Maschine 840 geht darauffolgend zu einem Abtast-Zustand SCAN über. In dem SCAN Zustand tastet die Seriell-Abtast-Eingangs-Logik 804 die Status-Signale STATUS[127:0] an jeder negativen Flanke des Takt-Signals DIV2CLK ab.
  • Wenn das Signal STOP_SCAN aufgestellt ist, geht die Abtast-Zustand-Maschine 840 zurück zu dem IDLE Zustand. Das STOP_SCAN Signal wird aufgestellt, wenn entweder das erwünschte Byte der Status-Signale STATUS[127:0] in das Seriell-Daten-Register 815 hinein verschoben worden ist; die Hebel-Status-Signale STATUS[5:0] eingetastet worden sind und das Seriell-Unterbrechungs-Signal SI_INTR# aufgestellt worden ist; oder alle Status-Signale STATUS[31:0] hinein verschoben worden sind. In dem SCAN Zustand wird das SCAN_DONE Signal gleich zu dem STOP SCAN Signal gesetzt.
  • Wie in 33A dargestellt ist, umfasst die EIN/AUS-Steuer-Logik 820 eine EIN/AUS-Zustand-Maschine 998, die die RST_SWITCH[5:0] Signale, SLOT_EN[5:0] und SLOT_RST_[5:0] empfängt. Basierend auf den Zuständen, angezeigt durch diese Signale, zeigt die EIN/AUS-Zustand-Maschine 998 die geeigneten Hochfahr- und Herunterfahr-Sequenzen an und steuert sie. Die EIN/AUS-Zustand-Maschine 998 liefert Steuersignale zu der Steuer-Logik 999.
  • Die EIN/AUS-Zustand-Maschine 998 liefert ein Seriell-Ausgangs-Aktualisierungs-Signal SO_UPDATE zu der Seriell-Ausgangs-Logik 824. Wenn das Signal SO_UPDATE aufgestellt ist, oder auf hoch angesteuert ist, beginnt die Seriell-Ausgangs-Logik 824 die Verschiebe-Phase und verschiebt Seriell-Steuer-Daten, über das Signal CSOD_O, zu dem Register 80. Die Seriell-Ausgangs-Logik 824 zeigt einen Abschluss der Verschiebe-Phase durch Aufstellen eines Signals SO_UPDATE_DONE an, das durch die EIN/AUS-Zustand-Maschine 998 empfangen wird. Die EIN/AUS-Zustand-Maschine 998 aktualisiert darauffolgend die Steuersignale POUT[39:0] durch Negieren, oder Takten, des Verriegelungs-Signals CSOLC_O, das durch das Register 80 empfangen wird.
  • Die Steuer-Logik 999 liefert die Signale PWREN[5:0], CLKEN#[5:0], BUSEN#[5:0] und RST#[5:0] zu der Seriell-Ausgangs-Logik 824. Die Steuer-Logik 999 liefert auch ein PCI-Bus-Anforderungs-Signal CAYREQ# zu dem und empfängt ein PCI-Bus-Erteilungs-Signal CAYGNT# von dem Arbitrierer 124. Die EIN/AUS-Steuer-Logik 820 stellt das Signal CAYREQ# auf, oder steuert es auf niedrig an, um den PCI-Bus 32 anzufordern, wenn der Arbitrierer 124 das Signal CAYGNT# aufstellt, oder auf niedrig ansteuert, hat der Arbitrierer 124 eine Steuerung über den PCI-Bus 32 zu der EIN/AUS-Steuer-Logik 820 erteilt.
  • Wie in den 33BG dargestellt ist, tritt die EIN/AUS-Zustand-Maschine 998 in einen Idle-Zustand IDLE unter Aufstellen des Reset-Signals RST ein. Falls kein Leerlauf vorliegt, steuert die EIN/AUS-Zustand-Maschine 998 eine von drei Sequenzen: die Power- down-Sequenz, die Power-on-Sequenz oder die eine Durchgangs-Sequenz, verwendet dazu, die Steuer-Signale POUT[39:0] zu aktualisieren, wie dies durch das Schlitz-Freigabe- 817 und das LED-Steuer- (nicht dargestellt) Register angezeigt ist. Die EIN/AUS-Zustand-Maschine 998 stellt das Lade-Signal CSOLC_O für einen Zyklus des Taktsignals CLK des Registers 80 auf, oder steuert es auf hoch, bis die EIN/AUS-Zustand-Maschine 998 bestimmt, dass die Steuer-Signale POUT[39:0] aktualisiert werden müssen. Wenn die Steuer-Signale POUT[39:0] aktualisiert sind, negiert die EIN/AUS-Zustand-Maschine 998 das Signal CSOLC_O, was die Steuer-Signale POUT[39:0] aktualisiert.
  • Die EIN/AUS-Zustand-Maschine 998 beginnt die Power-down-Sequenz, wenn entweder die Software ein energiemäßiges Herunterfahren bzw. Power-down mindestens eines der Schlitze bzw. Einsteckplätze 36 anfordert, wie dies durch das Wegnehmen der Signale SLOT_EN[5:0] angezeigt ist; oder die Seriell-Abtast-Eingangs-Logik 804 bestimmt, dass mindestens einer der Schlitze bzw. Einsteckplätze 36af der Power-down-Sequenz unterworfen werden sollte, wie dies durch das Aufstellen der Signale RST_SWITCH[5:0] angezeigt ist. Um die Power-down-Sequenz zu beginnen, stellt die EIN/AUS-Zustand-Maschine 998 das SO_UPDATE Signal auf, um eine Verschiebe-Phase und Übergänge von dem IDLE Zustand zu einem RSTON Zustand zu beginnen.
  • Während des RSTON Zustands negiert die Steuer-Logik 999 die Reset-Signale RST#[5:0] für die Schlitze 36, die energiemäßig heruntergefahren werden sollen, und die Seriell-Ausgangs-Logik 824 verschiebt seriell die Reset-Signale RST#[5:0] zu dem Ausgangs-Register 80. Die EIN/AUS-Zustand-Maschine 998 negiert auch das Signal SO_UPDATE. Wenn einmal alle vierzig Steuer-Signale durch die Seriell-Ausgangs-Logik 824 zu dem Register 80 verschoben sind, wie dies durch das Aufstellen des Signals SO_UPDATE_DONE angezeigt ist, geht die EIN/AUS-Zustand-Maschine 998 von dem RSTON Zustand zu einem OFF_ARB1 Zustand über.
  • In dem OFF_ARB1 Zustand fordert die EIN/AUS-Zustand-Maschine 998 eine Steuerung über den sekundären PCI-Bus 32 durch Aufstellen des Anforderungs-Signals CAYREQ# an. Die EIN/AUS-Zustand-Maschine 998 geht dann zu einem OFF_WGNT1 Zustand über, wo sie auf die Erteilung des sekundären PCI-Busses 32 wartet. Wenn der Arbitrierer 124 eine Steuerung über den Bus 32 erteilt, wie dies durch das Aufstellen des CAYREQ# Signals angezeigt ist, negiert die EIN/AUS-Zustand-Maschine 998 das Signal CSOLC_O für einen Zyklus des Signals CLK, um die Steuer-Signale POUT[39:0] zu aktualisieren, und geht zu einem OFF_LCLK1 Zustand über.
  • In dem OFF_LCLK1 Zustand stellt die EIN/AUS-Zustand-Maschine 998 das Signal SO_UPDATE auf, um so eine andere Verschiebe-Phase zu beginnen. Die EIN/AUS-Zustand-Maschine 998 geht von dem OFF_LCLK1 Zustand zu einem Bus-off-Zustand BUSOFF über. Während des BUSOFF Zustands nimmt die Steuer-Logik 999 die BUS-Freigabe-Signale BUSEN#[5:0] für die Schlitze 36 weg oder steuert sie auf hoch an, die energießmäßig heruntergefahren werden sollen, und die Seriell-Ausgangs-Logik 824 verschiebt seriell die Bus-Freigabe-Signale BUSEN#[5:0] zu dem Ausgangs-Register 80. Die EIN/AUS-Zustand-Maschine 998 negiert auch das Signal SO_UPDATE. Wenn einmal alle vierzig Steuer-Signale durch die Seriell-Ausgangs-Logik 824 verschoben sind, wie dies durch das Aufstellen des Signals SO_UPDATE_DONE angezeigt ist, geht die EIN/AUS-Zustand-Maschine 998 von dem BUSOFF Zustand zu einem OFF_ARB2 Zustand über, wo die Zustand-Maschine 998 wieder erneut eine Kontrolle des sekundären PCI-Busses 32 anfordert. Die Zustand-Maschine 998 geht dann zu einem OFF_WGNT2 Zustand über, wo sie auf die Erteilung des PCI-Busses 32 wartet. Wenn einmal die Erteilung empfangen ist, geht die Zustand-Maschine 998 zu einem OFF_LCLK2 Zustand über, wo die Steuer-Signale POUT[39:0] durch Negieren des Signals CSOLC_O für einen Zyklus des Signals CLK aktualisiert werden. Die Zustand-Maschine 998 geht dann zu einem Takt-Off-Zustand CLKOFF über.
  • Während des CLKOFF Zustands nimmt die Steuer-Logik 999 die Takt-Freigabe-Signale CLKEN#[5:0] für die Schlitze 36 weg, oder steuert sie auf hoch an, die energiemäßig heruntergefahren werden sollen. Die Bus-Freigabe-Signale BUSEN#[5:0] ändern sich nicht, und die Seriell-Ausgangs-Logik 824 verschiebt seriell die Takt-Freigabe-Signale CLKEN#[5:0] zu dem Ausgangs-Register 80. Die EIN/AUS-Zustand-Maschine 998 negiert auch das Signal SO_UPDATE. Wenn einmal alle vierzig Steuer-Signale durch die Seriell-Ausgangs-Logik 824 verschoben sind, wie dies durch das Aufstellen des Signals SO_UPDATE_DONE angezeigt ist, geht die EIN/AUS-Zustand-Maschine 998 von dem CLKOFF-Zustand zu einem OFF_ARB3 Zustand über, wo die Zustand-Maschine 998 erneut eine Steuerung bzw. Kontrolle über den PCI-Bus 32 anfordert. Die Zustand-Maschine 998 geht dann zu einem OFF_WGNT3 Zustand über, wo sie auf die Erteilung des PCI-Busses 32 wartet. Wenn einmal die Erteilung empfangen ist, geht die Zustand-Maschine 998 zu einem OFF_LCLK3 Zustand über, wo die Steuersignale POUT[39:0] durch Negieren des Signals CSOLC_O für einen Zyklus des Signals CLK aktualisiert werden. Die Zustand-Maschine 998 geht dann zu einem Power-Off-Zustand PWROFF über.
  • Während des PWROFF Zustands nimmt die Steuer-Logik 999 die Energie-Freigabe-Signale PWREN[5:0] für die Schlitze 36 weg oder setzt sie auf niedrig, die energiemäßig heruntergefahren werden sollen. Die Signale REST#[5:0], BUSEN#[5:0] und CLKEN#[5:0] ändern sich nicht, und die Seriell-Ausgangs-Logik 824 verschiebt seriell die Energie-Freigabe-Signale PWREN[5:0] zu dem Ausgangs-Register 80. Die EIN/AUS-Zustand-Maschine 998 negiert auch das Signal SO_UPDATE. Wenn einmal alle vierzig Steuersignale durch die Seriell-Ausgangs-Logik 824 verschoben sind, wie dies durch das Aufstellen des Signals SO_UPDATE_DONE angezeigt ist, geht die EIN/AUS-Zustand-Maschine 998 von dem PWROFF Zustand zu einem OFF_LCLK4 Zustand über, wo die Signale POUT[39:0] durch Negieren des Signals CSOLC_O für einen Zyklus des Signals CLK aktualisiert werden. Die Zustand-Maschine 998 geht dann zu dem IDLE Zustand über, der die Power-Down-Sequenz abschließt.
  • Falls eine Power-Down-Sequenz nicht erforderlich ist, dann bestimmt die EIN/AUS-Zustand-Maschine 998, ob die Power-Up-Sequenz erforderlich ist. Falls entweder die Software mindestens angefordert hat, dass mindestens einer der Schlitze 36 energiemäßig hochgefahren werden soll, oder ein Hochfahren des Erweiterungskastens 30 anhängig ist, dann geht die EIN/AUS-Zustand-Maschine 998 von dem IDLE Zustand zu einem Power-On-PWRON Zustand über, um die Power-On-Sequenz zu beginnen. Um die Power-On-Sequenz zu beginnen, stellt die EIN/AUS-Zustand-Maschine 998 das SO_UPDATE Signal auf, um eine Verschiebe-Phase zu beginnen, und geht von dem IDLE Zustand zu einem Power-On-Zustand PWRON über.
  • Während des PWRON Zustands stellt die Steuer-Logik 999 die Power-Freigabe-Signale PWREN[5:0] für die Schlitze 36 auf, die energiemäßig hochgefahren werden sollen, und die Seriell-Ausgangs-Logik 824 verschiebt seriell die Power-Freigabe-Signale PWREN[5:0] zu dem Ausgangs-Register 80. Die EIN/AUS-Zustand-Maschine 998 negiert auch das Signal SO_UPDATE. Wenn einmal alle vierzig Steuersignale durch die Seriell-Ausgangs-Logik 824 verschoben sind, wie dies durch das Aufstellen des Signals SO_UPDATE_DONE angezeigt ist, geht die EIN/AUS-Zustand-Maschine 998 von dem PWRON-Zustand zu einem Initialisierungs-Zustand LDCNT1 eines Zeitgebers 806 über und negiert das Lade-Signal CSOLC_O, um die Steuersignale POUT[39:0] zu aktualisieren.
  • In dem LDCNT1 Zustand initialisiert die EIN/AUS-Zustand-Maschine 998 die Zeitgeber 806 so, dass die Zeitgeber 806 eine Indikation liefern, wenn ein vorbestimmtes Stabilisierungs-Verzögerungs-Intervall abgelaufen ist. Das Stabilisierungs-Verzögerungs-Intervall ermöglicht eine ausreichende Zeit für die Karte 807, die energiemäßig hochgefahren werden soll, um sich zu stabilisieren, wenn einmal der Spannungspegel VSS zu der Karte 807 zugeführt ist. In dem LDCNT1 Zustand stellt die EIN/AUS-Zustand-Maschine 998 auch das Signal CSOLC_O auf. Die EIN/AUS-Zustand-Maschine 820 geht von dem LDCNT1 Zustand zu einem CLKON Zustand über.
  • Während des CLKON Zustands stellt die Steuerlogik 999 die Taktfreigabesignale CLKEN#[5:0] für die Schlitze bzw. Einsteckplätze 36 auf oder steuert sie auf niedrig an, die energiemäßig hochgefahren werden sollen. Die PWREN[5:0] Signale verbleiben unverändert, und die Seriell-Ausgangs-Logik 824 verschiebt seriell die Taktfreigabesignale CLKEN#[5:0] zu dem Ausgangs-Register 80. Die EIN/AUS-Zustand-Maschine 998 negiert auch das Signal SO_UPDATE. Wenn einmal das Stabilisierungs-Verzögerungs-Intervall abgelaufen ist, geht die EIN/AUS-Zustand-Maschine 998 von dem CLKOFF Zustand zu einem ON_ARB1 Zustand über.
  • In dem ON_ARB1 Zustand fordert die EIN/AUS-Zustand-Maschine 998 eine Steuerung bzw. Kontrolle über den sekundären PCI-Bus 82 durch Aufstellen des Anforderungs-Signals CAYREQ# an. Die EIN/AUS-Zustand-Maschine 998 geht dann zu einem ON_WGNT1 Zustand über, wo sie auf die Erteilung des sekundären PCI-Busses 32 wartet. Wenn einmal die Kontrolle bzw. Steuerung des Busses 32 erteilt ist, wie dies durch das Aufstellen des CAYGNT Signals angezeigt ist, negiert die EIN/AUS-Zustand-Maschine 998 das Signal CSOLC_O, um die Steuer-Signale POUT[39:0] zu aktualisieren, und geht zu einem ON_LCLK1 Zustand über, wo die Signale POUT[39:0] aktualisiert werden.
  • Die EIN/AUS-Zustand-Maschine 998 geht von dem ON_LCLK1 Zustand zu einem LDCNT2 Zustand über, wo die Zeitgeber 806 so initialisiert werden, dass die Zeitgeber 806 eine Indikation liefern, wenn ein anderes, vorbestimmtes Stabilisierungs-Verzögerungs-Intervall abgelaufen ist. Dieses Verzögerungsintervall wird dazu verwendet, dem Takt-Signal an der Karte 807 zu ermöglichen, energiemäßig hochgefahren zu werden, um sich zu stabilisieren, bevor die Power-Up-Sequenz fortfährt. Die EIN/AUS- Zustand-Maschine 998 geht von dem LDCNT2 Zustand zu einem Bus-Ein-Zustand BUSON über.
  • Während des BUSON Zustands stellt die Steuerlogik 999 die Bus-Freigabe-Signale BUSEN#[5:0] für die Schlitze 36 auf, oder steuert sie auf niedrig an, die energiemäßig heruntergefahren werden sollen. Die Signale CLKEN#[5:0] und PWREN[5:0] verbleiben unverändert, und die Seriell-Ausgangs-Logik 824 verschiebt seriell die Bus-Freigabe-Signale BUSEN#[5:0] zu dem Ausgangsregister 80. Die EIN/AUS-Zustand-Maschine 998 negiert auch das Signal SO_UPDATE. Wenn einmal das Stabilisierungs-Verzögerungs-Intervall abgelaufen ist, geht die EIN/AUS-Zustand-Maschine 998 von dem BUSON Zustand zu einem ON_ARB2 Zustand über, wo die Zustand-Maschine 998 erneut wieder eine Kontrolle des PCI-Busses 32 anfordert. Die Zustand-Maschine 998 geht dann zu einem ON_WGTN2 Zustand über, wo sie auf die Erteilung des Busses 32 wartet. Wenn einmal die Erteilung empfangen ist, geht die Zustand-Maschine 998 zu einem ON_CLK2 Zustand über, wo die Signale POUT[39:0] durch Negieren des Signals CSOLC_O für einen Zyklus des Signals CLK aktualisiert werden. Die Zustand-Maschine 998 geht dann zu einem Reset-Off-Zustand RSTOFF über.
  • Während des RESTOFF Zustands stellt die Steuerlogik 999 die Reset-Signale RST#[5:0] für die Schlitze 36 auf, oder negiert sie, die energiemäßig hochgefahren werden sollen, und zwar in Abhängigkeit von deren jeweiligen SLOT_RST_[5:0] Signalen. Die Signale CLKEN#[5:0], PWREN[5:0] und BUSEN#[5:0] verbleiben unverändert, und die Seriell-Ausgangs-Logik 824 verschiebt seriell die Reset-Signale RST#[5:0] zu dem Ausgangsregister 80. Die EIN/AUS-Zustand-Maschine 998 negiert auch das Signal SO_UPDATE. Wenn einmal alle vierzig Steuersignale durch die Seriell-Ausgangs-Logik 824 verschoben sind, wie dies durch das Aufstellen des Signals SO_UPDATE_DONE angezeigt ist, geht die EIN/AUS-Zustand-Maschine 998 von dem RSTON Zustand zu einem ON_ARB3 Zustand über, wo die Zustand-Maschine 998 erneut wieder eine Kontrolle des Busses 32 anfordert. Die Zustand-Maschine 998 geht dann zu einem ON_WGTN3 Zustand über, wo sie auf die Erteilung des Busses 32 wartet. Wenn einmal die Erteilung empfangen ist, geht die Zustand-Maschine 998 zu einem ON_CLK3 Zustand über, wo die Signale POUT[39:0] durch Negieren des Signals CSOLC_O für einen Zyklus des Signals CLK aktualisiert werden. Die Zustand-Maschine 998 geht dann zurück zu dem IDLE Zustand.
  • Falls weder die Power-Up-Sequenz noch die Power-Down-Sequenz erforderlich ist, dann bestimmt die EIN/AUS-Zustand-Maschine 998, ob eine Ein-Durchgang-Sequenz benötigt wird, um ausgewählte solche der Signale POUT[39:0] zu aktualisieren. Falls die GO_UPDATE Signal aufgestellt ist und falls sich irgendwelche Bits des Schlitz-Freigabe-Registers 817 oder des Schlitz-Reset-Registers 918 ändern, dann geht die EIN/AUS Zustand-Maschine 998 zu einem ONEPASS Zustand über und stellt das SO_UPDATE Signal auf.
  • Die EIN/AUS Zustand-Maschine 998 verbleibt in dem ONEPASS Zustand, bis die vierzig Steuer-Signale zu dem Register 80 verschoben worden sind. Die EIN/AUS-Zustand-Maschine 998 geht dann zu einem OP_ARB Zustand über, wo die Zustand-Maschine 998 eine Kontrolle des PCI-Busses 32 durch Aufstellen des Signals CAYREQ# anfordert. Die Zustand-Maschine 998 geht dann zu einem OP_WGNT Zustand über, wo sie auf die Erteilung des Busses 32 wartet. Wenn einmal die Erteilung empfangen ist, geht die Zustand-Maschine 998 zu einem OP_LCLK Zustand über, wo die Signale POUT[39:0] durch Negieren des Signals CSOLC_O für einen Zyklus des Signals CLK aktualisiert werden. Die Zustand-Maschine 998 geht dann zurück zu dem IDLE Zustand.
  • Wie in 34 dargestellt ist, umfasst die Seriell-Ausgangs-Logik 824 einen Verschiebe-Ausgangs-Bit-Zähler 921, der ein Sechs-Bit-Zähler-Ausgangs-Signal BIT_CNTR[5:0] liefert, das das Steuer-Signal protokolliert, aus der Seriell-Ausgangs-Logik 824 über das Signal CSOD_O heraus verschoben. Wenn das Signal BIT_CNTR[5:0] gleich zu einer Zahl mit sechs Ziffern gleich zu „39" ist, dann wird ein Signal MAX_CNT aufgestellt. Das Signal MAX_CNT wird zu dem Eingang eines UND-Gates 922 geliefert. Das UND-Gate 922 empfängt weiterhin ein Signal SHIFT4, das aufgestellt wird, wenn die Ausgangs-Verschiebe-Zustand-Maschine 920 in der SHIFT4 Zustand eintritt, der weiter nachfolgend beschrieben wird. Der Ausgang des UND-Gates 922 liefert das Signal SO_UPDATE_DONE.
  • Die Ausgangs-Verschiebe-Zustand-Maschine 920 liefert ein Erhöhungs-Zähler-Signal INC_CNTR zu dem Bit-Zähler 921. Wenn das INC_CNTR-Signal aufgestellt ist, erhöht der Bit-Zähler 921 den Wert, dargestellt durch das Signal BIT_CNTR[5:0]. Wenn ein Lade-Zähler-Signal LOAD_CNTR aufgestellt ist oder wenn das RST-Signal aufgestellt ist, dann löscht der Ausgang eines ODER-Gates 925, verbunden mit einem Lösch-Eingang des Bit-Zählers 921, das Signal BIT_CNTR[5:0].
  • Das Signal BIT_CNTR[5:0] wird zu dem Auswahl-Eingang eines Multi-Bit-Multiplexers 924 geliefert, der das Signal CSOD_O liefert. Der nullte bis elfte Eingang des Multiplexers 924 empfangen die LED-Steuer-Signale LEDS[11:0]. Der zwölfte bis fünfzehnte Eingang des Multiplexers 924 empfangen Ausgangs-Signale GPOA[3:0] für allgemeine Zwecke. Der sechszehnte bis einundzwanzigste Eingang empfangen die Reset-Signale RST#[5:0]. Der zweiundzwanzigste bis siebenundzwanzigste Eingang empfangen die Takt-Freigabe-Signale CLKEN#[5:0]. Der achtundzwanzigste bis dreiunddreißigste Eingang empfangen die Bus-Freigabe-Signale BUSEN[5:0]. Der vierunddreißigste bis neununddreißigste Eingang empfangen die Energie-Freigabe-Signale PWREN[5:0].
  • Wie in den 35AB dargestellt ist, tritt die Ausgangs-Verschiebe-Zustand-Maschine 920 in einen IDLE Zustand ein, wenn das Signal RST aufgestellt ist. Falls das Signal SO_UPDATE aufgestellt ist, dann geht die Ausgangs-Verschiebe-Zustand-Maschine 920 von dem IDLE Zustand zu einem SHIFT1 Zustand über.
  • Da die Ausgangs-Verschiebe-Zustand-Maschine 920 an der positiven Flanke des PCI-Takt-Signals CLK getaktet wird, geht die Ausgangs-Verschiebe-Zustand-Maschine 920 über einen SHIFT1 Zustand, einen SHIFT2 Zustand, einen SHIFT3 Zustand und einen SHIFT4 Zustand hindurch, um das Takt-Signal CSOSC_O zu erzeugen, das ein viertel der Frequenz des Takt-Signals CLK ist. Während des SHIFT1- und SHIFT2-Zustands wird das Takt-Signal CSOSC_O negiert und auf niedrig gesetzt, und während des SHIFT3 und SHIFT4 Zustands wird das Taktsignal CSOSC_O aufgestellt oder auf hoch gesetzt. Wenn die momentane Verschiebe-Phase abgeschlossen ist, wie dies durch das Aufstellen des Signals MAXCNT angezeigt ist, kehrt die Verschiebe-Zustand-Maschine 920 zu dem IDLE Zustand zurück und das Takt-Signal CSOSC_O wird, bis zu dem Beginn der nächsten Verschiebe-Phase, aufgestellt.
  • Wie in 36 dargestellt ist, wird ein Signal HANG_PEND durch den Lösch-Eingang des Registers 80 empfangen. Das Aufstellen, oder Ansteuern auf hoch, des HANG_PEND Signals asynchron löscht die geeigneten Ausgangs-Steuer-Signale POUT[39:0], um alle Schlitze 36 energiemäßig herunterzufahren, wenn sich der PCI-Bus 32 in einem verriegelten Zustand befindet, wie dies weiter nachfolgend beschrieben ist.
  • FEHLER-ISOLATION
  • Der Bus-Beobachter bzw. Watcher 129 kann einen fehlerhaften bzw. hängenden Zustand auf dem sekundären PCI-Bus 32 erfassen. Falls ein hängender Zustand erfasst wird, stellt der Bus-Beobachter 129 ein Bus-Hängend-Anhängigkeits-Bit ein, das bewirkt, dass die SIO 50 die Schlitze bzw. Einsteckplätze auf dem sekundären PCI-Bus 32 energiemäßig herunterfährt, und eine nicht-maskierbare Unterbrechung (Non-Mascable Interrupt – NMI) wird zu der CPU 14 übertragen. Die CPU 14 spricht auf die NMI durch aufrufen eines NMI-Programms an, um den Schlitz (die Schlitze), die den hängenden Zustand verursachen, zu isolieren. Wenn einmal der defekte Schlitz bzw. die defekten Schlitzen identifiziert sind, werden sie gesperrt oder energiemäßig abgeschattet.
  • Für Software-Diagnostik-Zwecke umfasst der Bus-Beobachter 129 in dem ausgangsseitigen Brücken-Chip 48 einen Bus-Historie-FIFO und einen Bus-Vektor-FIFO. Wenn der sekundäre PCI-Bus 32 geeignet funktioniert, werden die Bus-Historie-Informationen, die eine Adressen-Gruppe (umfassend die PCI-Adresse, die PCI-Befehls-Signale, die PCI-Master-Zahl und das Adressen-Paritäts-Bit) und eine Daten-Gruppe (umfassend die PCI-Daten, die Byte-Freigabe-Signale C/BE[3:0]_, ein Paritäts-Fehler-Signal PERR_, das Daten-Paritäts-Bit, ein Burst-Zyklus-Indikations-Bit und ein Daten-Gültigkeits-Zeichen) durch den Bus-Beobachter 129 bei jeder Transaktion aufgezeichnet. Wenn das PCI-Signal FRAME_ auf dem sekundären PCI-Bus 32 aufgestellt ist, um eine Bus-Transaktion zu starten, werden die Adressen-Gruppe und jede darauffolgende Daten-Gruppe in dem Bus-Historie-FIFO gespeichert. Wenn die Transaktion eine Burst-Transaktion ist, dann wird das Burst-Zyklus-Indikations-Bit auf aktiv in der zweiten Daten-Phase gesetzt. Nach der ersten Datenphase wird das Adressen-Feld in der Adressen-Gruppe, zugeordnet der darauffolgenden Datengruppe in der Burst-Transaktion, um vier erhöht, und die neue Adressen-Gruppe und die Datengruppe werden in der nächsten Stelle des Bus-Historie-FIFO gespeichert. Falls Daten nicht übertragen werden, da ein Zustand eines erneuten Versuchs oder ein Zustand einer Unterbrechung ohne Daten vorliegt, wird das Gültigkeits-Daten-Indikations-Bit auf niedrig gesetzt.
  • Sowohl die Adressen-Gruppe als auch die Daten-Gruppe fließen durch eine 2-Stufen-Pipeline, um Zeit für die Daten-Gruppe zuzulassen, um das Daten-Paritäts-Bit und das Daten-Paritäts-Fehler-Bit zu sammeln, und den Aufzeichnungsvorgang zu stoppen, wenn ein Daten-Paritäts-Fehler auftritt, bevor die nächste Adressen-Gruppe gespeichert wird. Falls der Bus in der Mitte einer Schreib-Daten-Phasen hängt, werden die Daten gespeichert, und ein Bus-Hängend-Status-Bit wird in einem Bus-Hängen-Indikations-Register 482 (42), zugänglich über einen Konfigurations-Raum, eingestellt. Falls der Bus in der Mitte einer Lese-Daten-Phase hängt, werden die Daten als nicht gültig markiert, und das Bus-Hängend-Bit wird eingestellt.
  • Bus-Zustands-Vektoren werden in dem Bus-Vektor-FIFO zusammengestellt und gespeichert, umfassend die folgenden PCI-Steuer-Signale: Schlitz-Anforderungs-Signale REQ[7:0]_; Schlitz-Erteilungs-Signale GNT[7:0]_; das FRAME- Signal; das PCI-Vorrichtungs-Auswahl-Signal DEVSEL_; das PCI-Initiator-Bereitschafts-Signal IRDY_; das PCI-Target-Bereitschafts-Signal TRDY_; das Stopp_ Signal; das PCI-Paritäts-Fehler-Signal PERR_; das PCI-System-Fehler-Signal SERR_; und das LOCK_ Signal. An jedem PCI-Takt, in dem sich der Bus-Zustands-Vector ändert, d. h. irgendeines der aufgelisteten Signale ändert einen Zustand, wird der neue Vector in den Bus-Vektor-FIFO hineingespeichert.
  • Der Bus-Beobachter 129 umfasst einen Watch-Dog-Zeitgeber 454 (40), um zu bestimmen, ob sich der sekundäre Bus 32 verriegelt hat. Falls der Watch-Dog-Zeitgeber 554 abläuft, dann hat der Bus 32 gehangen. Das folgende sind Beispiele von Bus-Hängend-Zuständen, die durch den Watch-Dog-Zeitgeber 454 erfasst werden können: Das FRAME_ Signal wird auf hoch oder niedrig gesetzt; das Signal TRDY_ wird nicht in Abhängigkeit von IRDY_ aufgestellt; der PCI-Arbitrierer 124 erteilt nicht den Bus zu irgendeinem Master; und ein Master, der den Bus 32 anfordert, behält bei, es zu versuchen.
  • Wenn der Watch-Dog-Zeitgeber 454 abläuft, wird das Bus-Hängend-Anhängigkeits-Bit auf aktiv in dem Bus-Hängend-Indikations-Register 482 gesetzt. Wenn das Bus-Hängend-Anhängigkeits-Bit auf aktiv gesetzt ist, gibt es den Bus-Beobachter 129 frei. Als nächstes werden die Schlitz-Freigabe-Bits in der SIO 50 gelöscht, was bewirkt, dass die Schlitze energiemäßig heruntergefahren werden. Die SIO 50 stellt dann das System-Fehler-Signal SERR_ auf.
  • Um die Ursache eines Bus-Hängend-Zustands zu isolieren, bewirkt das System-Fehler-Signal SERR_, dass die Unterbrechungs-Logik in dem System die NMI zu der CPU 14 ausgibt. Wie 37 zeigt, bestimmt der NMI-Handler zuerst, 400, ob das Bus-Hängend-Anhängigkeits-Bit eingestellt ist, durch Lesen des Bus-Hängend-Indikations-Registers 482. Falls dies der Fall ist, ruft der NMI-Handler, 401, einen BIOS-Isolations-Handler zum Isolieren des defekten Schlitzes bzw. Einsteckplatzes oder der defekten Schlitze auf. Ansonsten werden andere NMI-Prozeduren aufgerufen, 402.
  • Als ein Fehler-Sicherheits-Mechanismus umfasst das Computersystem auch den Automatik-Server-Wiederherstellungs- (Automatic Server Recovery – ASR) Zeitgeber 72, der gelöscht wird, wenn bestimmte Software-Programme durch das Betriebssystem ausgeführt werden. Falls der ASR-Zeitgeber abläuft (z. B. nach 10 Minuten), zeigt dies an, dass sich das Betriebssystem verriegelt hat. Der sekundäre PCI-Bus 32, der hängt, kann die Ursache der System-Verriegelung sein, wobei in einem solchen Fall der NMI niemals zu der CPU 14 gehen kann. Falls der ASR-Zeitgeber abläuft, dann tritt ein ASR-erzeugtes Reboot auf. Der ASR-Zeitgeber stellt auch sicher, dass, falls sich der BIOS-Isolations-Handler in der Mitte einer Isolation eines Fehler-Schlitzes auf dem PCI-Bus 32 befindet, und das Computer-System hängt, um ein ASR-Reboot zu verursachen, das Isolations-Programm dort weiterfahren kann, wo es unmittelbar vor dem ASR-Time-Out-Ereignis gelassen wurde.
  • Wie 38 zeigt, wird ein BIOS ASR Handler in Abhängigkeit eines ASR-Reboot Zustands aufgerufen. Der ASR-Handler prüft zuerst, 444, um zu bestimmen, ob eine Isolations-In-Progress-Ereignis-Variable (EV) aktive Informationen enthält, die anzeigen, dass der Isolations-Prozess vor dem ASR-Time-Out-Ereignis im Fortschreiten war. Das Isolations-In-Progress-EV wird in einem nicht-flüchtigen Speicher (NVRAM) 70 gespeichert und umfasst Header-Informationen, die auf aktiv gesetzt werden, um anzuzeigen, dass der Isolations-Prozess gestartet wurde. Das Isolations-In-Progress-EV wird auch mit dem momentanen Zustand des Isolations-Prozesses aktualisiert, umfassend die Schlitze bzw. Einsteckplätze, die geprüft worden sind, die Schlitze, die defekt sind, und die Schlitze, die freigegeben worden sind.
  • Falls der Isolations-Prozess im Fortschreiten war, gibt der BIOS-ASR-Handler wieder alle Schlitze frei, 448, mit Ausnahme solcher, die unmittelbar vor dem ASR-Ereignis freigegeben wurden, was aus dem Isolations-In-Progress-EV bestimmt wird. Die freigegebenen Schlitze vor dem ASR-Reboot waren wahrscheinlich die Ursache der ASR-Durchsicht. Als Folge werden diese Schlitze gesperrt (d. h. energiemäßig heruntergefahren). Als nächstes werden die Zahlen der gesperrten Schlitze als Fehler-Status-Informationen protokolliert, 450, gespeichert in dem NVRAM, und das Isolations-In-Progress-EV wird gelöscht. Der BIOS-ASR-Handler prüft dann, 452, um zu bestimmen, ob das Bus-Hängend-Anhängigkeits-Bit eingestellt ist. Falls dies der Fall ist, wird das Bus- Hängend-Anhängigkeits-Bit gelöscht (unter Durchführen eines I/O-Zyklus auf dem sekundären PCI-Bus 32), um den Bus-Beobachter 129 wieder freizugeben.
  • Falls das Isolations-In-Progress-EV nicht in den aktiven Zustand eingestellt ist, 444, anzeigend, dass der Isolations-Prozess nicht lief, als das ASR-Ereignis auftrat, prüft das Programm, 446, um zu bestimmen, ob das Bus-Hängend-Anhängigkeits-Bit eingestellt ist. Falls nicht, dann wird der BIOS-ASR-Handler vorgenommen. Falls das Bus-Hängend-Anhängigkeits-Bit eingestellt ist, 446, was anzeigt, dass ein Bus-Hängend-Zustand aufgetreten ist, und zwar vor dem ASR-Ereignis, ruft der BIOS-ASR-Handler den BIOS-Isolations-Handler auf, um den Fehler-Schlitz oder Schlitze zu isolieren.
  • Wie 39 zeigt, protokolliert der Isoaltions-Handler zuerst, 408, zu dem Fehler-Status-Informations-Bereich des NVRAM die Bus-Historie- und Bus-Zustand-Vektor-Informationen, gespeichert in den Historie- und Vektor-FIFOs, in dem Bus-Monitor 127. Die Bus-Historie- und Bus-Zustand-Vektor-FIFOs werden gelesen und deren Inhalte werden zu dem NVRAM übertragen. Als nächstes werden die Header-Informationen der Isolation-In-Progress-Ereignis-Variable eingestellt, 410, um anzeigen, dass sich der Isoaltions-Prozess beim Fortschreiten befindet. Das Bus-Hängend-Anhängigkeits-Bit wird gelöscht (durch Schreiben zu einer vorbestimmten Konfigurations-Adresse), um den Bus-Watcher bzw. -Beobachter 129 wieder freizugeben. Als nächstes gibt das Isolations-Programm den zuerst belegten Schlitz bzw. Einsteckplatz (d. h. ein Schlitz, mit dem eine PCI-Vorrichtung verbunden ist) wieder frei (d. h. fährt es energiemäßig hoch), 412, und liest und schreibt von dem PCI-Konfigurations-Raum der Vorrichtung. Ein Schlitz wird durch Schreiben zu dem Schlitz-Freigabe-Register 817 (29) wieder freigegeben. Als nächstes bestimmt das Programm 414, ob das Bus-Hängend-Anhängigkeits-Bit auf aktiv gesetzt ist, was anzeigt, dass die Vorrichtung, verbunden mit dem Schlitz, verursachte, dass der Bus hängt, während davon gelesen wurde. Falls dies nicht der Fall ist, bestimmt das Programm, 416, ob alle belegten Schlitze geprüft worden sind. Falls dies nicht der Fall ist, wird der erste, belegte Schlitz, gesperrt, 418, und das Isolation-In-Progress-EV wird aktualisiert, 420, um anzuzeigen, dass der erste, belegte Schlitz erneut durch den BIOS-Isolations-Handler versucht worden ist. Falls das Programm bestimmt, 414, dass das Bus-Hängend-Anhängigkeits-Bit auf aktiv gesetzt ist, wird der Schlitz als ausgefallen angezeigt (z. B. durch Einstellen auf aktiv eines Ausfall-Zeichens für diesen Schlitz), und zwar in dem Ausfall-Status-Informations-Bereich des NVRAM. Als nächstes wird die Schleife, die aus den Schritten 412, 414, 416, 418 und 420 besteht, durchgeführt, bis alle belegten Schlitze geprüft worden sind.
  • Falls alle belegten Schlitze geprüft worden sind, 416, nimmt das Programm eine Prüfung vor, 424, um zu bestimmen, ob irgendein Schlitz als ausgefallen in dem Ausfall-Status-Informations-Bereich des NVRAM angezeigt ist. Falls dies der Fall ist, gibt das Programm 398 erneut nur die nicht ausgefallenen Schlitze frei, 426. Dann wird das Isolation-In-Progress-EV gelöscht, 428, und das BIOS-Isolations-Programm wird abgeschlossen.
  • Falls keiner der Schlitze als ausgefallen angezeigt ist, 424, dann zeigt dies an, dass der Bus-Hängend-Zustand nicht durch einen einzelnen Schlitz verursacht worden ist, sondern kann durch mehr als eine Vorrichtung, die zu diesem selben Zeitpunkt aktiv sind, verursacht sein. Um dies zu bestätigen, sperrt der BIOS-Isolations-Handler zuerst alle Schlitze (d. h. fährt sie energiemäßig herunter), 430, und aktualisiert das Isolation-In-Progress-EV mit diesen Informationen. Als nächstes löscht der BIOS-Isolations-Handler 431 eine Zähl-Variable N auf 0 und stellt eine Zähl-Variable I auf den Wert von N ein. Die Zähl-Variable N stellt die Zählung der belegten Schlitze dar.
  • Der BIOS-Isolations-Handler gibt wieder den belegten Schlitz I (der zu Anfang Schlitz N ist) frei (d. h. fährt ihn energiemäßig hoch), 432, und liest und schreibt zu diesem PCI-Konfigurations-Raum. Der Handler prüft dann, 438, um zu bestimmen, ob das Bus-Hängend-Anhängigkeits-Bit eingestellt ist. Falls dies nicht der Fall ist, verringert der Handler 433 die variable I und prüft, 434, ob die Variable I größer als oder gleich zu null ist. Falls dies der Fall ist, aktualisiert der Handler 435 das Isolations-In-Progress-EV und gibt wieder den nächsten, belegten Schlitz I frei, 432, und liest und schreibt mit diesem. Der Handler prüft dann, 438, ob das Bus-Hängend-Anhängigkeits-Bit für diesen nächsten Schlitz eingestellt ist. Auf diese Art und Weise werden, für jeden Schlitz N, der freigegeben werden soll, die vorher freigegebenen Schlitze auch energiemäßig, einer zu einem Zeitpunkt, hochgefahren, um zu bestimmen, ob eine Kombination von Schlitzen den Fehler verursacht.
  • Falls die Variable I dahingehend bestimmt ist, 434, dass sie geringer als Null ist, dann prüft der Handler 436, um zu bestimmen, ob alle belegten Schlitze freigegeben worden sind. Falls dies nicht der Fall ist, wird die Variable N erhöht, 437, das Isolation-In- Progress-EV wird aktualisiert, 439, und die Variable I wird wieder eingestellt, 441, und zwar gleich zu dem Wert von N.
  • Falls das Bus-Hängend-Anhängigkeits-Bit auf aktiv gesetzt ist, 438, dann werden potentiell zwei Schlitze gesperrt, 440: Schlitz N (der der Schlitz ist, der momentan freigegeben ist), und Schlitz I (der der Schlitz ist, von dem momentan gelesen und zu dem momentan geschrieben wird). Falls die Werte von I und N dieselben sind, dann wird nur Schlitz N gesperrt.
  • Falls der Handler bestimmt, 436, dass alle belegten Schlitze freigegeben worden sind (und ein Fehler nicht identifiziert werden konnte), dann lockt der Handler den NVRAM seine Unfähigkeit ein, 442, um den Fehler zu isolieren. Als nächstes löscht der Handler 428 das Isolation-In-Progress-EV.
  • Wie 40 zeigt, liefert der Watch-Dog-Zeitgeber 454 Ausgangs-Signale WD_TMR_OUT[17:0] (Zeitgeber-Zähl-Wert), HANG_PEND (Bus-Hängend-Zustand ist vorhanden), EN_CAP (die Software einer Erfassung der Bus-Vektor-Historie-Information ist freigegeben), TIME_OUT (der Watch-Dog-Zeitgeber 454 ist abgelaufen), ein Signal HANG_RCOVR_EN (eingestellt auf Hoch durch die Software, um die Hang-Recovery-Logik in dem Bus-Watcher 129 und in dem SIO 50 freizugeben), und ein Signal CAP_ILLEG_PROT (um einen illegalen Zyklus auf dem PCI-Bus 32 anzuzeigen).
  • Das Signal HANG_PEND wird zu der SIO 50 geliefert, um die Sekundär-Bus-Schlitze zu schließen. Die Eingangs-Signale zu dem Watch-Dog-Zeitgeber 454 umfassen einige der PCI-Bus-Signale, ein Signal WRT_EN_CAP_1 (gepulst auf Hoch durch die Software, um erneut die Erfassung der Bus-Historie- und Bus-Vektor-Informationen durch den Fehler-Isolations-Block 129 freizugeben), und ein Energie-Good-Indikator-Signal SYNC_POWEROK (was anzeigt, dass Energie zu dem Computer-System stabil ist).
  • Eine Bus-Hängend-Zurückgewinnungs-Zustand-Maschine 456 empfängt die Signale HANG_PEND, TIME_OUT und HANG_RCOVR_EN von dem Watch-Dog-Zeitgeber 454. Die Zurückgewinnungs-Zustand-Maschine 456 empfängt auch einige der PCI-Signale. Die Ausgangs-Signale von der Bus-Hängend-Zurückgewinnungs-Zustand-Maschine 456 umfassen ein Vorrichtungs-Auswahl-Signal DEVSEL_O zum Ansteuern des PCI-Signal DEVSEL_, ein Signal STOP_O zum Ansteuern des PCI-Signal STOP_, ein Signal SERR_EN, das ein Aufstellen des System-Fehler-Signals SERR_ freigibt, ein Signal BR_M_ABORT (was anzeigt, dass sich der Bus-Watcher 129 mit einem Master-Abort wieder hergestellt hat) ein Signal BR_T_ABORT, das anzeigt dass sich der Bus-Watcher 129 mit einem Target-Abort wieder hergestellt hat), und ein Signal RCOVR_ACTIVE (zum Anzeigen, wenn die Bus-Hängend-Zurückgewinnungs-Zustand-Maschine 456 aktiv ist). Die Bus-Hängend-Zurückgewinnungs-Zustand-Maschine 456 stellt sicher, dass der sekundäre PCI-Bus 32 zurück zu dem Leerlauf- bzw. IDLE Zustand gebracht wird, um der Software zu ermöglichen, den Fehler-Schlitz bzw. -Einsteckplatz zu isolieren. Wenn der Hang-Zustand erfasst ist, fährt die ISO 50 die sekundären Bus-Schlitze herunter, was automatisch den Bus 32 in den Leerlauf-Zustand versetzten würde, falls einer der Schlitz-Vorrichtungen der Bus-Master war, wenn der Hang-Zustand auftrat. Allerdings würde dann, wenn eine der Schlitz-Vorrichtungen das Target war (und der Brücken-Chip 48 der Master war), wenn das Bus-Hangen auftrat, dann der Brücken-Chip 48 an dem Bus verbleiben. Um den Brücken-Chip aus dem Bus herauszunehmen, erzwingt die Zurückgewinnungs-Zustand-Maschine 456 einen Zyklus für einen erneuten Versuch auf dem PCI-Bus 32 durch Aufstellen des Signals STOP_.
  • Ein Bus-Historie-Erfassungs-Block 458 überwacht den PCI-Bus 32 hinsichtlich Transaktionen und liefert die Bus-Historie-Informationen (umfassend die Adresse und die Daten) weiter zu Ausgangs-Signalen BUS_HIST_DATA3[31:0] (die Bus-Historie-Adresse), BUS_HIST_DATA2[31:0] (die Bus-Historie-Daten) und BUS_BIST_DATA1[15:0] (Paritäts-Fehler-Signal !PERR_, Paritäts-Bit-PAR, Gültigkeits-Daten-Bit VALID_DAT, Adressen-Paritäts-Bit ADDRPAR, Burst-Indikator BURST, Master-Zahl MASTER[2:0], Byte-Freigabe-Bits CBE[3:0]_, und Befehl-Bits CMD[3:0]). Der Bus-Historie-Erfassungs-Block 458 stellt ein Signal HIS_RDY auf, wenn Daten auf den BUS_HIST_DATA Signalen verfügbar sind, was der Fall an dem Ende jeder Daten-Phase in einer normalen Transaktion ist, oder falls die Transaktion mit einer Master-Aussonderung, einem erneuten Versuch, beendet wird, und zwar während des Aufstellens des Time-Out- Signals TIME_OUT.
  • Ein Bus-Vektor-Erfassungs-Block 460 erfasst die Zustände von bestimmten PCI-Steuersignalen, wenn irgendeines dieser Steuersignale seinen Zustand ändert. Der Vektor wird erfasst und als Signal BUS_VECT_DATA[20:0] ausgegeben, die die Anforderungs-Signale !REQ[7:0]_, Erteilungs-Signale !GNT[7:0]_, ein Time-Out-Signal TIME_OUT, ein Verriegelungs-Signal LOCK_, ein System-Fehler-Signal SERR_, ein Paritäts-Fehler-Signal PERR_, ein Stop-Signal STOP_, ein Target-Ready-Signal TRDY_, ein Initiator-Ready-Signal IRDY_, ein Vorrichtungs-Auswahl-Signal DEVSEL_ und ein Frame-Signal FRAME_ enthalten. Der Bus-Vektor-Erfassungs-Block 460 stellt ein Signal VECT_RDY auf, falls sich irgendein Bus-Vektor BUS_VECT_DATA[24:0] geändert hat oder der Watch-Dog-Zeitgeber 454 abgelaufen ist (TIME_OUT ist hoch).
  • Die Bus-Historie- und Bus-Vektor-Signale werden den Eingängen eines Bus-Watcher FIFOs präsentiert, das einen 2-Deep-Bus-Historie-FIFO und einen 4-Deep-Vektor-Historie-FIFO umfasst. Die Ausgänge der Bus-Historie-FIFOs werden als Signale BUS_HIST_REG1[31:0], BUS_HIST_REG2[31:0] und BUS_HIST_REG3[31:0] präsentiert. Die Ausgänge des Vektor-Historie-FIFOs werden als Signale BUS_VECT_REG[3:0] präsentiert. Die System-Software liest die Ausgänge des Bus-Historie-FIFO durch Erzeugen eines I/O-Lese-Zyklus, der bewirkt, dass ein Signal BUS_HIST_RD1 aufgestellt wird, und liest die Ausgänge des Vektors FIFO durch Erzeugen eines I/O-Lese-Zyklus, der bewirkt, dass ein Signal BUS_VECT_RD aufgestellt wird.
  • Wie 41 zeigt, beginnt die Zurückgewinnungs-Zustand-Maschine 456 in einem Zustand IDLE, wenn das Signal SYNC_POWEROK auf niedrig gesetzt wird, was anzeigt, dass Energie bis jetzt noch stabil ist. Die Zustand-Maschine verbleibt in einem Zustand IDLE, während das Signal HANG_PEND niedrig ist. In dem Zustand IDLE werden Signale BR_M_ABORT, BR_T_ABORT und RCOVR_ACTIVE auf niedrig gesetzt. Das Signal RCOVR_ACTIVE ist aktiv hoch in den anderen Zuständen WAIT, ABORT und PEND_OFF. Falls das Signal SET_HANG_PEND auf hoch gestellt ist, geht die Zustand-Maschine zu einem Zustand WAIT über. Bei dem Übergang wird das Signal DEVSEL_O gleich zu dem invertierten Zustand des Vorrichtungs-Auswahl-Signals DEVSEL_ gesetzt. Dies stellt sicher, dass dann, wenn das Vorrichtungs-Auswahl-Signal DEVSEL_ durch ein Target vor dem Bus-Hängend-Zustand aufgestellt wird, die Zurückgewinnungs-Zustand-Maschine 456 das Signal DEVSEL_ aufgestellt beibehält. In dem Zustand WAIT wird das Signal DEVSEL_O gleich zu dem Zustand des Signals DEV_SEL_WAS gesetzt, was auf hoch gesetzt wird, falls das Signal DEVSEL_ durch ein Target aufgestellt ist, bevor die Zustand-Maschine zu dem WAIT Zustand übergeht.
  • Von dem Zustand WAIT geht die Bus-Hängend-Zurückgewinnungs-Zustand-Maschine 456 zu dem PEND_OFF Zustand über, falls ein Signal PCI_IDLE aufgestellt ist, was anzeigt, dass der PCI-Bus 32 zu einem Leerlauf übergegangen ist (d. h. Signale FRAME_ und IRDY_ sind beide auf hoch gesetzt). Bei dem Übergang wird das Signal BR_M_ABORT auf hoch gesetzt, um anzuzeigen, dass eine der Schlitz-Vorrichtungen der Master vor dem Hang-Zustand war, und die Schlitz-Vorrichtung wird energiemäßig heruntergefahren, verursacht dadurch, dass der PCI-Bus zu einem Leerlauf übergeht. Ein Signal SERR_EN wird auch auf hoch gesetzt, um ein Aufstellen des System-Fehler-Signals SERR_ freizugeben oder falls INTA_ freigegeben ist.
  • Falls eine Schlitz-Vorrichtung ein Target war, und zwar vor dem Bus-Hängend-Zustand, dann wird der Bus-Master auf dem PCI-Bus 32 verbleiben. Um den Bus-Master aus dem PCI-Bus 32 herauszubringen, gibt die Bus-Hängend-Zurückgewinnungs-Zustand-Maschine 456 einen erneuten Versuch auf dem PCI-Bus 32 heraus. Ein Zähler 457 zählt eine vorbestimmte Zahl von PCLK-Perioden (z. B. 15 PCLK-Perioden), nachdem das Signal HANG_PEND auf hoch gesetzt ist. Die 15 PCLK-Perioden stellen eine ausreichende Anstiegszeit auf FRAME_ und IRDY_ sicher, um den Signalen Zeit zu geben, zurück zu deren Leerlauf-Zuständen zu gehen. Wenn 15 PCLK-Perioden abgelaufen sind, stellt der Zähler 457 das Signal TIME_OUT15 auf. Falls das Signal TIME_OUT15 auf hoch gesetzt ist, und das Signal PCI_IDLE niedrig verbleibt, dann geht die Zustand-Maschine von einem Zustand WAIT zu einem Zustand ABORT über. Bei dem Übergang wird das Signal STOP_O auf hoch gesetzt, um das PCI STOP_ Signal auf aktiv anzusteuern, um den Bus-Master erneut zu versuchen. Die Zustand-Maschine verbleibt in einem Zustand ABORT, während der Bus-Master das Signal FRAME_ auf niedrig aufgestellt beibehält. In dem Zustand ABORT wird das Signal STOP_O auf hoch beibehalten. Wenn einmal der Bus-Master das FRAME_ Signal in Abhängigkeit des Wiederversuch-Zustands zurücknimmt, geht die Zustand-Maschine von einem Zustand ABORT zu einem Zustand PEND_OFF über. Bei dem Übergang wird das Signal BR_T_ABORT auf hoch gesetzt, um anzuzeigen, dass das Target-Abort bzw. die Ziel-Aussonderung notwendig war, und zwar nach dem Bus-Hängend-Zustand, um den Bus 32 in den Leerlauf-Zustand zu platzieren. Das Signal SERR_EN wird auch auf hoch gesetzt, um ein Aufstellen des Signals SERR_ zu ermöglichen, oder falls INTA_ freigegeben ist. Die Zustand-Maschine verbleibt in dem Zustand PEND_OFF, bis das Signal WRT_EN_CAP_1 auf hoch gesetzt worden ist, wobei es zu diesem Zeitpunkt zurück zu dem Zustand IDLE übergeht.
  • Die System-Software kann den Wert von BR_M_ABORT und BR_T_ABORT Signalen lesen, um zu bestimmen, ob die Schlitz-Vorrichtung, eingeschlossen in dem Bus-Hängend-Zustand, eine Master-Vorrichtung oder eine Slave-Vorrichtung war.
  • Wie 42 zeigt, umfasst der Watch-Dog-Zeitgeber 454 einen 18-Bit-LSFR-Zähler 464, der durch das Signal PCLK getaktet wird. Der Zähler 464 wird dann freigegeben, wenn der Ausgang eines UND-Gates 467 auf hoch gesetzt ist, was dann auftritt, wenn ein neuer Master eine Anforderung (ANY_REQ ist hoch) ausgibt, der Bus-Zyklus gestartet ist (Signale FRAME_ und IRDY_ sind beide aufgestellt), das Freigabe-Erfassungs-Signal EN_CAP aufgestellt ist, und das Signal TIME_OUT niedrig ist. Ein ODER-Gate 466 empfängt das Signal ANY_REQ und die invertierten Zustände von Signalen FRAME_ und IRDY_. Das UND-Gate 467 empfängt den Ausgang fo des ODER-Gates 466, das Signal EN_CAP und den invertierten Zustand des Signals TIME_OUT. Der Ausgang des Zählers steuert Signale WD_TMR_OUT[17:0] und wird gelöscht, wenn ein Time-Out-Zustand erfasst ist (TIME_OUT ist hoch), eine Datenübertragung stattgefunden hat (beide Signale IRDY_ und TRDY_ sind auf niedrig gesetzt), oder alle Ausgangs-Bits des Zählers 464 hoch sind (was ein illegaler Zustand ist). Der Lösch-Zustand wird durch ein ODER-Gate 470 angezeigt, das das Signal TIME_OUT empfängt, das bit-weise AND (UND) der Signale WD_TMR_OUT[17:0] und den Ausgang eines UND-Gates 472. Die Eingänge des UND-Gates 472 nehmen den invertierten Zustand des Signals IRDY_ und den invertierten Zustand des Signals TRDY_ auf.
  • Das Signal TIME_OUT wird auf hoch durch einen Time-Out-Detektor 474 gesetzt, wenn die Zeitgeber-Signale WD_TMR_OUT[17:0] zu dem binären Wert 1000000000000000. Das Signal TIME_OUT wird zu einem Eingang eines ODER-Gates 476 geliefert, dessen Ausgang mit dem Eingang eines UND-Gates 478 verbunden ist. Der andere Eingang des UND-Gates 478 nimmt den invertierten Zustand eines Signals WRT_EN_CAP_1 auf (gesteuert durch eine Software, um erneut die Bus-Historie und Bus-Vektor-Erfassung zu ermöglichen), und sein Ausgang wird mit dem D_Eingang eines Flip-Flops 488 vom D-Typ verbunden. Das Flip-Flop 488 wird durch das Signal PCLK getaktet und steuert ein Ausgangs-Signal WD_TIME_OUT an, das zurück zu dem anderen Eingang des ODER-Gates 476 zugeführt wird. Das Flip-Flop 488 wird dann gelöscht, wenn das Power-Good-Signal SYNC_POWEROK negiert wird. Demzufolge löscht ein ASR-Reset nicht das Signal WD_TIME_OUT.
  • Das HANG_PEND Signal wird durch ein Flip-Flop 482 vom D-Typ auf hoch gesetzt, dessen D-Eingang mit dem Ausgang eines UND-Gates 484 verbunden wird und der durch das Signal PCLK getaktet wird. Ein Eingang des UND-Gates 484 ist mit dem Ausgang ei nes ODER-Gates 486 verbunden, und sein anderer Eingang nimmt den invertierten Zustand des Signals WRT_EN_CAP_1 auf. Ein Eingang des ODER-Gates 486 ist mit dem Signal HANG_PEND verbunden, und der andere Eingang ist mit dem Ausgang eines UND-Gates 488 verbunden. Die Eingänge des UND-Gates 488 nehmen das Signal TIME_OUT und das Freigabe-Signal HANG_RCOVR_EN auf. Demzufolge wird, falls die System-Software eine Bus-Hängend-Wiederherstellung freigibt (HANG_RCOVREN ist hoch), dann wird ein Time-out-Zustand bewirken, dass das Signal HANG_PEND auf hoch gesetzt wird. Das Signal HANG_PEND wird dann gelöscht, wenn die System-Software bewirkt, dass das Signal WRT_EN_CAP_1 aufgestellt wird (unter Durchführen eines I/O-Zyklus auf dem Bus 32), oder wenn das Signal SYNC_POWEROK negiert wird. Das Bit HANG_PEND wird nicht negiert durch einen ASR-Reboot.
  • Das Freigabe-Erfassungs-Signal EN_CAP wird durch ein Flip-Flop 490 vom D-Typ erzeugt, dessen D-Eingang den Ausgang eines UND-Gates 492 aufnimmt. Ein Eingang des UND-Gates 492 ist mit dem Ausgang eines ODER-Gates 494 verbunden, und sein anderer Eingang ist mit dem invertierten Zustand eines Signals CLR_EN_CAP verbunden. Ein Eingang des ODER-Gates 494 wird zurück zu dem Signal EN_CAP geführt und der andere Eingang nimmt das Signal WRT_EN_CAP_1 auf. Das Flip-Flop 490 wird durch das Signal PCLK getaktet und auf hoch gesetzt, wenn das Signal SYNC_POWEROK auf niedrig gesetzt wird. Wenn einmal das Signal EN_CAP auf hoch durch die Software über das Signal WRT_EN_CAP_1 gesetzt wird, wird es auf hoch beibehalten. Das Signal CLR_EN_CAP wird aufgestellt, um das Signal EN_CAP zu löschen (Disable Capture of Information – Sperren einer Erfassung von Information), was dann auftritt, wenn ein Zeitablauf bzw. Time-Out aufgetreten ist (TIME_OUT ist hoch), ein System-Fehler aufgetreten ist (SERR_ ist niedrig), ein Paritäts-Fehler aufgetreten ist (PERR_ ist niedrig), oder ein illegales Bus-Protokoll erfasst worden ist (CAP_ILLEG_PROT ist hoch).
  • Das Signal CAP_ILLEG_PROT wird durch ein Flip-Flop 483 vom D-Typ erzeugt, dessen D-Eingang den Ausgang eines UND-Gates 485 aufnimmt. Ein Eingang des UND-Gates nimmt den invertierten Zustand des Signals WRT_EN_CAP_1 auf, und der andere Eingang empfängt den Ausgang eines ODER-Gates 487. Das ODER-Gate 487 empfängt die Signale CAP_ILLEG_PROT und SET_ILLEG_PROT. Das Signal SET_ILLEG_PROT wird dann aufgestellt, wenn ein Protokollieren (capture) freigegeben ist (EN_CAP ist hoch), die Zustand-Maschine 456 nicht aktiv ist (RCOVR_ACTIVE ist niedrig), der Bus leerläuft und irgendwelche Signale DEVSEL_, TRDY_ oder IRDY_ auf niedrig gesetzt sind. Dieser Zustand ist ein illegaler Zustand, der eine Protokollierung der Bus-Historie und von Bus-Vektor-Informationen triggert.
  • Wie 43 zeigt, wird das Bus-Historie-Bereitschaft-Signal HIST_RDY durch ein Flip-Flop 502 vom D-Typ erzeugt, das durch das Signal PCLK getaktet und durch das Signal RESET gelöscht wird. Der D-Eingang des Flip-Flops 502 ist mit dem Ausgang eines ODER-Gates 504 verbunden, dessen Eingänge das Signal TIME_OUT, ein Signal M_ABORT (Master-Abort-Signal, verzögert durch eine PCLK), den Ausgang eines UND-Gates 506 und den Ausgang eines UND-Gates 508 aufnehmen. Das UND-Gate 506 stellt seinen Ausgang auf, falls ein erneuter Versuch, C zu trennen, oder ein Target-Abort-Zyklus auf dem sekundären Bus 32 vorhanden ist (das Signal FRAME_, der invertierte Zustand des Signals IRDY_, der invertierte Zustand des Signals STOP_, und der invertierte Zustand des Signals DSC_A_B sind alle wahr). Das UND-Gate 508 stellt seinen Ausgang auf, wenn eine abgeschlossene Daten-Übertragung aufgetreten ist (die Signale IRDY_ und TRDY_ sind beide niedrig). Demzufolge werden die Bus-Historie-Informationen in die Bus-Historie-FIFOs eingeladen, wenn der Watch-Dog-Zeitgeber 554 zeitmäßig abläuft, ein erneuter Versuch, C zu unterbrechen, oder ein Target-Abort-Zustand vorhanden ist, der Master den Zyklus ausgesondert hat oder ein Zyklus erfolgreich abgeschlossen wurde.
  • Das Gültigkeits-Daten-Indikations-Signal VALID_DATA wird durch einen Flip-Flop 510 vom D-Typ erzeugt, das durch das Signal PCLK getaktet wird und durch das Signal RESET gelöscht wird. Der D-Eingang des Flip-Flops 510 wird mit dem Ausgang eines NOR-Gates 512 verbunden, das das Signal TIME_OUT, das Master-Abort-Signal M_ABORT und den Ausgang des UND-Gates 506 aufnimmt. Demzufolge sind Daten gültig, ohne dass ein Zeitablauf erfasst ist, ein Master-Abort-Zyklus ausgegeben ist, oder ein erneuter Versuch, C zu trennen, oder ein Target-Abort-Zyklus, vorhanden ist.
  • Das Signal VECT_RDY wird durch ein Flip-Flop 514 vom D-Typ erzeugt, das durch das Signal PCLK getaktet wird und durch das Signal RESET gelöscht wird. Der D-Eingang des Flip-Flops 514 wird mit dem Ausgang eines ODER-Gates 516 verbunden, der das Zeitablaufsignal TIME_OUT und ein Signal CHANGE_STATE aufnimmt, was anzeigt, dass eines der PCI-Steuer-Signale in dem Bus-Vector seinen Zustand geändert hat. Demzufolge werden die Zustands-Vektor-Informationen in die Vektor-FIFOs immer dann ein geladen, wenn Steuersignale auf dem PCI-Bus 32 einen Zustand ändern oder wenn ein Zeitablauf aufgetreten ist.
  • Wie 44 zeigt, werden die Bus-Historie-Daten {BUS_HIST_DATA3[31:0], BUS_HIST_DATA2[31:0], BUS_HIST_DATA1[15:0]} zu dem Eingang des Bus-Historie-Registers 540 geliefert, das die erste Stufe des Bus-Historie-FIFO's ist. Die Bus-Historie 501 liefert Ausgangs-Signale BUS_HIST_FIFO1[79:0] zu dem Register 542 (der zweite Zustand der Pipeline), was Ausgangs-Signale BUS_HIST_FIFO0[79:0] liefert. Beide Bus-Historie-Register 540 und 542 werden durch das Signal PCLK getaktet und gelöscht, wenn das Power-Good-Signal SYNC_POWEROK niedrig ist.
  • Die Bus-Historie-Register 540 und 542 werden dann geladen, wenn der Ausgang des UND-Gates 518 auf hoch angesteuert wird. Das UND-Gate 518 empfängt das Freigabe-Erfassungs-Bit EN_CAP und das ODER des Bus-Historie-Bereitschafts-Signals HIST_RDY und des CAP_ILLEG_PROT Signals (ODER-Gate 519). Die Ausgangs-Signale BUS_HIST_FIFO0[79:0] und BUS_HIST_FIFO1[79:0] werden zu den 0- und 1-Eingängen jeweils von Multiplexern 520, 522 und 524 geliefert. Jeder der Multiplexer 520, 522 und 524 wird durch ein Lese-Adressen-Signal HIST_FIFO_RD_ADDR ausgewählt (das mit niedrig startet, um den Ausgang des Bus-Registers 502 auszuwählen, und bei jeder darauffolgenden Lesung getoggelt wird). Die Multiplexer 520, 522 und 524 steuern Ausgangs-Signale BUS_HIST_REG3[31:0], BUS_HIST_REG2[31:0], BUS_HIST_REG1[15:0] jeweils an.
  • Die Bus-Vektor-Daten-Signale BUS_VECT_DATA[24:0] werden zu den Eingängen eines Bus-Vektor-Registers 544 geliefert, dessen Ausgang zu dem Eingang eines Bus-Vektor-Registers 546 weitergeführt-wird. Der Ausgang des Bus-Vektor-Registers 546 wird zu dem Eingang eines Bus-Vektor-Registers 548 weitergeführt, dessen Ausgang wiederum zu dem Eingang eines Bus-Vektor-Registers 550 zurückgeführt wird. Jedes der Bus-Vektor-Register 0–3 wird durch das Signal PCLK getaktet und dann gelöscht, wenn die Signale SYNC_POWEROK niedrig sind. Die Bus-Vektor-Register werden dann geladen, wenn der Ausgang des UND-Gates 521 auf hoch gesetzt wird. Das UND-Gate 521 empfängt das Signal EN_CAP und das ODER von Signalen VECT_RDY und CAP_ILLEG_PROT (ODER-GATE 523). Die Bus-Vektor-Register 550, 548, 546 und 544 erzeugen Ausgangs-Signale BUS_VECT_FIFO0[24:0], BUS_VECT_FIFO1[24:0], BUS_VECT_FIFO0[24:0] und BUS_VECT_FIFO3[24:0] jeweils, die wiederum zu den 0-, 1-, 2- und 3-Eingängen eines Multiplexers 526 jeweils eingegeben werden. Der Ausgang des Multiplexers 526 liefert Signale BUS_VECT_REG[31:0], wobei der Multiplexer 526 einen seiner Eingänge basierend auf dem Zustand von Adressen-Signalen VECT_FIFO_RD_ADDR[1:0] auswählt (was mit einem binären Wert 00 beginnt und bei jeder darauffolgenden Lesung erhöht wird).
  • Demzufolge werden die Bus-Historie- und Bus-Zustand-Vektor-Informationen in Abhängigkeit eines Aufstellens von Signalen HIST_RDY oder VECT_RDY jeweils protokolliert, oder in Abhängigkeit eines Aufstellens des Signals CAP_ILEG_PROT, falls ein illegaler Bus-Protokoll-Zustand erfasst ist.
  • ERWEITERUNGS-KARTEN-RAUM-RESERVIERUNG
  • Im Gegensatz zu herkömmlichen Computersystemen reserviert, in der Anfangs-Konfiguration des Computersystems 10, bei einem Einschalten, die CPU 14 einen Speicherraum und PCI-Bus-Zahlen für die Schlitze bzw. Einsteckplätze 36, die leer sind (keine Karte 807 ist eingesetzt) oder abgeschaltet sind bzw. heruntergefahren sind.
  • Die CPU 14 ordnet, wie dies typischerweise vorgenommen wird, Bus-Zahlen für PCI-Busse (z. B. PCI-Busse 24, 32ab und PCI-Bus(e) der Karten 807, die in Schlitze 36 eingesetzt sind und eingeschaltet sind) zu, die dann vorhanden sind, wenn das Computersystem 10 zuerst eingeschaltet bzw. hochgefahren wird.
  • Jede PCI-PCI-Brücken-Schaltung (z. B. PCI-PCI-Brücke 26, 48) in diesem Konfigurations-Register-Raum 1252 (49) besitzt ein Neben-Bus-Zahl-Register 1218 und ein Sekundär-Bus-Zahl-Register 1220. Das Neben-Bus-Zahl-Register 1218 enthält eine Neben-Bus-Zahl, die die höchste PCI-Bus-Zahl ausgangsseitig der PCI-PCI-Brücken-Schaltung ist, und das Sekundär-Bus-Zahl-Register 1220 enthält eine Sekundär-Bus-Zahl, die die PCI-Bus-Zahl des PCI-Busses unmittelbar ausgangsseitig der PCI-PCI-Brücken-Schaltung ist. Demzufolge definieren die Werte, gespeichert in dem Neben- 1218 und dem Sekundär- 1220 Bus-Zahl-Register, den Bereich von PCI-Bus-Zahlen, die ausgangsseitig der PCI-PCI-Brücken-Schaltung vorhanden sind.
  • Der Konfigurations-Register-Raum 1252 besitzt auch ein Primär-Bus-Zahlen-Register 1222. Das Primär-Bus-Zahl-Register 1222 enthält die Zahl des PCI-Busses, angeordnet unmittelbar eingangsseitig der PCI-PCI-Brücken-Schaltung.
  • Die System-Steuereinheit/Host-Brücken-Schaltung 18 besitzt auch das Neben- 1218 und Sekundär- 1220 Bus-Zahl-Register. Nach einer Konfiguration enthält das Ne ben-Bus-Zahl-Register 1218 der Schaltung 18 die maximale PCI-Bus-Zahl, die in dem Computersystem vorhanden ist. Das Sekundär-Bus-Zahl-Register 1220 der Schaltung 18 enthält die Bus-Zahl Null, da dem PCI-Bus unmittelbar ausgangsseitig der Schaltung 18 (PCI-Bus 24) immer die Bus-Zahl Null zugeordnet wird.
  • Im Gegensatz zu dem bekannten System erkennt die CPU 14, dass einer der Schlitze 36, der zu Anfang eingeschaltet bzw. hochgefahren ist oder leer ist, einen oder mehrere zusätzliche PCI-Buse) (vorhanden auf der Karte 802, eingesetzt in dem Schlitz 36, zu Anfang heruntergefahren) in das Computersystem 10 hinein einführen kann, nachdem das Computersystem 10 bereits eingeschaltet bzw. hochgefahren und konfiguriert ist. Dementsprechend reserviert, während einer anfänglichen Konfiguration, die CPU 14 Speicherraum, I/O-Raum und eine vorbestimmte Zahl (z. B. eins oder drei) von PCI-Bus-Zahlen für irgendeinen Schlitz 36, der heruntergefahren oder leer ist.
  • Demzufolge müssen die PCI-PCI-Brücken-Schaltungen des Computersystems 10 nicht rekonfiguriert werden, um die Karte 807 aufzunehmen, die vor kurzem eingeschaltet worden ist. Nur die PCI-PCI-Brücken-Schaltungen der Karte 807, die vor kurzem eingeschaltet wurde, muss konfiguriert werden. Der Rest des Computersystems 10 verbleibt unverändert.
  • Als ein Teil des Resource-Reservierungs-Prozesses baut ein Basic-Input/Output-System (BIOS), gespeichert in dem ROM 23 und verdeckt in den Speicher 20 eingegeben (und schreibgeschützt), eine Tabelle auf, die Resource-Bereiche spezifiziert, die für die Schlitze 36 reserviert werden. Diese Tabelle umfasst eine Bus-Zahl, Speicher und I/O-Resource-Bereiche zur Verwendung beim Konfigurieren einer PCI-Vorrichtung, die neu zu dem System 10 hinzugefügt worden ist. Das Betriebssystem verwendet diese Tabelle, um zu bestimmen, welche Resourcen reserviert worden sind und welche Resourcen für eine Konfigurierung der neu hinzugefügten PCI-Vorrichtung verfügbar sind.
  • Wie in 45 dargestellt ist, ordnet, in einem rekursiven PCI-Konfigurations-Programm, bezeichnet als BUS_ASSIGN, die CPU 14 Konfigurations-Register 1252 für PCI-Bus-Zahlen und -Programme der PCI-PCI-Brücken-Schaltungen entsprechend zu. Die CPU 14 nimmt dies durch Abtasten eines PCI-Busses zu einem Zeitpunkt für PCI-Vorrichtungen vor. Das BUS_ASSIGN Programm ist Teil des BIOS, gespeichert in dem ROM 23, und wird dazu verwendet, zu Anfang das Computersystem 10, nach einem Einschalten, zu konfigurieren.
  • Die CPU 14 setzt zuerst 1000, der Wert eines Such-Parameters PCI-Bus, gleich zu dem Wert eines anderen Such-Parameters CURRENT_PCI_BUS, und initialisiert 1000 Such-Parameter FCN und DEV. Der Parameter PCI-Bus zeigt die Bus-Zahl des PCI-Busses an, der momentan durch die CPU 14 abgetastet wird, und wenn das BUS_ASSIGN Programm zuerst durch die CPU 14 ausgeführt wird, zeigt der Parameter PCI-Bus die Bus-Zahl Null an.
  • Der Parameter CURRENT_PCI_BUS zeigt die nächste PCI-Bus-Zahl an, die zum Zuordnen durch die CPU verfügbar ist, und wenn das Programm BUS_ASSIGN zuerst durch die CPU 14 ausgeführt wird, zeigt der Parameter CURRENT_PCI_BUS eine Bus-Zahl Null an. Die Parameter FCN und DEV zeigen die momentane PCI-Funktion und die PCI-Vorrichtung, jeweils, an, die momentan durch die CPU 14 abgetastet werden.
  • Die CPU 14 bestimmt, 1001, ob der Parameter PCI_BUS eine Bus-Zahl Null anzeigt, und falls dies der Fall ist, stellt die CPU 14 das Sekundär-Bus-Zahl-Register 1220 der System-Steuereinheit/Host-Brücken-Schaltung 18 gleich zu Null ein. Die CPU 14 findet dann, 1004, die nächste PCI-PCI-Brücken-Schaltung oder den Schlitz 36, der heruntergefahren bzw. ausgeschaltet ist oder leer ist, auf dem PCI-Bus, angezeigt durch den Parameter PCI_BUS. Zu Zwecken einer Bestimmung, ob die nächste, gefundene PCI-Vorrichtung eine PCI-PCI-Brücken-Schaltung ist oder nicht existiert (ein abgeschalteter oder leerer Schlitz), versucht die CPU 14, von einem Wert eines EIN-Wort-Vendor-ID-Register, angeordnet in dem Konfigurations-Raum jeder PCI-Vorrichtung, zu lesen. Ein Wert von „hFFFF" (wobei die Vorsilbe „h" eine hexadezimale Darstellung bezeichnet) wird reserviert und nicht durch irgendeinen Vendor bzw. Lieferanten verwendet. Falls die versuchte Lesung von dem Vendor-ID-Register zu einem Wert „HFFFF" zurückkehrt, dann zeigt dies an, dass keine PCI-Vorrichtung vorhanden ist.
  • Falls die CPU 14 bestimmt, 1006, dass dort keine weiteren, nicht vorgefundenen PCI-PCI-Brücken-Schaltungen oder Schlitze 36 vorhanden sind, die heruntergefahren sind oder leer sind, und zwar auf dem PCI-Bus, angezeigt durch den Parameter PCI_BUS, wird eine Zurückführung von dem letzten Aufruf, vorgenommen zu dem BUS_ASSIGN Programm, vorgenommen. Ansonsten bestimmt die CPU 14, 1008, ob eine andere PCI-PCI-Brücken-Schaltung vorgefunden wurde, und falls nicht, erhöht die CPU 14, 1010, den Parameter CURRENT_PCI_BUS, da ein Schlitz bzw. Einsteckplatz 36, der eingeschaltet oder leer ist, gefunden wurde, und findet, 1004, die nächste PCI-PCI-Brücken-Schaltung oder einen Schlitz 36, der abgeschaltet oder leer ist. Demzufolge reserviert, durch Erhöhen, 1010, des Parameters CURRENT_PCI_BUS, die CPU 14 effektiv eine Bus-Zahl für den Schlitz 36, der abgeschaltet oder leer ist. Alternativ kann die CPU 14 mehr als eine Bus-Zahl für den Schlitz 36 reservieren, der abgeschaltet oder leer ist.
  • Falls die CPU 14 eine PCI-PCI-Brücken-Schaltung fand, dann stellt die CPU 14, 1012, die Primär-Bus-Zahl der PCI-PCI-Brücken-Schaltung gleich zu dem Parameter CURRENT_PCI_BUS ein. Die CPU 14 erhöht dann, 1014, den Parameter CURRENT_PCI_BUS und stellt, 1016, die sekundäre Bus-Zahl der PCI-PCI-Brücke gleich zu der neuen Bus-Zahl, angezeigt durch den Parameter CURRENT_PCI_BUS, ein.
  • Die CPU 14 stellt dann, 1018, die Neben-Bus-Zahl der gefundenen PCI-PCI-Brücken-Schaltung gleich zu der maximalen, möglichen Zahl von PCI-Bussen ein, und zwar durch Schreiben zu dem Neben-Bus-Zahl-Register 1218. Dieser Wert für das Neben-Bus-Zahl-Register 1218 ist temporär und ermöglicht der CPU 14, zusätzliche, ausgangsseitige PCI-PCI-Brücken-Schaltungen oder Schlitze 36 zu finden und zu programmieren, die abgeschaltet oder leer sind.
  • Die CPU 14 findet zusätzliche, ausgangsseitige PCI-PCI-Brücken-Schaltungen oder Schlitze 36, die abgeschaltet oder leer sind, durch Aufbewahren, 1022, der Parameter PCI_BUS, DEV und FCN und jeweils aufrufen, 1022, des BUS_ASSIGN Programms. Die CPU 14 speichert dann wieder, 1024, die Werte für die Parameter PCI_BUS, DEV und FCN, und kehrt zu dem letzten Aufruf des BUS_ASSIGN Programms zurück, um den Parameter CURRENT_PCI_BUS mit der nächsten PCI-Bus-Zahl zu aktualisieren, die durch die CPU 14 zugeordnet werden sollen.
  • Die CPU 14 aktualisiert dann, 1026, die Neben-Bus-Zahl der aufgefundenen PCI-PCI-Brücke durch Einstellen, 1026, der Neben-Bus-Zahl gleich zu dem Parameter CURRENT_PCI_BUS. Demzufolge schließt dies die Zuordnung der PCI-Bus-Zahl zu der gefundenen PCI-PCI-Brückenschaltung und zusätzlichen, ausgangsseitigen PCI-PCI-Brücken-Schaltungen und Einsteckplätzen bzw. Schlitzen 36 ab, die abgeschaltet oder leer sind. Die CPU 14 findet dann, 1004, die nächste PCI-PCI-Brücken-Schaltung oder den Schlitz 36, die abgeschaltet oder leer sind, und zwar auf dem PCI-Bus, angezeigt durch den Parameter PCI_BUS.
  • Wie in 46 dargestellt ist, führt, nachdem die PCI-Bus-Zahlen zugeordnet sind, die CPU 14 ein Speicher-Raum-Zuordnungs-Programm, bezeichnet als MEM_ALLOC, aus, um Speicher-Raum für die PCI-Funktionen und Schlitze 36 zuzuordnen, die abgeschaltet oder leer sind. Die CPU 14 initialisiert zuerst, 1028, Such-Parameter, verwendet beim Unterstützen der CPU 14 beim Auffinden der angeordneten PCI-Funktionen und Schlitze 36, die abgeschaltet oder leer sind.
  • Die CPU 14, findet dann, 1030, die nächste PCI-Funktion oder die Schlitze 36, die abgeschaltet oder leer ist. Falls die CPU 14 bestimmt, 1032, dass alle PCI-Funktionen und alle Schlitze bzw. Einsteckplätze 36, die abgeschaltet oder leer sind, einem Speicherraum zugeordnet worden sind, kehrt die CPU 14 von dem Programm MEM_ALLOC zurück. Ansonsten bestimmt die CPU 14, 1032, ob eine PCI-Funktion gefunden wurde.
  • Falls dies der Fall ist, ordnet die CPU 14 Speicher-Resourcen zu, 1038, wie dies durch die PCI-Funktion spezifiziert ist. Ansonsten wird einer der Schlitze bzw. Einsteckplätze 36, der abgeschaltet ist oder leer ist, vorgefunden, und die CPU 14 ordnet eine Fehler-Speicher-Größe und eine Speicher-Ausrichtung für den Schlitz 36 zu, 1036. Die Fehler-Speicher-Größe kann entweder eine vorbestimmte Größe sein, bestimmt vor einem Einschalten des Computersystems 10, oder eine Größe, die nach einer Bestimmung der Speicher-Resourcen, erforderlich durch das Computersystem 10, bestimmt ist.
  • Wenn Speicherraum zugeordnet wird, programmiert die CPU 14 Speicher-Basis- 1212 und Speicher-Grenzen- 1214 Register der PCI-PCI-Brücken-Schaltungen, die eingangsseitig der gefundenen PCI-Funktion vorhanden sind. Die CPU 14 programmiert geeignet auch Basis-Adressen-Register der entsprechenden PCI-Vorrichtungen. Die CPU 14 findet dann, 1030, die nächste PCI-Funktion oder den Schlitz 36, der abgeschaltet oder leer ist.
  • Wie in 47 dargestellt ist, führt, nachdem die PCI-Bus-Zahlen zugeordnet sind, die CPU 14 ein I/O-Raum-Zuordnungs-Programm, bezeichnet als I/O_ALLOC, aus, um I/O/Raum für PCI-Funktionen und Schlitze 36, die leer sind, zuzuordnen. Die CPU 14 initialisiert zuerst, 1040, Such-Parameter, verwendet beim Unterstützen der CPU 14, die zugeordneten PCI-Funktionen und Schlitze 36, die abgeschaltet oder leer sind, zu finden.
  • Die CPU 14 findet, 1042, die nächste PCI-Funktion oder den Schlitz 36, der abgeschaltet oder leer ist. Falls die CPU 14 bestimmt, 1044, dass alle PCI-Funktionen und Schlitze 36, die abgeschaltet oder leer sind, einem I/O/Raum zugeordnet worden sind, kehrt die CPU 14 von dem I/O_ALLOC Programm zurück. Ansonsten bestimmt die CPU 14, 1044, ob eine PCI-Funktion gefunden wurde. Falls dies der Fall ist, ordnet die CPU 14, 1050, I/O-Resourcen zu, wie dies durch die PCI-Funktion spezifiziert ist. Ansonsten ordnen ein Schlitz 36, der heruntergefahren ist oder leer vorgefunden wurde, und die CPU 14 eine Fehler-I/O-Größe und eine I/O-Ausrichtung für den Schlitz 36 zu, 1048. Die Fehler-I/O-Größe kann entweder eine vorbestimmte Größe, bestimmt vor einem Abschalten des Computersystems 10, oder eine Größe, bestimmt nach einer Bestimmung der I/O-Ressourcen, erforderlich durch das Computersystem 10, sein.
  • Wenn ein I/O/Raum zugeordnet wird, dann programmiert die CPU 14 die I/O-Basis 1208 und begrenzt, 1012, Register der PCI-PCI-Brücken-Schaltungen, eingangsseitig der PCI-Funktion oder des Schlitzes 36. Die CPU 14 programmiert auch Basis-Adressen-Register der entsprechenden PCI-Vorrichtungen geeignet. Die CPU 14 findet dann, 1042, die nächste PCI-Funktion oder den Schlitz 36, der abgeschaltet oder leer ist.
  • Wie in 48 dargestellt ist, führt, nach einer anfänglichen Konfiguration, wenn eine Unterbrechung erzeugt ist, die anzeigt, dass einer der Hebel 802 geöffnet oder geschlossen ist, die CPU 14 ein Unterbrechungs-Service-Programm, bezeichnet als CARD_INT, aus. Die CPU 14 liest, 1052, die Inhalte des Unterbrechungs-Registers 800, um zu bestimmen, 1053, ob der Hebel 802 geöffnet oder geschlossen worden ist. Falls die CPU 14 bestimmt, 1053, dass der Hebel 802, der die Unterbrechung verursacht, geöffnet wurde, kehrt die CPU 14 von dem Programm CARD_INT zurück.
  • Ansonsten schreibt die CPU 14, 1054, zu dem Schlitz-Freigabe-Register 817 und stellt, 1054, das SO-Bit ein, um das Einschalten des Schlitzes 36 und der Karte 807, eingesetzt in dem Schlitz 36, zu initiieren. Die CPU 14 wartet dann (nicht dargestellt) auf die Karte 807, um einzuschalten. Die CPU 14 greift dann, 1055, auf den PCI-Bus auf der Karte zu, falls vorhanden. Die CPU 14 bestimmt dann, 1056, ob die Karte 807, die gerade eingeschaltet wurde, einen PCI-Bus besaß (und eine PCI-PCI-Brücken-Schaltung). Falls dies der Fall ist, bestimmt, 1057, die CPU 14 die primären, sekundären und Unterprogramm-Bus-Zahlen, reserviert für den Schlitz 36, in dem die Karte 807 eingeschaltet wurde. Die CPU 14 konfiguriert darauffolgend, 1058, die PCI-PCI-Brücken-Schaltung auf der Karte 807, die eingeschaltet wurde.
  • Die CPU 14 bestimmt dann, 1060, die Stelle und die Größe von I/O- und Speicher-Räumen, reserviert für den Schlitz 36. Die CPU 14 schreibt darauffolgend, 1062, zu Basis Adressen-Registern in dem PCI-Konfigurations-Header-Raum der Karte 807, die eingeschaltet wurde. Die CPU 14 liest dann, 1064, ein Unterbrechungs-Stift-Register in dem Konfigurations-Raum der Karte 807, um zu bestimmen, 1066, ob die Karte 807 Unterbrechungs-Anforderungen verwendet. Falls dies der Fall ist, schreibt die CPU 14, 1068, ein Unterbrechungs-Zeilen-Register in den Konfigurations-Raum der Karte 807 mit einer zugeordneten IRQ-Zahl.
  • Die CPU gibt dann, 1070, Befehls-Register der Karte 870 frei, die in dem Konfigurations-Raum der Karte 807 angeordnet sind, und ermöglicht der Karte 807, auf Speicher- und I/O-Zugriffe auf den PCI-Bus 32 anzusprechen. Die CPU 14 schreibt darauffolgend, 1072, zu dem Unterbrechungs-Register 800, um die Unterbrechungs-Anforderung zu löschen, und lädt, 1074, einen Software-Vorrichtungs-Treiber für die Karte 807. Die CPU 14 kehrt dann von dem Programm CARD_INT zurück.
  • BRÜCKEN-KONFIGURATION
  • Funktional bilden Brücken-Chips 26 und 48 eine PCI-PCI-Brücke zwischen PCI-Bussen 24 und 32. Allerdings umfasst jeder Brücken-Chip einen Konfigurations-Raum, der unabhängig konfiguriert werden muss. Eine Lösung ist diejenige, zwei Brücken als unabhängige Vorrichtungen, eine Brücke bildend, zu behandeln, allerdings würde dies eine Modifikation des BIOS-Konfigurations-Programms erfordern. Die andere Lösung ist diejenige, das Kabel 28 als einen Bus zu definieren, so dass das Konfigurations-Programm den eingangsseitigen Brücken-Chip 26 als eine PCI-PCI-Brücke zwischen dem PCI-Bus 24 und dem Kabel 28 und dem ausgangsseitigen Brücken-Chip 48 als eine PCI-PCI-Brücke zwischen dem Kabel 28 und dem PCI-Bus 32 konfigurieren kann. Ein Vorteil dieser zweiten Lösung ist derjenige, dass Standard-PCI-Konfigurations-Zyklen laufen können, um die Brücken-Chips 26 und 48 zu konfigurieren, falls sie zwei PCI-PCI-Brücken waren, wenn tatsächlich die zwei Brücken-Chips eine PCI-PCI-Brücke bilden.
  • Dabei sind zwei Typen von Konfigurations-Transaktionen auf dem PCI-Bus vorhanden: Typ 0 und Typ 1. Ein Konfigurations-Zyklus vom Typ 0 ist für Vorrichtungen auf dem PCI-Bus vorgesehen, auf dem der Konfigurations-Zyklus erzeugt ist, während ein Konfigurations-Zyklus vom Typ 1 für Vorrichtungen auf einem sekundären PCI-Bus, auf den über eine Brücke zugegriffen wird, vorgesehen ist. 51 stellt das Adressen-Format von Konfigurations-Zyklen vom Typ 0 und Typ 1 dar. Ein Konfigurations-Befehl vom Typ 0 wird durch Einstellen von PCI-Adressen-Bits AD[1:0] auf 00 während eines Konfigurations-Zyklus spezifiziert. Ein Konfigurations-Zyklus vom Typ 0 wird nicht über eine PCI-PCI- Brücke weitergeführt, sondern verbleibt lokal auf dem Bus, auf dem die Konfigurations-Transaktion vom Typ 0 erzeugt wurde.
  • Ein Konfigurations-Befehl vom Typ 1 wird durch Einstellen von Adressen-Bits AD[1:0] auf einen binären Wert 01 spezifiziert. Konfigurations-Befehle vom Typ 1 können durch eine PCI-PCI-Brücke zu irgendeinem Level in der PCI-Bus-Hierarchie weitergeführt werden. Schließlich wandelt eine PCI-PCI-Brücke einen Befehl vom Typ 1 zu einem Befehl vom Typ 0 um, um Vorrichtungen zu konfigurieren, die mit der sekundären Schnittstelle der PCI-PCI-Brücke verbunden sind.
  • Konfigurations-Parameter, gespeichert in den Konfigurations-Registern 105 oder 125 der Brücke, identifizieren die Bus-Zahlen für deren primäre PCI-Schnittstelle (Primär-Bus-Zahl) und sekundären PCI-Schnittstelle (Sekundär-Bus-Zahl) und eine nebengeordnete Bus-Zahl, die die höchste, nummerierte PCI-Bus-Unterordnung der Brücke angibt. Die Bus-Zahlen werden durch ein PCI-Konfigurations-Programm BUS_ASSIGN (45) eingestellt. Zum Beispiel ist, in dem eingangsseitigen Brücken-Chip 26, die Primär-Bus-Zahl des Busses 24, die Sekundär-Bus-Zahl ist die Zahl des Kabels 28 und die Neben-Bus-Zahl ist die Zahl des Sekundär-PCI-Busses 32 oder die Zahl eines tieferen PCI-Busses, falls ein solcher existiert. In dem ausgangsseitigen Brücken-Chip 48 ist die Primär-Bus-Zahl die Zahl des Kabel-Busses 28, die Sekundär-Bus-Zahl ist die Zahl des PCI-Busses 32 und die nebengeordnete Bus-Zahl ist die Zahl eines PCI-Busses, angeordnet tiefer in der PCI-Bus-Hierarchie, falls eine solche existiert.
  • Wie 53A zeigt, wird eine Erfassung von Konfigurations-Zyklen durch eine Logik in dem PCI-Target-Block 103 oder 121 in dem eingangsseitigen Brücken-Chip 26 oder dem ausgangsseitigen Brücken-Chip 48 jeweils behandelt. Ein Konfigurations-Zyklus vom Typ 0, erfasst auf dem eingangsseitigen Bus 24, wird durch Aufstellen eines Signals TYP0_CFG_CYC_US, erzeugt durch ein UND-Gate 276, angezeigt. Das UND-Gate 276 empfängt Signale UPSTREAM_CHIP, IDSEL (Chip-Select während einer Konfigurations-Transaktion), CFGCMD (Konfigurations-Befehl-Zyklus, der erfasst ist) und ADDR00 (Bits 1 und 0 sind beide 0'en). Ein Konfigurations-Zyklus vom Typ 0, erfasst durch den ausgangsseitigen Brücken-Chip 48, wird durch ein Signal TYP0_CFG_CYC_DS, erzeugt durch ein UND-Gate 278, angezeigt, das ein Signal S1_BL_IDSEL (IDSEL Signal für den ausgangsseitigen Brücken-Chip 48), das Signal CFGCMD, das Signal ADDR00, ein Signal MSTR_ACTIVE (anzeigend, dass der Brücken-Chip 48 der Master auf einem sekundären PCI-Bus 32 ist), und den invertierten Zustand eines Signal UPSTREAM_CHIP empfängt.
  • Eine Erfassung eines Konfigurations-Zyklus vom Typ 1 durch das PCI-Target 103 in dem eingangsseitigen Brücken-Chip 26 wird durch Aufstellen eines Signals TYP1_CFG_CYC_US von einem UND-Gate 280 angezeigt, das Signale CFGCMD, ADDR01 (Bits 1 und 0 sind niedrig und hoch jeweils) und UPSTREAM_CHIP empfängt. Eine Erfassung eines Konfigurations-Zyklus vom Typ 1 auf dem ausgangsseitigen Bus 32 wird durch Aufstellen eines Signals TYP_CFG_CYC_DS von einem UND-Gate 282, das die Signale CFGCMD, ADDR01 empfängt, und dem invertierten Zustand des Signals UPSTREAM_CHIP angezeigt.
  • Der Brücken-Chip, der eine Transaktion vom Typ 0 aufnimmt, verwendet das Register-Zahl-Feld 250 in der Konfigurations-Transaktions-Adresse, um auf das geeignete Konfigurations-Register zuzugreifen. Das Funktions-Zahl-Feld 252 spezifiziert eine von acht Funktionen, die in einer multi-funktionalen Vorrichtung während der Konfigurations-Transaktion durchgeführt werden soll. Eine PCI-Vorrichtung kann multi-funktional sein und kann solche Funktionen haben, wie eine Festplatten-Laufwerksteuereinheit, eine Speicher-Steuereinheit, eine Brücke, usw.
  • Wenn der Brücken-Chip 26 eine Konfigurations-Transaktion vom Typ 1 auf seinem eingangsseitigen Bus 26 sieht, kann er die Transaktion entweder ausgangsseitig weiterführen, die Transaktion zu einer Transaktion vom Typ 0 translatieren, die Transaktion zu einem speziellen Zyklus konvertieren oder die Transaktion ignorieren (basierend auf den Bus-Zahl-Parametern, gespeichert in den Konfigurations-Registern 105 oder 125). Falls eine Transaktion weitergeführt wird, gelangt sie bis zu dem PCI-Master des Bestimmungs-Brücken-Chips, um die Transaktion vom Typ 1 zu der entsprechenden, geeigneten Transaktion zu konvertieren. Falls ein Brücken-Chip die Transaktion selbst handhabt, dann spricht er durch Aufstellen des Signals DEVSEL_ auf den PCI-Bus an, und handhabt die Transaktion als eine normale, verzögerte Transaktion.
  • In einer Konfiguration-Transaktion vom Typ 1 wählt das Bus-Zahl-Feld 260 einen eindeutigen PCI-Bus in der PCI-Hierarchie aus. Ein PCI-Target-Block 103 führt einen Konfigurations-Zyklus vom Typ 1 von dem eingangsseitigen Chip 26 zu dem ausgangsseitiger Brücken-Chip 48 hindurch, falls ein Signal PASS_TYP1_DS durch ein UND-Gate 284 aufgestellt ist. Das UND-Gate 284 empfängt das Signal TYP1_CFG_CYC_US und ein Signal IN_RANGE (das Bus-Zahl-Feld 260 ist größer als oder gleich zu der gespeicherten, sekundären Bus-Zahl und geringer als oder gleich zu der gespeicherten Neben-Bus-Zahl). Der andere Eingang des UND-Gates 284 ist mit dem Ausgang eines ODER-Gates 286 verbunden, der einen Eingang mit dem Ausgang eines UND-Gates 288 verbunden besitzt, und wobei der andere Eingang den invertierten Zustand eines Signals SEC_BUS_MATCH aufnimmt. Demzufolge wird, falls ein Zyklus vom Typ 1 erfasst wird, das Signal IN_RANGE aufgestellt ist, und wenn das Bus-Zahl-Feld 260 nicht die gespeicherte, sekundäre Bus-Zahl anpasst, das Signal PASS_TYP1_DS aufgestellt. Falls das Bus-Feld 260 nicht die gespeicherte Sekundär-Bus-Zahl anpasst, dann werden die Bus-Vorrichtungen auf oder nach dem ausgangsseitigen Bus 32 adressiert. Das UND-Gate 288 wird auf hoch gesetzt und das Vorrichtungs-Zahl-Feld 258 zeigt an, dass das Target des Konfigurations-Zyklus vom Typ 1 der Konfigurations-Raum des ausgangsseitigen Brücken-Chips 48 ist. Falls dies wahr ist, wird die Konfigurations-Transaktion vom Typ 1 entlang des Kabels 28 zu dem ausgangsseitigen Brücken-Chip 48 für eine Translation einer Konfigurations-Transaktion vom Typ 0 weitergeführt. Das PCI-Target 121 in dem ausgangsseitigen Brücken-Chip 48 spricht auf die Transaktion an und liest von den und schreibt in die ausgangsseitigen Brücken-Konfigurations-Register 125 entsprechend zu der Transaktion vom Typ 0. Die Steuer-Stifte des ausgangsseitigen Chips werden angesteuert und Lese- und Schreib-Daten erscheinen auf dem ausgangsseitigen PCI-Bus 32, falls eine Transaktion vom Typ 0 auf dem ausgangsseitigen Bus läuft (für Debug-Zwecke), obwohl jedes IDSEL auf dem ausgangsseitigen Bus 32 so blockiert wird, das keine Vorrichtung tatsächlich auf eine Transaktion vom Typ 0 anspricht.
  • Falls der PCI-Target-Block 103 in dem eingangsseitigen Brücken-Chip 26 eine Konfigurations-Transaktion vom Typ 1 auf seinen eingangsseitigen Bus 24 erfasst, mit einem Bus-Zahl-Feld gleich zu der gespeicherten Sekundär-Bus-Zahl (der Kabel-Bus 28), allerdings nicht eine Vorrichtung 0adressierend (suchen nach anderen Vorrichtungen auf dem Kabel-Bus 28), dann ignoriert der Target-Block 103 die Transaktion auf dem primären Bus 26.
  • Falls das PCI-Target 121 eine Konfigurations-Schreib-Transaktion vom Typ 1 (WR_hoch) auf dem sekundären PCI-Bus 32 erfasst, der ein Bus-Zahl-Feld außerhalb des Bereichs der Sekundär-Bus-Zahl und der Neben-Bus-Zahl besitzt (IN_RANGE niedrig), und falls die Vorrichtungs-Zahl 258, die Funktions-Zahl 256 und die Register-Zahl 254 ei nen speziellen Zyklus anzeigen (SP_MATCH hoch), dann wird ein Signal PASS_TYP1_US durch ein UND-Gate 290 aufgestellt. Das UND-Gate 290 empfängt das Signal TYP1_CFG_CYC_DS, das Signal SP_MATCH, das Schreib/Lese-Strobe WR_ und den invertierten Zustand des Signal IN_RANGE. Wenn der PCI-Master 101 in dem eingangsseitigen Brücken-Chip 26 einen solchen Zyklus empfängt, lässt er einen speziellen Zyklus auf dem primären PCI-Bus 24 laufen.
  • Konfigurations-Transaktionen werden durch einen Brücken-Chip unter bestimmten Bedingungen ignoriert. Falls der Target-Block 103 in dem eingangsseitigen Brücken-Chip 26 eine Konfigurations-Transaktion vom Typ 1 auf dem PCI-Bus 24 erfasst (sein eingangsseitiger Bus) und das Bus-Zahl-Feld 260 geringer als die Sekundär-Bus-Zahl oder größer als die Neben-Bus-Zahl, gespeichert in dem Konfigurations-Raum des Brücken-Chips, ist, dann ignoriert der Target-Block 103 die Transaktion.
  • Falls der Target-Block 121 in dem ausgangsseitigen Brücken-Chip 48 eine Konfigurations-Transaktion vom Typ 1 auf dem sekundären PCI-Bus 32 erfasst (sein ausgangsseitiger Bus), und das Bus-Zahl-Feld 260 größer als oder gleich zu der Sekundär-Bus-Zahl oder geringer als oder gleich zu der Neben-Bus-Zahl, gespeichert in dem Konfigurations-Raum des Brücken-Chips, ist, dann ignoriert der Target-Block 121 die Transaktion. Zusätzlich werden Konfigurations-Befehle vom Typ 1, die zu der Eingangsseite hin gehen, ignoriert, falls ein Befehl vom Typ 1 nicht eine Konversion zu einer speziellen Zyklus-Transaktion spezifiziert, ungeachtet der Bus-Zahl, spezifiziert in dem Befehl vom Typ 1.
  • Wie 53B zeigt, überwacht der PCI-Master 101 oder 123 einen Konfigurations-Zyklus, übertragen über das Kabel 28. Falls der PCI-Master 123 in dem ausgangsseitigen Brücken-Chip 48 eine Konfigurations-Transaktion vom Typ 1 von dem eingangsseitigen Brücken-Chip 26 erfasst, vergleicht das Bus-Zahl-Feld 260 mit der Primär-Bus-Zahl und der Sekundär-Bus-Zahl, gespeichert in dem Konfigurations-Raum des Brücken-Chips 48. Falls das Bus-Zahl-Feld 260 entweder die gespeicherte Primär-Bus-Zahl (d. h. Kabel 28) oder die gespeicherte Sekundär-Bus-Zahl (Adressieren einer Vorrichtung direkt, verbunden mit dem ausgangsseitigen Bus 23) anpasst, dann translatiert der ausgangsseitige Brücken-Chip 48 die Transaktion zu einer Transaktion vom Typ 0 (durch Einstellen von AD[1:0] = 00), wenn er die Konfigurations-Transaktion auf dem Bus weiterführt. Die Transaktion vom Typ 0 wird auf dem PCI-Bus 32 durch den PCI-Master-Block 123 durchgeführt.
  • Das nachfolgende sind Translationen, durchgeführt von Feldern in der Konfigurations-Transaktion vom Typ 1. Das Vorrichtungs-Zahl-Feld 258 in der Konfigurations-Transaktion vom Typ 1 wird durch den PCI-Master 123 decodiert, um eine eindeutige Adresse in der translatierten Transaktion vom Typ 0 auf dem sekundären Bus 32 zu erzeugen, wie dies in der Tabelle der 52 definiert ist. Die Sekundär-Adressen-Bits AD[31:16], decodiert von dem Vorrichtungs-Zahl-Feld 258, werden durch den PCI-Master 123 verwendet, um die geeigneten Chip-Auswahl-Signale IDSEL für die Vorrichtungen auf dem sekundären PCI-Bus 32 zu erzeugen. Wenn das Adressen-Bit AD[15] gleich zu 1 ist, dann behält der Brücken-Chip 48 alle Adressen-Bits AD[31:16], gesetzt auf niedrig (kein IDSEL ist aufgestellt), bei. Das Register-Zahl-Feld 254 und das Funktions-Zahl-Feld 256 des Konfigurations-Befehls vom Typ 1 werden nicht modifiziert zu dem Konfigurations-Befehl vom Typ 0 hindurchgeführt. Das Funktions-Zahl-Feld 256 wählt acht Funktionen aus, und das Register-Zahl-Feld 254 wählt ein Doppel-Wort in dem Konfigurations-Register-Raum der ausgewählten Funktion aus.
  • Für eine Konfigurations-Transaktion vom Typ 1, zielmäßig vorgesehen zu dem ausgangsseitigen Brücken-Chip 48, wandelt der Brücken-Chip 48 die Transaktion vom Typ 1 zu einer Transaktion vom Typ 0 um, als würde sie eine Vorrichtung auf dem ausgangsseitigen Bus 32 adressieren, allerdings werden die AD[31:16] Stifte auf 0'en gesetzt, so dass keine Sekundär-PCI-Bus-Vorrichtung ein IDSEL aufnimmt. Die PCI-Master-Logik 123 erfasst dies durch Aufstellen eines Signals TYP1_TO_INTO, angesteuert durch ein UND-Gate 262. Das UND-Gate 262 empfängt ein Signal CFG_CMD (einen Konfigurations-Befehf-Zyklus anzeigend), den Ausgang eines ODER-Gates 264 und den invertierten Zustand des Signals UPSTREAM_CHIP (Translation Type-1-zu-Type-0 wird in dem eingangsseitigen Brücken-Chip 26 gesperrt). Das ODER-Gate 264 stellt seinen Ausgang auf hoch, falls ein Signal PRIM_BUS_MATCH aufgestellt ist (das Bus-Zahl-Feld 260 passt die gespeicherte, primäre Bus-Zahl an), oder falls die gespeicherte, primäre Bus-Zahl CFG2P_PRIM_BUS_NUM[7:0] gleich zu null ist (anzeigend, dass die Primär-Bus-Zahl in dem Konfigurations-Raum des Brücken-Chips 48 nicht durch das System BIOS bis jetzt konfiguriert worden ist und der momentane Konfigurations-Zyklus vom Typ 1 zu dem internen Konfigurations-Raum geht, um die Primär-Bus-Zahl des Brücken-Chips 48 zu programmieren).
  • Ein Signal TYP1_TO_EXT0 wird durch ein UND-Gate 266 aufgestellt und spricht auf eine Anpassung zu einer gespeicherten Sekundär-Bus-Zahl an. Die Eingänge des UND-Gates 266 empfangen das Signal CFG_CMD, das Signal SEC_BUS_MATCH, den invertierten Zustand des Signals UPSTREAM_CHIP und den invertierten Zustand eines Signals SP_MATCH (nicht ein spezieller Zyklus). Das Signal TYP1_TO_EXT0 zeigt an, dass die konvertierte Konfigurations-Transaktion vom Typ 0 zu einer Vorrichtung zielmäßig auf dem sekundären PCI-Bus 32 geführt wird.
  • Das Signal TYP1_TO_INTO wird zu dem 1-Eingang eines 4:1 Multiplexers 274 geliefert. Der 2-Eingang wird auf niedrig gelegt und der 0- und 3-Eingang des Multiplexers 274 nehmen ein Signal LTYP1_TO_INT0 von einem Flip-Flop 270 vom D-Typ auf. Der Auswahl-Eingang S1 des Multiplexers 274 empfängt ein Signal CMD_LATCH (FRAME_, aufgestellt für einen neuen Zyklus auf dem PCI-Bus 32), und der Auswahl-Eingang SO empfängt ein Signal P2Q_START_PULSE (das anzeigt, wenn es hoch ist, dass eine Adresse zu dem PCI-Bus 32 geschickt worden ist). Der Ausgang des Multiplexers 274 wird mit dem D-Eingang eines Flip-Flops 270 verbunden, das mit dem Signal PCLK getaktet wird und durch das Signal RESET gelöscht wird. Die IDSEL-Signale zu den Sekundär-Bus-Vorrichtungen werden durch Aufstellen eines Signals BLOCK_IDSEL von einem ODER-Gate 272 blockiert, das an seinen Eingängen Signale Q2P_AD[15] (keine Konversion wird entsprechend Tabelle 1 der 6 benötigt), TYP1_TO_INT0 und LTYP1_TO_INT0 empfängt. Das Signal LTYP1_TO_INT0 erweitert das Aufstellen des Signals BLOCK_IDSEL.
  • Wenn der PCI-Master 123 in dem ausgangsseitigen Brücken-Chip 48 eine Konfigurations-Transaktion vom Typ 1 von dem eingangsseitigen Brücken-Chip 26 empfängt, in dem das Bus-Zahl-Feld 260 größer als die gespeicherte, Sekundär-Bus-Zahl und geringer als oder gleich zu der gespeicherten Neben-Bus-Zahl ist, dann führt der PCI-Master-Block 123 die Transaktion vom Typ 1 zu dem Sekundär-PCI-Bus 32 unverändert weiter. Eine bestimmte andere Vorrichtung auf dem Sekundär-PCI-Bus 32, z. B. eine andere Brücken-Vorrichtung 323 (26B), wird die Konfigurations-Transaktion vom Typ 1 aufnehmen und sie zu dem sekundären Bus (PCI-Bus 325) weiterführen.
  • Eine Konfigurations-Transaktion vom Typ 1 zu einer speziellen Zyklus-Translation wird dann durchgeführt, wenn der PCI-Master 123 eine Konfigurations-Schreib-Transaktion vom Typ 1 von dem eingangsseitigen Brücken-Chip 26 empfängt und das Bus-Zahl-Feld 260 die gespeicherte Sekundär-Bus-Zahl anpasst und falls das Vorrichtungs-Zahl-Feld 258, das Funktions-Zahl-Feld 256 und das Register-Zahl-Feld 254 einen speziellen Zyklus anzeigen (SP_MATCH ist hoch). Dies wird durch ein UND-Gate 268 angezeigt, das ein Signal TYP1_TO_SPCYC auf hoch setzt. Das UND-Gate 268 empfängt SP_MATCH, und Q2P_CBE_[0] (Befehl-Bit für einen speziellen Zyklus). Die Daten von der Konfigurations-Transaktion vom Typ 1 werden die Daten für den speziellen Zyklus an dem Bestimmungs-Bus. Die Adresse während eines speziellen Zyklus wird ignoriert.
  • BUS-FUNKTIONS-MONITOR
  • Der Bus-Monitor 127 (3) umfasst eine Schaltung zum Speichern von Informationen, um bestimmte Bus-Funktions-Parameter zu berechnen. Die Parameter umfassen eine Bus-Nutzung, eine Bus-Effektivität und eine Lese-Daten-Effektivität. Eine Bus-Nutzung ist das Verhältnis der Zeit, die der Bus belegt ist, unter Durchführen einer Transaktion, zu einer vorgegebenen, globalen Zeitperiode. Eine Bus-Effektivität ist das Verhältnis der Zahl von PCI-Takt-Perioden, die tatsächlich für eine Daten-Übertragung verwendet werden, zu der gesamten Zahl von Taktperioden während der Bus-Beleg-Periode. Eine Lese-Daten-Effektivität ist das Verhältnis der Zahl der Lese-Daten-Bytes, auf die durch eine Vorrichtung auf dem Sekundär-PCI-Bus 32 zugegriffen ist, und zwar von der verzögerten Abschluss-Warteschlange (DCQ) 144 (4), zu der gesamten Zahl von Daten-Bytes, abgerufen für diesen Master durch den Brücken-Chip 48. Die Informationen, gespeichert in dem Bus-Monitor 127, werden durch die System-Software wieder aufgesucht, um die erwünschten Parameter zu berechnen.
  • Wie 54A zeigt, zählt ein Global-Periode-Zeitgeber 1300 (der 32 Bits breit sein kann) eine gesamte Zeitperiode, während der die verschiedenen Parameter berechnet werden sollen. Der Zeitgeber 1300 wird auf den hexadezimalen Wert FFFFFFFF programmiert. Falls der PCI-Takt PCICLK2 bei 33 MHz läuft, dann beträgt die Zeitgeberperiode ungefähr 2 Minuten. Wenn sich der Zeitgeber 1300 auf 0 verringert, stellt er ein Signal GL_TIME_EXPIRE auf.
  • Der Bus-Monitor 127 umfasst 7 schlitz-spezifische Bus-Busy-Zähler 1302AG, wobei sechs der Zähler jeweils den 6 Schlitzen auf dem sekundären PCI-Bus 32 und einer der SIO 50 entsprechen. Die Bus-Busy-Zähler 1302AG werden dann gelöscht, wenn das Signal GL_TIME_EXPIRE aufgestellt ist. In Abhängigkeit davon, welche Bus-Vorrichtung eine Steuerung auf dem sekundären Bus 32 besitzt, erhöht sich der Bus-Busy-Zähler 1302 bei jedem PCI-Takt, in dem das Sekundär-PCI-Bus FRAME_ oder IRDY_ Signal aufgestellt ist. Der geeignete Eine der sieben Zähler wird durch eines der Erteilungs-Signale GNT[7:0]_ ausgewählt. Demzufolge wird, zum Beispiel, der Bus-Busy-Zähler 1302A dann ausgewählt, wenn das Signal GNT[1]_ auf niedrig gesetzt ist, was anzeigt, dass der SIO der momentane Master auf dem sekundären PCI-Bus 32 ist.
  • Sieben Daten-Zyklus-Zähler 1306AG entsprechend, jeweils, zu den 6 Schlitzen auf dem sekundären PCI-Bus 32 und dem SIO 50, führen die Zeit nach, während der eine Datenübertragung tatsächlich zwischen einem Master und einem Target während einer Transaktion auf dem PCI-Bus 32 auftritt. Der ausgewählte Daten-Zyklus-Zähler 1306 wird bei jedem PCI-Takt erhöht, bei dem die Sekundär-Bus- IRDY_ und TRDY_ Signale beide auf niedrig gesetzt sind. Die Daten-Zyklus-Zähler 1306AG werden dann gelöscht, wenn das Signal GL_TIME_EXPIRE aufgestellt ist.
  • Sechs DCQ-Daten-Zähler 1310AF sind in dem Bus-Monitor 127 zum Protokollieren der Menge an Daten, eingeladen in die DCQ-Puffer, umfasst. Die sechs DCQ-Daten-Zähler 1310AF entsprechen den 6 Schlitzen auf dem sekundären PCI-Bus 32. Der ausgewählte DCQ-Daten-Zähler 1310 erhöht sich bei jedem PCI-Takt, indem verzögerte Lese-Abschluss- (Delayed Read Completion – DRC) Daten von dem Kabel 28 empfangen und in die Prefetch-Puffer hineingeladen werden.
  • Ein anderer Satz von Zählern, DCQ-Daten-Benutzungs-Zähler 1314AF, werden dazu verwendet, die Menge an Daten zu protokollieren, die in die DCQ 144 eingeladen sind, tatsächlich verwendet durch die 6 Schlitze auf dem sekundären PCI-Bus 32. Der ausgewählte DCQ-Daten-Benutzungs-Zähler 1314 erhöht sich bei jedem PCI-Takt, in dem der sekundäre Bus-Masterdaten von dem entsprechenden DCQ-Puffer liest. Beide DCQ-Daten-Zähler 1310AF und DCQ-Daten-Benutzungs-Zähler 1314AF erhöhen sich bei jedem Daten-Zyklus ungeachtet der Zahl von Bytes, die tatsächlich übertragen werden. In den meisten Fällen beträgt die Zahl von Bytes, übertragen in jedem Daten-Zyklus, 4.
  • Wenn der Global-Perioden-Zeitgeber 1300 abläuft und das Signal GL_TIME_EXPIRE aufstellt, treten verschiedene Ereignisse auf. Zuerst lädt der Global-Perioden-Zeitgeber 1300 seinen Originalen Zähl-Wert wieder ein, der der hexadezimale Wert FFFFFFFF ist. Die Inhalte aller anderen Zähler, umfassend die Bus-Busy-Zähler 1302AG die Daten-Zyklus-Zähler 1306AG, die DCQ-Daten-Zähler 1310AF und die DCQ-Daten-Benutzungs-Zähler 1314AF, werden in Register 1304, 1308, 1312 und 1316 jeweils eingeladen. Die Zähler 1302, 1306, 1310 und 1314 werden dann auf 0 gelöscht. Der Global-Periode-Zeitgeber 1300 beginnt dann, erneut zu zählen, nachdem erneut mit seinem Original-Wert wieder geladen ist.
  • Das Signal GL_TIME_EXPIRE wird zu dem Unterbrechungs-Aufnahme-Block 132 zugeführt, der die Unterbrechung über das Kabel 28 zu dem Unterbrechungs-Ausgangs-Block 114 weiterführt, der wiederum eine Unterbrechung zu der CPU 14 erzeugt. Die CPU 14 antwortet auf die Unterbrechung durch Aufrufen eines Unterbrechungs-Händlers, um die Bus-Funktion-Analyse durchzuführen. Der Unterbrechungs-Händler greift auf die Inhalte der Register 1304, 1308, 1312 und 1316 zu, und berechnet die verschiedenen Parameter, umfassend die Bus-Benutzung, die Bus-Effektivität, die Prefetch-Effektivität-Parameter, zugeordnet den 6 Sekundär-Bus-Schlitzen bzw. -Einsteckplätzen und der SIO 50.
  • Der Bus-Benutzungs-Parameter ist der Wert des Bus-Busy-Zählers 1302, geteilt durch den Anfangswert des Global-Perioden-Zeitgebers 1300, der der hexadezimale Wert FFFFFFFF ist. Demzufolge ist die Bus-Nutzung der Prozentsatz der gesamten, globalen Zeit, während der ein Bus-Master eine Bus-Transaktion durchführt.
  • Eine PCI-Transaktion umfasst eine Adressen-Phase und mindestens eine Daten-Übertragungs-Phase. Ein Bus-Master stellt das Signal FRAME_ auf, um den Beginn und die Dauer einer aktiven Bus-Transaktion anzuzeigen. Wenn das Signal FRAME_ weggenommen ist, zeigt dies an, dass die Transaktion die End-Daten-Phase ist oder die Transaktion abgeschlossen worden ist. Das Signal IRDY_ zeigt an, dass der Bus-Master in der Lage ist, die momentane Daten-Phase der Bus-Transaktion abzuschließen. Während eines Schreibens zeigt das Signal IRDY_ an, dass gültige Daten auf dem Bus vorhanden sind. Während eines Lesens zeigt das Signal IRDY_ an, das der Master präpariert ist, um Lese-Daten anzunehmen. Das adressierte PCI-Target spricht auf die Bus-Transaktion durch Aufstellen des Signals TRDY_ an, um anzuzeigen, dass das Target in der Lage ist, die momentane Datenphase der Transaktion abzuschließen. Während eines Lesens zeigt das Signal TRDY_ an, dass gültige Daten auf dem Bus vorhanden sind; während eines Schreibens zeigt das Signal TRDY_ an, dass das Target präpariert wird, um Daten anzunehmen. Warte-Zustände können zwischen den Adressen- und Daten-Phasen und zwischen aufeinanderfolgenden Daten-Phasen der Bus-Transaktionen eingesetzt werden.
  • Während der Adressen-Phase oder den Warte-Zuständen tritt keine Daten-Übertragung tatsächlich auf.
  • Eine tatsächliche Daten-Übertragung tritt nur dann auf, wenn beide Signale IRDY_ und TRDY_ auf niedrig gesetzt sind. Um die Daten-, Übertragungs-Bus-Effektivität zu bestimmen, teilt der Unterbrechungs-Händler den Wert des Daten-Zyklus-Zählers 1306 durch den Wert des Bus-Busy-Zählers 1302. Die Bus-Effektivität stellt die Menge an Zeit dar, während der eine Datenübertragung tatsächlich während einer Bus-Transaktion auftritt. Durch Berechnen dieses Werts kann sich das Computersystem über Target-Vorrichtungen bewusst werden, die viele Warte-Zustände erfordern und deshalb ineffektiv sind.
  • Der Brücken-Chip 48 kann Daten von dem primären PCI-Bus 26 abrufen und die Daten in der DCQ 144 speichern. Die DCQ 144 besitzt acht Puffer, wobei jeder einem sekundären Bus-Master zuordenbar ist. Zum Beispiel wird eine Speicher-Lese-Mehrfach-Transaktion, erzeugt durch einen sekundären Bus-Master, als Ziel an dem primären Bus vorgesehen, bewirken, dass die Brücke 26, 48 insgesamt 8 Cache-Zeilen von dem Speicher 20 abruft und sie in die DCQ 144 einlädt. Eine Speicher-Lese-Zeilen-Transaktion wird bewirken, dass die PCI-PCI-Brücke 26, 48 eine Zeile von Daten von dem Speicher 20 abruft. Zusätzlich kann, wie in Verbindung mit den 75 und 79 beschrieben ist, die PCI-PCI-Brücke 26, 48 eine Lesepromotion durchführen, die eine Lese-Anforderung von einem Sekundär-Bus-Master zu einer Lese-Anforderung für einen größeren Block an Daten umwandelt. In diesen Fällen existiert eine Möglichkeit, dass nicht alle der abgerufenen Daten durch den Bus-Master verwendet werden. In diesem Fall werden nicht-gelesene Daten ausgesondert, was die Lese-Daten-Effektivität reduziert. Ein Messen der Lese-Daten-Effektivität ermöglicht System-Designern zu verstehen, wie ein Bus-Master Lese-Daten, abgerufen durch den Brücken-Chip 26, 48, von dem primären Bus 24, verwendet.
  • Wie 54B zeigt, erhöht sich der Zähler 1310 an der ansteigenden Flanke des Takts PCLK, falls das Signal DCQ_DATA_RECEIVED[X], X = 2–7, aufgestellt ist, was anzeigt, dass vier Bytes an Daten durch einen DCQ-Puffer, zugeordnet einem Master X von dem Kabel 28, empfangen werden. Der Zähler 1310 gibt einen Zähl-Wert DCQ_Data[X][20:0], X = 2–7, aus, was auf Null gelöscht wird, wenn das Signal GL_TIME_EXPIRE aufgestellt ist.
  • Der Zähler 1314 erhöht sich an der ansteigenden Flanke des Takts PCLK, falls ein Signal DCQ_DATA_TAKEN[X], X = 2–7, aufgestellt ist, was anzeigt, dass vier Bytes an Daten von einem DCQ-Puffer zugeordnet zu Master X, gelesen sind. Der Zähler 1314 wird dann gelöscht, wenn das Signal GL_TIME_EXPIRE hoch ist.
  • Um die Menge der DCQ-Daten zu bestimmen, die tatsächlich durch die Vorrichtungen auf dem sekundären PCI-Bus 32 verwendet werden, wird die Prefetch-Effektivität durch den Unterbrechungs-Handler berechnet. Dies wird dadurch bestimmt, dass das Verhältnis des Werts in dem Zähler 1314, der die DCQ-Daten verwendet, zu dem Wert des DCQ-Daten-Zählers 1310 gesetzt wird. Obwohl sogar nicht alle Daten, übertragen in die Prefetch-Puffer oder übertragen aus diesen heraus, 4 Bytes breit sind, ist das Verhältnis eng durch eine Annahme angenähert, dass alle Daten-Phasen dieselbe Zahl von Bytes übertragen.
  • In Abhängigkeit der berechneten Parameter kann ein Benutzer oder der Computerhersteller besser die Funktion des Computersystems verstehen. Zum Beispiel könnte dann, wenn eine Bus-Effektivität niedrig ist, die PCI-Vorrichtung, die eingesetzt ist, durch ein unterschiedliches Teil des Computerherstellers ersetzt werden. Eine Kenntnis der DCQ-Lese-Daten-Effektivität ermöglicht dem Computerhersteller, seinen DCQ-Abruf-Algorithmus zu ändern, um besser die Effektivität zu verbessern.
  • VERWENDUNG VON NEBEN-BUS-VORRICHTUNGEN
  • Wie in 88 dargestellt ist, führen sechs Erweiterungskarten, eingesetzt in die sechs Erweiterungskartenschlitze bzw. -Steckplätze 36af, Bus-Vorrichtungen 17041708 ein, die zu der CPU 14 untergeordnet sind, und Bus-Vorrichtungen 17011702, die zu einem I2O Prozessor 1700 untergeordnet sind. Obwohl alle Neben-Bus-Vorrichtungen 17011708 mit dem gemeinsamen PCI-Bus 32 verbunden sind, erscheinen die I2O-Neben-Vorrichtungen 17011702 zu der CPU 14 nur so, dass sie über den I2O-Prozessor 1700 adressierbar sind und nicht direkt über den PCI-Bus 32 adressierbar sind. Deshalb dient der PCI-Bus 32 sowohl als ein I2O-Neben-Vorrichtungs-Bus als auch als ein Neben-Vorrichtungs-Bus der CPU 14.
  • Zu Zwecken eines Verhinderns, dass die CPU 14 die I2O-Neben-Vorrichtungen 17011702 als Vorrichtung des PCI-Busses 32 erkennt, umfasst der Brücken-Chip 48 eine Logik 1710 (90) zum Verhindern, dass die I2O-Neben-Vorrichtungen 17011702 auf Konfigurations-Zyklen ansprechen, die durch die CPU 14 laufen. Der Erweiterungskasten 30 umfasst auch eine Multiplexing-Schaltung 1712, die mit dem Unterbrechungs-Aufnahme-Block 132 des Brücken-Chips 48 zusammenarbeitet, um Unterbrechungs-Anforderungen zu maskieren, die von den I2O-Neben-Vorrichtungen 17011702 ausgehen, dass diese zu der CPU 14 propagieren. Unterbrechungs-Anforderungen, die von den I2O-Neben-Bus-Vorrichtungen 17011702 ausgehen, werden durch den Unterbrechungs-Aufnahme-Block 132 zu dem I2O-Prozessor 1700 umgeleitet. Der I2O-Prozessor 1700 konfiguriert die I2O-Neben-Vorrichtungen 17011702; empfängt und verarbeitet Unterbrechungs-Anforderungen, die von den I2O-Neben-Vorrichtungen 17011702 ausgehen; und steuert einen Betrieb der I2O-Neben-Vorrichtungen, wie dies durch die CPU 14 geleitet wird.
  • Nach einem Einschalten des Computersystems 10 und wenn eine Karte 807 eingeschaltet bzw. hochgefahren ist (d. h. eine neue Bus-Vorrichtung ist an dem PCI-Bus 32 eingeführt), tastet der I2O-Prozessor 1700 den PCI-Bus 32 ab, um I2O-Neben-Bus-Vorrichtungen zu identifizieren. Zu Zwecken eines Identifizierens des Typs einer Bus-Vorrichtung (I2O-Neben-Bus-Vorrichtung oder Neben-Vorrichtung der CPU 14) lässt der I2O-Prozessor 1700 Konfigurations-Zyklen auf dem PCI-Bus 32 laufen, um das Vorrichtungs-Identifikations-Wort (Vorrichtungs-ID) jeder Bus-Vorrichtung zu lesen. Die Vorrichtungs-ID ist in dem Konfigurations-Header-Raum aller PCI-Vorrichtungen angeordnet. Der I2O-Prozessor 1700 speichert die Ergebnisse dieser Abtastung in einem I2O-Neben-Register 1729 mit sechs Bits (93) innerhalb des I2O-Prozessors 1700, der durch die CPU 14 zugänglich ist. Bits null bis fünf des Registers 1729 sind Schlitzen bzw. Steckplätzen 36af jeweils zugeordnet. Ein Wert von „1" für ein Bit zeigt an, dass der zugeordnete Schlitz 36 eine Bus-Neben-Vorrichtung zu der CPU 14 besitzt, und ein Wert von „0" für ein Bit zeigt an, dass der zugeordnete Schlitz 36 eine Bus-Neben-Vorrichtung zu dem I2O-Prozessor 1700 besitzt.
  • Der I2O-Prozessor 1700 kann in irgendeinen der Schlitze bzw. Steckplätze 36af eingesetzt werden. Zu Zwecken eines Identifizierens, welcher Schlitz 36, falls irgendeiner vorhanden ist, einen I2O-Prozessor enthält, tastet die CPU 14 den PCI-Bus 32 ab und liest die Vorrichtungs-ID der Bus-Vorrichtungen, verbunden mit dem Bus 32. Die CPU 14 versucht nicht, irgendwelche Vorrichtungen 17041708 auf dem Bus 32 zu konfigurieren bis ein Host-Konfigurations-Freigabe-Bit 1726 (94) innerhalb des I2O-Prozessors 1700 der CPU 14 anzeigt, dass der I2O-Prozessor 1700 seine Identifikation von I2O-Neben- Vorrichtungen 17011702 auf dem Bus 32 abgeschlossen hat. Das Host-Konfigurations-Freigabe-Bit 1726 besitzt einen Wert von „0" (Wert bei einem Einschalten), um eine Konfiguration der Vorrichtungen auf dem Bus 32 durch die CPU 14 zu sperren, und einen Wert „1", um eine Konfiguration der CPU 14 der Nebenvorrichtungen 17041708 der CPU 14 auf dem Bus 32 freizugeben. Wenn die CPU 14 Bus-Vorrichtungen auf dem Bus 32 konfiguriert, „sieht" die CPU 14 nicht die I2O-Neben-Vorrichtungen 17011702, und zwar aufgrund der Maskierung durch die Logik 1710, wie dies nachfolgend beschrieben ist.
  • Nachdem das Host-Freigabe-Konfigurations-Bit 1726 eingestellt ist, liest die CPU 14 die Inhalte des I2O-Neben-Registers 1729 und überträgt die gelesenen Inhalte zu einem Sechs-Bits-I2O-Neben-Register 1428 (91) des Brücken-Chips 48. Das Register 1728 zeigt den Neben-Status (Neben-I2O-Prozessor 1700 oder Neben-CPU 14) der Bus-Vorrichtungen in derselben Art und Weise wie das Register 1729 an. Bevor die CPU 14 zu dem Register 1728 schreibt, enthält das Register 1728 alle „Eins'en" (Werte bei einem Einschalten), was der CPU 14 ermöglicht, den Bus 32 nach dem I2O-Prozessor 1700 abzutasten. Der Unterbrechungs-Aufnahme-Block 132 verwendet das Register 1728, um zu identifizieren, welche Unterbrechungs-Anforderungen, empfangen durch den Block 132, zu der CPU 14 geführt werden sollten, und welche Unterbrechungs-Anforderungen, empfangen durch den Block 132, zu dem I2O-Prozessor 1700 für eine Verarbeitung geführt werden sollten. Weiterhin verwendet die Logik 1710 die Inhalte des Registers 1728, um eine Erkennung durch die CPU 14 der I2O-Neben-Vorrichtungen 17011702 von der CPU 14 zu blockieren.
  • Zu Zwecken eines Anzeigens zu dem Unterbrechungs-Empfangs-Block 132, welche Bus-Vorrichtung, falls irgendeine vorhanden ist, ein I2O-Prozessor ist, stellt die CPU 14 ein Bit eines I2O-Schlitz-Registers 1730 (32) ein, dessen Bits 0–5 den Schlitzen 36af jeweils entsprechen. Für dieses Register 1730, angeordnet innerhalb des Brücken-Chips 48, zeigt ein Wert von „0" für ein Bit an, dass der zugeordnete Schlitz 36 keinen I2O-Prozessor besitzt, und ein Wert von „1" für das Bit zeigt an, dass der zugeordnete Schlitz 36 einen I2O-Prozessor besitzt.
  • Wie in 90 dargestellt ist, umfasst die Logik 1710 ein Multi-Bit-UND-Gate 1711, das Signale AD_IDSEL[5:0] zu Adressen/Daten-Leitungen des Busses 32 liefert, um Vorrichtungen auf dem Bus 32 während Konfigurations-Zyklen auszuwählen. Das UND-Gate 1711 empfängt ein Sechs-Bit-Signal ENABLE[5:0], das Bits besitzt, die für Bits des I2O- Neben-Registers 1728 indikativ sind und zu diesen entsprechen. Das UND-Gate 1711 empfängt auch die typischen Identifikations-Auswahl-Signale SLOT_IDSEL[5:0], geliefert durch den Brücken-Chip 48, zum Auswählen von Vorrichtungen auf den Bus 32, während Konfigurations-Zyklen. Deshalb werden die Signale ENABLE[5:0] dazu verwendet, selektiv die Signale SLOT_IDSEL[5:0] von dem PCI-Bus 32 zu maskieren, wenn Konfigurations-Zyklen durch die CPU 14 laufen.
  • Zu Zwecken eines Kontrollierens der Bestimmung von Unterbrechungs-Anforderungen von den Schlitzen 36ad, werden die Vier-Standard-PCI-Unterbrechungs-Anforderungs-Signale (INTA#, INTB#, INTC# und INTD#), geliefert durch jeden Schlitz 36, zu einer Multiplexing-Schaltung 1712 geführt (88). Die Multiplexing-Schaltung 1712 serialisiert die PCI-Unterbrechungs-Anforderungs-Signale, empfangen von den Schlitzen 36, und liefert die Signale zu dem Unterbrechungs-Emfpangs-Block 132 über vier zeit-multiplexierte-, serielle Unterbrechungs-Anforderungs-Signale: INTSDA#, INTDSB#, INTSDC# und INTSDD#.
  • Wie in 89 dargestellt ist, liefert der Unterbrechungs-Empfangs-Block 132 Unterbrechungs-Anforderungs-Signale für die CPU 14 zu dem Unterbrechungs-Ausgabe-Block 114 über ein zeit-mulitplexiertes, serielles Unterbrechungs-Anforderungs-Signal INTSDCABLE#. Der Unterbrechungs-Empfangs-Block 132 liefert Unterbrechungs-Anforderungs-Signale für den I2O-Prozessor 1700 über ein zeit-multiplexiertes, serielles Unterbrechungs-Anforderungs-Signal INTSDIIO#, geliefert über eine PCI INTC# Leitung 1709 des Busses 32 zu dem I2O-Prozessor 1700.
  • Der Unterbrechungs-Ausgabe-Block 114 liefert die Unterbrechungs-Anforderungen, bestimmt über die CPU 14, zu einer oder mehreren der Standard-PCI-Unterbrechungs-Anforderungs-Leitungen (INTA#, INTB#, INTC# und INTD#) des PCI-Busses 24. Eine Unterbrechungs-Steuereinheit 1900, extern zu dem Brücken-Chip 26, empfängt die Unterbrechungs-Anforderungen von den PCI-Unterbrechungs-Anforderungs-Leitungen des PCI-Busses 24. Die Unterbrechungs-Steuereinheit 1900 priorisiert die Unterbrechungs-Anforderungen (die Unterbrechungs-Anforderungen von anderen Vorrichtungen auf dem PCI-Bus 24 umfassen können) und liefert sie zu der CPU 14. Der Unterbrechungs-Ausgabe-Block 114 kann entweder asynchron (wenn er sich in einem asynchronen Mode befindet) die Unterbrechungs-Anforderungs-Signale zu den Unterbrechungs-Anforderungs-Leitungen des PCI-Busses 24 liefern oder kann sie seriell (wenn er sich in einem seriellen Mode befindet) die Unterbrechungs-Anforderungs-Signale zu der INTA# Leitung des PCI-Busses 24 führen, wie dies weiter nachfolgend beschrieben ist.
  • Wie in 95 dargestellt ist, repräsentieren alle der zeit-multiplexierten, seriellen Daten-Signale deren Daten über einen Unterbrechungs-Zyklus 1850, der acht aufeinanderfolgende Zeit-Teile (T0–T7) aufweist. Die Dauer jedes Zeit-Teils ist ein Zyklus des PCI-Takt-Signals CLK. Jeder Zeit-Teil stellt einen „Snapshot" über den Status von einem oder mehreren Unterbrechungs-Anforderungs-Signalen dar. Wie in 99 dargestellt ist, stellt das Signal INTSDA# die abgetasteten INTA# Unterbrechungs-Anforderungs-Signale von den Schlitzen 36af dar. Das Signal INTSDB# stellt die abgetasteten INTB# Unterbrechungs-Anforderungs-Signale von den Schlitzen 36af dar. Das Signal INTSDC# stellt die abgetasteten INTC# Unterbrechungs-Anforderungs-Signale von den Schlitzen 36af dar. Das Signal INTSDD# stellt die abgetasteten INTD# Unterbrechungs-Anforderungs-Signale von den Schlitzen 36af dar. Zu Zwecken eines Kombinierens der Unterbrechungs-Signale INTSDA#-D# in das Signal INTSDIIO# verknüpft der Unterbrechungs-Empfangs-Block 132 logisch die Signale INTSDA#-D# zusammen mit UND, während gleichzeitig Unterbrechungs-Anforderungs-Signale, bestimmt für die CPU 14, maskiert werden. Ähnlich verknüpft, zu Zwecken eines Kombinierens der Unterbrechungs-Signale INTSDA#-D# in das Signal INTSDCABLE# der Unterbrechungs-Aufnahme-Block 132 logisch mit UND die Signale INTSDA#-D# zusammen, während simultan Unterbrechungs-Anforderungs-Signale, bestimmt für die CPU 14, maskiert werden.
  • Für den Zweck eines Instruierens des Unterbrechungs-Ausgangs-Blocks 114, wenn ein anderer Unterbrechungs-Zyklus 1850 beginnt, liefert der Unterbrechungs-Aufnahme-Block 132 ein Synchronisations-Signal INTSYNCCABLE# zu dem Unterbrechungs-Ausgangs-Block 114. Die abfallende, oder negative, Flanke des Signals INTSYNCCABLE# zeigt an, dass der Zeit-Teil T0 des Unterbrechungs-Zyklus 1850, übertragen über das Signal INTSDCABLE# an der nächsten, positiven Flanke des CLK Signals beginnt. Ein Signal INTSYNCIIO# wird in einer analogen Weise verwendet, um einen ankommenden Zeit-Schlitz T0 des Unterbrechungs-Zyklus 1850, übertragen über das Signal INTSDIIO#, anzuzeigen. Das Signal INTSYNCIIO# wird durch den Unterbrechungs-Empfangs-Block 132 zu dem I2O-Prozessor 1700 über eine PCI INTD# Leitung 1710 des Busses 32 geliefert. Für den Zweck eines Instruierens der Multiplexing-Schaltung 1712, wenn ein anderer Unterbrechungs-Zyklus 1850 über die Unterbrechungs-Signale INTS DA#-D# zu übertragen ist, liefert der Unterbrechungs-Empfangs-Block 132 ein Synchronisations-Signal INTSYNC# zu der Multiplexing-Schaltung 1712. Die abfallende, oder negative Flanke des Signals des INTSYNC# zeigt an, dass die Multiplexing-Schaltung 1712 den Zeit-Teil T0 der Signale INTSDA#-D# an der nächsten, positiven Flanke des CLK-Signals übertragen sollte.
  • Wie in 96 dargestellt ist, umfasst die Multiplexing-Schaltung 1712 vier Multiplexer 17411744, die die Signale INTSDA#, INTSDB#, INTSDC# und INTSDD# jeweils liefern. Die Auswahl-Eingänge der Multiplexer 17411744 empfangen ein Zeit-Teil-Signal SLICEIN[2:0], das dazu verwendet wird, die Zeit-Teile T0–T7 der Signale INTSDA#-D# anzuzeigen. Die INTA-D# Unterbrechungs-Anforderungs-Signale von den Schlitzen 36 werden zu Eingängen der Multiplexer 17411744 jeweils geliefert.
  • Das Signal SLICEIN[2:0] wird durch den Ausgang eines Drei-Bit-Zählers 1745 geliefert, der an der positiven Flanke des PCI-Takt-Signals CLK getaktet wird. Das Unterbrechungs-Synchronisations-Signal INTSYNC# wird durch einen getakteten Freigabe-Eingang des Zählers 1745 empfangen. An der negativen Flanke des Signals INTSYNC# setzt sich der Zähler 1745 auf Null zurück (SLICEIN[2:0] entspricht Null). Der Zähler 1745 erhöht den Wert, angezeigt durch das SLICEIN[2:0] Signal, bis das SLICEIN[2:0] Signal gleich zu „7" ist, wo es verbleibt, bis der Zähler 1745 erneut durch das INTSYNC# Signal zurückgesetzt wird.
  • Wie in 97A dargestellt ist, umfasst, zu Zwecken eines Protokollierens der Zeit-Teile T0–T7, der Unterbrechungs-Aufnahme-Block 132 einen Drei-Bit-Zähler 1750, der an der positiven Flanke des CLK-Signals getaktet wird. Der Zähler 1750 liefert ein Ausgangs-Signal SL1[2:0], das durch den Auswahl-Eingang eines 3 × 8 Decodierers 1752 empfangen wird. Der Decodierer 1752 liefert ein Acht-Bit-Signal G_CNTR[7:0], wobei das aufgestellte Bit des Signals G_CNTR[7:0] den Zeit-Teil der Signale INTSDIIO# und INTSDCABLE# anzeigt.
  • Das INTSYNC# Signal wird durch den Ausgang eines Invertierers 1774 geliefert, der das signifikanteste Bit des G_CNTR[7:0] Signals, G_CNTR[7], empfängt. Obwohl das INTSYNC# Signal auf niedrig während des Zeit-Teils T7 gepulst wird, könnte der Unterbrechungs-Aufnahme-Block 132 alternativ mehrere Zyklen des CLK-Signals nach Beenden eines Unterbrechungs-Zyklus 1850, vor einem Pulsen des INTSYNC# Signals auf niedrig, warten. Die Signale INTSYNCCABLE# und INTSYNCIIO# werden beide durch den Ausgang eines Invertierers 1755 geliefert, der das Bit G_CNTR[0] empfängt.
  • Ein zusätzliches Unterbrechungs-Anforderungs-Singal CAY_INT# für die CPU 14 wird durch die SIO-Schaltung 50 geliefert. Das CAY_INT# Signal wird logisch mit UND mit den INTSDA#–D# Signalen während des Zeit-Teils T0 verknüpft. Das CRY_INT# Signal wird durch den Ausgang eines UND-Gates 1756 geliefert, das ein SIO_CMPL# Signal, das SI_INTR# Signal und ein I2C_INT# Signal aufnimmt. Das SIO_CMPL# Signal wird aufgestellt, oder auf niedrig angesteuert, wenn die SIO-Schaltung 50 einen Seriell-Ausgangs-Prozess abgeschlossen hat. Das I2C_INT# Signal wird aufgestellt, oder auf niedrig angesteuert, um einen Abschluss einer Transaktion über einen I2C-Bus (nicht dargestellt) anzuzeigen, verbunden mit dem Brücken-Chip 48. Das I2C_INT# Signal wird ansonsten weggenommen, oder auf niedrig angesteuert.
  • Zu Zwecken eines Maskierens von Unterbrechungs-Anforderungen erzeugt der Unterbrechungs-Empfangs-Block 132 vier Maskierungs-Signale MASKA, MASKB, MASKC und MASKD. Wenn das MASKA Signal aufgestellt ist, oder auf hoch angesteuert ist, während eines bestimmten Zeit-Teils (T0–T7) des Signals INTSDA#, wird eine Unterbrechungs-Anforderung, angezeigt durch das Seriell-Unterbrechungs-Signal INTSDA# während dieses bestimmten Zeit-Schlitzes, von der CPU 14 maskiert. Falls das MASKA Signal weggenommen ist, oder auf niedrig angesteuert ist, während des bestimmten Zeit-Teils, wird die Unterbrechungs-Anforderung, angezeigt durch das Seriell-Unterbrechungs-Signal INTSDA# von dem I2O-Prozessor 1700 maskiert. Die MASKB–D Signale funktionieren ähnlich zu den Maskierungs-Unterbrechungs-Anforderungen, geliefert durch die Signale INTSDB#–D#.
  • Wie in 97B dargestellt ist, liefert ein Multiplexer 1758 das MASKA Signal. Der Auswahl-Eingang des Multiplexers 1758 empfängt das SL1[2:0] Signal. Die acht Eingänge des Multiplexers 1758 empfangen invertierte IIO_SUB[5:0] Signale, die für entsprechende Bits des I2O-Neben-Registers 1728 indikativ sind. Die Signale IIO_SUB[5:0] werden mit den geeigneten Eingängen des Multiplexers 1758 so verbunden, dass dann, wenn das INTSDA# Signal den Unterbrechungs-Status für einen bestimmten Schlitz bzw. Einsteckplatz 36 anzeigt, das MASKA Signal gleichzeitig das zugeordnete Bit des Registers 1728 für diesen Schlitz 36 anzeigt. Drei andere Multiplexer 1760, 1762 und 1764 liefern die Signale MASKB, MASKC und MASKD jeweils. Ähnlich zur Erzeugung des MASKA Signals, sind die Signale IIO_SUB[5:0] mit den geeigneten Eingängen von Multiplexern 1760, 1762 und 1764 so verbunden, dass die MASKB, MASKC und MASKD Signale das Bit des Registers 1728, zugeordnet zu dem Schlitz, dargestellt durch die Signale INTSDB#, INTSDC# und INTSDD#, anzeigen. Die Multiplexer 17601764 empfangen das Signal SL1[2:0] an deren Auswahl-Eingängen.
  • Wie in 97C dargestellt ist, umfasst der Unterbrechungs-Aufnahme-Block 132 auch zwei Multiplexer 1768 und 1770, die zwei Maskierungssignale IIOTS_D und IIOTS_C, verwendet dazu, die INTD# und INTC# Signale zu maskieren, geliefert durch die Schlitz-Unterbrechungs-Leitungen des I2O-Prozessors 1700, liefern, da die Leitungen 1709 und 1713 dazu verwendet werden, die Signale INTSDIIO# und INTSYNCIIO# jeweils zu dem I2O-Prozessor 1700 zu liefern. Die Auswahl-Eingänge beider Multiplexer 1768 und 1770 empfangen das Signal SL1[2:0], und die Signal-Eingänge der Multiplexer 1768 und 1770 empfangen Signale IIOSLOT[5:0], die für die entsprechenden Bits des I2O-Schlitz-Registers 1730 indikativ sind. Die Signale IIOSLOT[5:0] werden mit den geeigneten Eingängen von Multiplexern 1768 und 1770 so verbunden, dass dann, wenn die INTSDC#–D# Signale den Unterbrechungs-Status für einen bestimmten Schlitz 36 anzeigen, das IIOSLOT[5:0] Signal, ausgewählt durch die Multiplexer 1768 und 1770, gleichzeitig das zugeordnete Bit des Registers 1730 für diesen Schritt 36 anzeigt.
  • Wie in 97D dargestellt ist, werden sechs UND-Gates 17721782 dazu verwendet, um die Signale INTSDA#–INTSDD# zu kombinieren und ausgewählte Unterbrechungs-Anforderungs-Signale von der CPU 14 zu maskieren. Das UND-Gate 1772 empfängt ein invertiertes ECC_ERR_DOWN# Signal (aufgestellt dazu, um einen Fehler, erfasst durch den Chip 48b bei Kabel-Übertragungen, anzuzeigen) und das Bit G_CNTRL[0]. Das UND-Gate 1774 empfängt ein invertiertes INTSDA# Signal und das MASKA Signal. Das UND-Gate 1776 empfängt ein invertiertes INTSDB# Signal und das MASKB Signal. Das UND-Gate 1778 empfängt ein invertiertes INTSDC# Signal, das MASKC Signal und das IIOTS_C Signal. Das UND-Gate 1780 empfängt ein invertiertes INTSDC# Signal, das MASKD Signal und das IIOTS_D Signal. Das UND-Gate 1782 empfängt ein invertiertes CAY_INT Signal und das G_CNTRL Signal.
  • Die Ausgänge der UND-Gates 17721782 sind als Eingänge zu einem ODER-Gate 1784 verbunden, das seinen Ausgang mit dem Signal-Eingang eines Flips-Flops 1786 vom D-Typ verbunden besitzt. Das Flip-Flop 1786 wird an der positiven Flanke des CLK- Signals getaktet, und der Einstell-Eingang des Flip-Flops 1786 empfängt das RST-Signal. Der invertierende Ausgang des Flip-Flops 1786 liefert das INTSDCABLE# Signal.
  • Vier UND-Gates 17901796 werden dazu verwendet, die INTSDA#–D# Signale zu kombinieren und ausgewählte Unterbrechungs-Anforderungs-Signale von dem I2O-Prozessor 1700 zu maskieren. Das UND-Gate 1790 empfängt ein invertiertes INTSDA# Signal und ein invertiertes MASKA Signal. Ein anderer Eingang des UND-Gates 1790 ist mit dem Ausgang eines NOR-Gates 1802 verbunden, das das INTSDA# Signal während der Zeit-Teile T0 und T7 maskiert, da keine Karten- und Unterbrechungsanforderungen in diesen Zeit-Teilen umfasst sind. Das NOR-Gate 1802 empfängt die Bits G_CNTRL[0] und G_CNTRL[7]. Das UND-Gate 1732 empfängt ein invertiertes INTSDB# Signal und ein invertiertes MASKB Signal. Ein anderer Eingang des UND-Gates 1792 ist mit dem Ausgang eines NOR-Gates 1804 verbunden, der oder das das INTSDB# Signal während der Zeit-Teile T1 und T4 maskiert, da keine Karten-Unterbrechungs-Anforderungen in diesen Zeit-Teilen umfasst sind. Das NOR-Gate 1802 empfängt die Bits G_CNTRL[1] und G_CNTRL[4].
  • Das UND-Gate 1794 empfängt ein invertiertes INTSDC# Signal und ein invertiertes MASKC Signal. Ein anderer Eingang des UND-Gates 1794 ist mit dem Ausgang eines NOR-Gates 1806 verbunden, der das INTSDC# Signal während der Zeit-Teile T2 und T5 maksiert, da keine Karten-Unterbrechungs-Anforderungen in diesen Zeit-Teilen umfasst sind. Das NOR-Gate 1806 empfängt die Bits G_CNTRL[2] und G_CNTRL[5]. Das UND-Gate 1796 empfängt ein invertiertes INTSDD# Signal und ein invertiertes MASKD Signal. Ein anderer Eingang des UND-Gates 1796 ist mit dem Ausgang eines NOR-Gates 1808 verbunden, die das INTSDD# Signal während der Zeit-Teile T3 und T6 maskiert, da keine Karten-Unterbrechungs-Anforderungen in diesen Zeit-Teilen umfasst sind. Das NOR-Gate 1808 empfängt die Bits G_CNTRL[3]und G_CNTRL[6].
  • Die Ausgänge der UND-Gates 17901796 sind als Eingänge mit einem ODER-Gate 1798 verbunden, das einen Ausgang mit dem Signal-Eingang eines Flip-Flops 1800 vom D-Typ verbunden besitzt. Das Flip-Flop 1800 wird auf der positiven Flanke des CLK-Signals getaktet und der Einstell-Eingang des Flip-Flops 1800 empfängt das RST-Signal. Der invertierende Ausgang des Flip-Flops 1800 liefert das INTSDIIO# Signal.
  • Wie in 98 dargestellt ist, umfasst der Unterbrechungs-Ausgangs-Block 114 einen Drei-Bit-Zähler 1820 von einem gemeinsamen Design zu dem Zähler 1745. Der Zäh ler 1820 wird an der positiven Flanke des Signals CLK getaktet, liefert ein Ausgangs-Signal G_CNTR2[2:0] und beginnt ein Zählen von 0 an bis 7, nachdem er durch das INTSYNC# Signal zurückgesetzt ist.
  • Zu Zwecken, das INTSYNCCPU# Signal zu liefern, umfasst der Unterbrechungs-Ausgangs-Block 114 ein Flip-Flop 1822 vom D-Typ, das an der positiven Flanke des CLK-Signals getaktet wird. Der Einstell-Eingang des Flip-Flops 1822 empfängt das RST-Signal und der Signal-Eingang des Flip-Flops 1822 empfängt das INTSYNCCABLE# Signal. Der nicht-invertierende Ausgang des Flip-Flops 1822 liefert das INTSYNCCPU# Signal.
  • Zu Zwecken, das INTSDCPU# Signal zu liefern, umfasst der Unterbrechungs-Ausgangs-Block 114 ein Flip-Flop 1824 vom D-Typ, das an der positiven Flanke des CLK-Signals getaktet wird. Der Einstell-Eingang des Flip-Flops 1824 empfängt das RST-Signal und der Signal-Eingang des Flip-Flops 1824 empfängt das INTSDCABLE# Signal. Der nicht-invertierende Ausgang des Flip-Flops 1824 liefert das INTSDCPU# Signal.
  • Die Unterbrechungs-Anforderungen, empfangen durch den Unterbrechungs-Empfangs-Block 114, werden zu der Unterbrechungs-Steuereinheit 1900 entweder asynchron oder seriell zugeführt. In dem asynchronen Mode werden die Unterbrechungs-Anforderungen zu den vier PCI-Unterbrechungs-Leitungen (herkömmlich bezeichnet auch als „Barber Poling") auf dem PCI-Bus 24 aufgelistet, wie dies in 100 dargestellt ist.
  • Zu Zwecken eines Haltens der Unterbrechungs-Informationen, geliefert durch das INTSDCABLE# Signal, umfasst der Unterbrechungs-Ausgangs-Block 114 ein Acht-Bit-Register 1826. Alle Signal-Eingänge empfangen das INTSDCABLE# Signal. Die Lade-Freigabe-Eingänge von Bits 0–7 empfangen die Bits G_CNTR[0]–G_CNTR[7] jeweils. Deshalb wird, zum Beispiel, während des Zeit-Teils T4, ein Bit 3 mit dem Wert, dargestellt durch das INTSDCABLE# Signal, geladen. Bits 0 (dargestellt durch ein INT_A1 Signal) und 4 (dargestellt durch ein INT_A2 Signal) werden in ein CPUINTA# Signal hinein aufgelistet. Bits 1 (dargestellt durch ein INT_B1 Signal) und 5 (dargestellt durch ein INT_B2 Signal) werden in ein CPUINTB# Signal hinein aufgelistet. Bits 2 (dargestellt durch ein INT_C1 Signal) und 6 (dargestellt durch ein INT_C2 Signal) werden in ein CPUINTC# Signal hinein aufgelistet. Bits 3 (dargestellt durch ein INT_D1 Signal) und 7 (dargestellt durch ein INT_D2 Signal) werden in ein CPUINTD# Signal hinein aufgelistet.
  • Vier ODER-Gates 18281834 liefern die Signale CPUINTA#, CPUINTB#, CPUINTC# und CPUINTD#, die zu den PCI-Unterbrechungs-Leitungen INTA#, INTB#, INTC# und INTD# jeweils des PCI-Busses 24 geliefert werden. Das ODER-Gate 1828 besitzt einen Eingang mit dem Ausgang eines UND-Gates 1836 verbunden. Das UND-Gate nimmt ein invertiertes CM-Signal auf. Das Signal CM wird durch ein Bit eines Konfigurations-Registers des Brücken-Chips 26 geliefert und wird aufgestellt, oder auf hoch angesteuert, um den asynchronen Mode anzuzeigen, und wird weggenommen, oder auf niedrig angesteuert, um den synchronen Mode anzuzeigen. Das UND-Gate 1836 empfängt auch das Signal INT_A1, das Signal INT_A2, und ein Signal ECC_ERR_UP (verwendet dazu, einen Fehler in Kabel-Übertragungen anzuzeigen).
  • Das ODER-Gate 1828 besitzt einen Eingang mit dem Ausgang eines UND-Gates 1838 verbunden. Das UND-Gate 1838 empfängt das CM-Signal und das INTSDCPU# Signal. Ein anderer Eingang des UND-Gates 1838 ist mit dem Ausgang eines ODER-Gates 1848 verbunden. Das ODER-Gate 1848 empfängt das ECC_ERR_UP Signal und das Bit G_CNTR2[0].
  • Das ODER-Gate 1830 besitzt einen Eingang mit dem Ausgang eines UND-Gates 1840 verbunden und einen Eingang mit dem Ausgang eines UND-Gates 1842 verbunden. Das UND-Gate 1840 empfängt ein invertiertes CM-Signal, das Signal INT_B1, und das Signal INT_B2. Das UND-Gate 1842 empfängt das Signal CM und ein invertiertes Bit G_CNTR2[0] (verwendet dazu, das „sync" Signal zu der Unterbrechungs-Steuereinheit 1900 während des seriellen Modes zu liefern).
  • Das ODER-Gate 1832 besitzt einen Eingang mit dem Ausgang eines UND-Gates 1844 und mit einem Eingang, der das CM-Signal empfängt, verbunden. Das UND-Gate 1844 empfängt ein invertiertes CM-Signal, das INT_C1 Signal und das INT_C2 Signal. Das ODER-Gate 1834 besitzt einen Eingang mit dem Ausgang eines UND-Gates 1846 und mit einem Eingang, der das CM-Signal aufnimmt, verbunden. Das UND-Gate 1846 empfängt ein invertiertes CM-Signal, das INT_D1 Signal und das INT_D2 Signal.
  • Andere Ausführungsformen liegen innerhalb des Schutzumfangs der nachfolgenden Ansprüche. Der Multi-Threaded-Master kann eine Brücke, wie beispielsweise eine PCI-ISA-Brücke oder eine PCI-EISA-Brücke sein.

Claims (16)

  1. Computersystem, das aufweist: einen Bus (32), Bus-Vorrichtungen, die zum Erzeugen von Bus-Transaktionen auf dem Bus (32) geeignet sind; gekennzeichnet durch: einen Komparator (326, 328, 330) zum Vergleichen einer ersten Bus-Transaktion, erzeugt durch eine Bus-Vorrichtung (323), mit einer zweiten Bus-Transaktion, erzeugt durch die Bus-Vorrichtung (323), um zu bestimmen, ob die Bus-Vorrichtung (323) eine Multi-Threaded-Vorrichtung ist, wobei eine Multi-Threaded-Vorrichtung eine Bus-Vorrichtung ist, die mehr als eine anstehende Bus-Transaktion, gleichzeitig anhängig auf dem Bus, haben kann, wobei die Bus-Vorrichtung (323) dahingehend bestimmt wird, eine Multi-Threaded-Vorrichtung zu sein, falls sich die zweite Bus-Transaktion von der ersten Bus-Transaktion unterscheidet.
  2. Computersystem nach Anspruch 1, wobei jede Bus-Vorrichtung so aufgebaut ist, um ein Anforderungs-Signal aufzustellen, um den Bus anzufordern, und weiterhin gekennzeichnet ist durch: einen Arbitrierer (332), der so aufgebaut ist, um das angeforderte Signal einer Bus-Vorrichtung, die eine nicht abgeschlossene Transaktion wiederholt, in Abhängigkeit davon zu maskieren oder nicht zu maskieren, ob die erneut versuchte Bus-Vorrichtung eine oder mehr als eine offene Transaktion (323) unterstützen kann, wobei das Anforderungs-Signal nicht maskiert wird, falls die erneut versuchte Bus-Vorrichtung eine Multi-Threaded-Vorrichtung (323) ist.
  3. Computersystem nach Anspruch 1, wobei jede Bus-Vorrichtung so aufgebaut ist, um ein Anforderungs-Signal aufzustellen, um den Bus anzufordern; und weiterhin gekennzeichnet ist durch: einen Arbitrierer (332), der so aufgebaut ist, um das Angeforderungs-Signal einer Bus-Vorrichtung zu maskieren, falls die Bus-Vorrichtung erneut versucht worden ist und sie eine Einzel-Threaded-Vorrichtung ist, und um nicht das Anforderungs-Signal der Bus-Vorrichtung zu maskieren, falls die Bus-Vorrichtung erneut versucht worden ist, allerdings sie eine Multi-Threaded-Vorrichtung (323) ist.
  4. Computersystem nach einem der Ansprüche 1 bis 3, wobei der Bus (32) durch eine Brücke (26, 48) mit einem zweiten Bus (24) verbunden ist.
  5. Computersystem nach Anspruch 4, wobei die Brücke (26, 48) eine Bus-Vorrichtungs-Anforderung erneut versucht, die zu dem zweiten Bus (24) hin gerichtet ist.
  6. Computersystem nach Anspruch 5, wobei die Bus-Vorrichtungs-Anforderung, die zu dem zweiten Bus (24) hin gerichtet ist, eine verzögerte Anforderungs-Transaktion umfasst.
  7. Computersystem nach einem der Ansprüche 1 bis 6, wobei die Multi-Threaded-Bus-Vorrichtung eine Brückenvorrichtung (323) aufweist, die zwischen dem Bus (32) und einem weiteren Bus (325) verbunden ist.
  8. Computersystem nach Anspruch 7, wobei die Brücken-Vorrichtung (323) dazu geeignet ist, Bus-Anforderungen im Namen von Bus-Vorrichtungen, die mit dem weiteren Bus (325) verbunden sind, zu erzeugen.
  9. Computersystem nach einem der Ansprüche 1 bis 8, wobei der eine oder mehrere der Busse einen PCI-Bus umfassen.
  10. Verfahren zum Charakterisieren einer Bus-Vorrichtung auf einem Bus (32) in einem Computersystem, das aufweist: Vergleichen einer ersten Bus-Transaktion, erzeugt durch die Bus-Vorrichtung, mit einer zweiten Bus-Transakation, erzeugt durch die Bus-Vorrichtung; und Anzeigen, dass die Bus-Vorrichtung mehr als eine anstehende Transaktion, gleichzeitig anhängig auf dem Bus (323), basierend auf dem Vergleich, unterstützen kann, wobei die Bus-Vorrichtung dahingehend bestimmt wird, eine Multi-Threaded-Vorrichtung zu sein, falls sich die zweite Bus-Transaktion von der ersten Bus-Transaktion unterscheidet.
  11. Verfahren nach Anspruch 10 zum Erteilen eines Zugangs zu Bus-Vorrichtungen auf einem Bus in einem Computersystem, in dem: jede Bus-Vorrichtung ein Anforderungssignal aufstellt, um den Bus anzufordern; und falls der Bus dahingehend bestimmt ist, eine Multi-Threaded-Vorrichtung zu sein, ein Anforderungssignal nicht maskiert wird, falls der Bus die nicht abgeschlossene Transaktion wiederholt und eine Anforderung einer erneut versuchten Bus-Vorrichtung, die dahingehend bestimmt ist, nicht eine Multi-Threaded-Vorrichtung zu sein, maskiert wird.
  12. Verfahren nach Anspruch 10 oder Anspruch 11, wobei das Computersystem weiterhin einen zweiten Bus (24) umfasst, und wobei die Multi-Threaded-Bus-Vorrichtung (323) eine Brücke (26, 48) umfasst, die zwischen dem ersten Bus (32) und dem zweiten Bus (24) verbunden ist.
  13. Verfahren nach Anspruch 11, wobei das Computersystem weiterhin einen zweiten Bus (24) umfasst, wobei das Verfahren weiterhin aufweist: erneutes Versuchen einer Bus-Vorrichtungs-Anforderung, die zu dem zweiten Bus (24) hin gerichtet ist.
  14. Verfahren nach Anspruch 13, wobei die Bus-Vorrichtungs-Anforderung, die zu dem zweiten Bus (24) hin gerichtet ist, eine verzögerte Anforderungs-Transaktion umfasst.
  15. Verfahren nach Anspruch 10, wobei das Computersystem weiterhin einen zweiten Bus (24) umfasst, und wobei die erste und die zweite Bus-Transaktion zu dem zweiten Bus (24) hin gerichtet sind.
  16. Verfahren nach Anspruch 15, wobei die erste und die zweite Bus-Transaktion verzögerte Anforderungs-Transaktionen umfassen.
DE69732736T 1996-06-05 1997-06-04 Vielfaden-Busmaster Expired - Lifetime DE69732736T2 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US659355 1996-06-05
US08/659,355 US6052513A (en) 1996-06-05 1996-06-05 Multi-threaded bus master

Publications (2)

Publication Number Publication Date
DE69732736D1 DE69732736D1 (de) 2005-04-21
DE69732736T2 true DE69732736T2 (de) 2005-08-04

Family

ID=24645068

Family Applications (1)

Application Number Title Priority Date Filing Date
DE69732736T Expired - Lifetime DE69732736T2 (de) 1996-06-05 1997-06-04 Vielfaden-Busmaster

Country Status (4)

Country Link
US (1) US6052513A (de)
EP (1) EP0811925B1 (de)
JP (1) JPH1055335A (de)
DE (1) DE69732736T2 (de)

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6275888B1 (en) * 1997-11-19 2001-08-14 Micron Technology, Inc. Method for configuring peer-to-peer bus bridges in a computer system using shadow configuration registers
US6345330B2 (en) * 1998-05-01 2002-02-05 Acqis Technology, Inc. Communication channel and interface devices for bridging computer interface buses
US6321335B1 (en) 1998-10-30 2001-11-20 Acqis Technology, Inc. Password protected modular computer method and device
US6718415B1 (en) 1999-05-14 2004-04-06 Acqis Technology, Inc. Computer system and method including console housing multiple computer modules having independent processing units, mass storage devices, and graphics controllers
US6643777B1 (en) 1999-05-14 2003-11-04 Acquis Technology, Inc. Data security method and device for computer modules
US7114011B2 (en) * 2001-08-30 2006-09-26 Intel Corporation Multiprocessor-scalable streaming data server arrangement
US6832286B2 (en) * 2002-06-25 2004-12-14 Hewlett-Packard Development Company, L.P. Memory auto-precharge
DE10234933A1 (de) * 2002-07-31 2004-03-18 Advanced Micro Devices, Inc., Sunnyvale Pufferung von Non-Posted-Lesebefehlen und Antworten
US7990724B2 (en) 2006-12-19 2011-08-02 Juhasz Paul R Mobile motherboard
US8643168B1 (en) * 2012-10-16 2014-02-04 Lattice Semiconductor Corporation Integrated circuit package with input capacitance compensation
US10037150B2 (en) * 2016-07-15 2018-07-31 Advanced Micro Devices, Inc. Memory controller with virtual controller mode
CN110399325B (zh) * 2019-07-30 2023-05-30 江西理工大学 一种基于iic总线协议的改进型ip核

Family Cites Families (50)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS5569830A (en) * 1978-11-20 1980-05-26 Toshiba Corp Intelligent terminal
EP0334627A3 (de) * 1988-03-23 1991-06-12 Du Pont Pixel Systems Limited Multiprozessorbauweise
JPH03188546A (ja) * 1989-12-18 1991-08-16 Fujitsu Ltd バスインターフェイス制御方式
US5454093A (en) * 1991-02-25 1995-09-26 International Business Machines Corporation Buffer bypass for quick data access
US5483641A (en) * 1991-12-17 1996-01-09 Dell Usa, L.P. System for scheduling readahead operations if new request is within a proximity of N last read requests wherein N is dependent on independent activities
CA2080210C (en) * 1992-01-02 1998-10-27 Nader Amini Bidirectional data storage facility for bus interface unit
JPH0789340B2 (ja) * 1992-01-02 1995-09-27 インターナショナル・ビジネス・マシーンズ・コーポレイション バス間インターフェースにおいてアドレス・ロケーションの判定を行なう方法及び装置
US5491811A (en) * 1992-04-20 1996-02-13 International Business Machines Corporation Cache system using mask bits to recorder the sequences for transfers of data through cache to system memory
US5579530A (en) * 1992-06-11 1996-11-26 Intel Corporation Method and apparatus for dynamically allocating access time to a resource shared between a peripheral bus and a host bus by dynamically controlling the size of burst data transfers on the peripheral bus
JP2531903B2 (ja) * 1992-06-22 1996-09-04 インターナショナル・ビジネス・マシーンズ・コーポレイション コンピュ―タ・システムおよびシステム拡張装置
US5519839A (en) * 1992-10-02 1996-05-21 Compaq Computer Corp. Double buffering operations between the memory bus and the expansion bus of a computer system
US5463753A (en) * 1992-10-02 1995-10-31 Compaq Computer Corp. Method and apparatus for reducing non-snoop window of a cache controller by delaying host bus grant signal to the cache controller
US5535395A (en) * 1992-10-02 1996-07-09 Compaq Computer Corporation Prioritization of microprocessors in multiprocessor computer systems
US5381528A (en) * 1992-10-15 1995-01-10 Maxtor Corporation Demand allocation of read/write buffer partitions favoring sequential read cache
US5396602A (en) * 1993-05-28 1995-03-07 International Business Machines Corp. Arbitration logic for multiple bus computer system
US5522050A (en) * 1993-05-28 1996-05-28 International Business Machines Corporation Bus-to-bus bridge for a multiple bus information handling system that optimizes data transfers between a system bus and a peripheral bus
US5623633A (en) * 1993-07-27 1997-04-22 Dell Usa, L.P. Cache-based computer system employing a snoop control circuit with write-back suppression
US5613075A (en) * 1993-11-12 1997-03-18 Intel Corporation Method and apparatus for providing deterministic read access to main memory in a computer system
US5455915A (en) * 1993-12-16 1995-10-03 Intel Corporation Computer system with bridge circuitry having input/output multiplexers and third direct unidirectional path for data transfer between buses operating at different rates
US5559800A (en) * 1994-01-19 1996-09-24 Research In Motion Limited Remote control of gateway functions in a wireless data communication network
US5471590A (en) * 1994-01-28 1995-11-28 Compaq Computer Corp. Bus master arbitration circuitry having improved prioritization
GB2286910B (en) * 1994-02-24 1998-11-25 Intel Corp Apparatus and method for prefetching data to load buffers in a bridge between two buses in a computer
US5535341A (en) * 1994-02-24 1996-07-09 Intel Corporation Apparatus and method for determining the status of data buffers in a bridge between two buses during a flush operation
US5530933A (en) * 1994-02-24 1996-06-25 Hewlett-Packard Company Multiprocessor system for maintaining cache coherency by checking the coherency in the order of the transactions being issued on the bus
TW400483B (en) * 1994-03-01 2000-08-01 Intel Corp High performance symmetric arbitration protocol with support for I/O requirements
US5586297A (en) * 1994-03-24 1996-12-17 Hewlett-Packard Company Partial cache line write transactions in a computing system with a write back cache
US5528766A (en) * 1994-03-24 1996-06-18 Hewlett-Packard Company Multiple arbitration scheme
US5623700A (en) * 1994-04-06 1997-04-22 Dell, Usa L.P. Interface circuit having zero latency buffer memory and cache memory information transfer
US5546546A (en) * 1994-05-20 1996-08-13 Intel Corporation Method and apparatus for maintaining transaction ordering and arbitrating in a bus bridge
US5535340A (en) * 1994-05-20 1996-07-09 Intel Corporation Method and apparatus for maintaining transaction ordering and supporting deferred replies in a bus bridge
US5687347A (en) * 1994-09-19 1997-11-11 Matsushita Electric Industrial Co., Ltd. Data providing device, file server device, and data transfer control method
US5548730A (en) * 1994-09-20 1996-08-20 Intel Corporation Intelligent bus bridge for input/output subsystems in a computer system
US5524235A (en) * 1994-10-14 1996-06-04 Compaq Computer Corporation System for arbitrating access to memory with dynamic priority assignment
US5553265A (en) * 1994-10-21 1996-09-03 International Business Machines Corporation Methods and system for merging data during cache checking and write-back cycles for memory reads and writes
US5555383A (en) * 1994-11-07 1996-09-10 International Business Machines Corporation Peripheral component interconnect bus system having latency and shadow timers
US5664124A (en) * 1994-11-30 1997-09-02 International Business Machines Corporation Bridge between two buses of a computer system that latches signals from the bus for use on the bridge and responds according to the bus protocols
US5625779A (en) * 1994-12-30 1997-04-29 Intel Corporation Arbitration signaling mechanism to prevent deadlock guarantee access latency, and guarantee acquisition latency for an expansion bridge
US5594882A (en) * 1995-01-04 1997-01-14 Intel Corporation PCI split transactions utilizing dual address cycle
US5568619A (en) * 1995-01-05 1996-10-22 International Business Machines Corporation Method and apparatus for configuring a bus-to-bus bridge
US5630094A (en) * 1995-01-20 1997-05-13 Intel Corporation Integrated bus bridge and memory controller that enables data streaming to a shared memory of a computer system using snoop ahead transactions
US5596729A (en) * 1995-03-03 1997-01-21 Compaq Computer Corporation First arbiter coupled to a first bus receiving requests from devices coupled to a second bus and controlled by a second arbiter on said second bus
US5664150A (en) * 1995-03-21 1997-09-02 International Business Machines Corporation Computer system with a device for selectively blocking writebacks of data from a writeback cache to memory
US5619661A (en) * 1995-06-05 1997-04-08 Vlsi Technology, Inc. Dynamic arbitration system and method
US5634138A (en) * 1995-06-07 1997-05-27 Emulex Corporation Burst broadcasting on a peripheral component interconnect bus
US5694556A (en) * 1995-06-07 1997-12-02 International Business Machines Corporation Data processing system including buffering mechanism for inbound and outbound reads and posted writes
US5710906A (en) * 1995-07-07 1998-01-20 Opti Inc. Predictive snooping of cache memory for master-initiated accesses
US5649175A (en) * 1995-08-10 1997-07-15 Cirrus Logic, Inc. Method and apparatus for acquiring bus transaction address and command information with no more than zero-hold-time and with fast device acknowledgement
US5632021A (en) * 1995-10-25 1997-05-20 Cisco Systems Inc. Computer system with cascaded peripheral component interconnect (PCI) buses
US5673399A (en) * 1995-11-02 1997-09-30 International Business Machines, Corporation System and method for enhancement of system bus to mezzanine bus transactions
US5717876A (en) * 1996-02-26 1998-02-10 International Business Machines Corporation Method for avoiding livelock on bus bridge receiving multiple requests

Also Published As

Publication number Publication date
US6052513A (en) 2000-04-18
EP0811925A2 (de) 1997-12-10
JPH1055335A (ja) 1998-02-24
DE69732736D1 (de) 2005-04-21
EP0811925A3 (de) 1999-02-10
EP0811925B1 (de) 2005-03-16

Similar Documents

Publication Publication Date Title
DE69731917T2 (de) Datenströmung in einer Busbrücke
DE69724048T2 (de) Leistungsüberwachung eines Computersystembusses
DE69733101T2 (de) Datenüberlaufverwaltung in einem Rechnersystem
DE69720594T2 (de) Verbindung von Erweiterungskarten
US5822571A (en) Synchronizing data between devices
EP0820012B1 (de) Fehlereingrenzung
EP0817055B1 (de) Umschalten eines Systemwirtsrechners
US6055596A (en) Expansion card space reservation
US6108741A (en) Ordering transactions
US6021480A (en) Aligning a memory read request with a cache line boundary when the request is for data beginning at a location in the middle of the cache line
DE69732268T2 (de) Automatische Datenvorausladung in einem Rechnersystem
US5943482A (en) Expansion card insertion and removal
DE69732736T2 (de) Vielfaden-Busmaster
US5987539A (en) Method and apparatus for flushing a bridge device read buffer
US5911055A (en) Using subordinate bus devices that are connected to a common bus
US6035362A (en) Storing data associated with one request while continuing to store data associated with a previous request from the same device
US5872939A (en) Bus arbitration
EP0811929A2 (de) Busgerätkonfiguration in einer Brücke zwischen zwei Bussen
EP0811935A2 (de) Befehlanruf in einem Rechnersystem

Legal Events

Date Code Title Description
8364 No opposition during term of opposition