-
1. Technisches
Gebiet
-
Diese
Erfindung betrifft die Eingabe/Ausgabe für ein Computersystem und betrifft
insbesondere die Handhabung peripherer Transaktionen in einem Eingabe/Ausgabe-Knoten.
-
2. Hintergrund der Erfindung
-
In
einem typischen Computersystem kommunizieren ein oder mehrere Prozessoren
mit Eingabe/Ausgabe- (I/O)-Einrichtungen über einen oder mehrere Busse.
Die I/O-Einrichtungen
können
mit den Prozessoren über
eine I/O-Brücke
gekoppelt sein, die den Datenaustausch zwischen einem peripheren
Bus, der mit den I/O-Einrichtung verbunden ist, und einem gemeinsam
benutzten Bus erweitert, der mit den Prozessoren verbunden ist.
Des weiteren kann die I/O-Brücke
den Datenaustausch zwischen einem Speichersystem und den I/O-Einrichtungen oder
dem Systemspeicher und den Prozessoren verwalten.
-
Viele
Bussysteme weisen einige Nachteile auf. Beispielsweise erzeugen
viele Geräte,
die an einem Bus angeschlossen sind, ein relativ große elektrische
Kapazität
für Geräte, die
Signale auf den Bus einspeisen. Des weiteren erzeugen viele Ankopplungspunkte
auf einem gemeinsam genutzten Bus Signalreflektionen bei hohen Signalfrequenzen,
die die Signalintegrität
beinträchtigen.
Folglich werden Signalfrequenzen auf dem Bus im Allgemeinen relativ
gering gehalten, um die Signalintegrität auf einem akzeptablen Niveau
zu halten. Die relativ geringen Signalfrequenzen reduzieren die
Signalbandbreite und begrenzen damit das Leistungsverhalten der
an den Bus angeschlossenen Einrichtungen.
-
Das
Fehlen einer Anpassbarkeit an eine größere Anzahl an Einrichtungen
ist ein weiterer Nachteil gemeinsamer Bussysteme. Die verfügbare Bandbreite
eines gemeinsam genutzten Busses ist im Wesentlichen festgelegt
(und kann abnehmen, wenn das Hinzufügen weiterer Geräte eine
Reduzierung der Signalfrequenzen auf dem Bus hervorruft). Sobald
die Bandbreiteerfordernisse der an den Bus angeschlossenen Einrichtungen
(entweder direkt oder indirekt) die verfügbare Bandbreite des Busses übersteigen,
werden Geräte
häufig
in ihrer Funktion unterbrochen, wenn ein Zugriff auf den Bus versucht
wird, und das Gesamtleistungsverhalten des Computersystems mit dem
gemeinsam benutzten Bus wird in aller Regel verringert. Ein Beispiel
eines gemeinsam genutzten Busses, der von I/O- Einrichtungen verwendet wird, ist ein
peripherer Kompontentenverbindungs- (PCI) Bus oder ein erweiterter
PCI- (PCI-X) Bus.
-
In
vielen I/O-Brückeneinrichtungen
wird ein Zwischenspeichermechanismus angewendet, um eine Reihe von
anhängigen
Transaktionen von dem PCI-Bus für
einen endgültigen
Zielbus zu puffern. Jedoch kann das Zwischenspeichern Funktionsunterbrechungen
auf dem PCI-Bus hervorrufen. Funktionsunterbrechungen können hervorgerufen
werden, wenn eine Reihe Transaktionen in einer Warteschlange gepuffert
werden, um auf das Weiterleiten zu einem Zielbus zu warten, und
eine Funktionsunterbrechung in dem Zielbus auftritt, wodurch der
Fortgang der Weiterleitung unterbrochen wird. Sodann trifft eine
Transaktion, die die Beendigung der wartenden Transaktionen ermöglicht,
an der Warteschlange ein und wird hinter den anderen Transaktionen
gespeichert. Um die Funktionsunterbrechung aufzulösen, müssen die
Transaktionen in der Warteschlange irgendwie umgeordnet werden,
so dass die neu eingetroffene Transaktion vor den anhängigen Transaktionen
gesendet wird. Um damit Situationen wie zuvor zu verhindern, schreibt
die PCI-Busspezifikation eine Reihe von Umordnungsregeln vor, die
die Handhabung und die Aneinanderordnung von PCI-Bustransaktionen regeln.
-
Um
einige der Nachteile eines gemeinsam genutzten Busses zu überwinden,
werden in einigen Computersystemen paketbasierte Kommunikationsabläufe zwischen
Geräten
oder Knoten angewendet. In derartigen Systemen können Knoten miteinander durch
Austausch von Informationspaketen kommunizieren. Im Allgemeinen
ist ein „Knoten
bzw. Knotenpunkt" eine
Einrichtung, die in der Lage ist, an Transaktionen bei Vorhandensein
einer Verbindung teilzunehmen. Beispielsweise kann die Verbindung
paketbasiert sein, und der Knoten kann ausgebildet sein, Pakete
zu empfangen und zu senden. Im Allgemeinen ist ein „Paket" eine Kommunikation
zwischen zwei Knoten: ein iniziierender oder "Quellen"-Knoten, der
ein Paket sendet, und ein Bestimmungs- oder „Ziel"-Knoten, der das Paket empfängt. Wenn
ein Paket den Zielknoten erreicht, nimmt der Zielknoten die von
dem Paket transportierte Information auf und verarbeitet die Information
intern. Ein Knoten, der auf einem Kommunikationsweg zwischen dem
Quellenknoten und dem Zielknoten angeordnet ist, kann das Paket
von dem Quellenknoten zu dem Zielknoten weiterreichen oder weiterleiten.
-
WO-A-9814015
offenbart eine serielle I/O-Steuerung mit mehreren Kanälen, in
der jeder Kanal mehrere virtuelle Sendewege und Empfangswege aufweist.
Pakete, die von den Kanälen
empfangen werden, werden über
einen internen Bus zu einem Prozessor weitergeleitet.
-
Ferner
gibt es Systeme, die eine Kombination aus paketbasierter Kommunikation
und busbasierter Kommunikation verwenden. Beispielsweise kann ein
System mit einem PCI-Bus und einem Graphikbus, etwa einem AGP, verbunden
sein. Der PCI-Bus kann mit einer Paketbusschnittstelle verbunden
sein, die dann die PCI-Transaktionen in Pakettransaktionen zum Senden über einen
Paketbus übersetzt.
In gleicher Weise kann der Graphikbus mit einer AGP-Schnittstelle
verbunden sein, die die AGP-Bustransaktionen in Pakettransaktionen übersetzt.
Jede Schnittstelle kann mit einer Host-Brücke, die mit einem der Prozessoren
verbunden ist, oder in einigen Fällen
mit einer anderen peripheren Einrichtung kommunizieren.
-
In
PCI-Einrichtungen, die Transaktionen initiieren, können die
paketbasierten Transaktionen durch einige Regeln für die Reihenfolge,
wie sie durch die PCI-Lokalbusspezifikationen vorgegeben sind, beschränkt sein.
Das gleiche gilt für
Pakettransaktionen, die für
den PCI-Bus bestimmt
sind. Diese Regeln für
die Reihenfolge werden in den paketbasierten Transaktionen weiterhin
befolgt, da Transaktionsunterbrechungen, die an einer Paketbusschnittstelle
auftreten können,
einen Stillstand auch an dieser Paketbusschnittstelle hervorrufen
können.
Dieser Stillstand kann weitere Unterbrechungen bis hinein in das
Paketbusnetz verursachen. Ferner können AGP-Transaktionen auf
einen Satz aus Transaktionsreihenfolgeregelungen folgen, um eine
korrekte Zulieferung von Daten zu gewährleisten.
-
Abhängig von
der Konfiguration der I/O-Knoten können Transaktionen über einen
Knoten zu einem weiteren Knoten oder in einer Richtung zur Host-Brücke oder
weg von der Host-Brücke geleitet werden.
Alternativ können
Transaktionen in den Paketverkehr an einem speziellen Knoten mittels
einem peripheren Bus eingespeist werden, der lokal mit diesem Knoten
verbunden ist. In jedem Falle kann eine periphere Schnittstellenschaltung,
die die peripheren Transaktionen speichert und steuert, wenn die
Transaktionen in den Kommunikationsweg eingespeist oder von dem
Kommunikationsweg aufgenommen werden, vorteilhaft sein.
-
Überblick über die
Erfindung
-
Gemäß einem
Aspekt der Erfindung wird eine periphere Schnittstellenschaltung
gemäß Anspruch
1 bereitgestellt. Weitere Ausführungsformen sind
in den abhängigen
Ansprüchen
beschrieben.
-
Kurze Beschreibung
der Zeichnungen
-
1 ist
eine Blockansicht einer Ausführungsform
eines Computersystems.
-
2 ist
eine Blockansicht einer Ausführungsform
eines Eingabe/Ausgabe-Knotens.
-
3 ist
eine Blockansicht einer Ausführungsform
einer peripheren Schnittstellenschaltung.
-
4 ist
eine Blockansicht einer Ausführungsform
einer Pufferschaltung für
wiederholtes Absenden nicht aufgegebener Pakete.
-
5 ist
ein Flussdiagramm, das die Handhabung einer Teilantwortkennung in
einer Ausführungsform
einer peripheren Schnittstellenschaltung beschreibt.
-
6 ist
eine Blockansicht einer Ausführungsform
einer Pufferschaltung mit einer FIFO-Struktur mit Speicherfähigkeit.
-
7 ist
ein beispielhaftes Diagramm einer Ausführungsform einer Steuerschaltung
und einer Speichereinheit.
-
8 ist
ein Flussdiagramm, das die abwärtsgerichtete
Antworttransaktionsumordnungsfunktion einer Ausführungsform einer peripheren Schnittstellenschaltung
zeigt.
-
9 ist
ein Flussdiagramm, das die Aufteilungsantwortfunktion einer Ausführungsform
einer peripheren Schnittstellenschaltung zeigt.
-
10 ist
eine Blockansicht einer Ausführungsform
einer peripheren Schnittstellenschaltung zur Anbindung an einen
Graphikbus.
-
11 ist
eine Ansicht einer Ausführungsform
einer peripheren Schnittstellenschaltung zur Handhabung von Graphikantworten.
-
12 ist
eine Ansicht einer Ausführungsform
einer Vorrichtung zum Umordnungen von Graphikantworten.
-
13 ist
ein Flussdiagramm, das die Funktion einer Ausführungsform einer Transaktionsumordnungseinrichtung
für Graphikantworten
zeigt.
-
Obwohl
die Erfindung diversen Modifizierungen und alternativen Formen unterliegen
kann, sind dennoch spezielle Ausführungsformen beispielhaft in den
Zeichnungen dargestellt und werden hierin detailliert beschrieben.
-
Art bzw. Arten zum Ausführen der
Erfindung
-
1 zeigt
eine Blockansicht einer Ausführungsform
eines Computersystems. Das Computersystem umfasst Prozessoren 10A und 10B,
die jeweils durch einen kohärenten
Paketbus 15 verbunden sind. Jeder Abschnitt des kohärenten Paketbusses 15 kann
eine Punkt-zu-Punkt-Verbindung
zwischen jedem der Prozessoren 10A bis D bilden. Obwohl
vier Prozessoren gezeigt sind, die Punkt-zu-Punkt-Verbindungen bilden,
ist zu beachten, dass ein andere Anzahl an Prozessoren verwendet
werden kann und dass andere Arten an Bussen eine Verbindung unter
diesen Prozessoren bilden können.
Das Computersystem umfasst ferner drei I/O-Knoten, die als 20, 30 und 40 bezeichnet
sind und die jeweils in einer Kette mittels I/O-Paketbussen 50B und 50C miteinander
verbunden sind. Der I/O-Paketbus 50A ist zwischen dem Host-Knoten-Prozessor 10A und
dem I/O-Knoten 20 angeschlossen. Der Prozessor 10A ist
als ein Host-Knoten dargestellt, der eine Host-Brücke zur
Kommunikation mit dem I/O-Paketbus 50A aufweisen kann. Die
Prozessoren 108 bis 10D können ebenso Host-Brücken für die Kommunikation
mit anderen I/O-Paketbussen (nicht gezeigt) enthalten. Die Kommunikationsverbindungen,
die durch die I/O-Paketbusse 50A bis C gebildet werden,
werden auch als Punkt-zu-Punkt-Verbindungen bezeichnet. Der I/O-Knoten 20 ist
mit einem Paar aus peripheren Bussen 50A bis B verbunden.
Der I/O-Knoten 30 ist mit einem Graphikbus 35 verbunden,
während
der I/O-Knoten 40 mit einem weiteren peripheren Bus 50 verbunden
ist.
-
Die
Prozessen 10A bis 10D sind jeweils anschauliche
Beispiele für
einen x86-Mikroprozessor, etwa
eine Athlon-Mikroprozessor. Ferner kann ein Beispiel eines Paketbusses,
etwa der I/O-Paketbus 50A bis 50C ein nicht kohärenter HyperTransport-Bus
sein. Die peripheren Busse 25A bis B und der periphere
Bus 45 sind anschauliche Beispiele eines üblichen
peripheren Busses, etwa eines peripheren Komponentenverbindungs-
(PCI) Bus oder eines erweiterten PCI- (PCI-X) Busses. Der Graphikbus 35 ist
ein anschauliches Beispiel eines beschleunigten Graphikanschlusses
(AGP). Selbstverständlich
können
andere Arten an Mikroprozessoren und andere Arten an peripheren
Bussen verwendet werden.
-
Zu
beachten ist, dass, obwohl drei I/O-Knoten gezeigt sind, die mit
dem Host-Prozessor 10a verbunden sind, andere Ausführungsformen
eine andere Anzahl an Knoten aufweisen können, und diese Knoten können in
anderer Weise miteinander verbunden sein. Die in 1a dargestellte
Kettentopologie ist zum einfacheren Verständnis gezeigt.
-
In
der dargestellten Ausführungsform
erhält die
Host-Brücke
des Prozessors 10A aufwärtsgerichtete
Pakettransaktionen von abwärts
angeordneten Knoten, etwa den I/O-Knoten 20, 30 oder 40.
Alternativ kann die Host-Brücke
des Host-Prozessors 10A Pakete abwärts zu Einrichtungen, etwa
den peripheren Geräten
(nicht gezeigt), senden, die beispielsweise an dem peripheren Bus 25A angeschlossen
sind.
-
Während des
Betriebs übersetzen
die I/O-Knoten 20 und 40 die PCI-Bustransaktionen
in aufwärts
gerichtete Pakettransaktionen, die in den I/O-Strömen transportiert
werden und können
ferner abwärts
gerichtete Pakettransaktionen in PCI-Bus-Transaktionen übersetzen.
Alle Pakete, die aus anderen Knoten als der Host-Brücke des
Prozessors 10A kommen, können in Aufwärtsrichtung
zu der Host-Brücke
des Prozessors 10A gelangen, bevor sie zu einem anderen
Knoten weitergeleitet werden. Alle Pakete, die von der Host-Brücke des
Prozessors 10A stammen, können in Abwärtsrichtung zu anderen Knoten,
etwa den I/O-Knoten 20, 30 oder 40 laufen.
Im hierin verwendeten Sinne bezeichnet „Aufwärtsrichtung bzw. aufwärtsgerichtet" den Paketverkehrstrom
in Richtung der Hostbrücke
des Prozessors 10A und „abwärtsgerichtet" bezeichnet den Paketverkehrstrom
in Richtung weg von der Host-Brücke
des Prozessors 10A. Der I/O-Strom kann durch eine Kennung,
die als Einheiten-ID bezeichnet ist, gekennzeichnet werden. Zu beachten
ist, dass die Einheiten-ID (Identität bzw. Kennung) ein Teil des
Paketkopfbereichs sein kann oder eine andere ent sprechende Anzahl
an Bits in einem Paket oder Paketen sein kann. Im hierin verwendete
Sinne bezeichnet „I/O-Strom" alle Pakettransaktionen,
die die gleiche Einheiten-ID enthalten und daher von dem gleichen Knoten
stammen.
-
Zur
besseren Darstellung sei angeführt,
dass eine periphere Einrichtung auf dem peripheren Bus 45 eine
Transaktion initiiert, die für
eine periphere Einrichtung auf dem peripheren Bus 25 bestimmt
ist. Die Transaktion kann zunächst
in ein oder mehrere Pakete mit einer einzigartigen Einheiten-ID übersetzt werden
und wird dann in Aufwärtsrichtung
gesendet. Zu beachten ist, dass jedes Paket mit einer speziellen
Information codiert werden kann, die das Paket kennzeichnet. Beispielsweise
kann die Einheiten-ID in den Paketkopf codiert werden. Des weiteren
kann die Art der Transaktion ebenso in dem Paketkopf angegeben werden.
Jedem Paket ist eine Einheiten-ID zugeordnet, die den Ursprungsknoten
kennzeichnet. Da der I/O-Knoten 20 Pakete zu einer peripheren Einrichtung
auf dem peripheren Bus 25 von der Abwärtsrichtung aus weiterleiten
kann, werden die Pakete von der Host-Brücke
des Prozessors 10A in Aufwärtsrichtung gesendet. Die Host-Brücke des
Prozessors 10A kann dann die Pakete in die Abwärtsrichtung
mit einer Einheiten-ID der Host-Brücke des Prozessors 10A senden,
bis der I/O-Knoten 20 das Paket erkennt und für die periphere
Einrichtung auf dem peripheren Bus 25 in Anspruch nimmt.
Der I/O-Knoten 20 kann dann die Pakete in periphere Bustransaktionen übersetzen
und die Transaktionen zu der peripheren Einrichtung auf dem peripheren Bus 25 übertragen.
-
Wenn
die Pakettransaktionen in Aufwärtsrichtung
oder Abwärtsrichtung
laufen, können
die Pakete durch einen oder mehrere I/O-Knoten hindurchlaufen. Der
Durchlauf wird manchmal auch als ein Tunnel bezeichnet und der I/O-Knoten
wird manchmal als eine Tunnel-Einrichtung
bezeichnet. Pakete, die von der Aufwärtsrichtung zur Abwärtsrichtung oder
von der Abwärtsrichtung
zur Aufwärtsrichtung gesendet
werden, werden als „weitergeleiteter" Datenverkehr bezeichnet.
Ferner wird ein Paketdatenverkehr, der von einem speziellen I/O-Knoten stammt und
in den aufwärtsgerichteten
Datenverkehr eingefügt
wird, als „eingespeister" Datenverkehr bezeichnet.
-
Wie
nachfolgend detaillierter beschrieben ist, kann der I/O-Knoten zur
Beibehaltung der Verarbeitungsreihenfolgenregeln der diversen Busse,
die mit einem I/O-Knoten verbunden sein können, eine Umordnung der Transaktionen
sowie eine Paketpufferung bereitstellen. Der I/O-Knoten kann ferner
eine Steuerungslogik enthalten, die den Paketstrom zu dem Tunnel
von einem peripheren Gerät
und von dem Tunnel zu einem peripheren Gerät steuert.
-
2 ist
eine Blockansicht einer Ausführungsform
eines Eingabe/Ausgabe-Knotens. Der Eingabe/Ausgabe-Knoten 100 umfasst
eine Sender/Empfänger-Schaltung 110 und
eine Sender/Empfänger-Schaltung 120.
Die Sender/Empfänger-Schaltungen 110 und 120 sind
miteinander über einen
I/O-Tunnel 140 verbunden. Die Sender/Empfänger-Schaltungen 110 und 120 können jeweils
einen Sender und einen Empfänger
(nicht gezeigt) aufweisen. Die Sender und Empfänger sind über den I/O-Tunnel 140 so
verbunden, dass der Empfänger des
Sender/Empfänger 110 mit
dem Sender des Sender/Empfängers 120 und
der Empfänger
des Sender/Empfängers 120 mit
dem Sender des Sender/Empfängers 110 verbunden
ist. Der I/O-Tunnel 140 kann Befehls- und Datenbusse enthalten,
die zum Weiterleiten des Paketdatenverkehrs über den I/O-Knoten 100 verwendet
werden. Ferner umfasst der I/O-Knoten 100 eine periphere
Schnittstellenschaltung 150, die ebenso mit den Sendern/Empfängern 110 und 120 über dem
I/O-Tunnel 140 verbunden ist. Wie jedoch zuvor beschrieben
ist, können Transaktionen,
die von der peripheren Schnittstellenschaltung 150 stammen
und dann in den I/O-Tunnel 140 eintreten, als eingespeiste
Transaktionen bezeichnet werden. Der I/O-Knoten 100 umfasst
ferner eine Tunnelsteuerungseinheit 130, die angeschlossen
ist, die Transaktionen zwischen den Sendern/Empfängern 110 und 120 und
der peripheren Schnittstelle 150 zu steuern. Der I/O-Knoten 100 ist ferner
mit einem peripheren Bus 220 über die periphere Schnittstellenschaltung 150 verbunden.
-
In
der dargestellten Ausführungsform
sind die Sender/Empfänger 110 und 120 ein
Teil zweier undirektionaler Kommunikationswege über den I/O-Tunnel 140.
Da jeder der Kommunikationswege unidirektional ist, kann jeder Weg
als der aufwärts
gerichtete oder der abwärts
gerichtete Strom verwendet werden. Somit kann der eingespeiste Datenverkehr von
der peripheren Schnittstellenschaltung 150 jedem der Sender/Empfänger 110 und 120 zugeführt werden.
Die Sender/Empfänger 110 und 120 können jeweils
Pakettransaktionen in einem Empfangspuffer (nicht gezeigt) empfangen.
Wenn jede Transaktion empfangen wird, kann ein Steuerungsbefehl
erzeugt werden, der eine Teilmenge der in dem empfangenen Befehl
enthaltenen Information beinhaltet. Der Steuerungsbefehl kann die
Einheiten-ID des
initiierenden Knotens, die Bestimmungsinformation, eine Datenzahl
und eine Transaktionsart beinhalten, um einige Beispiele zu nennen.
Zu beachten ist, dass der Steuerungsbefehl andere Informationen
enthalten kann, oder einige der hier aufgeführten Infor mationen nicht enthalten
muss. Der Steuerungsbefehl kann von den Sendern/Empfängern 110 und 120 zu
der Tunnelsteuerungseinheit 130 gesendet werden. Die Tunnelsteuerungseinheit 130 bestimmt
ferner, welche der empfangenen Transaktionen von einem entsprechenden
Sender/Empfänger
gesendet wird und kann dem Sender/Empfänger anzeigen, die Transaktion zu
dem Ziel der Transaktion zu senden.
-
In
der dargestellten Ausführungsform
kann die periphere Schnittstellenschaltung 150 so aufgefasst
werden, dass diese einen Abwärtsrichtungsabschnitt
und einen Aufwärtsrichtungsabschnitt
aufweist. Der Abwärtsrichtungsabschnitt
kann abwärtsgerichtete
Transaktionen handhaben, deren Ziel eine mit dem peripheren Bus 220 verbundene
Einheit ist. Der Aufwärtsrichtungsabschnitt
kann Transaktionen handhaben, die von Geräten stammen, die mit dem peripheren
Bus 220 verbunden sind. Somit umfasst die periphere Schnittstellenschaltung 150 einen
Abwärtsrichtungsbefehlspuffer 160 und
einen Abwärtsrichtungsdatenpuffer 170,
die jeweils mit dem I/O-Tunnel 140 über eine Tunnelschnittstellenlogik 155 verbunden
sind. Der Abwärtsrichtungsbefehlspuffer 160 und
der Abwärtsrichtungsdatenpuffer 170 sind
jeweils mit dem peripheren Bus 220 über die Busschnittstellenschaltung 210 verbunden.
Die periphere Schnittstellenschaltung 150 umfasst ferner
einen Aufwärtsrichtungsbefehlspuffer 180 und
einen Aufwärtsrichtungsdatenpuffer 190,
die jeweils mit dem I/O-Tunnel 140 über die
Tunnelschnittstellenlogik 155 verbunden sind. Der Aufwärtsrichtungsbefehlspuffer 180 und
der Aufwärtsrichtungsdatenpuffer 190 sind
ebenfalls jeweils mit dem peripheren Bus 220 über die
Busschnittstellenschaltung 210 verbunden. Die periphere
Schnittstellenschaltung 150 umfasst ferner eine Steuerungslogikeinheit 200,
die sowohl mit dem Aufwärtsrichtungsbefehlspuffer 180 als auch
mit dem Abwärtsrichtungsbefehlspuffer 160 verbunden
ist.
-
Zu
beachten ist, dass in der dargestellten Ausführungsform der periphere Bus 220 für eine Vielzahl üblicher
peripher Busse beispielhaft dargestellt ist, etwa einen PCI-Bus,
einen PCI-X-Bus
und einen AGP-Bus, um nur einige Beispiele zu nennen. Des weiteren
kann die Busschnittstellenschaltung 210 ferner eine Schaltung
enthalten, um periphere Busbefehle von derartigen Bussen zu übersetzen.
Ferner ist zu beachten, dass in einer speziellen Ausführungsform
die Busschnittstellenschaltung 210 eine Busschnittstelle
ist, etwa eine Compaq-Schnellanschluss für PCI-X- (CREX)-Schnittstelle.
Schließlich ist
zu beachten, dass in einigen Ausführungsformen der I/O-Knoten 100 mehr
als eine periphere Schnittstellenschaltung (nicht gezeigt) aufweisen
kann und dass der I/O-Knoten eine Verteilungslogik (nicht gezeigt)
besitzen kann, die eine Verteilung der von jeder der peripheren
Schnittstellenschaltungen gesendeten Befehle durchführt.
-
Transaktionen
können
von der Sender/Emfänger-Schaltung 110 oder 120 gesendet
werden, in Abhängigkeit
davon, welcher Sender/Empfänger
als der Abwärtsrichtungsempfänger angeschlossen
ist. Der Befehlsbereich der Transaktion kann in dem Abwärtsrichtungsbefehlspuffer 160 gespeichert
werden und der Datenanteil der Transaktion kann in dem Abwärtsrichtungsdatenpuffer 170 gespeichert
werden. Wenn in ähnlicher
Weise eine Transaktion von der Busschnittstellenschaltung 210 gesendet
wird, kann der Befehlsanteil der Transaktion in dem Aufwärtsrichtungsbefehlspuffer 180 gespeichert
werden, und der Datenanteil der Transaktion kann in dem Aufwärtsrichtungsdatenpuffer 190 gespeichert
werden. Die Steuerungslogikeinheit 200 ist ausgebildet,
den Transport der Transaktionen zu und von der Busschnittstellenschaltung 210 und
dem I/O-Tunnel 140 zu steuern.
-
Wie
nachfolgend detaillierter beschrieben ist, erzeugt in Reaktion darauf,
dass die periphere Schnittstellenschaltung 150 Transaktionen
in Aufwärtsrichtung
von dem peripheren Bus 220 empfängt, die Steuerungslogikeinheit 200 Steuerungsbefehle ähnlich zu
den Steuerungsbefehlen, die von den Sendern/Empfängern 110 und 120 erzeugt
werden. Die Steuerungslogikeinheit 200 kann ferner diese
Steuerungsbefehle zu der Tunnelsteuerungseinheit 130 senden,
so dass das Befehle in Aufwärtsrichtung
in dem I/O-Tunnel 140 disponiert werden. Des weiteren kann
die Steuerungslogikeinheit 200 eine Schaltung in der Abwärtsrichtung
mit Signalen versorgen, die den Aufwärtsrichtungsbefehlen entsprechen,
die es der Abwärtsrichtungsschaltung
ermöglichen,
die relative Reihenfolge der Abwärtsrichtungsantworttransaktionen
beizubehalten.
-
In 3 ist
eine Blockansicht einer Ausführungsform
einer peripheren Schnittstellenschaltung gezeigt. Eine periphere
Schnittstellenschaltung 350 umfasst einen Abwärtsrichtungsabschnitt 360 und eine
Aufwärtsrichtungsabschnitt 450.
Die periphere Schnittstellenschaltung 350 umfasst ferner
eine Tunnelschnittstellenlogikeinheit 355, die mit einem I/O-Tunnel,
etwa dem I/O-Tunnel 140 aus 2, verbunden
ist. In dem Abwärtsrichtungsabschnitt 360 aus 3 ist
die Tunnelschnittstellenlogik 355 auch mit einem Befehlspuffer 370 verbunden.
Der Befehlspuffer 370 ist mit einer Markierungslogikeinheit
3809 verbunden. Die Markierungslogikeinheit 380 ist mit einem
Befehlspuffer für
virtuelle Kanäle 300 verbunden.
Der Befehlspuffer 300 für
virtuelle Kanäle
ist mit einer Verteilungslogikeinheit 410 verbunden, die
mit einer Busschnittstellenschaltung 470 verbunden ist. Der
Befehlspuffer 300 für
virtuelle Kanäle
ist auch mit einer Wiederstartwarteschlange 420 für nicht
aufgegebene Pakete (NP) und einer Warteschlange 430 für aufgeteilte
Antworten verbunden. Die Tunnelschnittstellenlogik 355 ist
ferner mit dem Datenpuffer 400 verbunden, der wiederum
mit der Busschnittstellenschaltung 470 verbunden ist. Die
Busschnittstellenschaltung 470 ist mit einem peripheren
Bus 560 verbunden, der mit einer peripheren Einrichtung 565 verbunden
ist.
-
In
dem Aufwärtsrichtungsabschnitt 450 ist die
Busschnittstellenschaltung 470 mit einem NP-Befehlspuffer 480,
einer Analysierlogikeinheit 500 und einer Verzögerungstransaktionslogikschaltung 510 verbunden.
Des weiteren ist die Busschnittstellenschaltung 470 mit
einem Datenpuffer 550 verbunden. Der NP-Befehlspuffer 480 ist
mit einem Steuerungsbefehlgenerator 520 und einer NP-Quellenmarkierungslogikeinheit 400 verbunden.
Der Steuerungsbefehlgenerator 520 ist mit einem Befehlspuffer 530 für virtuelle
Kanäle
und der Tunnelschnittstellenlogik 355 verbunden. Der Befehlspuffer 530 für virtuelle
Kanäle ist
mit der Tunnelschnittstellenlogik 355 verbunden. Die periphere
Schnittstellenschaltung 350 umfasst ferner eine Steuerungslogik
und Speichereinheit 460, die mit der Warteschlange 430 für aufgeteilte
Antworten und dem Datenpuffer 400 des Abwärtsrichtungsabschnitts 360 verbunden
ist. Die Steuerungslogik- und Speichereinheit 460 ist ferner
mit der NP-Quellenmarkierungslogik 490 und
dem NP-Befehlspuffer 480 das Aufwärtsrichtungsabschnitts 450 verbunden. Ferner
ist zu beachten, dass die periphere Schnittstellenschaltung 350 eine
Duplizierungslogik 570 umfassen kann, die in der zuvor
beschriebenen Weise funktionieren kann, um die zusätzlichen
peripheren Busse, etwa den peripheren Bus 580, anzuschließen.
-
Im
Allgemeinen gesagt, ist ein „virtueller
Kanal" ein Kommunikationsweg
zum Transportieren von Paketen zwischen diversen Verarbeitungsknoten.
Jeder virtuelle Kanal ist ressourcenunabhänig von anderen virtuellen
Kanälen
(d. h. Pakete, die in einem virtuellen Kanal laufen, sind im Allgemeinen
nicht im Hinblick auf das physikalische Übertragen durch die Anwesenheit
oder Abwesenheit von Paketen in einem anderen virtuellen Kanal beeinflusst).
Pakete werden auf der Grundlage der Paketart einem virtuellen Kanal
zugeordnet. Pakete in dem gleichen virtuellen Kanal können physikalisch
miteinander beim Senden in Konflikt geraten (d. h. Pakete in dem
gleichen virtuellen Kanal können
Ressourcenkonflikte hervorrufen), können jedoch nicht physikalisch
mit dem Senden von Paketen in einem unterschiedlichen virtuellen
Kanal in Konflikt stehen.
-
Gewisse
Pakete können
logisch mit andern Paketen in Konflikt geraten (d. h. aus Protokollgründen, Kohärenzgründen oder
anderen derartigen Gründen
kann ein Paket logisch mit einem weiteren Paket in Konflikt sein).
Wenn ein erstes Paket aus logischen Gründen, Protokollgründen an
seinem Bestimmungsknoten vor einem zweiten Paket an dessen Bestimmungsknoten
eintreffen muss, ist es möglich,
dass ein Computersystem einen Stillstand erleidet, wenn das zweite
Paket physikalisch das Senden des ersten Pakets blockiert (durch
Einnehmen von in Konflikt stehenden Ressourcen). Durch Zuordnen des
ersten und des zweiten Pakets zu separaten virtuellen Kanälen und
durch Einrichten des Übertragungsmediums
innerhalb des Computersystems derart, dass Pakete in separaten virtuellen
Kanälen
nicht die gegenseitige Sendung blockieren können, kann ein unterbrechungsfreier
Betrieb erreicht werden. Es ist zu beachten, dass die Pakete von
unterschiedlichen virtuellen Kanälen über die
gleiche physikalische Verbindung gesendet werden. Da jedoch ein Empfangspuffer
vor dem Senden verfügbar
ist, blockieren sich die virtuellen Kanäle nicht gegenseitig, selbst
wenn diese gemeinsam genutzte Ressource verwendet wird.
-
Aus
einem anderen Blickpunkt betrachtet, kann jede unterschiedliche
Paketart (beispielsweise jede unterschiedliche Befehlscodierung)
ihrem eigenen virtuellen Kanal zugeordnet werden, und somit werden
in einer Ausführungsform
separate Puffer für jeden
virtuellen Kanal reserviert. Da separate Puffer für jeden
virtuellen Kanal verwendet werden können, können Pakete von einem einzelnen
virtuellen Kanal physikalisch nicht mit Paketen von einem weiteren virtuellen
Kanal in Konflikt sein (da derartige Pakete in anderen Puffern angeordnet
wurden).
-
Daher
enthalten in der dargestellten Ausführungsform der Befehlspuffer
für virtuelle
Kanäle 390 und
der Befehlspuffer für
virtuelle Kanäle 530 jeweils drei
separate FIFO-Abschnitte, die den drei Transaktionsarten entsprechen:
aufgegeben, nicht aufgegeben und Antwort. Die Befehle werden in
dem entsprechenden FIFO in der Reihenfolge angeordnet, in der sie
empfangen wurden. Um jedoch die Regeln der Reihenfolge zu bewahren,
die mit dem Bus oder der Geräteart
verknüpft
sind, die den ursprünglichen
Befehl erzeugt haben, müssen
die Transaktionen unter Umständen
außer
der Reihenfolge zwischen unterschiedlichen Arten an Transaktionen
verarbeitet werden.
-
In
einer Ausführungsform
kann der Befehlspuffer 370 ein zwei-stufiger FIFO sein,
der als ein Puffermechanismus für
Befehle dient, die von dem I/O-Tunnel 140 aus 2 zu
dem Befehlspuffer 390 für
virtuelle Kanäle
aus 3 gesendet werden. Wenn eine Transaktion in Abwärtsrichtung
zu der peripheren Schnittstellenschaltung 350 gesendet
wird, wird der Datenanteil der Transaktion in dem Datenpuffer 400 gespeichert,
während
der Befehlsanteil der Transaktion in dem Befehlspuffer für virtuelle
Kanäle 390 gespeichert
wird. Zunächst
wird jedoch die Markierungslogik 380 konfiguriert, um einen
Markierungswert zu erzeugen und diesen dem Befehl hinzuzufügen. Der
Markierungswert entspricht der Reihenfolge des Empfangs des Befehls
im Verhältnis
zu anderen empfangenen Befehlen und kann in nachfolgenden Verteilungszyklen
verwendet werden. Die Daten und Befehle können als zu dem gleichen Paket gehörend durch
die Kopfinformation erkannt werden, die in den Paketen enthalten
ist. Da ferner einige periphere Busse mit kleineren Taktgeschwindigkeiten als
die interne Taktgeschwindigkeit des I/O-Knotens arbeiten, können Daten
in den Datenpuffer 400 unter Anwendung der Datengeschwindigkeit
des I/O-Knotens eingeladen und mit einer unterschiedlichen Datengeschwindigkeit
ausgeladen werden, vorzugsweise mit der Taktgeschwindigkeit des
peripheren Busses, der mit der Busschnittstellenschaltung 470 verbunden
ist. Des weiteren können
sowohl der Datenpuffer 400 als auch der Befehlspuffer 390 für virtuelle Kanäle so ausgebildet
sein, um eine beliebige Logik in Aufwärtsrichtung zu benachrichtigen,
wenn Datenspeicherraum nicht verfügbar ist.
-
Abhängig von
der Art des Befehls (aufgegeben, nicht aufgegeben oder Antwort)
wird der Befehl in einem entsprechenden FIFO für virtuelle Kanäle des Befehlspuffers 390 für virtuelle
Kanäle
gespeichert. Die Verteilungslogik 410 ist ausgebildet auszuwählen, welche
Transaktion als erste, als zweite usw. unter den Transaktionen in
dem Befehlspuffer für
virtuelle Kanäle 390 verarbeitet
wird. Der Befehlspuffer 390 für virtuelle Kanäle und die
Verteilungslogikeinheit 410 können als eine Befehlsablauforganisationseinheit
bzw. Disponiereinheit verstanden werden, da diese zusammen speichern
und entscheiden, in welcher Reihenfolge Befehle verarbeitet werden.
Beispielsweise muss ggf. ein aufgegebener Befehl, der in dem Befehlspuffer
für virtuelle
Kanäle 390 vor
einem nicht aufgegebenen Befehl eintrifft, nach dem nicht aufgegebenen
Befehl auf Grund der Regeln für die
Reihenfolge, die von der Verteilungslogik 410 erstellt
werden, verarbeitet werden. Die Verteilungslogik 410 kann
ferner die Markierungswerte, die von der Markierungslogikeinheit 380 zugeordnet
werden, während
des Verteilungsprozesses verwenden.
-
Ferner
können
mehrere Antwortpakete dem gleichen Datenstrom oder der gleichen
Datensequenz angehören,
wenn diese von einer gemeinsamen Anforderungstransaktion, etwa einer
Anforderung für
einen Datenstrom, herrühren.
Es kann notwendig sein, in Abhängigkeit
von dem peripheren Bus, die Antwortpakete in der korrekten Reihenfolge innerhalb
eines Datenstromes bereitzustellen, selbst wenn die Pakete von der
Abwärtsrichtungslogik
nicht in der Reihenfolge empfangen werden. Ferner kann es notwendig
sein, die Teilübertragungen
auf einen peripheren Bus in Reaktion auf eine Anforderung für einen
Datenstrom auszuführen.
Der Datenpuffer 400 kann Daten enthalten, die einen Teil
des angeforderten Datenstromes bilden. Solange die Datensegmente,
die den Bereich bilden, in der korrekten Reihenfolge sind, können diese
zu dem peripheren Bus übertragen
werden.
-
Die
Steuerungslogik- und Speichereinheit 460 kann Speichereinheiten,
etwa Register oder Speicher mit wahlfreiem Zugriff, und eine Logik
zur Verwendung beim Zuführen
der Daten beinhalten und wird nachfolgend detaillierter in Verbindung
mit der Beschreibung der 7 erläutert.
-
Wie
nachfolgend in Verbindung mit 8 und 9 detaillierter
dargestellt ist, kann während der
Verteilung, wenn eine aktuell ausgewählte Transaktion ein Antwortbefehl
ist, eine Bestimmung durchgeführt
werden, welche Daten, die mit dem Antwortbefehl verknüpft sind,
in dem Datenpuffer 400 verfügbar sind. Wenn die Daten verfügbar sind,
kann ein Buszyklus auf dem peripheren Bus 560 initiiert
werden. Dies kann durch die Busschnittstellenschaltung 470 bewerkstelligt
werden, die die Befehls- und Datenpakete empfängt und diese in Adressen-,
Daten- und Steuersignale übersetzt,
die für
die Übertragung auf
dem peripheren Bus 560 geeignet sind.
-
Wenn
der aktuell ausgewählte
Befehl ein nicht aufgegebener Befehl ist, etwa ein Lese- oder Schreibbefehl,
kann abhängig
von der Art des mit der Busschnittstellenschaltung 470 verbundenen
peripheren Busses die periphere Einrichtung 565 beispielsweise
eine der folgenden Handlungen durchführen: Akzeptieren und Verarbeiten
des Befehls und Senden eines „Bearbeitung
im Ziel fertig" – Zyklus oder
eines Antwortzyklus mit allen angeforderten Daten, Setzen einer
Wiederholungsindikation, Akzeptieren des Befehls und Setzen einer
Indikation bzw. Kennung für
eine aufgeteilte Antwort. Wie nachfolgend detaillierter in Verbindung
mit der Beschreibung aus 4 dargestellt ist, wird die
Wiederholungsindikation durch die periphere Einrichtung 565 gesetzt, der
nicht aufgegebene Befehl kann von dem Befehlspuffer für virtuelle
Kanäle 390 zurückgenommen und
in der NP-Wiederholungswarteschlange 420 gespeichert
werden. Wie nachfolgend detaillierter in Verbindung mit der Beschreibung
aus 5 dargelegt ist, kann, wenn der periphere Bus 560 ein PCI-X-Bus
ist und die aufgeteilte Antwort empfangen wird, der nicht aufgegebene
Befehl von dem Befehlspuffer für
virtuelle Kanäle 390 oder
der NP-Wiederholungswarteschlange 420 zurückgenommen
und in der Warteschlange 430 für aufgeteilte Antworten gespeichert
werden.
-
In
dem Aufwärtsrichtungsabschnitt 450 kann,
wenn die periphere Einrichtung 565 einen Buszyklus auf
dem peripheren Bus 560 initiiert, die Busschnittstellenschaltung 470 diesen
Zyklus in Pakettransaktionen übersetzen,
die Befehls- und Datenpakete enthalten können, wie dies zuvor beschrieben ist.
Die Datenpakete können
in dem Datenpuffer 550 gespeichert werden, während die
Befehle in dem Befehlspuffer 530 für virtuelle Kanäle in den
entsprechenden virtuellen Kanal gespeichert werden. Vor der Speicherung
in dem Befehlspuffer 530 für virtuelle Kanäle und abhängig von
der Art des Befehls kann die Analyselogik 500 den Befehl
in eine Reihe kleinerer Befehle unterteilen. Wenn beispielsweise
die periphere Einrichtung 565 einen nicht ausgegebenen Schreibbefehl
als einen großen
Block an Daten an einen Systemspeicher ausgibt, kann die Analysierlogik 500 eine
Reihe von nicht aufgegebenen Schreibbefehlen für den gleichen Speicherblock
erzeugen, jedoch in kleinere Blöcke
unterteilt. Zu beachten ist, dass in einer Ausführungsform die Blöcke entlang den
Cache-Speicherzeilengrenzen erzeugt werden können. Nachfolgend kann jeder
der nicht ausgegebenen Befehle in dem Befehlspuffer 530 für virtuelle Kanäle gespeichert
werden. Nicht aufgegebene Lesebefehle können ebenso in Abhängigkeit
der Grenzen der Anforderungen im Hinblick darauf, ob die Transaktionen
PCI oder PCI-X sind, aufgeteilt werden. In einer Ausführungsform
kann die NP-Quellenmarkierungslogik 490 einen Markierungswert
erzeugen, der von Logikschaltungen in Abwärtsrichtung verwendet werden
kann, um zu bestimmen, mit welchem Datenstrom ein spezieller Antwortbefehl
verknüpft
ist. Wie ferner nachfolgend detaillierter in Verbindung mit der 6 bis 9 beschrieben
ist, kann ein ursprünglicher
nicht aufgegebener Befehl (beispielsweise vor dem Unterteilen) ebenso
in dem NP-Befehlspuffer 480 bewahrt werden, um Information
an die Logik innerhalb des Abwärtsrichtungsabschnitts 360 zu
liefern. Die NP-Quellenmarkierungslogik 490 kann einen
Markierungswert erzeugen, der mit jedem der aufwärts gerichteten nicht aufgegebenen
Befehle verknüpft
ist. In einer Ausführungsform werden
Markierungswerte 0 bis 29 erzeugt. Es ist jedoch zu beachten, dass
in anderen Ausführungsformen
andere geeignete Zahlen der Markierungswerte erzeugt werden können.
-
Wenn
Befehle in der Aufwärtsrichtung
in dem Befehlspuffer 530 für virtuelle Kanäle gespeichert werden,
erzeugt der Steuerungsbefehlgenerator 520 Steuerungsbefehle ähnlich zu
den Steuerungsbefehlen, die von den Sendern/Empfängern 110 und 120 aus 2 erzeugt
werden. In 3 kann der Steuerungsbefehlgenerator 520 auch
jene Steuerungsbefehle über
die Tunnelschnittstellenlogik 355 zu der Tunnelsteuerungseinheit 130 aus 2 senden,
wodurch es möglich
ist, dass Befehle in Abwärtsrichtung in
dem I/O-Tunnel 140 disponiert werden. Die Tunnelschnittstellenlogik 355 der 3 enthält mehrere Pufferschaltungen
für allgemeine
Zwecke, wie sie zur Funktion einer Schnittstelle zwischen dem I/O-Tunnel 140 und
der Logik innerhalb der peripheren Schnittstellenschaltung 350 erforderlich
sind.
-
Die
verzögerte
Transaktionslogik 510 kann eine Schaltung enthalten, die
in Verbindung mit der Busschnittstellenschaltung 470, der
Logik in dem Abwärtsrichtungsabschnitt 360 und
der I/O-Tunnellogik aus 2 zusammenarbeitet, um eine
Wiederholungskennung bzw. Indikation an das periphere Gerät 565 auszugeben,
dass eine Anforderung nicht unmittelbar abgearbeitet werden kann.
Beispielsweise sendet die periphere Einrichtung 565 eine
nicht aufgegebene Leseanforderung in Aufwärtsrichtung und der Kanal für nicht
aufgegebene Transaktionen ist blockiert oder die Daten sind nicht
bereit. Die verzögerte
Transaktionslogik 510 kann der peripheren Einrichtung 565 anzeigen,
dass die Anforderung aktuell nicht abgearbeitet werden kann und
dass die Anforderung zu einem späteren
Zeitpunkt erneut wiederholt werden soll.
-
4 zeigt
eine Blockansicht einer Ausführungsform
einer Pufferschaltung für
Wiederholung nicht aufgegebner Transaktionen. Eine Pufferschaltung
für die
erneute Wiederholung nicht aufgegebener Transaktionen (NP) 650 umfasst
einen FIFO für Wiederholung
nicht aufgegebener Transaktionen 660, der mit einer Aktualisierungsschaltung 670 für nicht
aufgegebene Befehle verbunden ist.
-
In
der dargestellten Ausführungsform
kann der FIFO 660 für
nicht aufgegebene Wiederholungen nicht aufgegebene Befehle speichern,
die von einem Befehlspuffer für
nicht aufgegebene Transaktionen empfangen werden, etwa dem Befehls-FIFO
für nicht aufgegebene Transaktionen
der Befehlspufferschaltung für
virtuelle Kanäle 390 aus 3.
Wie zuvor in Verbindung mit 3 beschrieben
ist, kann in Reaktion auf eine Wiederholungsindikation, die in der
peripheren Einrichtung 565 gesetzt wird, ein nicht aufgegebener
Befehl von dem Befehlspuffer 390 für virtuelle Kanäle entfernt
und in dem nicht aufgegebenen Wiederholungs-FIFO 664 aus 4 gespeichert werden.
-
Der
nicht aufgegebene Wiederholungs-FIFO 660 kann ein FIFO-Besetztsignal
setzen, wenn kein Speicherplatz verfügbar ist. Das Besetztsignal
kann eine Angabe an die Verteilungslogik, etwa die Verteilungslogikschaltung 410 aus 3 liefern.
Solang das Besetztsignal gesetzt ist, kann der nicht aufgegebene
Befehls-FIFO der Befehlspufferschaltung für virtuelle Kanäle 390 nicht
an Verteilungszyklen teilnehmen, wodurch ein Überlauf des nicht aufgegebenen
Wiederholungs-FIFO 660 im Falle einer zusätzlichen
Wiederholungsindikation vermieden wird.
-
Sobald
der nicht aufgegebene Befehl in dem nicht aufgegebenen Wiederholungs-FIFO 660 gespeichert
ist, können
Befehle am Anfangsbereich des FIFO's 660 für nicht aufgegebene Wiederholungen an
den Verteilungszyklen zusammen mit den Befehlen teilnehmen, die
innerhalb der Befehlspufferschaltung 390 für virtuelle
Kanäle
aus 3 gespeichert sind. Wenn ein nicht aufgegebener
Befehl, der am Anfang des FIFO's 660 aus 4 für nicht
aufgegebene Wiederholungen gespeichert ist, in einem Verteilungszyklus
ausgewählt
wird, wodurch das Initiieren eines Buszyklus hervorgerufen wird
und wiederum ein Wiederholungssignal von dem peripheren Bus 560 aus 3 gesetzt
wird, kann die Aktualisierungsschaltung 670 aus 4 für nicht
aufgegebene Befehle bewirken, dass der ausgewählte nicht aufgegebene Befehl
von dem Anfangsbereich entfernt wird und zum hinteren Ende des FIFO's 660 für nicht
aufgegebene Wiederholungen verschoben wird, um auf einen weiteren
Verteilungszyklus zu warten, wenn dieser erneut den Anfang des FIFO's erreicht. Anders gesagt,
der ausgewählte
nicht aufgegebene Befehl kann in den FIFO zurückgeschrieben werden. Dies ist
durch den gestrichelten Pfeil innerhalb der Aktualisierungsschaltung 670 für nicht
aufgegebene Befehle gezeigt. Dieses erneute Versuchen bzw. Wiederholen
des Zyklus kann mehrere Male auftreten und jedes Mal wird der Befehl
in das Ende des FIFO's 660 für nicht
aufgegebene Wiederholungen zurückgeschrieben.
-
Wenn
die periphere Schnittstellenschaltung 350 aus 3 in
dem PCI-Modus arbeitet, ist es möglich,
dass der periphere Bus 560 aus 3 angibt,
dass es einen teilweisen Ab schluss des nicht aufgegebenen Zyklus
gab. Beispielsweise kann ein nicht aufgegebener Lesebefehl 10 Datensegmente anfordern.
Die periphere Einrichtung 565 kann die Wiederholungsindikation
setzen, aber mit 5 der 10 Datensegmente antworten, wodurch eine
Antwort mit teilweise erfolgtem Abschluss gekennzeichnet ist. Bei
Empfang einer Indikation für
teilweise erfolgten Abschluss kann die Aktualisierungsschaltung
für nicht
aufgegebene Befehle 670 aus 4 den ausgewählten nicht
aufgegebenen Befehl so modifizieren, dass eine neue Datenzahl und
Adresse entsprechend den verbleibenden Datensegmenten bewahrt werden.
In ähnlicher
Weise können
nicht aufgegebene Schreibbefehle teilweise abgeschlossen werden. Die
Aktualisierungsschaltung für
nicht aufgegebene Befehle 670 kann dann bewirken, dass
der modifizierte nicht aufgegebene Befehl an dem Ende des aufgegebenen
Wiederholungs-FIFO 660 gespeichert wird, wo der nicht aufgegebene
Befehl einen weiteren Verteilungszyklus abwarten kann, wenn dieser den
Anfang des FIFO's
erreicht. Im hierin verwendeten Sinne und für anschauliche Zwecke soll
der Anfang des FIFO's
die Stelle in dem FIFO bezeichnen, in der Befehle ausgeladen oder
gelesen werden können,
und das Ende des FIFO's
ist als die Speicherstelle bezeichnet, in der Befehle geschrieben
und gespeichert werden können.
Zu beachten ist ferner, dass, wenn Befehle aus dem nicht aufgegebenen Wiederholung-FIFO 660 ausgeladen
werden, andere Befehle, die in dem nicht aufgegebenen Wiederholungs-FIFO 660 gespeichert
sind, in der Reihenfolge nach oben wandern, in der sie ausgeladen
werden. Es ist zu beachten, dass in anderen Ausführungsformen Befehle an den
Anfang des FIFO's
geschrieben und aus dem Ende des FIFO's ausgelesen werden können, wodurch
die Aktualisierungsschaltung für nicht
aufgegebene Befehle 670 Befehle an den Anfang des FIFO's schreiben kann.
-
5 zeigt
ein Flussdiagramm zum Beschreiben des Handhabens einer Indikation
für eine Teilantwort
bzw. eine Teilantwortindikation in einer Ausführungsform einer peripheren
Schnittstellenschaltung. Es sei gemeinsam auf 3 und 5 verwiesen,
wobei der Funktionsablauf im Schritt 431 in 5 beginnt
und zum Schritt 432 weitergeht, in welchem ein nicht aufgegebner
Befehl von dem Abwärtsrichtungsabschnitt 450 aus 3 empfangen und
in dem FIFO für
nicht aufgegebene Befehle des Befehlspuffers 390 für virtuelle
Kanäle
gespeichert wird. Im Schritt 433 aus 5 werden
Verteilungszyklen ausgeführt
und wenn der nicht ausgegebene Befehl ausgewählt ist, geht der Ablauf zum
Schritt 434 weiter, während
ansonsten die Verteilungszyklen weitergehen, bis der nicht aufgegebene
Befehl ausgewählt
ist. Somit wird im Schritt 434 der nicht aufgegebene Befehl
ausgewählt
und zur Übersetzungslogik
gesendet, die beispielsweise in der Busschnittstellenschaltung 470 aus
-
3 enthalten
sein kann. Der nicht aufgegebene Befehl wird in einen entsprechenden
Buszyklus umgewandelt, der für
das Senden auf dem peripheren Bus 560 geeignet ist. Im
Schritt 435 aus 5 wird der Buszyklus dann von
der Busschnittstellenschaltung 470 aus 3 initiiert.
Zu beachten ist, dass das Übersetzen
und der Buszyklusinitiierungsprozess einen oder mehrere Zwischenschritte enthalten
können,
die von einer oder mehreren Schnittstellen an dem peripheren Bus
ausgeführt werden,
etwa der CREX-Schnittstelle (nicht gezeigt), die zuvor in Verbindung
mit der Beschreibung der 2 erläutert ist. Der Ablauf geht
nun zum Schritt 436 aus 5 weiter.
Im Schritt 436 warten der Aufwärtsrichtungsabschnitt 450 und
die Busschnittstellenschaltung 470 der 3 auf
eine Indikation des Abschlusses von dem Zielgerät, etwa der peripheren Einrichtung 565,
auf dem peripheren Bus 560. Wenn der nicht aufgegebene
Befehl eine Leseanforderung war, kann die Abschlussindikation die
Gesamtheit der geforderten Daten sein, einschließlich der Steuerungssignale,
etwa ein „Zyklus
fertig"-Signal,
das angibt, dass alle angeforderten Daten vorhanden sind. Wenn der
nicht aufgegebene Befehl eine Schreibanforderung war, kann die Abschlussindikation
eine Nachricht über
die Vervollständigung
ohne sonstige Daten sein. Wenn eine Abschlussindikation empfangen
wird, geht der Ablauf zum Schritt 437 aus 5 weiter.
Im Schritt 437 wird dann, wenn der nicht aufgegebene Befehl
ein Schreibbefehl war, der Aufwärtsrichtungsabschnitt 450 aus 3 einen
Antwortbefehl, etwa „Ziel
fertig"-Antwort
zu dem anfordernden Knoten senden. Wenn der nicht aufgegebene Befehl
ein Lesebefehl war, dann kann der Aufwärtsrichtungsabschnitt 450 einen
Antwortbefehl einschließlich
aller angeforderten Daten an den anfordernden Knoten weiterleiten.
Die Funktionsbeschreibung endet im Schritt 438 aus 5.
-
Es
sei wieder auf den Schritt 436 verwiesen; wenn die von
dem peripheren Bus 560 aus 3 empfangene
Antwort eine Vollständigkeit
ausdrückende
Nachricht ist, so kann diese eine Wiederholungsindikation sein,
wie dies detailliert in Verbindung mit 4 erläutert ist.
Die Antwort kann auch eine Indikation für eine Teilantwort sein, wobei
im Schritt 439 aus 5 die Indikation
der aufgeteilten Antwort empfangen wird. Im Schritt 440 wird
der nicht aufgegebene Befehl in der Warteschlange 430 für aufgeteilte
Antworten aus 3 in Reaktion auf die aufgeteilte
Antwortindikation gespeichert. Der nicht aufgegebene Befehl kann
Buszyklusinfonnationen, etwa die Busnummer, die Gerätenummer,
eine Funktionsnummer, Anzahl und eine Identifizierungsnummer enthalten.
Diese Information kann verwendet werden, um Antwortzyklen zu beanspruchen,
die von dem Zielgerät
empfangen werden. Im Schritt 441 aus 5 wird
die empfangene aufgeteilte Antwort von Lesedaten begleitet, wenn
der nicht aufgegebene Befehl ein Lesebefehl war. In diesem Falle
wird der Antwortbefehl zu dem anfordernden Knoten zusammen mit verfügbaren Daten
gesendet. Im Schritt 442 ist eine Nachricht, wenn die Fertigstellung
der Aufteilung empfangen wird, diese eine Nachricht zur Vervollständigung
der Aufteilung in Reaktion auf einen nicht aufgegebenen Schreibbefehl
oder diese ist eine Nachricht für
die Fertigstellung der Aufteilung einschließlich aller angeforderten Daten.
Im Schritt 443 wird die Zyklusinformation über die
Beendigung des Aufteilens mit nicht aufgegebenen Befehlen verglichen,
die in der Warteschlange 430 aus 3 für aufgeteilte
Antworten gespeichert sind. Sobald der entsprechende nicht aufgegebene
Befehl bestimmt ist, geht der Ablauf zum Schritt 444 aus 5 weiter. Im
Schritt 444 wird, wenn die Beendigung der Aufteilung eine
Nachricht über
die Beendigung der Aufteilung ist, ein Antwortbefehl, etwa eine „Ziel fertig"-Antwort, an den
anfordernden Knoten gesendet. Wenn der nicht aufgegebene Befehl
ein Lesebefehl war, dann kann der Aufwärtsrichtungsabschnitt 450 aus 3 einen
Antwortbefehl einschließlich
aller angeforderten Daten an den anfordernden Knoten senden. Im
Schritt 445 aus 5 wird, sobald alle Daten empfangen
sind oder eine Nachricht über
die Beendigung der Aufteilung empfangen wird, der entsprechende
nicht aufgegebene Befehl aus der Warteschlange für aufgeteilte Antworten 430 aus 3 beendet
werden.
-
Es
sei wieder auf Schritt 442 verwiesen; wenn eine Beendigung
der Aufteilung nicht empfangen wird, geht der Ablauf zum Schritt 446 weiter,
in welchem eine aufgeteilte Antwort empfangen wird. Der Ablauf geht
dann zum Schritt 447 weiter, in welchem die Zyklusinformation
der aufgeteilten Antwort mit nicht aufgegebenen Befehlen verglichen
wird, die in der Warteschlange 430 aus 3 für aufgeteilte Antworten
gespeichert sind. Sobald der entsprechende nicht aufgegebene Befehl
bestimmt ist, geht der Ablauf zum Schritt 448 aus 5 weiter.
Im Schritt 448 sendet der Aufwärtsrichtungsabschnitt 450 aus 3 einen
Antwortbefehl einschließlich
der verfügbaren
Daten und der Information aus dem nicht aufgegebenen Befehl zu dem
anfordernden Knoten. Der Ablauf geht zurück zum Schritt 442,
um eine weitere Antwort abzuwarten. Es sei wieder auf Schritt 446 verwiesen;
wenn eine aufgeteilte Antwort nicht empfangen wird, geht der Ablauf
zurück
zum Schritt 442, um eine weitere Antwort abzuwarten.
-
6 zeigt
eine Blockansicht einer Ausführungsform
einer Pufferschaltung mit einer FIFO-Struktur für Pufferverfügbarkeit.
Eine Pufferschaltung 680 enthält einen FIFO 685 für Pufferverfügbarkeit,
der mit einem Befehlspuffer 690 für nicht aufgegebene Befehle
verbunden ist. Der Pufferverfügbarkeits-FIFO 685 ist
mit einer Schreiblogik 686 und einer Rücknahme- bzw. Beendigungslogik 687 verbunden.
-
Der
Puffer 690 für
nicht aufgegebene Befehle kann nicht aufgegebene Befehle entsprechend den
Befehlen speichern, die von einem peripheren Bus, etwa dem peripheren
Bus 560 aus 3 empfangen werden. Wie zuvor
im Zusammenhang mit der Beschreibung aus 3 dargelegt
ist, können aufwärtsgerichtete
nicht aufgegebene Befehle zur Verwendung von der Rückwärtsrichtungsschaltung bewahrt
werden, die Informnation benötigen
kann, die in dem nicht aufgegebenen Befehl in Aufwärtsrichtung
enthalten ist. Um das Speichern von Befehlen in dem Puffer 690 für nicht
aufgegebene Befehle zu beschleunigen, kann der Pufferverfügbarkeits-FIFO
zur nächsten
verfügbaren
Speicherstelle innerhalb des Puffers 690 für nicht
aufgegebene Befehle zeigen.
-
Wenn
der Puffer 690 für
nicht aufgegebene Befehle leer ist, können Befehle sequenziell gespeichert
werden, bis der Puffer 690 für nicht aufgegebene Befehle
voll ist. In Abhängigkeit
der Reihenfolge des Empfangens von Antworten, die mit den nicht aufgegeben
Befehlen verknüpft
sind, können
die nicht aufgegebenen Befehle entfernt werden oder außer der
Reihe abgeschlossen werden, wodurch „Löcher" oder freie Plätze entsprechend einem gewissen
Muster zurückbleiben.
Um daher neue Befehle in dem Puffer 690 für nicht
aufgegebene Befehle speichern zu können, müssen die verfügbaren Speicherplätze unter
Anwendung des Pufferverfügbarkeits-FIFO 685 überwacht
werden.
-
In
der dargestellten Ausführungsform
enthält der
Puffer 690 für
nicht aufgegebene Befehle 8 Speicherplätze. Der Pufferverfügbarkeits-FIFO 685 enthält ebenso
8 Speicherplätze
und jeder der 8 Speicherplätze
innerhalb des Pufferverfügbarkeits-FIFO 685 kann
drei Bitwerte speichern. Die in dem Pufferverfügbarkeits-FIFO 685 gespeicherten
Werten entsprechen den Adressen der Speicherplätze innerhalb des Puffers 690 für nicht
aufgegebene Befehle. Somit kann jeder 3-Bit-Wert als ein Index in
den Puffer 690 für
nicht aufgegebene Befehle verwendet werden. Zu beachten ist, dass
in anderen Ausführungsformen eine
andere geeignete Anzahl an Speicherplätzen und andere Bit-Zahlen
verwendet werden können. Da
der Pufferverfügbarkeits-FIFO 685 eine FIFO-Struktur
aufweist, können
Werte in der Reihenfolge ausgelesen werden, in der sie geschrieben
wurden. Somit werden in der vorliegenden Ausführungsform die Werte an das
Ende geschrieben und werden an Anfang des Pufferverfügbarkeits-FIFO 685 ausgelesen.
Es ist jedoch zu beachten, dass in anderen Ausführungsformen die Begriffe Anfang
und Ende in umgekehrter Reihenfolge verwendet werden können. Ferner
ist zu beachten, dass in anderen Ausführungsformen Lese- und Schreibzeiger
eingesetzt werden, um an die entsprechenden Speicherstellen innerhalb
des Pufferverfügbarkeits-FIFO 685 zu
zeigen.
-
Beim
Initialisieren kann der Puffer 690 für nicht aufgegebene Befehle
leer sein und somit sind alle Speicherplätze verfügbar. Der Pufferverfügbarkeits-FIFO 685 kann
so initialisiert werden, dass die oberste Stelle des Pufferverfügbarkeits-FIFO 685 einen
Indexwert entsprechend der Adresse des Speicherplatzes Null des
Puffers 690 für
nicht aufgegebene Befehle enthält.
Die nächste
Position in dem Pufferverfügbarkeits-FIFO 685 kann
einen Indexwert enthalten, der dem Adressenplatz 1 entspricht, usw. Wenn
somit ein nicht aufgegebener Befehl eintrifft, kann die Schreiblogik 686 den
in dem obersten Platz des Pufferverfügbarkeits-FIFO 685 enthaltenen
Wert lesen und nachfolgend bewirken, dass der Befehl an die Adresse
des Speicherplatz 0 geschrieben wird. Wenn der Befehl gespeichert
ist, werden alle Indexwerte, die in dem Pufferverfügbarkeits-FIFO 685 gespeichert
sind, um eine Speicherstelle nach oben geschoben, so dass die Adresse
der Position 1 an der obersten Position in dem Pufferverfügbarkeits-FIFO 685 steht.
-
Wenn
ein spezieller Befehl in Abwärtsrichtung
abgeschlossen und der entsprechende nicht aufgegeben Befehl, der
in dem Puffer 690 für
nicht aufgegebene Befehle gespeichert ist, nicht mehr benötigt wird,
kann dieser aus dem Puffer 690 für nicht aufgegebene Befehle
zurückgenommen
werden. Somit macht der Puffer 690 für nicht aufgegebene Befehle
die Position, an der der nicht aufgegebene Befehl gespeichert war,
frei und stellt eine entsprechende Angabe an die Rücknahmelogik 687 zur
Verfügung.
Die Rücknahmelogik 687 kann
bestimmen, wann die Speicherstelle verfügbar wird, um in Reaktion darauf
zu bewirken, dass der der Adresse der verfügbaren Speicherstelle entsprechende
Wert für den
Pufferverfügbarkeits-FIFO 685 an
die unterste Stelle des Pufferverfügbarkeits-FIFO 685 geschrieben
wird. Somit enthält
die oberste Position des Pufferverfügbarkeits-FIFO 685 den
Indexwert, der der Adresse einer verfügbaren Speicherstelle entspricht, wenn
verfügbare
Speicherstellen vorhanden sind. Im Falle, dass es keine verfügbaren Speicherstellen
in dem Puffer 690 für
nicht aufgegebene Befehle gibt, wird die Schreiblogik 686 daran
gehindert, dass sie bewirkt, dass Befehle in dem Puffer 690 für nicht
aufgegebene Befehle gespeichert werden.
-
7 zeigt
eine beispielhafte Ansicht einer Ausführungsform der Steuerlogik-
und Speichereinheit aus 3. Die Steuerlogik- und Speichereinheit 460 umfasst
ein Pufferverfügbarkeitsregister 600,
ein Kopfregister 610, ein „nächster Zeiger"-Register 620, ein
Ende-Register 630 und
ein Teilantwortzeigerregister 640.
-
In
der dargestellten Ausführungsform
enthält das
Kopfregister 610 29 Bits, die den 29 möglichen Markierungswerten entsprechen,
die von der NP-Quellenmarkierungslogikeinheit 490 aus 3 erzeugt
werden. Das Kopfregister 610 wird verwendet, um anzuzeigen,
welche Befehlspakete die ersten Befehlspakete ihrer entsprechenden
Datenströme
sind. Der Anschaulichkeit halber sind die Bits 0 und 3 gesetzt,
um anzuzeigen, dass die Befehlspakete mit den Werten 0 und 3 Kopfpakete
sind. Im hierin verwendeten Sinne bezeichnet ein Datenstrom eine beliebige
Anzahl an Paketen in einer oder mehreren Paketsequenzen, die mit
einer Datenanforderung verknüpft
sind. Beispielsweise kann ein nicht aufgegebener Leseanforderungsbefehl
in mehrere Lesebefehle aufgeteilt werden, die alle zu dem gleichen Datenstrom
gehören.
Für Datenströme, die
mehr als ein Paket enthalten, können
die Register „nächster Zeiger" 620 und
das Enderegister 630 verwendet werden, um die Reihenfolge
der verbleibenden Pakete in dem Datenstrom zu verfolgen.
-
Das
Register „nächster Zeiger" 620 kann ebenso
29 Speicherstellen enthalten, wovon jede 5 Bits zum Beschreiben
von zumindest von 29 Markierungswerten ausgebildet ist. Jede Stelle
kann daher für
einen der 29 Markierungswerte repräsentativ sein. Somit kann der
in jeder Position des nächsten Zeigers 620 gespeicherte
Wert verwendet werden, um auf die nächste Position innerhalb des
Register „nächster Zeiger" 620 zu
zeigen. Ferner repräsentiert der
Wert, der in jeder Position gespeichert ist, auch einen Markierungswert
des nächsten
Pakets in einem speziellen Datenstrom. Somit kann eine Sequenz aus
Werten, die innerhalb dem Register „nächster Zeiger" 620 gespeichert
sind, auch verwendet werden, um die Reihenfolge einer Reihe von Paketen
eines Datenstroms zu rekonstruieren oder zu verifizieren, die nicht
in die Reihenfolgen empfangen werden, in der sie gesendet wurden.
-
Das
Enderegister 630 kann ebenso 29 Bits enthalten, die jeweils
der 29 Markierungswerten entsprechen. Das Enderegister 630 kann
verwendet werden, um den Markierungswert anzugeben, der dem letzten
Paket in einem speziellen Datenstrom entspricht. In der dargestellten
Ausführungsform
sind die Bits 2 und 5 gesetzt, wodurch angezeigt wird, dass die
Befehlspakete mit den Markierungswerten 0 und 3 die Endpakete sind.
-
Zu
beachten ist, dass, obwohl in der zuvor beschriebenen Ausführungsform
ein Enderegister verwendet wird, um das letzte Paket in einem speziellen
Datenstrom anzugeben, in anderen Ausführungsformen ein spezieller
Wert in einer Speicherstelle des Registers „nächster Zeiger' 620 gespeichert
werden kann. Der spezielle Wert kann dann kennzeichnend sein dafür, dass
der der Stelle entsprechende Markierungswert, in der dieser gespeichert
ist, einem letzten Paket in einem speziellen Datenstrom entspricht.
-
In
der dargestellten Ausführungsform
kann das Pufferverfügbarkeitsregister 600 auch
29 Bits enthalten, die jeweils den 29 Markierungswerten entsprechen.
Das Pufferverfügbarkeitsregister 600 kann verwendet
werden, um anzuzeigen, welche der Antworten, die mit einem speziellen
Datenstrom verknüpft
sind, bereits empfangen wurden. Beispielsweise sind die Datenpakete,
die die Markierungswerte 3 und 4 enthalten, empfangen und in dem
Datenpuffer, etwa dem Datenpuffer 400 aus 3 gespeichert.
Folglich können
die Bit-Zahlen 3
und 4 des Pufferverfügbarkeitsregisters 600 aus 7 angegeben,
dass die Daten verfügbar
sind, in dem diese gesetzt werden.
-
Der
Teilantwortzeiger 640 kann ebenso 29 Positionen enthalten,
die jeweils in der Lage sind, drei Bits zur Beschreibung von bis
zu 8 Positionen innerhalb eines Puffers, etwa dem NP-Befehlspuffer 480 aus 3,
zu beschreiben. Jeder 3-Bit-Wert kann als ein Indexwert verwendet
werden, der einer Adresse einer Speicherstelle innerhalb des NP-Befehlspuffers 480 aus 3 entspricht.
Somit kann der Teilantwortzeiger 640 verwendet werden,
um anzuzeigen, welche Antwortbefehle mit einem ursprünglichen
nicht aufgegebenen Befehl verknüpft sind,
der in dem NP-Befehlspuffer 480 aus 3 gespeichert
ist. Somit kann der Teilantwortzeiger 640 Fällen verwendet
werden, in denen eine teilweise Übertragung
von Daten zu einem peripheren Bus notwendig ist.
-
Es
sollte beachtet werden, dass, obwohl es 29 Markierungswerte gibt,
wie zuvor beschrieben ist, in anderen Ausführungsformen auch mehr oder
weniger Markierungswerte verwendet werden können. Daher wird in der vorliegenden
Erfindung auch berücksichtigt,
dass das Kopfregister 610, der nächste Zeiger 620,
das Enderegister 630, das Pufferverfügbarkeitsregister 600 und
der Teilantwortzeiger 640 jeweils mehr oder weniger Bits
enthalten können.
Ferner ist zu berücksichtigen,
dass die mit diesen Registern verknüpfte Logikschaltung in umgekehrter
Form vorgegeben sein, so dass Bits zurückgesetzt werden können, anstelle
diese zu setzen, um einen entsprechenden Markierungswert anzugeben.
-
Wie
zuvor in Verbindung mit der Beschreibung der 3 dargelegt
ist, kann es, wenn ein Buszyklus in nicht aufgegebene Paketbefehle
durch die Busschnittstellenschaltung 470 übersetzt
wird, mehrere Antwortpakete geben, die mit diesen nicht auf gegebenen
Befehlspaket verknüpft
sind. Ferner wurde erwähnt,
das Antwortpakete von dem Abwärtsrichtungsabschnitt 360 außer der
Reihenfolge empfangen werden können
und dass die Reihenfolge der Pakete innerhalb eines Datenstroms
in Abhängigkeit von
der Art des peripheren Busses beibehalten werden kann. Wie nachfolgend
detaillierter in Verbindung mit den Beschreibungen der 8 und 9 dargelegt
ist, werden nicht aufgegebene Befehle von dem Aufwärtsrichtungsabschnitt 450 empfangen
und Quellenmarkierungswerte werden von der NP-Quellenmarkierungslogikeinheit 490 für diese
nicht aufgegebenen Befehle erzeugt. Anschließend können das Kopfregister 610,
der nächste
Zeiger 620, das Enderegister 630, das Pufferverfügbarkeitsregister 600 und
das Teilantwortregister 640 in der Steuerlogik- und Speichereinheit 460 verwendet
werden, um die korrekte Reihenfolge der Antworten innerhalb eines oder
mehrerer Datenströme
unter Anwendung der nicht aufgegebenen Quellenmarkierungswerte zu
bewahren. Wenn ferner Antworten empfangen werden, kann die Steuerlogik-
und Speichereinheit 460 verwendet werden, wenn eine Sequenz
aus Daten, die einen Teil eines Datenstroms bildet, übertragen
wird.
-
Es
ist zu beachten, dass obwohl die dargestellte Ausführungsform
Register für
die Speicherung verwendet, es auch möglich ist, in anderen Ausführungsformen
andere geeignete Arten an Speichereinrichtungen, etwa ein Speicher
mit wahlfreiem Zugriff oder eine andere Art eines elektrisch löschbaren Nur-Lesespeichers
zu verwenden, um nur einige Beispiele zu nennen.
-
8 ist
ein Flussdiagramm, das eine Transaktionsumordnung einer Ausführungsform
der peripheren Schnittstellenschaltung 350 der 3 zeigt.
Es wird nun kollektiv auf die 3, 7 und 8 verwiesen,
wobei der Prozessablauf im Schritt 800 aus 8 beginnt
und zum Schritt 810 weitergeht, in welchem ein nicht aufgegebener
Befehl von dem Aufwärtsrichtungsabschnitt 450 aus 3 empfangen
wird. Im Schritt 820 aus 8 entscheidet
die Analysierlogik 500 aus 3, ob der
nicht aufgegebene Befehl in mehrere nicht aufgegebene Befehle aufgeteilt
werden soll, um die Erfordemisse des I/O-Tunnels in der Aufwärts richtung
zu erfüllen. Wenn
die Transaktionen PCI-Transaktionen sind, oder wenn die Transaktionen
PCI-X-Transaktionen sind und der nicht aufgegebene Befehl nicht
aufgeteilt werden muss, geht der Verfahrensablauf zum Schritt 830 aus 8 weiter,
in welchem der nicht aufgegebene Befehl in dem NP-Befehlspuffer 480 aus 3 gespeichert
wird. Im Allgemeinen werden PCI-Transaktionen nicht aufgeteilt.
Beispielsweise kann eine nicht aufgegebene Leseanforderung durch die
periphere Schnittstellenschaltung 350 aus 3 für eine Cache-Zeilengrenze
gedacht sein. Jedoch sind die PCI-Transaktionen unter gewissen Bedingungen
keineswegs von einer Aufteilung ausgeschlossen.
-
Der
Funktionsablauf geht zum Schritt 840 aus 8 weiter,
in welchem ein nicht aufgegebener Quellenmarkierungswert erzeugt
wird und dem nicht aufgegebenen Befehl angefügt wird. Der Ablauf geht nun
zum Schritt 842 weiter, in welchem das Kopfregister 610 aus 8 aktualisiert
wird, indem das Bit gesetzt wird, das dem Quellenmarkierungswert
entspricht, der gerade für
den nicht aufgegebenen Befehl erzeugt wurde. Der Ablauf geht nun
zum Schritt 850 aus 8 weiter,
in welchem ein Steuerungsbefehl für den nicht aufgegebenen Befehl
durch den Steuerbefehlgenerator 520 aus 3 erzeugt
wird, und dieser wird an die I/O-Tunnelsteuerlogik zur Verteilung
gesendet. Im Schritt 860 der 8 wird der nicht
aufgegebene Befehl ebenso innerhalb des Befehlspuffers 530 aus 3 für virtuelle
Kanäle
gespeichert, um auf die Übertragung
zu warten, und im Schritt 870 der 8 wird der
nicht aufgegebene Befehl übertragen,
wenn der entsprechende Steuerbefehl von der Verteilungsschaltung
in der I/O-Tunnelsteuerlogik ausgewählt wird.
-
Es
sei wieder auf den Schritt 820 der 8 verwiesen;
wenn die Analyse des nicht aufgegebenen Befehls notwendig ist, geht
der Ablauf zum Schritt 825 weiter, in welchem der nicht
aufgegebene Befehl in mehrere nicht aufgegebene Befehle, die der gleichen
Sequenz oder dem gleichen Datenstrom angehören, unterteilt. Im Schritt 835 wird
der ursprüngliche
nicht aufgegebene Befehl in dem NP-Befehlspuffer 480 der 3 gespeichert.
Im Schritt 845 der 8 werden
NP-Quellenmarkierungen für
jeden der nicht aufgegebenen Befehle erzeugt, die gerade aus dem
ursprünglichen
Befehl erzeugt wurden. Der Ablauf geht nun zum Schritt 842 weiter,
in welchem das Kopfregister 610, der nächste Zeiger 620,
das Enderegister 630 und der Teilantwortzeiger aus 7 aktualisiert
werden. Das Kopfregister 610 kann aktualisiert werden,
indem das Bit gesetzt wird, das dem gerade für den ersten nicht aufgegebenen
Befehl innerhalb der Sequenz erzeugten Markierungswert entspricht.
Das Enderegister 630 kann aktualisiert werden, indem das
Bit gesetzt wird, das für
den letzten nicht aufgegebenen Befehl innerhalb des Datenstroms
erzeugten Markierungswert entspricht.
-
Der
nächste
Zeiger 620 bzw. das Register für „den nächsten Zeiger" wird aktualisiert,
indem die Markierungswerte der verbleibenden nicht aufgegebenen
Befehle innerhalb der Sequenz eingeladen werden. Die Markierungswerte
werden so eingeladen, dass jedes Paket in der Sequenz mit dem nächsten Paket
in der Sequenz verknüpft
ist. Beispielsweise kann ein gegebener Datenstrom aus drei Paketen
aufgebaut sein. Die Pakete sind als 0, 1 und 2 angeordnet und werden
somit als 0, 1 und 2 markiert. Daher wird das Bit 0 des Kopfregister 610 gesetzt
und die Bits 1 und 2 werden zurückgesetzt,
da lediglich ein Paket der Anfang bzw. der Kopf sein kann. Um die
nächsten
Pakete in dem Datenstrom zu verfolgen, werden die Positionen 0 und
1 des Registers des nächsten
Zeigers 620 mit den Markierungswerten der nächsten zwei
Pakete, d. h. 1 und 2 geladen. Da das Bit0 des Kopfregister 610 gesetzt
ist, wird die Position des nächsten
Zeigers 620 mit dem Markierungswert „1" gesetzt, der angibt, dass das Paket
mit dem Markierungswert 1 das „nächste" Paket in dem Datenstrom
ist. Ferner wird die Position 1 des nächsten Zeigers 620 mit
dem Markierungswert „2" geladen, der angibt,
dass das Paket mit dem Markierungswert 2 das „nächste" Paket in dem Datenstrom ist. Da das
Paket 2 das letzte Paket in dem Datenstrom ist, wird dieses als
Ende gekennzeichnet. Folglich wird das Bit 2 des Enderegisters 630 gesetzt. Zu
beachten ist, dass, obwohl in der obigen Ausführungsform die Markierungswerte
einer numerischen Sequenz (beispielsweise 0, 1 und 2) zugeordnet
sind, in anderen Ausführungsformen
die Markierungswerte auch einer beliebigen Reihenfolge zugeordnet
sein können
und dass die Markierungswerte so zugeordnet sein können, dass
diese den verfügbaren
Markierungswerten entsprechen. In anderen Ausführungsformen können mehr
oder weniger Pakete in einem Datenstrom enthalten sein und somit
können
mehr oder weniger Markierungswerte verwendet werden.
-
Die
mehreren nicht aufgegebenen Befehle, die einen Datenstrom bilden,
können
von der Abwärtsrichtungslogik
in ungeordneter Reihenfolge empfangen werden, wodurch eine Verzögerung beim Senden
zu dem anfordernden Gerät
hervorgerufen wird. Diese Verzögerung
kann bewirken, dass die periphere Schnittstellenschaltung 350 aus 3 eine Teilantwort
für PCI-X-Transaktionen
angibt. In einem derartigen Falle kann die Abwärtsrichtungslogik ein Erzeuger
einer Reihe von Teilantwortzyklen werden, und ein Aufteilungsabschlusszyklus
und Information, die in dem ursprünglichen nicht aufgegebenen
Befehl enthalten ist und den mehreren nicht aufgegebenen Befehlen
entspricht, kann erforderlich sein, um einen aufgeteilten Antwortzyklus
und einen Busvervollständigungszyklus
zu initiieren. Wie nachfolgend detaillierter in Verbindung mit 9 erläutert ist,
wird das Teilantwortzeigerregister 640 aus 7 verwendet, um
jede der mehreren Antworten eines speziellen Datenstromes mit den
ursprünglichen
nicht aufgegebenen Befehl, der in dem NP-Befehlspuffer 480 aus 3 gespeichert
ist, zu verknüpfen.
Folglich kann jede Position in dem Teilantwortzeigerregister 640 aus 7 einen
NP-Quellenmarkierungswert eines entsprechenden Antwortbefehls repräsentieren. Jede
Position kann mit einem Indexwert besetzt werden, der der Adresse
einer Position innerhalb des NP-Befehlspuffers 480 aus 3 entspricht,
an der der ursprüngliche
nicht aufgegebene Befehl für
diese Antwort gespeichert ist. In dem obigen Beispiel werden die
Positionen 0, 1 und 2 innerhalb des Teilantwortzeigerregister 640 aus 7 mit
dem Indexwert beschrieben, der der Adresse der Position innerhalb des
NP-Befehlspuffers 480 aus 3 entspricht,
in welchem der ursprüngliche
nicht aufgegebene Befehl gespeichert ist.
-
Der
Ablauf geht dann zum Schritt 850 aus 8 weiter,
in welchem Steuerbefehle für
jeden der mehreren nicht aufgegebenen Befehle erzeugt und an die
I/O-Tunnelsteuerlogik gesendet werden. Ferner wird im Schritt 860 jeder
der mehreren nicht aufgegebenen Befehle in dem Befehlspuffer für virtuelle Kanäle 530 aus 3 gespeichert,
um auf die Sendung zu warten. Im Schritt 870 aus 8 wird
jeder der mehreren nicht aufgegebenen Befehle übertragen, wenn der jeweilige
entsprechende Steuerbefehl von der Verteilungsschaltung in der I/O-Tunnelsteuerlogik
ausgewählt
ist. Der Funktionsablauf endet im Schritt 880.
-
9 zeigt
ein Flussdiagramm, das den Vorgang der aufgeteilten Antwort der
peripheren Schnittstellenschaltung 350 aus 3 zeigt.
Es sei gemeinsam auf 3, 7 und 9 verwiesen,
wobei der Ablauf im Schritt 900 aus 9 beginnt
und zum Schritt 905 weitergeht, in welchem ein Antwortbefehl entsprechend
einem aufwärts
gerichteten nicht aufgegebenen Befehl durch den Abwärtsrichtungsabschnitt 360 aus 3 empfangen
wird. Im Schritt 910 wird ein Datensegment, das mit dem
Antwortbefehl verknüpft
ist, in dem Datenpuffer 400 aus 3 gespeichert.
In Reaktion auf das Empfangen des Datensegments wird das Pufferverfügbarkeitsregister 600 aus 7 aktualisiert,
indem ein Bit gesetzt wird, das dem NP-Quellenmarkierungswert entspricht,
der zusammen mit dem Antwortbefehl empfangen wurde. Der Ablauf geht
nun zum Schritt 915 aus 9 weiter,
in welchem der Zustand eines Bits in dem Kopfregister 610 aus 7,
der dem Markierungswert des Antwort befehls entspricht, geprüft wird,
um zu erkennen, ob der Befehl das Kopfpaket eines Datenstromes ist.
Wenn der empfangene Antwortbefehl nicht ein Kopfpaket ist, dann
geht der Ablauf zum Schritt 920 aus 9 weiter,
in welchem der Befehl verworfen wird und der Ablauf geht zurück zum Schritt 905,
um auf einen weiteren Antwortbefehl zu warten. Wenn der Befehlsbereich
nicht der Kopf ist, kann dieser verworfen werden, da angenommen werden
kann, dass es ein Kopfpaket gibt, das mit diesem Datenstrom verknüpft ist
und es wird lediglich das Datensegment bewahrt. Es sei nun wieder
auf den Schritt 915 verwiesen; wenn der Antwortbefehl ein
Kopfpaket ist, geht der Ablauf zum Schritt 925 weiter,
in welchem der Antwortbefehl einem Verteilungsmarkierungswert durch
die Markierungslogik 380 der 3 zugeordnet
und in dem Antwortkanal des Befehlspuffers für virtuelle Kanäle 390 gespeichert
wird.
-
Im
Schritt 930 aus 9 ermittelt die Verteilungslogik 410 aus 3 einen
aktuell ausgewählten Befehl
aus dem Befehlspuffer 390 für virtuelle Kanäle. Wenn
der Antwortbefehl der nicht aktuell ausgewählte Befehl ist, bleibt der
Ablauf im Schritt 930, wobei die Auswahl bzw. Verteilung
weitergeht. Wenn andererseits der Antwortbefehl der aktuell ausgewählte Befehl
ist, geht der Ablauf zum Schritt 935 weiter. Im Schritt 935 geht,
wenn die Transaktionen PCI-Transaktionen sind und alle Datenpakete
als verfügbar
gelten, der Ablauf zum Schritt 940 weiter, in welchem das
Kopfregister 610, der nächste
Zeiger 620, das Enderegister 630 und das Pufferverfügbarkeitsregister 600 aus 7 aktualisiert
werden, so dass die mit dem I/O-Strom verknüpften Markierungswerte von
der NP-Quellenmarkierungslogik 490 aus 3 erneut
verwendet werden. Ferner kann der ursprüngliche nicht aufgegebene Befehl
aus dem NP-Befehlspuffer 430 aus 3 zurückgenommen werden.
Im Schritt 945 der 9 wird ein
Busabschlusszyklus einschließlich
aller angeforderten Daten auf dem peripheren Bus 560 aus 3 initiiert.
-
Es
sei wieder auf Schritt 935 verwiesen. Wenn die Transaktionen
PCI-X-Transaktionen sind, dann geht der Ablauf zum Schritt 960 weiter,
in welchem es notwendig sein kann zu bestimmen, welche mit diesem
Datenstrom verknüpften
Datenpakete verfügbar
sind. Dies kann bewerkstelligt werden, indem die Kombination des
nächsten
Zeigers 620, des Enderegisters 630 und des Pufferverfügbarkeitsregisters 600 aus 7 geprüft wird.
Wenn alle Datenpakete eingetroffen sind, geht der Ablauf zum Schritt 965 aus 9 weiter.
Im Schritt 965 werden das Kopfregister 610, der
nächste
Zeiger 620, das Enderegister 630, das Pufferverfügbarkeitsregister 600 und
das Teilantwortzeigerregister aus 640 aus 7 aktuali siert,
so dass die mit dem Datenstrom verknüpften Markierungswerte erneut
von der NP-Quellenmarkierungslogik 490 aus 3 verwendet
werden können.
Im Schritt 970 aus 9 wird ein
Abschlusszyklus initiert, der anzeigt, dass alle Antwortdaten an
die anfordernde Einrichtung gesendet sind. Um den Abschlusszyklus
zu initiieren, wird die periphere Schnittstellenschaltung 350 aus 3 nunmehr
das Quellengerät
und kann einen geteilten Abschlusszyklus initiieren. Um den geteilten
Abschlusszyklus zu initiieren, wird Information benötigt, die
in dem ursprünglich
nicht aufgegebenen Zyklus entsprechend dem aktuellen Antwortpaket,
das in dem NP-Befehlspuffer 480 aus 3 gespeichert
ist, vorhanden ist. Daher wird die Position, die dem Quellenmarkierungswert
der aufgeteilten Antwort entspricht, aus dem Teilantwortzeigerregister 640 aus 7 ausgelesen.
Die in dem ursprünglich
nicht aufgegebenen Zyklus enthaltene Information wird abgerufen und
der Teilabschlusszyklus wird initiiert. Ferner kann der ursprüngliche
nicht aufgegebene Befehl aus dem NP-Befehlspuffer 430 aus 3 zurückgezogen
werden.
-
Es
sei wieder auf Schritt 960 verwiesen; wenn lediglich einige
mit dem Datenstrom verknüpften
Datenpakete eingetroffen sind und die verfügbaren Datenpakete erkannt
sind, geht der Ablauf zum Schritt 975 weiter, in welchem
das Kopfregister 610, der nächste Zeiger 610,
das Pufferverfügbarkeitsregister 600 und
der Teilantwortzeiger 640 aus 7 aktualisiert
werden. Da jedoch nur einige der Datenpakete verfügbar sind,
wird ein Teilantwortzyklus erzeugt. Die Teilantworttransaktion kann
ein Befehlspaket und Datensegmente enthalten, die in dem Datenpuffer 400 aus 7 gespeichert
sind, die zusammen eine Datensequenz ergeben, die einen Teil des Datenstroms
bildet. Folglich werden das Kopfregister 610 und der nächste Zeiger 620 aus 9 aktualisiert,
um einen neuen Kopf und nächste
Pakete des Datenstromes wiederzugegeben. Im Schritt 985 wird ein
Teilantwortbuszyklus auf dem peripheren Bus 560 aus 3 initiiert. Ähnlich zu
dem obigen Falle kann Information erforderlich sein, die in dem
ursprünglich
nicht aufgegebenen Zyklus enthalten ist und dem aktuellen Antwortpaket
entspricht, das in dem NP-Befehlspuffer 480 gespeichert
ist, um den Teilantwortzyklus zu initiieren. Somit wird die Position,
die dem Quellenmarkierungswert der aufgeteilten Antwort entspricht,
aus dem Teilantwortzeigerregister 640 aus 7 ausgelesen.
Die Information, die in dem ursprünglich nicht aufgegebenen Zyklus
enthalten ist, wird ausgelesen und der Teilantwortzyklus wird initiiert.
Im Gegensatz zu dem obigen Falle zur korrekten Initiierung eines
Teilantwortbuszyklusses wird die Busschnittstellenschaltung 470 aus 3 über die
Datenmenge in Kenntnis gesetzt, die in dem Teilantwortbefehl gesendet
wird, indem die entsprechende Zahl in dem Datenzahlfeld des Paketes mit eingeschlossen
wird. Die Zahl gibt die Anzahl an gesendeten Datenblöcken wieder.
Zurückkehrend
zum Schritt 960 aus 9 werden,
wenn nachfolgende Antwortbefehle empfangen werden, die die verbleibenden
Datenpakete enthalten, diese verbleibenden Datenpakete, die den
verbleibenden Anteil des Datenstroms bilden, zu dem anfordernden
Gerät unter Anwendung
der zusätzlichen
Teilantwortzyklen gesendet. Wenn der Rest der Daten gesendet ist,
wird ein Teilabschlusszyklus initiiert und der ursprüngliche nicht
aufgegebene Befehl kann aus dem NP-Befehlspuffer 430 aus 3 zurückgenommen
werden. Die Funktionsbeschreibung endet im Schritt 950 aus 9.
-
10 ist
eine Blockansicht einer Ausführungsform
einer peripheren Schnittstellenschaltung zur Verbindung mit einem
Graphikbus. Eine periphere Schnittstellenschaltung 1000 umfasst
einen Abwärtsrichtungsabschnitt 1010 und
einen Aufwärtsrichtungsabschnitt 1020.
Die periphere Schnittstellenschaltung 1000 umfasst ferner
eine Tunnelschnittstelle 1030, die mit einem I/O-Tunnel,
etwa dem I/O-Tunnel 140 aus 2, verbunden
sein kann. In dem Abwärtsrichtungsabschnitt 1010 aus 10 ist die
Tunnelschnittstelle 1030 ferner mit einem Befehlspuffer 1040 verbunden.
Der Befehlspuffer 1040 ist mit einer Markierungslogikeinheit 1050 verbunden. Die
Markierungslogikeinheit 1050 ist mit einem Befehlspuffer 1060 für virtuelle
Kanäle
verbunden. Der Befehlspuffer 1060 für virtuelle Kanäle ist mit
einer Verteilungslogikeinheit 1070 verbunden, die mit einer Busschnittstellenschaltung 1080 verbunden
ist. Die Tunnelschnittstelle 1030 ist ferner mit einem
Datenpuffer 1100 verbunden, der wiederum mit der Busschnittstellenschaltung 1080 verbunden
ist. Die Busschnittstellenschaltung 1080 ist mit einem
Graphikbus 1090 verbunden, der mit einem Graphikadapter 1095 gekoppelt
ist. In einer bevorzugten Ausführungsform
ist der Graphikbus 1080 ein beschleunigter Graphikport-
(AGP) Bus, obwohl in andere Ausführungsformen
andere Arten an Graphikbussen verwendet werden können.
-
In
dem Aufwärtsrichtungsabschnitt 1020 ist die
Busschnittstellenschaltung 1080 mit einem NP-Befehlspuffer 1110 und
mit einer Analysierlogik 1070 verbunden. Des weiteren ist
die Busschnittstellenschaltung 1080 mit einem Datenpuffer 1150 verbunden.
Der NP-Befehlspuffer 1110 ist
mit einem Steuerbefehlgenerator 1140 und einer NP-Quellenmarkierungslogikeinheit 1120 verbunden.
Der Steuerbefehlgenerator 1140 ist mit einem Befehlspuffer für virtuelle
Kanäle 1160 und
der Tunnelschnittstelle 1030 verbunden. Der Befehlspuffer 1160 für virtuelle Kanäle ist ferner
mit der Tunnelschnittstelle 1030 verbunden. Die periphere
Schnittstellenschaltung 1000 umfasst ferner eine Steuerlogik-
und Speichereinheit 1130, die mit dem Datenpuffer 1100 des
Abwärtsrichtungsabschnitts 1010 verbunden
ist. Die Steuerlogik- und Speichereinheit 1130 ist ferner
mit der NP-Quellenmarkierungslogik 1120 und
dem NP-Befehlspuffer 1110 des Aufwärtsrichtungsabschnitts 1020 verbunden.
-
In
der dargestellten Ausführungsform
enthalten der Befehlspuffer 1060 für virtuelle Kanäle und der
Befehlspuffer 1160 für
virtuelle Kanäle
jeweils drei separate FIFO-Abschnitte, die den drei Transaktionsarten
entsprechen: aufgegeben, nicht aufgegeben und Antwort. Die Befehle
werden in den entsprechenden FIFO in der Reihenfolge angeordnet,
in der sie empfangen wurden. Um jedoch die Regeln hinsichtlich der
Reihenfolge, die mit dem Bus oder der Geräteart verknüpft sind, die den ursprünglichen
Befehl erzeugt haben, beizubehalten, können die Transaktionen in ungeordneter
Weise zwischen unterschiedlichen Arten an Transaktionen verarbeitet
werden. Dies kann durch die Befehlsorganisationsablaufeinheit bewerkstelligt
werden, die in Kombination aus dem Befehlspuffer 1060 für virtuelle
Kanäle
und der Verteilungslogik 1070 aufgebaut ist.
-
In
einer Ausführungsform
ist der Befehlspuffer 1040 ein zweistufiger FIFO, der als
ein Puffermechanismus für
Befehle dient, die von dem I/O-Tunnel 1040 aus 2 zu
dem Befehlspuffer 1090 aus 10 für virtuelle
Kanäle
gesendet wurden. Wenn eine Transaktion in Abwärtsrichtung zu der peripheren
Schnittstellenschaltung 1000 gesendet wird, wird der Datenanteil
der Transaktion in dem Datenpuffer 1100 gespeichert, während der
Befehlsanteil der Transaktion in dem Befehlspuffer 1060 für virtuelle Kanäle gespeichert
wird. Zunächst
wird jedoch die Markierungslogik 1050 so konfiguriert,
dass ein Markierungswert erzeugt und dem Befehl angehängt wird.
Der Markierungswert kann der Reihefolge des Empfangens des Befehls
im Verhältnis
zu anderen empfangenen Befehlen entsprechen und kann in nachfolgenden
Auswahl- bzw. Verteilungszyklen verwendet werden. Die Daten und
der Befehl können
so gekennzeichnet sein, dass sie als zu dem gleichen Paket gehörend erkennbar
sind, mittels der Kopfinformation, die in den Paketen enthalten
ist. Da ferner Graphikbusse bei einer Taktgeschwindigkeit laufen können, die
langsamer ist als die interne Taktgeschwindigkeit des I/O-Knotens,
können
Daten in den Datenpuffer 1100 unter Anwendung der Taktgeschwindigkeit
des I/O-Knotens eingeladen und mit einer anderen Taktgeschwindigkeit,
vorzugsweise der Taktgeschwindigkeit des Graphikbusses, der mit
der Busschnittstellenschaltung 1080 verbunden ist, ausgeladen
werden. Ferner können
sowohl der Datenpuffer 1100 und der Befehlspuffer 1060 für virtuelle Kanäle ausgebildet
sein, um eine Logikschaltung in Aufwärtsrichtung in Kenntnis zu
setzen, wenn Speicherplatz innerhalb des Puffers nicht verfügbar ist.
-
Da
einige Graphikadapter ursprünglich
unter Anwendung des PCI-Busses zur Kommunikation mit dem Systemspeicher
eingerichtet werden, können Graphikadapter,
etwa der Graphikadapter 1095 weiterhin eine PCI-Logik enthalten,
die in der Lage ist, PCI-Bustransaktionen
auf dem Graphikbus 1090 zu initiieren. Ferner können Konfigurationsbefehle,
die von anderen Geräten,
etwa einem Systemprozessor, initiiert wurden, an den Graphikadapter 1095 unter Anwendung
eines PCI-Befehls über
den Graphikbus 1090 gesendet werden. Somit kann zusätzlich zum Übersetzen
von AGP-Buszyklen in Paketbefehle und Paketbefehle in AGP-Buszyklen
die Busschnittstellenschaltung 1080 auch Paketbefehle in
PCI-Buszyklen übersetzen,
die für
eine Übertragung
auf dem Graphikbus 1090 geeignet sind.
-
Abhängig von
der Art des Befehls (d. h. aufgegeben, nicht aufgegeben oder Antwort)
wird der Befehl in einem entsprechenden FIFO für virtuelle Kanäle des Befehlpuffers 1060 für virtuelle
Kanäle gespeichert,
der in der Funktion ähnlich
ist zu dem Abwärtsrichtungsabschnitts 360 aus 3.
In 10 ist die Verteilungslogik 1070 ausgebildet,
zwischen den Transaktionen in dem Befehlspuffer 1060 für virtuelle
Kanäle
auszuwählen,
welche Transaktion als erstes, als zweites usw. verarbeitet wird.
Die Verteilungslogik 1070 kann ferner die von der Markierungslogikeinheit 1050 gelesenen
Markierungswerte während
der Verteilungszyklen verwenden. Ferner können für PCI-Antworten mehrere Antwortpakete zum
gleichen Datenstrom oder zur gleichen Sequenz gehören, wenn
diese von einer gemeinsamen Anforderungstransaktion stammen. Es
kann notwendig sein, die Antwortpakete, die zu einem gegebenen Datenstrom
gehören,
in der korrekten Reihenfolge auszuliefern, selbst wenn die Pakete
von der Logik in Abwärtsrichtung
in ungeregelter Reihenfolge empfangen werden. Diese Funktion kann ähnlich zu
der Beschreibung sein, die in Verbindung mit der 9 für PCI-Antworten
dargelegt ist.
-
Wie
nachfolgend detaillierter in Verbindung mit der Beschreibung der 11 erläutert ist,
wird eine AGP-Antwort, die von dem Abwärtsrichtungsabschnitt 1010 empfangen
wird, nicht in dem Befehlspuffer 1060 für virtuelle Kanäle gespeichert
und kann an den Verteilungszyklen nicht teilnehmen. Die AGP-Antwort
umgeht stattdessen die Puffer innerhalb des Befehlspuffers 1060 für virtuelle
Kanäle,
und die mit dem Antwortbefehl verknüpften Daten können zu
der Busschnittstelle 1080 gesendet werden. Da jedoch AGP-Antworten
auch durch andere Regeln hinsichtlich der Reihenfolge geregelt sein
können,
kann die Steuerlogik- und Speichereinheit 1130 und Speichereinheiten
enthalten, etwa Register zur Anwendung bei der Zuleitung von Paketen
in der korrekten Reihenfolge, und dies wird nachfolgend detaillierter im
Zusammenhang mit der Beschreibung der 12 erläutert.
-
Wenn
der Graphikadapter 1095 eine AGP-Transaktion auf dem Graphikbus 1090 initiiert, übersetzt
die Schnittstellenschaltung 1080 die Transaktion in Pakettransaktionen,
die Befehlspakete und Datenpakete enthalten können, wie dies zuvor beschrieben
ist. Die Datenpakete können
in dem Datenpuffer 1150 gespeichert werden, während die
Befehle in dem Befehlspuffer 1160 für virtuelle Kanäle in dem entsprechenden
virtuellen Kanal gespeichert werden. Vor der Speicherung in dem
Befehlspuffer 1160 für
virtuelle Kanäle
und abhängig
von der Art des Befehls kann die Analyselogik 1170 den
Befehl in eine Reihe kleinerer Befehle aufteilen. Wenn beispielsweise
der Graphikadapter 1090 einen Auslesevorgang eines größeren Blocks
an Daten aus dem Systemspeicher anfordert, kann die Analyselogik 1170 nicht aufgegeben
Lesebefehle des gleichen Speicherblocks aber in kleineren Blöcken erzeugen.
In einer Ausführungsform
werden die Blöcke
entlang der Cache-Speicherzeilengrenzen
erzeugt. Nachfolgend wird jeder der neu erzeugten nicht aufgegebenen
Befehle in dem Befehlspuffer 1160 für virtuelle Kanäle gespeichert
und der ursprünglich
nicht aufgegebene Befehl wird in dem NP-Befehlspuffer 1110 gespeichert.
-
In
der dargestellten Ausführungsform
erzeugt die NP-Quellenmarkierungslogik 1120 einen Markierungswert,
der durch die Abwärtsrichtungslogik
verwendet werden kann, um zu bestimmen, mit welchem Datenstrom ein
spezieller Antwortbefehl verknüpft
ist. Die NP-Quellenmarkierungslogik 490 erzeugt
einen Markierungswert, der mit jedem der nicht aufgegebenen Befehle
in Aufwärtsrichtung
verknüpft
ist. In einer Ausführungsform
werden die Markierungswerte 0 bis 29 erzeugt. Es können jedoch
in anderen Ausführungsformen
auch andere geeignete Anzahlen an Markierungswerten erzeugt werden.
-
Wenn
die Befehle in Aufwärtsrichtung
in dem Befehlspuffer 1160 für virtuelle Kanäle gespeichert werden,
erzeugt der Steuerbefehlgenerator 1140 Steuerbefehle ähnlich zu
dem Steuerbefehlen, die von den Sendern/Empfängern 110 und 120 der 2 erzeugt
werden. In 10 sendet der Steuerbefehlgenerator 1140 auch
jene Steuerbefehle über
die Tunnelschnittstelle 1030, um eine Steuereinheit, etwa
die Tunnelsteuereinheit 130 aus 2 beispielsweise
zu steuern, wodurch es möglich
ist, dass die Befehle in Aufwärtsrichtung
in dem I/O-Tunnel 140 disponiert werden. Die Tunnelschnittstelle 1030 aus 10 kann
eine Pufferschaltung für
allgemeine Zwecke enthalten, wie sie für die Bildung einer Schnittstelle
zwischen dem I/O-Tunnel 140 und einer Logik in der peripheren
Schnittstellenschaltung 1000 erforderlich ist.
-
11 ist
eine Ansicht einer Ausführungsform
einer peripheren Schnittstellenschaltung zur Handhabung von Graphikantworten.
Schaltungskomponenten, die jenen in 10 gezeigten
Schaltungskomponenten entsprechen, sind der Einfachheit und der
Klarheit mit gleichen Bezugszeichen belegt. Die periphere Schnittstellenschaltung
umfasst einen Bypass- bzw.
Umgehungsmechanismus 1200, der einen Datenpuffer 1100 umfasst,
der mit der Busschnittstellenschaltung 1080 verbunden ist.
Die Busschnittstellenschaltung 1080 umfasst einen FIFO-Puffer 1105,
der mit einem Zielbus 1185 und einem Quellenbus 1182 verbunden
ist. Der Quellenbus 1182 und der Zielbus 1185 sind
mit einem Graphikbus 1090 verbunden. Der Umgehungsmechanismus 1200 umfasst
ferner eine Befehlspufferschaltung für virtuelle Kanäle 1060,
die mit einer Verteilungslogik 1070 verbunden ist. Die
Verteilungslogik 1070 ist mit der Busschnittstellenschaltung 1080 verbunden.
Des weiteren umfasst der Umgehungsmechanismus 1200 eine
AGP-Umgehungsverbindung, die den Antwortkanal der Befehlspufferschaltung
für virtuelle
Kanäle 1060 und
die Schnittstellenschaltung 1080 verbindet.
-
Wie
zuvor mit Verbindung 10 erläutert ist, werden, wenn Antworten
und Befehle in Abwärtsrichtung
empfangen werden, diese in einem entsprechenden FIFO für virtuelle
Kanäle
der Befehlspufferspaltung für
virtuelle Kanäle 1060 gespeichert.
Wenn in 11 Verteilungszyklen aktuell
ausgewählte
Befehle bestimmen, können
die mit einem aktuell ausgewählten
Befehl verknüpften
Daten in den FIFO-Puffer 1105 übertragen werden. Solange Daten in
dem FIFO 1105 vorhanden sind, kann die Busschnittstelle 1080 Buszyklen
initiieren, die für
die Übertragung
auf dem Graphikbus 1090 geeignet sind. Wenn die Buszyklen
abgeschlossen sind und jeder aktuell ausgewählte Befehl der Befehlspufferschaltung
für virtuelle
Kanäle 1060 abgeschlossen ist,
können
die verbleibenden Befehle innerhalb eines vorgegebenen FIFO's für virtuelle
Kanäle
in Richtung zum Kopf dieses FIFO's
verschoben werden. Schließlich
kann jeder Befehl ausgelesen werden und an den Verteilungszyklen
teilgenommen haben, sofern der Befehl nicht ein AGP-Antwortbefehl ist.
-
In
der dargestellten Ausführungsform
umfasst die Busschnittstellenschaltung 1080 zwei separate
Busse: den Quellenbus 1182 und den Zielbus 1185.
Der Quellenbus 1182 und der Zielbus 1185 werden
von der Busschnittstelle 1080 verwendet, um Pakettransaktionen
zwischen dem Graphikbus 1090 und einem Knoten in Aufwärtsrichtung
zu transportieren. Der Zielbus 1182 wird verwendet, um
Befehle zu transportieren, die von einer Graphikeinrichtung initiiert
werden, die mit dem Graphikbus 1090 verbunden ist. Der
Zielbus 1185 kann verwendet werden, um Befehle zu transportieren,
die von anderen Geräten
initiiert werden, die nicht auf dem Graphikbus 1090 sind,
etwa einem Systemprozessor, um ein Beispiel zu nennen. In 11 enthalten
der Quellenbus 1182 sowie der Zielbus 1185 jeweils
einen Befehlskanal und einen Antwortkanal (nicht gezeigt). Der Befehlskanal
des Quellenbusses kann verwendet werden, um Befehle zu transportieren,
etwa nicht aufgegebene und aufgegebene Befehle, die von einer Einrichtung
auf dem Graphikbus initiiert werden. Der Antwortkanal des Quellenbusses
kann zum Transport von Antwortbefehlen verwendet werden, die von
einer Einrichtung erzeugt wurden, die nicht an dem Graphikbus liegt,
und die den aufgegebenen und nicht aufgegebenen Befehlen entsprechen,
die von einer Einrichtung auf dem Graphikbus initiiert wurden. Ferner
kann der Befehlskanal des Zielbusses verwendet werden, um Befehle,
etwa aufgegebene und nicht aufgegebene Befehle, die von an dem Graphikbus
nicht angeschlossene Geräte
initiiert wurden, zu transportieren. Der Antwortkanal des Zielbusses
kann verwendet werden, um Antwortbefehle zu übertragen, die von einem Gerät auf dem
Graphikbus erzeugt wurden, die jedoch aufgegebenen und nicht aufgegebenen
Befehlen entsprechen, die von einem Gerät initiiert wurden, das nicht
an dem Graphikbus angeschlossen ist.
-
Da
es zwei separate Busse gibt, die zur Übertragung von Transaktionen
verwendet werden, werden AGP- und PCI-Antwortbefehle in Abwärtsrichtung
von dem Antwortkanal des Quellenbusses 1182 übertragen,
während
aufgegebene und nicht aufgegebene Befehle in Abwärtsrichtung von dem Zielbus 1185 übertragen
werden. Um ein Bespiel anzugeben: es werde eine AGP-Transaktion,
etwa ein nicht aufgegebener Lesebefehl, von einer Graphikeinrichtung
initiiert, die mit dem Graphikbus 1090 verbunden ist. Die
Transaktion wird von der Busschnittstellenschaltung 1080 in
Pakete umgesetzt und auf dem Befehlskanal des Quellenbusses 1182 zu
dem Aufwärtsrichtungsabschnitt 1020 aus 10 übertragen,
in welchem der Befehl zu einem Hostknoten (nicht gezeigt) für die Verarbeitung
gesendet wird. Zu einer späteren
Zeit wird eine AGP-Antwort entsprechend dem vorhergehenden AGP-Befehl
von der Befehlspufferschaltung 1060 für virtuelle Kanäle empfangen.
Auf Grund der Verfügbarkeit
des Antwortkanals des Quellenbusses 1182 und des separaten
Befehlskanals des Zielbusses 1187 wird die AGP-Antwort
nicht in dem Antwortkanal der Befehlspufferschaltung 1060 für virtuelle
Kanäle
gespeichert und nimmt daher nicht an den Verteilungszyklen teil.
Die AGP-Antwort kann den Antwortkanalpuffer des Befehlspuffers 1060 für virtuelle
Kanäle
umgehen und wird zu der Busschnittstellenschaltung 1090 gesendet.
Alle anderen Arten an Befehlen, die innerhalb der Befehlspufferschaltung 1060 für virtuelle
Kanäle gespeichert
sind, können
an Verteilungszyklen teilnehmen. Dies ist anders als bei PCI-Transaktionen, etwa
einem nicht aufgegebenen Lesebefehl, der von einer Graphikeinrichtung
initiiert wird, die mit dem Graphikbus 1090 verbunden ist.
Die PCI-Antwort in Abwärtsrichtung,
die zu einer späteren
Zeit eintrifft, wird in dem Antwortkanalpuffer der Befehlspufferschaltung 1060 für virtuelle
Kanäle
gespeichert und nimmt an den Verteilungszyklen teil. Für die PCI-Antworten
kann es notwendig sein, dass diese disponiert werden, da die PCI-Regeln
für die
Reihenfolge eine Umordnung der Transaktionen zwischen den Datenströmen dies
zulassen und die AGP-Regeln für
die Reihenfolge dies unter Umständen
nicht zulassen.
-
12 ist
eine Ansicht einer Ausführungsform
einer Vorrichtung zur Umordnung von Graphikantworten. Schaltungskomponenten,
die jenen in 10 und 11 entsprechen,
sind der Einfachheit halber und der Klarheit halber mit identischen
Bezugszeichen belegt. Die Transaktionsumordnungsvorrichtung umfasst
einen Datenpuffer 1100 mit einem Zeiger 1101 und
einer Steuerlogik- und Speichereinheit 1130. Der Datenpuffer 1100 ist
mit der Steuerlogik- und Speichereinheit 1130 und mit einer
Busschnittstellenschaltung 1080 verbunden. Die Steuerlogik-
und Speichereinheit 1130 umfasst eine Datenverfügbarkeitsspeichereinheit 1135.
In der dargestellten Ausführungsform
ist die Datenverfügbarkeitsspeichereinheit 1135 ein
Register. Jedoch kann in anderen Ausführungsformen eine beliebige
andere Speichereinheit, etwa beispielsweise ein Speicher mit wahlfreiem
Zugriff, verwendet werden.
-
Wie
zuvor erwähnt
ist, können
Graphikantworten, etwa AGP-Antworten, anders als PCI- und PCI-X-Antworten,
lediglich zu der initiierenden Einrichtung in der Reihenfolge zurückgesendet
werden, in der diese angefordert wurden, unabhängig davon, zu welchem Datenstrom
sie gehören.
Somit können AGP-Antworten
in Abwärtsrichtung
zu dem initiierenden Gerät
in einer unterschiedlichen Reihenfolge gesendet werden, als sie
von dem Datenpuffer 1100 empfangen werden. Beispielsweise
wird eine erste Anforderung in Aufwärtsrich tung gesendet und ist
mit einem ersten Datenstrom verknüpft. Daran schließt sich
eine zweite Anforderung an, die mit einem zweiten Datenstrom verknüpft ist.
Etwas später
wird lediglich ein Teil der Antwortdatenpakete, die dem ersten Datenstrom
entsprechen, empfangen und in dem Datenpuffer 1100 gespeichert.
Jedoch werden alle Antwortdatenpakete des zweiten Datenstroms empfangen
und in dem Datenpuffer 1100 gespeichert. Die Datenpakete
von dem zweiten Datenstrom werden nicht gesendet, bis die verbleibenden
Datenpakete aus dem ersten Datenstrom empfangen wurden und nachfolgend
zu der Busschnittstelle 1080 zur Übersetzung in Buszyklen übertragen
wurden.
-
In
der dargestellten Ausführungsform
kann der Datenpuffer 1100 eine Speichereinheit mit wahlfreiem
Zugriff sein, die zumindest 29 Speicherplätze enthält, die den 29 Markierungswerten
entsprechen, die den Befehlen von NP-Markierungslogik 1120 aus 10 zugeordnet
sind. Wenn die Datenpakete jeweils eintreffen, können diese in einer Speicherstelle gespeichert
werden, die dem Markierungswert des empfangenen Datenpakets entspricht.
In 12 zeigt der Zeiger 1101 zu der Position,
von der erwartet wird, dass diese die Daten des nächsten sequenziellen
AGP-Datensegments enthält,
das zu der Busschnittstelle 1080 zu senden ist. Des weiteren
umfasst das Datenverfügbarkeitsregister 1135 mindestens
29 Bits, die den 29 Markierungswerten entsprechen, die den Befehlen
von der NP-Markierungslogik 1120 aus 10 zugeordnet
sind. Das Datenverfügbarkeitsregister 1125 aus 12 kann
verwendet werden, um anzuzeigen, welche Datenpakete empfangen sind,
während
der Zeiger 1101 auf die nächste AGP-Antwortposition in
dem Datenpuffer 1100 zeigt. Zur Veranschaulichung sei angenommen,
dass Datenpakete mit dem Markierungswerten 1 und 27 empfangen werden.
Die Datenpakete werden in den Positionen mit den Nummern 0, 1 und
27 innerhalb des Datenpuffers 1100 gespeichert. Folglich
werden Bit-Nummern
1 und 27 des Datenverfügbarkeitsregisters 1135 gesetzt,
wodurch angegeben wird, dass Daten verfügbar sind, während der
Zeiger 1101 auf die Position zeigt, die dem Markierungswert
0 entspricht, d. h. die nächsten
zu sendenden AGP-Daten. Obwohl beachtet werden sollte, dass in anderen
Ausführungsformen
das Datenverfügbarkeitsregister 1135 angibt,
dass die Daten verfügbar
sind, wenn die Bis zurückgesetzt
sind. Folglich werden jedes Mal, wenn eine AGP-Antwort in Abwärtsrichtung
empfangen wird, die entsprechenden Daten in dem Datenpuffer 1100 gespeichert,
und das Datenverfügbarkeitsregister 1135 wird
aktualisiert, um wiederzugeben, welche Datenpakete innerhalb des
Datenpuffers 1100 gespeichert sind. Der Vorgang des Mechanismus
aus 12 wird detaillierter in Verbindung mit 13 beschrieben.
-
13 ist
ein Flussdiagramm, das die Arbeitsweise einer Ausführungsform
eines Transaktionsumordnungsmechanismus für Graphikantworten zeigt. Es
sei auf die 10, 12 und 13 verwiesen,
wobei der Ablauf im Schritt 1300 aus 13 beginnt.
Im Schritt 1300 wird bei der Systeminitialisierung der
Zeiger 1101 der 12 mit
einem vorbestimmten Wert, etwa beispielsweise 0, initialisiert.
In Verbindung mit der Initialisierung des Zeigers 1101 wird
auch die NP-Markierungslogik 1120 aus 10 mit
dem gleichen vorbestimmten Wert initialisiert, wodurch die Markierungslogik
und der Zeiger synchronisiert werden. Somit zeigt der Zeiger 1101 aus 12 nunmehr
auf die nächste
Position in dem Datenpuffer 1100, aus der Daten ausgelesen
werden. Folglich wird nach der Initialisierung die erste AGP-Antwort, die zu der
Busschnittstellenschaltung 1080 gesendet wird, einen Markierungswert
von Null aufweisen. Zu beachten ist, dass obwohl der Initialisierungswert, der
in der vorliegenden Ausführungsform
verwendet wird, Null ist, in anderen Ausführungsformen andere geeignete
Initialisierungswerte verwendet werden können.
-
Im
Schritt 1310 aus 13 werden AGP-Antwortbefehle
von dem Abwärtsrichtungsabschnitt 1010 aus 10 empfangen
und als AGP-Antworten durch ein oder mehrere kennzeichnende Bits
in einem Befehlskopf, der mit der Antwort verknüpft ist, erkannt. Im Schritt 1320 aus 13 wird
der Datenbereich der Antwort in einer Stelle des Datenpuffers 1100 aus 12 gespeichert,
die dem Markierungswert der Antwort entspricht. Ferner wird das
entsprechende Bit in dem Datenverfügbarkeitsregister 1135 gesetzt,
so dass das Vorhandensein von Daten in dieser Speicherstelle in
dem Datenpuffer 1100 angezeigt wird. Zu beachten ist, dass
in anderen Ausführungsformen
das entsprechende Bit in den Datenverfügbarkeitsregister 1125 zurückgesetzt werden
kann, um die Anwesenheit von Daten anzugeben. Im Schritt 1330 aus 13 wird,
da der Zeiger 1101 aus 12 auf
die Position in dem Datenpuffer 1100 zeigt, aus dem die
nächsten
AGP-Antwortdaten ausgelesen werden, eine Indikation des Markierungswertes
des neu empfangenen Datensegments an den Zeiger 1101 zugeleitet
und mit einer Indikation von dem Datenverfügbarkeitsregister 1135 dahingehend
verglichen, ob die Daten mit diesem Markierungswert verfügbar sind.
Wenn keine derartige Übereinstimmung
erkannt wird, wird der Befehlsanteil der Antwort verworfen und der
Ablauf geht zurück
zum Schritt 1310 aus 13. Es
sei nun wieder auf Schritt 1330 verwiesen; wenn es eine Übereinstimmung
gibt, dann geht der Ablauf zum Schritt 1314 weiter, in
welchem die Daten, die in der Stelle gespeichert sind, auf die von
dem Zeiger 1101 aus 12 gezeigt
wird, aus dem Datenpuffer 1100 ausgelesen werden, und der Zeiger 1101 wird
erhöht. Im
Schritt 1350 aus 13 wird
ein Buszyklus durch die Busschnittstellenschaltung 1080 aus 12 initiiert,
wodurch die Antwortdaten zu der anfordernden Einrichtung gesendet
werden.
-
Im
Schritt 1360 aus 13 wird,
da der Zeiger 1101 aus 12 erhöht wurde
und nunmehr auf die Stelle in dem Datenpuffer 1100 zeigt,
aus der die nächsten
AGP-Antwortdaten ausgelesen werden können, eine entsprechende Markierungsindikation bereitgestellt
und mit einer Indikation aus dem Datenverfügbarkeitsregister 1135 dahingehend
verglichen, ob die Daten mit diesem Markierungswert verfügbar sind.
Wenn es eine Übereinstimmung
gibt, dann geht der Ablauf zurück
zum Schritt 1340 aus 13, in welchem
Daten aus dem Datenpuffer 1100 aus 12 ausgelesen
werden, und der Zeiger 1101 wird erhöht. Wiederum wird im Schritt 1350 aus 13 ein
Buszyklus durch die Busschnittstellenschaltung 1080 aus 12 initiiert,
wodurch die nächsten
Antwortdaten zu der anfordernden Einrichtung gesendet werden. Es
sei wieder auf den Schritt 1360 aus 13 verwiesen;
wenn es keine Übereinstimmung gibt,
die angibt, dass die nächsten
Daten nicht verfügbar
sind, geht der Ablauf zurück
zum Schritt 1310, um auf weitere AGP-Antworten zu warten.
-
Dieser
Prozess kann für
jede empfangene AGP-Antwort fortgesetzt werden. Wenn daher AGP-Antworten
empfangen werden, und wenn die AGP-Antworten in einer anderen Reihenfolge
empfangen werden, als sie ursprünglich
angefordert wurden, kann jeder der nicht in der Reihenfolge vorliegenden
Antwortbefehle verworfen werden und die Daten können gespeichert werden, um
auf die AGP-Antwort zu warten, die in der richtigen Reihenfolge
ist.
-
Diverse
Variationen und Modifizierungen werden beim Studium der vorliegenden
Anmeldung für
den Fachmann offenkundig. Es ist daher beabsichtigt, dass folgenden
Patentansprüche
alle derartigen Variationen und Modifizierungen umfassen.
-
Industrielle
Anwendbarkeit
-
Diese
Erfindung ist im Allgemeinen auf Computersystemausgabe/eingabeeinrichtungen
anwendbar.