-
Die Erfindung bezieht sich auf eine Übertragung
von Transaktionen zwischen Datenbussen in einem Computersystem.
-
Computersysteme umfassen oftmals
einen oder mehrere Datenbus(se), die ermöglichen, dass Komponenten des
Computersystems miteinander kommunizieren. Zum Beispiel ist ein
herkömmlicher Typ
eines Datenbusses ein Peripheral Component Interface (PCI) Bus,
der ein spezielles Kommunikationsprotokoll zwischen der CPU/dem
Hauptspeicher des Systems und den peripheren Komponenten, wie beispielsweise
kleinen Computer-System-Schnittstellen-(SCSI)-Vorrichtungen und
Netzwerk-Interface-Karten (NICs), schafft. Wenn der Systemspeicher
und die peripheren Komponenten (z. B. PCI-Vorrichtungen), auf unterschiedlichen
Bussen vorhanden sind, ist eine Brücke erforderlich, um den Fluss
von Datentransaktionen zwischen den zwei Bussen zu handhaben. Typischerweise
sind System-Speicher- und PCI-Vorrichtungen jeweils, zumindest indirekt,
auf PCI-Bussen vorhanden, die durch eine PCI-zu-PCI-Brücke verbunden
sind. Eine PCI-Bus-Architektur
ist durch die PCI Local Bus Specification, Revision 2.1 („PCI Spec
2.1"), veröffentlicht
im Juni 1995, durch PCI Special Interest Group, Portland, Oregon,
die hier unter Bezug darauf eingeschlossen wird, definiert. Die
PCI-zu-PCI-Brücken-Architektur
ist durch die PCI-zu-PCI Brigde Architecture Specification, Revision
1.0 („PCI
Brigde Spec 1.0"),
veröffentlicht
im April 1994, durch die PCI Special Interest Group, die auch hier
unter Bezugnahme darauf eingeschlossen wird, definiert.
-
Unter den PCI Spec 2.1 und PCI Bridge
Spec 1.0 Standards unterstützen
PCI-Brücken zwei
Typen von Transaktionen: gepostete Transaktionen (umfassend alle
Speicher-Schreib-Zyklen), die auf dem initiierenden Bus abgeschlossen
werden, bevor sie auf dem Target- bzw. Ziel-Bus abgeschlossen werden, und
Delayed- bzw. verzögerte
Transaktionen (umfassend Speicher-Lese-Anforderungen und I/O- und Konfigurations-Lese/Schreib-Anforderungen),
die auf dem Target-Bus abgeschlossen werden, bevor sie auf dem initiierenden
Bus abgeschlossen werden. Gemäß der PCI
Spec 2.1 müssen
PCIzu-PCI-Brücken
gepostete Schreib-Transaktionen stark favorisieren, wenn die Reihenfolge
bestimmt wird, in der Transaktionen auf dem Target-Bus durchgeführt werden
sollen. Die PCI Spec 2.1 fordert, dass, um Verriegelungs-Zustände zu verhindern,
das Computersy stem gepostete Schreibzyklen favoriseren muss, um früher initiierte,
verzögerte
Anforderungszyklen im Bypass vorbeizuführen, und muss verhindern,
dass verzögerte
Anforderungs-Zyklen früher
initiierte, gepostete Schreibzyklen im Bypass passieren. Dieses Erfordernis
gilt sogar dann, wenn eine gepostete Schreib-Transaktion und eine
verzögerte
Anforderungs-Transaktion zwischen zwei unterschiedlichen Paaren
von Vorrichtungen auftreten.
-
Wie nun 1 zeigt, umfasst ein typisches Computersystem
eine zentrale Verarbeitungseinheit (CPU 10) und eine Hauptspeichervorrichtung
12 (umfassend eine Speichersteuereinheit), verbunden mit einem Host-Bus
14. Der Host-Bus 14 kommuniziert mit einem PCI-Bus 16 über eine Host-zu-PCI-Brückenvorrichtung
18. Der PCI-Bus 16 wiederum kommuniziert mit einem anderen PCI-Bus 19 über eine
PCI-zu-PCI-Brücke
20. Der PCI-Bus 16 ist als der „primäre" PCI-Bus bekannt und der PCI-Bus 19
ist als der „sekundäre" PCI-Bus bekannt, da
der PCI-Bus 16 hierarchisch näher
zu dem Host-Bus 14 steht, als dies für den PCI-Bus 19 der Fall ist.
-
Verschiedene periphere Vorrichtungen,
umfassend eine Video-Karte 22, eine NIC 24 und eine PCI-Optionskarte
26, sind mit dem sekundären PCI-Bus
19 verbunden. Jede Vorrichtung wird in einen „Schlitz" auf dem sekundären PCI-Bus 19 eingesteckt.
Die PCI-Optionskarte
26 umfasst eine PCI-zu-PCI-Brückenvorrichtung
28 und einen PCI-Bus 30 selbst, was ermöglicht, dass zusätzliche PCI-Vorrichtungen
in einen einzelnen Schlitz an dem sekundären PCI-Bus 19 eingesteckt
werden können. Eine
oder mehrere PCI-Vorrichtung(en),
wie beispielsweise die SCSI-Vorrichtung 32, kann bzw. können an
der PCI-Optionskarte 26 vorhanden sein. Die PCI-Optionskarte 26
arbeitet als eine „multithreaded" Vorrichtung (d.h.
eine Vorrichtung, die mehrfache, verzögerte Transaktionen gleichzeitig
beibehalten kann), wenn mehr als eine PCI-Vorrichtung mit derem
lokalen PCI-Bus 30 verbunden ist.
-
Transaktionen, initiiert durch die
CPU und auf eine Vorrichtung auf dem sekundären PCI-Bus 19 abstellend bzw.
zielend, sind als „downstream" („ausgangsseitige") Transaktionen bekannt,
und Transaktionen, initiiert durch eine Vorrichtung auf dem sekundären Bus
19 und auf den Hauptspeicher 12 hin gerichtet bzw. zielend, sind
als „upstream" („eingangsseitige") Transaktionen bekannt.
Transaktionen, initiiert durch eine Vorrichtung auf dem sekundären Bus 19
und auf eine Vorrichtung auf dem sekundären Bus 19 hin zielend bzw.
darauf gerichtet, sind als „peer-zu-peer" Transaktionen bekannt.
Peer-zupeer Transaktionen werden hier nicht behandelt.
-
Gemäß der PCI Spec 2.1 müssen irgendwelche
geposteten Schreib-Transaktionen, initiiert auf dem primären oder
sekundären
PCI-Bus und gepostet in der PCI-zu-PCI-Brückenvorrichtung
20, auf dem Target-Bus abgeschlossen werden, bevor irgendeine darauffolgend
herausgegebene Transaktion auf dem Target-Bus abgeschlossen werden
kann. Zusätzlich
muss irgendeine Transaktion, die auf dem initiierenden Bus abschließt, bevor
eine verzögerte Lese-Transaktion
auf dem Bus initiiert wird, auf dem Target-Bus abgeschlossen werden,
bevor die verzögerte
Lese-Transaktion auf dem Target-Bus abgeschlossen ist. In ähnlicher
Weise muss irgendeine Transaktion, die auf dem initiierenden Bus
abschließt,
nachdem eine verzögerte
Lese-Transaktion auf dem initiierenden Bus abschließt, abschließen, nachdem
die verzögerte
Lese-Transaktion auf dem Target-Bus abschließt. Deshalb muss eine Speicher-Schreib-Transaktion,
gepostet in der PCI-zu-PCI-Brücke 20 durch
die SCSI-Vorrichtung 22, auf dem primären PCI-Bus 16 abgeschlossen werden,
bevor eine später
herausgegebene, verzögerte
Lese-Anforderung von dem NIC 24 abgeschlossen ist, und die gepostete
Speicher-Schreib-Transaktion muss Prefetch-Daten, zugeordnet irgendwelchen früher herausgegebenen, verzögerten Lese-Transaktionen von
dem NIC 24, invalidieren bzw. für
ungültig
erklären
(d.h. die Prefetch-Daten
müssen
von der PCI-zu-PCI-Brücke
20 gelöscht
werden, wenn die Speicher-Schreib-Transaktion
gepostet wird).
-
Gemäß der vorliegenden Erfindung
wird ein Computersystem geschalten, das aufweist:
eine erste
Vorrichtung auf einem ersten Datenbus,
eine zweite und eine
dritte Vorrichtung auf einem zweiten Datenbus, und
eine Brückenvorrichtung,
die zwischen dem ersten und dem zweiten Datenbus eingefügt ist,
dadurch gekennzeichnet, dass:
die Brückenvorrichtung so konfiguriert
ist, dass sie Transaktionen zwischen der ersten Vorrichtung und der
zweiten Vorrichtung ohne Rücksicht
darauf abwickelt, ob die Transaktionen vor oder nach Transaktionen
zwischen der ersten Vorrichtung und der dritten Vorrichtung in die
Brückenschaltung
eingetreten sind.
-
Ausführungsformen der Erfindung
umfassen eines oder mehrere der nachfolgenden Merkmale. Die Brückenvorrichtung
kann die chronologische Reihenfolge der Transaktio nen zwischen der
ersten Vorrichtung und der zweiten Vorrichtung beibehalten. Die
Brükkenvorrichtung
kann versuchen, die Abwicklung einer verzögerten Transaktion zwischen
der ersten Vorrichtung und der zweiten Vorrichtung zu beschleunigen,
wenn die verzögerte
Transaktion die Abwicklung einer anderen Transaktion (z. B. einer ausgangsseitigen
Lese-Transaktion von der CPU) zwischen der ersten und der zweiten
Vorrichtung verhindert. Das Computersystem kann ein Zweit-Basisadressregister
umfassen, das dabei hilft, festzustellen, welche der Vorrichtungen
auf dem zweiten Datenbus das Ziel einer von der ersten Vorrichtung
ausgelösten
Transaktion ist. Das Computersystem kann auch ein Zuweisungssignal
umfassen, das entweder der zweiten oder der dritten Vorrichtung
eine Steuerung des zweiten Datenbusses zuweist, und die Brückenvorrichtung
kann so konfiguriert sein, dass sie das Zuweisungssignal nutzt,
um festzustellen, ob die zweite oder die dritte Vorrichtung eine
Transaktion auf dem zweiten Datenbus ausgelöst hat. Einer oder beide der
Datenbusse kann ein PCI-Bus sein.
-
Ausführungsformen der Erfindung
umfassen eines oder mehrere der nachfolgenden Merkmale. Die chronologische
Reihenfolge von Transaktionen, die zwischen der Vorrichtung auf
dem ersten Datenbus und einer der anderen Vorrichtungen angenommen
wird, kann bewahrt werden. Eine Zuführung einer verzögerten Transaktion
zwischen der Vorrichtung auf dem ersten Datenbus und einer der anderen Vorrichtungen
kann beschleunigt werden, wenn die verzögerte Transaktion eine andere
Transaktion verhindert (z. B. eine ausgangsseitige Lese-Transaktion von
der CPU), dass sie zwischen den Vorrichtungen ausgeführt wird.
Einer oder beide der Busse kann bzw. können ein PCI-Bus sein.
-
Ausführungsformen der Erfindung
können eines
oder mehrere der nachfolgenden Merkmale) umfassen. Die Entscheidungsschaltung
kann so konfiguriert sein, um die andere Transaktion, nach Auswählen der
einen Transaktion, auszuwählen.
Der Speicherbereich kann zwei Warteschlangenblöcke umfassen, von denen einer
Transaktionen speichert, die zwischen der CPU und einer der PCI-Vorrichtungen
auftreten, und der andere Transaktionen speichert, die zwischen
der CPU und der anderen PCI-Vorrichtung auftreten.
-
Der Speicherbereich kann einen ersten
Satz von Puffern umfassen, die einen Puffer besitzen, der Daten
speichert, die von der CPU zu einer ersten einen der PCI-Vorrichtungen fließen, und
einen anderen Puffer, der Daten speichert, die von der ersten PCI-Vorrichtung
zu der CPU fließen.
Der Speicherbereich kann auch einen zweiten Satz von Puffern umfassen,
die einen Puffer haben, der Daten speichert, die von der CPU zu
einer zweiten einen der PCI-Vorrichtungen fließen, und einen anderen Puffer,
der Daten speichert, die von der zweiten PCI-Vorrichtung zu der
CPU fließen.
-
Ausführungsformen der Erfindung
können eines
oder mehrere der nachfolgenden Merkmale umfassen. Jeder zugeordnete
Speicherbereich kann einen Bereich umfassen, der Daten zugeordnet
ist, die in einer bestimmten Richtung über die Brückenvorrichtung fließen, und
er kann auch einen anderen Bereich umfassen, der Daten zugeordnet
ist, die in der entgegengesetzten Richtung über die Brückenvorrichtung fließen. Der
zugeordnete Speicherbereich kann einen zugeordneten Puffer für jeden
Typ einer Transaktion umfassen, die die Brücke überquert. Die Transaktions-Typen
können
gepostete Schreibvorgänge,
verzögerte
Anforderungen und verzögerte
Abschlüsse
umfassen.
-
Unter den Vorteilen der Ausführungsformen der
Erfindung sind die folgenden vorhanden. Transaktions-Reihenfolge-Regeln
können
erleichtert werden, so dass Transaktionen zwischen zwei Vorrichtungen
streng nur in Bezug auf andere Transaktionen zwischen denselben
zwei Vorrichtungen in der Reihenfolge geregelt sind. Zum Beispiel
kann in einer Architektur mit verzögerter Transaktion, eine verzögerte Lese-Transaktion
zwischen einer CPU und einer ersten PCI-Vorrichtung vor einer früher ausgegebenen,
geposteten Schreib-Transaktion zwischen der CPU und einer anderen
PCI-Vorrichtung abgeschlossen werden. Zusätzlich müssen vorab abgerufene Daten,
zugeordnet zu einer früher
ausgegebenen, verzögerten
Lese-Transaktion zwischen der CPU und der ersten PCI-Vorrichtung, nicht
für ungültig erklärt werden,
wenn die Schreib-Transaktion zwischen der CPU und der anderen PCI-Vorrichtung
gepostet ist. Deshalb können
Computersysteme, die auf PCI-Brücken
beruhen, effektiver arbeiten, da Daten, zugeführt während verzögerter Transaktionen, nicht häufig ausgesondert
werden.
-
Andere Merkmale und Vorteile werden
aus der nachfolgenden Beschreibung und den Ansprüchen ersichtlich werden.
-
1 zeigt
ein Blockdiagramm eines Computersystems.
-
2 zeigt
ein Blockdiagramm eines Computersystems, in dem Datenbusse durch
eine Brücke verbunden
sind, die erleichternde Transaktions-Reihenfolge-Regeln umsetzt. 3 zeigt ein Blockdiagramm
einer Master-Zyklus-Entscheidungseinrichtung, die eine geeignete
Reihenfolge von Transaktionen sicherstellt.
-
4A und 4B zeigen Zustands-Übergangs-Diagramme
eines Entscheidungsschemas.
-
5 zeigt
ein Blockdiagramm einer alternativen Brückenarchitektur.
-
Wie 2 zeigt,
umfasst ein Computersystem 50 eine PCI-zu-PCI-Brückenvorrichtung
50 (PPB oder „Brücke"), die einen primären und
einen sekundären
PCI-Bus 52 und 54 jeweils verbindet, die gelockerten Transaktions-Reihenfolge-Regeln
folgen. Insbesondere arbeitet die Brücke 50 so, dass Transaktionen
zwischen der CPU 58 und der PCI-Vorrichtung 60 („Vorrichtung A") nur in Bezug auf
andere Transaktionen zwischen diesen zwei Vorrichtungen geordnet
sind, ohne Berücksichtigung
der chronologischen Beziehung zwischen diesen Transaktionen und
Transaktionen, die zwischen der CPU 58 und der PCI-Vorrichtung 62
(„Vorrichtung
B") auftreten.
-
Die Brücke 50 erzielt eine gelockerte
Transaktions-Reihenfolge durch Beibehalten von zwei identischen
Sätzen
von Puffern 64 und 66, oder „Warteschlangenblöcke", und zwar für jedes
PCI-Vorrichtungs- „Paar", das über die
Brücke
50 arbeiten kann. Zum Beispiel speichert der Warteschlangenblock
64 temporär
Transaktionen, die zwischen der CPU 58 und der Vorrichtung A 60
auftreten, während ein
Warteschlangenblock 66 temporär
Transaktionen speichert, die zwischen der CPU 58 und der Vorrichtung
B 62 auftreten. Die Brücke
50 wird einen zusätzlichen
Warteschlangenblock für
jede andere PCI-Vorrichtung
auf dem sekundären
PCI-Bus 54 umfassen. Die Brückenvorrichtung
50 behandelt die CPU 58 und den Speicher 59 als eine einzelne Vorrichtung auf
dem primären
PCI-Bus 52. Die Puffer in den Warteschlangenblöcken 64 und 66 müssen nicht
permanent den sekundären
PCI-Schlitzen zugeordnet sein, sondern können anstelle davon dynamisch
zugeordnet werden, z. B. bei einem System-Start.
-
Jeder Warteschlangenblock 64 und
66 vennraltet Transaktionen, die zwischen dem primären PCI-Bus
52 und den Vorrichtungen 60 und 62 auf dem sekundären PCI-Bus
54 fließen.
Die Warteschlangenblöcke
64 und 66 sind ähnlich,
weshalb nur der Warteschlangenblock 64 nachfolgend beschrieben wird.
Der Warteschlangenblock 66 (und irgendwelche anderen Warteschlangenblöcke, die
in der Brückenvorrichtung
52 vorhanden sein können)
funktionieren ähnlich.
Jeder Warteschlangenblock gleicht dem Warteschlangenblock, der in
der US-Patentanmeldung 08/655,254, angemeldet am 05. Juni 1996 durch
John MacLaren und AIan Goodrum, und hier unter Bezugnahme darauf
insgesamt eingeschlossen, dargestellt und beschrieben ist.
-
Jeder Warteschlangenblock 64 enthält drei eingangsseitige
Warteschlangen 70, 72 und 74, die Informationen speichern, die eingangsseitig
fließen (d.h.
von der entsprechenden PCI-Vorrichtung 60 auf dem sekundären PCI-Bus
54 zu der CPU 58), und drei ausgangsseitige Warteschlangen 76, 78
und 80, die Informationen speichern, die ausgangsseitig fließen (d.h.
von der CPU 58 zu der entsprechenden PCI-Vorrichtung 60). Der Warteschlangenblock
64 umfasst auch zwei Zyklus-Entscheidungseinrichtungen 82 und 84
und zwei Warteschlangen-Block-zu-PCI-(QPIF)-Schnittstellen 86 und
89, die den Fluss von Informationen heraus aus irgendeiner der eingangsseitigen
oder ausgangsseitigen Warteschlange verwalten, wie dies nachfolgend
beschrieben ist.
-
Die erste, ausgangsseitige Warteschlange, eine
gepostete Speicher-Schreib-Warteschlange
76, speichert gepostete Speicher-Schreib-Zyklen, herausgegeben durch
die CPU 58 auf dem primären
Bus 52 zusammen mit allen Informationen, die dazu erforderlich sind,
jeden Zyklus auf dem sekundären
Bus 54 auszuführen.
Die PMWQ 76 besitzt vier Transaktionspuffer, wobei jeder davon eine
gepostete Speicher-Schreib-Transaktion hält, die bis zu acht Cache-Zeilen
(256 Bytes) an Daten enthält.
Die eingangsseitige PMWQ 70 speichert gepostete Speicher-Schreib-Zyklen,
herausgegeben durch die PCI-Vorrichtung
60, auf dem sekundären
Bus 54 und arbeitet ähnlich
zu der ausgangsseitigen PMWQ 76. Die PMWQs 70 und 76 sind in weiterem
Detail in der US-Patentanmeldung 08/655,254, angemeldet am 05. Juni
1996, beschrieben.
-
Die zweite, ausgangsseitige Warteschlange, eine
verzögerte
Anforderungs-Warteschlange
(delayed request queue – DRQ)
78, speichert verzögerte Anforderungs-Transaktionen (d.
h. verzögerte
Lese-Anforderungen (delayed read requests – DRR), wie beispielsweise
ein Speicher-Lesen (memon read – MR),
eine Speicher-Lesezeile (memon read line – MRL), Speicher-Lese-Mehrfach-
(memon read multiple – MRM)
Anforderungen; und Eingangs/Ausgangs-(I/O)-Lese/Schreibvorgänge und
Konfigurations-(config)-Lese/Schreibvorgänge), herausgegeben
durch die CPU 58 auf dem primären
Bus 52, zusammen mit allen Informationen, die erforderlich sind,
um jede Transaktion auf dem sekundären Bus 54 auszuführen. Die
DRQ 78 besitzt drei Transaktionspuffer, wobei jeder davon in der
Lage ist, ein Doppelwort oder „dword", an Daten für verzögerte Schreibvorgänge zu halten.
In ähnlicher
Weise speichert die eingangsseitige DRQ 72 verzögerte Anforderungs-Transaktionen,
herausgegeben durch die PCI-Vorrichtung 60 auf dem sekundären Bus
64; und funktioniert ähnlich
zu der ausgangsseitigen DRQ 78. Die DRQs 72 und 78 sind in weiterem
Detail in der US-Patentanmeldung 08/655,254, angemeldet am 5. Juni
1996, beschrieben.
-
Die dritte, ausgangsseitige Warteschlange, eine
verzögerte
Abschluss-Warteschlange
(delayed completion queue – DCQ)
80, speichert verzögerte Abschluss-Informationen, geliefert
durch die CPU 58, in Abhängigkeit
von Anforderungs-Transaktionen,
erzeugt durch die PCI-Vorrichtung 60. Für eine verzögerte Leseanforderung enthalten
die entsprechenden Abschluss-Informationen die Lese-Daten, angefordert
durch die initiierende Vorrichtung, und den Lese-Status (d. h. eine
Anzeige darüber,
ob ein Paritäts-Fehler
oder eine Target-Aussonderung aufgetreten ist). Die verzögerten Abschluss-Informationen, zurückgeführt für eine verzögerte Schreib-Transaktion,
sind dieselben wie diejenigen, die für eine verzögerte Leseanforderung zurückgeführt sind,
mit der Ausnahme, dass keine Daten für verzögerte Schreibprogramme zurückgeführt sind.
-
Die DCQ 80 besitzt acht Abschluss-Pufer, wobei
jeder davon bis zu acht Cache-Zeilen
von Abschluss-Informationen für
eine einzelne, verzögerte Anforderung
halten kann. Zusätzlich
zu den Abschluss-Informationen speichert jeder Abschluss-Puffer
auch eine Kopie der verzögerten
Anforderung, die die Informationen erzeugte. Diese Kopie der verzögerten Anforderung
wird dazu verwendet, zu bestimmen, wann eine darauffolgende Anforderung
durch die herausgebende PCI-Vorrichtung ein erneuter Versuch der
gespeicherten Anforderung ist. Falls eine darauffolgende Anforderung
die gespeicherte Anforderung anpasst und der Abschluss-Puffer die
angeforderten Daten enthält,
liefert die DCQ 80 die Abschlussdaten zu der anfordernden Vorrichtung.
-
Ähnlich
speichert die eingangsseitige DCQ 74 verzögerte Abschluss-Informationen,
geliefert durch die PCI-Vorrichtung 60, in Abhängigkeit von verzögerten Anforderungen
von der CPU 58. Da I/O- und Config-Lese/Schreibvorgänge nur
auf dem ausgangsseitigen Bus auftreten, kann nur die eingangsseitige
DCQ 74 verzögerte
Abschluss-Informationen enthalten, die einer dieser Transaktionen
entsprechen.
-
Falls eine der DCQs 74 oder 80 bestimmt, dass
einer deren Pufferdaten enthält,
die für
eine anfordernde Vorrichtung vorgesehen sind, allerdings unterschiedlich
als die Daten, die in der momentanen Transaktion angefordert sind,
sind, kann der Puffer geleert werden, um zu verhindern, dass die
anfordernde Master-Vorrichtung verbrauchte bzw. veraltete Daten
empfängt.
Der Puffer wird geleert, wenn er Prefetch-Daten enthält (d.h.
Daten, die in dem Puffer verbleiben, nachdem die anfordernde Vorrichtung
einige der Da ten aufgesucht hat, oder Daten, die nicht spezifisch
durch die Vorrichtung angefordert wurden), wird allerdings nicht
gelöscht,
wenn er Abschlussdaten enthält
(d.h. Daten, die spezifisch durch eine Vorrichtung angefordert sind,
die bis jetzt noch nicht dazu zurückgekehrt ist, sie zu empfangen).
Falls der Puffer Abschlussdaten enthält und die anfordernde Vorrichtung
eine Anforderung ausgegeben hat, die nicht den Puffer „trifft", markiert die DCQ 144
die Vorrichtung als eine „multi-threaded" Vorrichtung, d.h.
eine solche, die in der Lage ist, mehr als eine Transaktion auf
einmal beizubehalten), und ordnet einen anderen Abschluss-Puffer
der neuen Anforderung zu.
-
Jeder Puffer in den DCQs 74 und 80
läuft durch
verschiedene Zustände,
wenn die Daten hindurchführen.
Der Puffer befindet sich in einem „leeren" Zustand, wenn er keine Daten enthält, in einem „vervollständigten" Zustand, wenn er
Daten enthält, die
spezifisch durch die initiierende Vorrichtung angefordert sind,
und in einem „Prefetch" Zustand, wenn er
Daten enthält,
die nicht spezifisch angefordert wurden, sondern durch die Brückenvorrichtung 52
vorab abgerufen wurden (z. B. nachdem die initiierende Vorrichtung
alle angeforderten Daten von dem Puffer aufgesucht hat und ihr „frame " Signal aufgestellt
beibehält,
was anzeigt, dass sie mehr Daten wünscht). Die DCQs 74 und 78
werden in weiterem Detail in der US-Patentanmeldung 08/655,254, angemeldet
am 05. Juni 1996, beschrieben.
-
Jede Master-Zyklus-Entscheidungseinrichtung
(master cycle arbiter – MCA)
82 und 84 in dem Warteschlangenblock 64 behält Reihenfolgenbeschränkungen
zwischen einer geposteten Speicher-Schreib-, einer verzögerten Anforderungs-
und einer verzögerten
Abschluss-Transaktion in entweder den ausgangsseitigen Warteschlangen
oder den eingangsseitigen Warteschlangen bei. Die gelockerten Reihenfolge-Beschränkungen
sind ähnlich
zu solchen, die in der PCI-Bridge Architecture Specification, Version
2.1, angegeben sind, mit Ausnahme, dass die strikte Reihenfolge
nur zwischen Transaktionen beibehalten wird, die dasselbe Paar von
Vorrichtungen einsetzen (d. h. Transaktionen zwischen der CPU 58
und der PCI-Vorrichtung 60 werden nur in Bezug auf andere Transaktionen
zwischen diesen zwei Vorrichtungen geordnet). Diese Reihenfolgen-Beschränkungen
erfordern, dass Bus-Zyklen eine strenge Schreib-Reihenfolge beibehalten,
und dass gegenseitige Blockierungen nicht auftreten. Deshalb bestimmt
jede MCA 82 oder 84 die Reihenfolge, in der gepostete Speicher-Schreib-Transaktionen
in der entsprechenden PMWQ 70 oder 76 unverzögerte Anforderungs-Transaktionen
in der entsprechenden DRQ 72 oder 78 auf dem entsprechenden PCI-Bus
52 oder 54 laufen. Jede MCA 82 oder 84 steuert auch die Verfügbarkeit
von verzögerten
Abschluss-Informationen, gespeichert in der entsprechenden DCQ 74
oder 80. Um ein Übereinstimmen mit
diesen Regeln sicherzustellen, gibt die ausgangsseitige MCA 84 jedem
geposteten Speicher-Schreib-Zyklus eine Gelegenheit, früher ausgegebene,
verzögerte
Anforderungs-Zyklen im Bypass zu passieren, während sowohl der ausgangsseitige als
auch der eingangsseitige MCA 82 und 84 jeweils keine verzögerten Anforderungs-
und verzögerten Abschluss-Zyklen
zulassen, um an früher
herausgegebenen, geposteten Speicher-Schreib-Zyklen im Bypass vorbei
zu führen.
-
Wie auch 3 zeigt, verwendet jeder MCA 82 oder
84 zwei Transaktions-Warteschlangen,
eine Transaktions-Lauf-Warteschlange (transaction run queue – TRQ) (oder
Transaktions-Ausführungs-Warteschlangen)
200 und eine Transaktions-Reihenfolge-Warteschlange
(transaction order queue – TOQ) 202,
um Zyklen, die in der entsprechenden PMWQ, DRQ und DCQ in die Warteschlange
gestellt sind, zu venivalten. Ein MCA-Steuerblock 204 empfängt Transaktionen
von der PMWQ, DRQ und DCQ und gibt Laufbefehle aus. Die Transaktionen
werden in die TRQ 200 und die TOQ 202 durch einen TRQ-Steuerblock
206 und einen TOQ-Steuerblock 208 hinein und daraus heraus, jeweils,
bewegt.
-
Die TRQ 200 ist die Warteschlange,
von der die MCA die Transaktions-Ausführungs-Reihenfolge bestimmt.
Transaktionen in der TRQ 200 können
in irgendeiner Reihenfolge ausgeführt werden, ohne die Transaktions-Reihenfolge-Regeln
zu verletzen, allerdings kann, wenn einmal ein geposteten Speicher-Schreib-Zyklus
in der TRQ 200 platziert ist, kein anderer Zyklus in der TRQ 200
platziert werden, bis der gepostete Spei- cher-Schreibvorgang entfernt
ist. Transaktionen in der TRQ 200 werden in einer zirkularen Reihenfolge
versucht und werden allgemein in der Reihenfolge abgeschlossen,
in der sie empfangen wurden. Allerdings kann, falls eine Transaktion
in der TRQ 200 erneut auf dem PCI-Bus versucht wird, die MCA 82
oder 84 die nächste
Transaktion in der TRQ 200, die auf dem PCI-Bus versucht werden
soll, auswählen.
Verzögerte
Abschluss-Transaktionen werden niemals in der TRQ 200 platziert,
da sie Slave-Zyklen, im Gegensatz zu Master-Zyklen, sind. 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
Ab schluss-Transaktionen in der TOQ 202 nur dann platziert, wenn
ein geposteter Speicher-Schreib-Zyklus in
der TRQ 200 anhängig
ist.
-
Die TRQ 200 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 geforderten Reihenfolgen-Beschränkungen
zu bewahren, kann die TRQ 200 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, passiert
werden können.
-
Die TOQ 202 ist eine first-in-first-out
(FIFO) Warteschlange, die die historische Reihenfolge von Transaktionen
beibehält,
empfangen durch die Brücke,
nachdem eine gepostete Speicher-Schreib-Transaktion in der TRQ 200
platziert ist. Da alle Transaktionen auf früher herausgegebene, 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 202 platziert, wenn ein geposteter Speicher-Schreibvorgang
in der TRQ 200 in die Warteschlange gestellt ist. Transaktionen
in der TOQ 202 müssen
in der TOQ 202 verbleiben, bis die gepostete Speicher-Schreib-Transaktion
von der TRQ 200 entfernt ist. Die TOQ 202 kann bis zu drei gepostete Speicher-Schreib-Transaktionen
(die vierte wird in der TRQ 200 gespeichert werden), drei verzögerte Anforderungs-Transaktionen
und vier verzögerte
Abschluss-Transaktionen
halten. Die MCAs 82 und 84, umfassend die TRQ 200, die TOQ 202 und
Steuerblöcke
204, 206 und 208, sind in weiterem Detail in der US-Patentanmeldung
08/655,254, angemeldet am 5. Juni 1996, beschrieben.
-
Eine eingangsseitige Warteschlange-zu-PCI-Schnittstelle
(QPIF) 86 verwaltet Transaktionen, die von den eingangsseitigen
Warteschlangen 70, 72 und 74 zu dem primären PCI-Bus 52 und von dem
primären
PCI-Bus 52 zu der ausgangsseitigen DCQ 80 fließen. Die QPIF 86 tritt in einen „Master" Mode ein, um gepostete
Speicher-Schreib- und verzögerte
Anforderungs-Transaktionen von der PMWQ 70 und der DRQ 72 auf dem
primären
Bus 52 laufen zu lassen. Die QPIF 86 tritt in einen „Slave" Mode ein, um Daten
von der eingangsseitigen DCQ 74 zu der CPU 58 zu liefern oder Transaktionen
von dem primären
PCI-Bus 52 zu der ausgangsseitigen DCQ 80 zu schicken.
-
Wenn die QPIF 86 eine gepostete Schreib-Transaktion
von dem Bus 52 empfängt,
führt sie
die Transaktion zu der ausgangsseitigen PMWQ 76 weiter, falls ein
entsprechender einer einer Gruppe von Transaktions-Zählern 88
anzeigt, dass die ausgangsseitige PMWQ 76 nicht voll ist. Wenn die QPIF
86 eine verzögerte
Anforderung empfängt, führt sie
zuerst die Anforderung zu der DCQ 74 weiter, um zu bestimmen, ob
die Transaktion bereits in der eingangsseitigen DCQ 74 platziert
worden ist, und, falls dies der Fall ist, ob die entsprechenden, verzögerten Abschluss-Informationen
durch die PCI-Vorrichtung 60 zurückgeführt worden
sind. Falls die verzögerten
Abschluss-Informationen in der eingangsseitigen DCQ 74 vorhanden
sind, werden die Informationen zu der CPU 58 geliefert und die Transaktion
wird beendet. Falls die Anforderung bereits in die Warteschlange
gestellt ist, allerdings die verzögerte Abschluss-Informationen
noch nicht zurückgeführt worden
sind, wird die CPU 58 erneut versucht und die Transaktion wird auf
dem primären
PCI-Bus 52 beendet. Falls die Transaktion bis jetzt noch nicht in
die Warteschlange gestellt ist, reserviert die eingangsseitige DCQ
74 einen Abschluss-Puffer für
die Transaktion und die QPIF 86 führt die Transaktion zu der
ausgangsseitigen DRQ 78 weiter, solange wie der entsprechende eine
der Transaktions-Zähler
88 anzeigt, dass die ausgangsseitige DRQ 78 nicht voll ist. Die
ausgangsseitige QPIF 89 funktioniert ähnlich zu der eingangsseitigen
QPIF 86. Die QPIFs 86 und 89 sind in weiterem Detail in der US-Patentanmeldung 08/655,254,
angemeldet am 5. Juni 1996, beschrieben.
-
Die Transaktionszähler 88 behalten eine Zählung über die
Zahl von Transaktionen, die in der eingangsseitigen und der ausgangsseitigen
Warteschlange jeweils in die Warteschlange gestellt sind, bei. Ein
geposteter Speicher-Schreib-(Posted Memon Write – PMW)-Zähler zeigt die Zahl von PMW-Transaktionen
an, die in der entsprechenden, geposteten Speicher-Schreib-Warteschlange
gehalten sind. Der PMW-Zähler
wird zu jedem Zeitpunkt erhöht,
zu dem eine PMW-Transaktion zu der entsprechenden PMWQ geschickt
ist. Der Zähler
wird zu jedem Zeitpunkt erniedrigt, zu dem ein PMW-Zyklus auf dem
entsprechenden PCI-Bus abgeschlossen worden ist. In ähnlicher
Weise zählt
ein verzögerter Anforderungs-(Delayed
Request – DR)-Zähler die Zahl
von DR-Transaktionen, gehalten in der entsprechenden, verzögerten Anforderungs-Warteschlange. Ein
verzögerter
Abschluss-(Delayed Completion – DC)-Zähler zählt die
Zahl von verzögerten
Abschlüssen,
die in den entsprechenden Master-Zyklus-Arbitrierer in die Warteschlange
gestellt sind.
-
Die Transaktions-Zähler sind
in weiterem Detail in der US-Patentanmeldung 08/655,254, angemeldet
am 5. Juni 1996, beschrieben.
-
Die Brückenvorrichtung 52 umfasst
eine eingangsseitige und eine ausgangsseitige PCI-Schnittstellen-Vorrichtung
90 und 92 jeweils. Die eingangsseitige PCI-Schnittstelle 90 ermöglicht der
Brückenvorrichtung
50, mit den Vorrichtungen (d.h. der CPU 58 und dem Hauptspeicher
59) auf dem primären Bus
52 zu kommunizieren, und die ausgangsseitige PCI-Schnittstelle 92
ermöglicht
der Brückenvorrichtung
50, mit den Vorrichtungen (d.h. der Vorrichtung A 60 und der Vorrichtung
B 62) auf den sekundären Bus
54 zu kommunizieren.
-
Wenn die CPU eine Steuerung des primären Busses übernimmt
und eine Transaktion initiiert, wird die eingangsseitige PCI-Schnittstelle
90 eine PCI-Slave-Vorrichtung. Die Schnittstelle 90 verriegelt den
PCI-Befehl, die -Adresse und die -Daten in Daten- und Adressen-Verriegelungen
94 und 95. Die Schnittstelle 90 bestimmt dann, welche der ausgangsseitigen
PCI-Vorrichtungen 60 und 62 das Target der Transaktion sind. Indem
dies so vorgenommen wird, vergleicht die Schnittstelle die Speicher-Adresse,
geliefert durch die CPU 58, mit den Adressen in den Ziel-Basis-Adressen-Registern (Ghost
BARs) 96 in der Brückenvorrichtung
50. (Die Ghost BARs 96 werden durch ein Snooping der Basis-Adressen-Register
(BARs), erzeugt durch POST bei einem Start, erzeugt. Jedes Paar
von BARs listet einen PCI-Schlitz zu einem Block eines Speichers auf,
und die Ghost BARs enthalten Kopien dieser Auflistungen.) Die PCI-Schnittstelle
90 nimmt an, dass die CPU 58 der Master aller ausgangsseitigen Transaktionen
ist.
-
Wie auch 4A zeigt, verwendet eine eingangsseitige
Zyklus-Entscheidungseinrichtung
100 ein „Level
1" Round-Robin-Schema
105, um den Warteschlangenblock 64 oder 66 auszuwählen, von dem
aus eine eingangsseitige Transaktion auf dem primären Bus
52 laufen sollte. Die Entscheidungseinrichtung 100 wählt zuerst
den Warteschlangenblock 64 entsprechend der Vorrichtung A 60 (Zustand
102) aus. Die Entscheidungseinrichtung 100 wählt dann die Warteschlange
66 entsprechend zu Vorrichtung B 62 aus, und falls irgendeine der
anderen PCI-Vorrichtungen mit dem sekundären Bus 54 verbunden ist, wählt die
Entscheidungseinrichtung 100 progressiv die Warteschlangen entsprechend
zu diesen Vorrichtungen aus. Falls einer der Warteschlangenblöcke 64 und
66 keine Transaktion enthält,
um sie laufen zu lassen, überspringt
die Entscheidungseinrichtung 100 den entsprechenden Zustand in deren Round-Robin-Schema
105. Falls die Transaktion von dem ausgewählten Warteschlangenblock erneut
versucht wird, bewegt sich die Entscheidungseinrichtung 100 zu dem
nächsten
Zustand in dem Round-Robin-Schema
105.
-
Wie die 4B zeigt, enthält PCI Spec 2.1 eine „brigde
inferface priority" („Brücken-Schnittstellen-Priorität") Regel, die vorsieht,
dass dann, wenn sowohl der primäre
als auch der sekundäre
Bus eine Transaktion gleichzeitig initiieren, die Entscheidungseinrichtung
100 der ausgangsseitigen Transaktion eine Priorität geben
muss. Allerdings kann, in einigen Brücken, die ein Schreib-Posting
zulassen, dieses Erfordernis zu einem gegenseitigen Blockieren führen, falls
eine ausgangsseitige Vorrichtung einen Schreibvorgang zu derselbert
Zeit postet, zu der die CPU eine Leseanforderung zu der ausgangsseitigen Vorrichtung
ausgibt. In dieser Situation würde
die Brücke
50 instruiert werden, sowohl den geposteten Schreibvorgang vor einem
Abschluss irgendwelcher verzögerten
Anforderungen für
dieselbe Vorrichtung abzuschließen
als auch den ausgangsseitigen Lesevorgang vor einem Abschluss irgendwelcher
Transaktionen, gleichzeitig herausgegeben durch einen ausgangsseitigen
Master, abzuschließen.
-
Um zu verhindern, dass ein gegenseitiges Blockieren
auftritt, muss die Ausgangsseiten-Zyklus-Entscheidungseinrichtung
in einigen Ausführungsformen
zu einem „Level
II" Arbitrierungs-Schema
108 umschalten, falls dieser Zustand auftritt. In dem Level II Schema
108 erhöht
die Entscheidungseinrichtung 100 die Priorität der gleichzeitig herausgegebenen,
geposteten Schreib-Transaktion bei einem Versuch, die Transaktion
schneller abzuschließen
(Zustand 110). Nachdem die eingangsseitige Schnittstelle 90 versucht,
die gepostete Schreib-Transaktion auf dem primären Bus 52 laufen zu lassen,
kehrt die Entscheidungseinrichtung 100 zu dem „Level 1" Arbitrierungs-Schema 105 der 4A zurück, um auszuwählen, die
nächste
Transaktion laufen zu lassen. Falls die gepostete Schreib-Transaktion nicht
erfolgreich auf dem primären
Bus 52 lief, kehrt die Entscheidungseinrichtung 100 zu dem Level
II Arbitrierungs-Schema 108 nach einem Auswählen einer Transaktion von
dem Level 1 Schema 105 zurück
(d.h. die Entscheidungseinrichtung 100 fährt in dem Level II Schema
108 fort, bis die gepostete Schreib-Transaktion erfolgreich abschließt).
-
Wie wiederum 2 zeigt, arbeitet die ausgangsseitige
PCI-Schnittstelle 92 ähnlich
zu der eingangsseitigen PCI-Schnittstelle 90, mit ein paar Ausnahmen.
Zuerst wird, im Gegensatz zu der eingangsseitigen Zyklus-Entscheidungseinrichtung
100, die ausgangs seitige Zyklus-Entscheidungseinrichtung 116 niemals
ein Zwei-Level-Arbitrierungs-Schema verwenden,
da die ausgangsseitige PCI-Schnittstelle 92 nicht Gegenstand der „Brücken-Schnittstellen-Priorität" Regel ist. Als zweites
nimmt die ausgangsseitige Schnittstelle 92 immer an, dass die CPU
58 die Ziel-Vorrichtung ist, und die nicht auf den Ghost BARs 96
beruhen muss, um zu bestimmen, welche PCI-Vorrichtung 60 oder 62
die Master-Vorrichtung ist. Anstelle davon überwacht die ausgangsseitige Schnittstelle
92 die REQ- und GNT-Leitungen in der PCI- Entscheidungseinrichtung
114, um zu bestimmen, welche der Vorrichtungen 60 und 62 auf dem sekundären PCI-Bus
54 die Master-Vorrichtung
ist, und deshalb welcher Warteschlangenblock 64 oder 66 die Transaktion
empfangen sollte.
-
Andere Ausführungsformen liegen innerhalb des
Schutzumfangs der nachfolgenden Ansprüche. Zum Beispiel kann, unter
Bezugnahme auf 5, die PCI-zu-PCI-Brückenvorrichtung
einen Satz von bidirektionalen Transaktions-Warteschlangen 120a, 120b
für jedes
PCI-Vorrichtungs-Paar anstelle von zwei Sätzen von unidirektionalen Warteschlangen pro
Paar umfassen. Die Endung kann auch in Nicht-PCI-Architekturen und
in PCI-Architekturen, die nicht der PCI-Spec. 2.1 oder PCI Bridge
Spec. 1.0 folgen, ausgeführt
werden.