-
Die
vorliegende Erfindung betrifft Peripheriegeräte an einem gemeinsamen Bus
und legt speziell ein System zum Anschließen eines Computers an eine
Vielzahl von E/A-Einrichtungen offen.
-
Das
Dokument
US 5,677,644 (Silverbrook
u. a.) vom 14. Oktober 1997 legt ein Peripheriegerät offen,
das an einen Datenbus angeschlossen ist, wobei das Gerät an DMA-Übertragungen beteiligt ist
und einen FIFO und einen Adressgenerator umfasst. Der Industrienorm-PCI-Bus
(Peripheral Component Interconnect) verbindet einen Computer mit
den anderen Applikations-Steckkarten im System. Der Computer erhält u. a.
eine CPU, einen Hauptspeicher und einen Cache-Speicher, die alle über einen
Schnittstellen-Chip mit FIFO an den Bus angeschlossen sind, wobei
es sich jeweils um handelsübliche
Standardkomponenten handelt. Bei einer „post write"-Übertragung von einer beliebigen
Komponente am PCI-Bus zum Hauptspeicher verschickt die Komponente
die Adresse, in die die Daten geschrieben werden sollen, und lädt die Daten
in den FIFO. Anschließend
kann die Komponente mit einer anderen Aktivität fortfahren, wobei davon ausgegangen
wird, dass die Daten schließlich über DMA-Übertragung
in den Hauptspeicher gelangen. Bei einem „read" oder „pre-fetch"-Vorgang muss die Komponente zuerst
die Adresse im Speicher angeben, aus der die Daten kommen müssen, und
anschließend
so lange warten, bis die Daten aus dem FIFO verfügbar sind. Wenn der Computer weiß, welche
Daten die Komponente benötigt,
kann bei einem "Pre-fetch" zum Beschleunigen
dieses Vorgangs der FIFO im Voraus geladen werden.
-
Um
einen schnellen Farbdrucker anzutreiben, der vier Farben druckt,
müssen
vier E/A-Ports vorhanden
sein, die Daten mit hoher Geschwindigkeit vom Hauptspeicher des
Computers über
ein FIFO-Register im Schnittstellen-Chip zum Drucker zu transportieren.
Dabei ist es dieser einzige FIFO – zusammen mit den Anforderungen
der CPU und des Speicherprotokolls –, der den Datendurchsatz begrenzt.
Der Chip-Satz sollte so modifiziert werden, dass für jede Farbe
des Druckers ein zusätzlicher FIFO
vorhanden ist. Allerdings ist der gesamte Computer-Chip-Satz ein
Industriestandard, so dass eine Abwandlung des Chip-Satzes keine
Alternative darstellt. Es stellt sich folglich die Frage, wie das
System so modifiziert werden kann, dass ein höherer Datendurchsatz ermöglicht wird.
-
Entsprechend
der vorliegenden Erfindung umfasst ein System mit einem Datenbus
zum Anschluss eines Computers an eine Vielzahl von E/A-Einrichtungen
des Weiteren:
eine zusätzliche
Speichereinrichtung, die an den Bus angeschlossen ist, um einen
zusätzlichen
Weg für die
Datenübertragung
zwischen dem Computer und den E/A-Einrichtungen bereitzustellen, wobei
die zusätzliche
Speichereinrichtung aufweist:
einen Speicher und
eine
Anzahl von DMA-Kanälen,
wobei jeder Kanal eine Datenspeichereinrichtung zum Übertragen
von Daten zwischen dem Speicher und dem Bus umfasst, wobei jede
Datenspeichereinrichtung:
- a. zu einer E/A-Einrichtung
gehört
und
- b. dazu ausgelegt ist, die Adresse des Speicherplatzes zu berechnen,
auf die von der dazugehörigen
E/A-Einrichtung zugegriffen wird.
-
Wir
schaffen somit eine Modifizierung an einer standardmäßigen PCI-Datenbusanordnung,
die einen schnellen Drucker antreibt, wodurch eine höhere Datenrate
ermöglicht
wird, indem ein zusätzlicher
Busspeicher und dessen E/A am Bus in die Lage versetzt werden, als
Mittler zwischen dem CPU-Hauptspeicher und den an den Drucker angeschlossenen
E/A-Ports zu fungieren.
-
Bei
der Herstellung von Dokumentkopien wird das Dokument zuerst von
dem CPU-Hauptspeicher
mit einer niedrigeren FIFO-Geschwindigkeit zu dem zusätzlichen
Speicher-Untersystem übertragen und
anschließend
mit höherer
Busgeschwindigkeit auf dem PCI-Bus vom Speicher-Untersystem zu den Drucker-E/A-Ports
gesendet.
-
Natürlich ist
in beiden Fällen
die zum Übertragen
des gesamten Dokuments vom Computerspeicher benötigte Zeit durch die Geschwindigkeit des
FIFOs begrenzt, so dass sich scheinbar kein Vorteil ergibt, wenn
dem System ein Speicher-Untersystem hinzugefügt wird. Dies trifft allerdings
nur auf die erste Kopie zu. Wenn der Drucker mehr als eine Kopie
anfertigt, wird die für
jede zusätzliche
Kopie benötigte
Zeit viel geringer, da die Übertragung
nur über den
schnelleren Bus vom Speicher-Untersystem zu den Drucker-Ports erfolgt.
-
Wenn
jedoch in der Praxis der Drucker zusätzliche Kopien von einem aktuellen
Dokument anfertigt und der Computer ansonsten nicht weiter ausgelastet
ist, kann der Computer die nächsten
Dokumente bereits in das Speicher-Untersystem laden. Somit werden
vom Drucker alle Kopien des Dokuments über den PCI-Bus aus dem Speicher-Untersystem
empfangen, und die Daten können
je nach Bedarf des Druckers in Echtzeit zugeführt werden.
-
Ein
Beispiel eines erfindungsgemäßen Systems
wird nun anhand der beiliegenden Zeichnung beschrieben, worin:
-
1 ein
Blockdiagramm des Systems zeigt.
-
1 zeigt
die Anordnung sämtlicher
Komponenten, die an den PCI-Bus 10 angeschlossen sind.
Der Industriestandard-Computer 11 hat eine CPU, einen Hauptspeicher
und einen FIFO und besteht aus einem Chip oder einem Chipsatz. Andere typische
Komponenten sind an den Bus angeschlossen, zum Beispiel ein Platten-E/A-Modul 12.
Diese Komponenten können
als Master oder Slave betrachtet werden. Die Master verfolgen die
Speicheradressen während
der Lese- und Schreibvorgänge, während die
Slaves dies nicht tun. Folglich fordert ein Slave eine Datenmenge
an, die bei einer Startadresse im Speicher beginnt, und erwartet,
diese in der richtigen Reihenfolge zu erhalten. Der Master greift auf
die Datenblöcke
zu und überträgt sie und
verfolgt die Speicheradresse, so dass die Daten in der richtigen
Reihenfolge gesendet werden. Vier Drucker-E/A-Karten 13,
jeweils eine pro Farbe, bilden Master-Komponenten und sind direkt
wie in der Abbildung am Drucker 14 befestigt.
-
Zu
diesen Standardkomponenten hinzugefügt ist ein Speicher-Untersystem 20,
das über
den PCI-Bus-Master 24 mit einer Reihe von FIFOs 23,
in diesem Beispiel acht, an den Bus angeschlossen ist, wobei vier
den Vier-Drucker-E/A-Karten 13 zugeordnet sind, bei denen
es sich um Slave-Komponenten handelt. Wenn die Drucker E/A-Einrichtung
Daten in das Speicher-Untersystem 20 schreiben soll, gibt
sie eine Start-Speicherstelle im Speicher-Untersystem an und stellt
den Datenblock in den FIFO. Anschließend kann die E/A etwas anderes
tun, während
die Daten mittels DMA zum Speicher-Untersystem übertragen werden. Wenn die
E/A-Einrichtung Daten empfangen muss, sendet sie ebenfalls die Adresse des
Blocks und wartet so lange, bis die Daten in den FIFO geladen sind.
Daraufhin werden die Daten aus dem FIFO im Burst-Modus zur E/A-Einrichtung
gesendet. Das Speicher-Untersystem 20 und die FIFOs 23 sind über einen
internen Bus 22 angeschlossen.
-
Wenn
sich der PCI-Bus-Master 24 im Zugriffsstatus befindet oder
andere Informationen vorliegen, erfolgt ein direkter Lesevorgang
eines Wortes, eines halben Wortes oder eines Bytes, was nicht im Burst-Modus
stattfindet. Wenn die Statusinformationen zahlreicher sind und mehrere
Worte umfassen, kann der Burst-Modus zum Einsatz kommen. Dies wird
als Burst Random Access bezeichnet. Wenn Bilddaten gedruckt werden
sollen, findet dies normalerweise in Form von sehr vielen sequentiellen
Daten statt, und der Burst-Modus
wird aufgenommen.
-
Bei
dem Beispiel aus 1 werden acht Hochgeschwindigkeitsdatenströme aktiviert.
Ein Datenstrom wird als PCI-Schreibstrom zum Speichern von Daten
in dem Speicher-Untersystem
definiert und ein PCI-Lesestrom zum Lesen von Daten aus dem Speicher-Untersystem. Ein
Datenstrom wird durch die Übertragungsrichtung
(PCI-Schreib- oder -Lesestrom), einen Bereich von 512 bis 4 MByte
und eine Startadresse definiert. Es werden aufeinander folgende
Daten aufgenommen. Deshalb werden von den FIFOs 23 aktuelle
Adressbits beibehalten. Weiterhin verfügt die Implementierung über den PCI-Konfigurationsspeicher,
der für
das Plug & Play erforderlich
ist. Die Implementierung entspricht der PCI-Spezifikation Version
2.x und darüber.
-
Als
zusätzliche
Form der Datenüberprüfung hat
der PCI-Master einen PCI-Adressbereichskomparator 25,
in dem im Speicher-Untersystem ein Adressbereich für die Daten
gespeichert ist, die von jeder Drucker-E/A-Karte 13 oder
zu ihr übertragen werden
können.
Bevor die Übertragung
zugelassen wird, wird jede Adresse im Hinblick auf ihre Richtung und
Position überprüft.
-
Nun
folgt eine genauere Beschreibung der Erfindung:
-
1. PCI-Schreibströme
-
Wenn
ein PCI-Master einen Burst-Schreibvorgang in das Speicher-Untersystem
vornimmt,
- a. wird die PCI-Adresse mit den Adressen
der acht Bereiche verglichen, um festzustellen, ob die Adresse UND
die Richtung mit den Programmierten identisch sind,
- b. werden die Daten im Strom-FIFO gepuffert, das heißt sämtliche
Schreibvorgänge
werden eingegeben (posted). Die PCI-Adresse wird jedoch nicht zwischengespeichert.
- c. Ausnahmen
- – Wenn
der FIFO am Anfang des PCI-Burst-Vorgangs voll ist, wird an den
PCI-Initiator ein
Wiederholungsversuchszyklus (Retry) ausgegeben. Es könnte auch
eine Abschalt-Rückmeldung
(Disconnect Acknowledge) zum Einsatz kommen; es wird jedoch davon
ausgegangen, dass der PCI-Master mit der gleichen Adresse zurückkommt.
- – Wenn
der FIFO in der Mitte des PCI-Burst-Schreibvorgangs voll wird, wird
eine Ziel-nicht-bereit-Rückmeldung
(Target-not-Ready Acknowledge) oder die Disconnect-Rückmeldung ausgegeben.
Wenn von dem Chip die Rückmeldung
Ziel-nicht-bereit
ausgegeben wird, hält
der gesamte PCI-Bus so lange an, bis der Speicher-Schreibvorgang
einsetzt und einige Daten den Strom-FIFO verlassen haben. Wenn eine
Disconnect-Rückmeldung
ausgegeben wird, gibt der PCI-Bus-Master den PCI-Bus frei und kommt später mit
der gleichen Adresse wie zuvor zurück.
- d. Meist erfolgt das Schreiben in den Speicher zu einem späteren Zeitpunkt
und ist von der PCI-Übertragung
abgekoppelt.
-
Die
Richtung wird zusammen mit der Adresse ebenfalls überprüft, da es
denkbar ist, dass zwei Ströme
den gleichen Adressbereich, aber verschiedene Richtungen haben.
-
2. PCI-Leseströme
-
Alle
Lesestromdaten werden zuvor abgerufen (pre-fetch). Das Pre-fetching
findet so lange statt, wie Platz in den internen FIFOs vorhanden
ist. Wenn ein PCI-Master einen Burst-Lesevorgang an dem Speicher-Untersystem
ausführt,
- a. wird die PCI-Adresse mit den Adressen der acht
Bereiche verglichen, um festzustellen, ob die Adresse UND die Richtung
mit den Programmierten identisch sind,
- b. werden Daten meist bereits in den Strom-FIFOs vorhanden sein,
und der Burst-Lesevorgang findet auf dem PCI-Bus mit höchster Geschwindigkeit
statt.
- c. Ausnahmen
- – Wenn
der FIFO leer ist, wird ein erneuter Versuchszyklus an den PCI-Initiator
ausgegeben. Ein Disconnect Acknowledge könnte ebenfalls verwendet werden,
es wird jedoch davon ausgegangen, dass der PCI-Master mit derselben
Adresse zurückkommt.
- – Wenn
der FIFO in der Mitte des PCI-Burst-Lesevorgangs leer wird, wird
eine Target-not-Ready- oder eine Disconnect-Rückmeldung ausgegeben. Wenn
von dem Chip Target-not-Ready ausgegeben wird, hält der gesamte PCI-Bus so lange
an, bis der Speicher-Schreibvorgang einsetzt und einige Daten den
Strom-FIFO verlassen haben. Wenn eine Disconnect-Rückmeldung
ausgegeben wird, gibt der PCI-Bus-Master den PCI-Bus frei und kommt
später
mit der gleichen Adresse wie zuvor zurück.
- d. Meistens erfolgt das Speicherlesen zu einem früheren Zeitpunkt,
losgelöst
von der PCI-Übertragung.
-
Das
Pre-fetching basiert auf dem FIFO-Status; ein Speicher-Lesevorgang
findet so lange statt, bis der FIFO voll ist.
-
3. PCI-Nichtstrom- oder
direkte Schreibvorgänge
-
(PCI Non/Stream or Random
Writes)
-
Bei
einem direkten PCI-Schreibvorgang (random PCI write) wird die PCI-Adresse
mit den acht Adressbereichen verglichen. Wenn die Initiator-Adresse
nicht unter den Adressbereichen ist, sich aber dennoch in dem dem
Speicher zugewiesenen Bereich befindet, werden die Adresse und die
Daten in dem Direktschreib-FIFO zwischengespeichert. Ein direkter
PCI-Schreibvorgang wird immer eingegeben (posted). Das Schreiben
in den Speicher erfolgt zu einem späteren Zeitpunkt, unabhängig von
dem PCI-Schreibzyklus.
-
4. PCI-Nichtstrom- oder
direkte Lesevorgänge
-
(PCI Non/Stream or Random
Reads)
-
Bei
einem direkten PCI-Lesevorgang wird die PCI-Adresse wiederum mit
den acht Adressbereichen und auch dem gesamten Bereich des Speichers verglichen.
Wenn die Adresse nicht eine der Bereiche ist, sondern innerhalb
des diesem Speicher zugewiesenen Bereichs liegt, wird sobald wie
möglich ein
Speicherzyklus gestartet. Die Daten aus dem Speicherfeld werden
in den Direktlese-FIFO geschrieben und bald danach zum PCI-Bus übertragen. Bei
einem Direktlesevorgang erfolgt kein Pre-fetching – anders
als bei Stromlesevorgängen,
die stets zuvor abgerufen werden. Während des Wartens auf direkte
Lesedaten aus dem Speicher kann der Chip Folgendes ausgeben:
- – eine
PCI-Wiederholungsversuch-Rückmeldung, wobei
der PCI-Bus-Master den Bus freigibt und später mit der gleichen Adresse
zurückkommt, oder
- – eine
PCI-„Ziel
nicht bereit"-Meldung,
wobei der PCI-Bus-Master wartet und den PCI-Bus weiter in Beschlag
nimmt.
-
5. Nichtlinearer bzw.
Blockübertragungsmodus
-
Mindestens
zwei Ströme
verfügen über diese
Fähigkeit.
Der Blockübertragungsmodus
ist der Modus, bei dem Daten in Form eines Blocks vorliegen, zum
Beispiel als Quadrat mit 32 Byte × 32 Byte oder als Rechteck
mit 32 Byte × 16
Byte. Diese Datenform ist für
bestimmte Bildbearbeitungsfunktionen, wie zum Beispiel das Drehen
oder die JPEG-Komprimierung
usw., erforderlich.
-
Die
Blockgröße (Länge und
Breite) ist programmierbar; die Form (quadratisch oder rechteckig) ist
durch die programmierte Länge
und Breite implizit definiert.
-
Wenn
der Blockmodus für
einen PCI-Schreibstrom programmiert ist, haben die Eingabedaten
die Form einer Abtastzeile, und der Inhalt des Speichers hat eine
Blockform. Der Lesestrom sollte als Nicht-Konvertierung (non-conversion)
programmiert sein.
-
Wenn
der Blockmodus für
einen PCI-Lesestrom programmiert ist, hat der Inhalt des Speichers eine
Abtastzeilenform und die Lesedaten haben eine Blockform. Der Schreibstromkanal
sollte als Nicht-Konvertierung programmiert sein.
-
6. CCB-Abruf
-
Ein
verketteter Steuerblock (chained control block – CCB) entsteht durch die Steuerbegriffe,
die notwendig sind, damit der Stromkanal funktioniert. Der CCB enthält die Quellenadresse,
die Zieladresse, die Richtung (Stromlese- oder -schreibvorgang), den Überragungs-Zählwert,
die Paketgröße usw. Diese
Informationen werden benötigt,
damit der Chip das Posted Write bzw. das Pre-fetch der Stromlesedaten
ausführen
kann.
-
Der
erste CCB eines Stromkanals wird immer von einem PCI-Bus-Master
aufgestellt. Wenn der CCB verkettet programmiert ist, ruft der Chip
automatisch den nächsten
CCB ab und führt
ihn aus. Es wird angenommen, dass die CCBs bereits von einem PCI-Bus-Master im Speicher-Untersystem
gespeichert wurden. Durch zuvor definierte PCI-Direktschreibzugriffe werden die CCBs
in den Speicher geschrieben.
-
Ein
CCB kann ebenfalls angehalten werden, d. h. seine Ausführung hängt vom
Status eines Steuerbits ab, der von einem PCI-Bus-Master eingestellt werden
kann. Die CCB-Kette/Pause
ist in dem XSB1- und dem XPCI-Chip implementiert.
-
DIE INTELLIGENTE SPEICHERSTEUERUNG
-
Die
intelligente Speichersteuerung erledigt die folgenden Aufgaben:
Buszuteilung
für Dienstanforderungen
der acht Ströme,
der direkten PCI-Schreib- und/oder
-Lesevorgänge
und der acht CCB-Abrufanforderungen.
-
Herstellen
einer Schnittstelle zu den DRAMs zum:
- – Burst-Schreiben
von Daten (Seitenmodus) aus den eingegebenen PCI-Schreib-FIFOs in den Speicher,
- – Burst-Lesen
von Daten (Seitenmodus) oder Vorabrufen (Pre-fetching) von Daten
für die
PCI-Lesestrom-FIFOs,
- – direktes
Schreiben oder Lesen von Daten bei PCI-Direktspeicherzugriffen,
- – feststehenden
Burst-Lesen bei CCB-Abrufanfragen der acht Ströme,
- – Auffrischen
des Speichers (Refresh/Cas-before-Ras)
-
1. Arbitration (Buszuteilung)
der Anforderungen
-
Der
Arbitrator 24 empfängt
als Eingabegrößen:
- – acht
Anforderungen von den acht Strom-FIFOs; diese Anforderungen sind
FIFO-NotFull für die PCI-Lesestrom-FIFOs
bzw. FIFONotEmpty für
die PCI-Schreibstrom-FIFOs,
- – eine
Anforderung eines direkten PCI-Lesevorgangs,
- – den
FIFONotEmpty des direkten PCI-Schreib-FIFOs,
- – acht
CCB-Abrufanforderungen,
- – den
DRAM-Refresh.
-
Die
Priorität
der Buszuteilung sieht wie folgt aus:
- – Anforderung
für DRAM-Refresh
(höchste
Priorität)
- – der
ausstehende direkte PCI-Lesevorgang
- – der
FIFONotFull der PCI-Lesestrom-FIFOs
- – der
ausstehende direkte PCI-Schreibvorgang
- – der
FIFONotEmpty der PCI-Schreibstrom-FIFOs
- – die
acht CCB-Abrufanforderungen von den acht Strom-FIFOs
-
2. DRAM-Steuerung
-
- a. DRAM-Übertragungsarten
- – Für den gesamten
dazugehörigen
Strom wird auf den DRAM im Seitenmodus zugegriffen, wobei die niedrigen
Adressbits von dem Chip beibehalten werden; die Daten werden gespeichert oder
von den Strom-FIFOs ausgelesen.
- – Der
CCB-Abruf ist ein Burst-Lesevorgang von vier feststehenden Wörtern; die
Daten werden im internen CCB-Statik-RAM gespeichert.
- – Der
RAS bleibt aktiv und wird nur dann deaktiviert, wenn sich die Zeilenadresse
des nächsten Zugriffs
von der vorherigen unterscheidet.
- – Die
DRAM-Steuerung ist in der Lage, nicht verschachtelte sowie verschachtelte
Bänke (interleaved
banks) zu bearbeiten (mindestens zwei Bänke).
- b. Physische DRAM-Schnittstellen
- – Die
DRAM-Steuerung sollte in der Lage sein, eine Schnittstelle direkt
zu den verschiedenen Arten von DRAMs herzustellen, z. B. normale,
EDO und Synchron-DRAMs.
Nach dem Zurücksetzen ist
die Art des DRAMs programmierbar.
- – Die
DRAM-Technologie ist ebenfalls programmierbar, so dass DRAMs mit
256 KBit, 1 MBit, 4 MBit oder 16 MBit verwendet werden können.
- – Die
Breite der DRAM-Schnittstelle sollte mindestens 32 Bit betragen.
-
DIREKTE OPERATIONEN IM
VERGLEICH MIT STROMOPERATIONEN
-
(Random versus Stream
Operations)
-
Bei
der normalen PCI-Aktivität
kann eine CPU direkt auf die Daten zugreifen, die sich im Strom befinden.
Dabei sind zwei Probleme zu lösen:
- 1. Wie ist zwischen einem Direktzugriff und
einem Stromzugriff zu unterscheiden?
- 2. Datenkonsistenz von Daten, die sich in einem der Strom-FIFOs
im Chip befinden, wenn auf jene Daten direkt zugriffen wird.
-
1. Unterschied zwischen
Stromzugriff und Direktzugriff
-
Es
gibt verschiedene Möglichkeiten,
den Stromzugriff vom Direktzugriff zu unterscheiden, unter anderem
durch die:
- – Beschränkung: In den aktiven Strombereichen ist
kein Direktzugriff zulässig.
Ein Strom ist aktiv, wenn Daten in jenen Speicherbereich hinein
oder aus diesem heraus übertragen
werden. Jeglicher Zugriff auf diese aktiven Bereiche wird als Stromzugriff
betrachtet.
- – Speicherabbildung:
Der Speicherplatz des Chips wird in zwei Bereiche unterteilt, einen
für den
Strom- und einen anderen für
den Direktzugriff.
-
1a. Unterscheidung durch
Beschränkungen
-
Die
CPU sollte nur auf die Daten zugreifen bzw. den Status der Stromdatenübertragung
ertragen, wenn die Übertragung
abgeschlossen ist.
-
Der
Stromadressbereich sowie der Operationsstatus (abgeschlossen, in
Arbeit, etc.) werden aus ChipO ersichtlich. Deshalb muss die CPU
den Status des Stromkanals überprüfen, bevor
auf die Stromdaten zugegriffen wird.
-
Die
Beschränkung
löst ebenfalls
das Problem der Datenkonsistenz, wenn die CPU auf Daten zugreift,
die sich vorübergehend
in den internen FIFOs des Chips befinden.
-
Jeder
Zugriff auf Daten, die sich aktuell nicht in einem der acht Bereiche
der Strom-FIFOs
befinden, wird als direkter Zugriff betrachtet. Der interne Adresskomparator
ist in der Lage, diese Bedingung mühelos zu erkennen.
-
Wenn
die Schreibadresse als direkte Adresse erkannt wird, das heißt, es ist
keine aus den acht Bereichen, werden die Schreibdaten in den Direktschreib-FIFO
eingegeben, und das Schreiben in den Speicher erfolgt nach der Arbitration
der Anforderung.
-
Wenn
die Leseadresse nicht eine von acht Bereichen ist, das heißt, sie
wird als direkt erkannt, gibt es zwei Möglichkeiten:
- a.
bei einem direkten Pre-fetch-Lesevorgang: Der Chip gibt ein Retry
bzw. Disconnect Acknowledge aus und stellt die benötigten Daten
sobald wie möglich
in den Direktlese-FIFO ein, oder
- b. bei einem Lesevorgang ohne Vorabruf: Der Chip gibt ein Target
not Ready aus und der PCI-Master muss solange warten, bis die Speicherlesedaten
aus den DRAMs ausgelesen sind.
-
Wenn
die direkte Lese- oder Schreibaddresse in einen der acht Stromadressenbereiche
fällt,
betrachtet der Chip diesen Zugriff als Stromzugriff, und die Daten
werden aus dem FIFO bereitgestellt.
-
1b. Unterscheidung durch
Adressabbildung
-
Bei
diesem Verfahren könnte
das höchste Adressbit
verwendet werden, um zwischen Strom- und direkten/E/A-Zugriffen
zu unterscheiden. Tatsächlich
ist der gesamte PC-Speicherplatz
in zwei Räume
unterteilt, in einen für
Stromdaten und in einen für
E/A- oder Direktzugriffe.
-
2. Datenkonsistenz
-
Wenn
softwareseitig keine Einschränkung dahingehend
vorgesehen ist, wann ein PCI-Bus-Master
direkt auf den Speicher zugreifen kann, muss die Frage der Datenkonsistenz
gelöst werden.
Es gibt zwei Hauptfälle:
- A. Ein Direktzugriff, der dieselbe Adresse
von Daten hat, die gegenwärtig
in einem der acht Strom-FIFOs vorliegen.
- B. Ein Stromzyklus, der die gleiche Adresse von Daten hat, die
gegenwärtig
in einem der Direktlese-Schreib-FIFOs vorliegen.
-
Der
Adressvergleichsblock des Chips kann ohne weiteres erkennen, ob
eine bestimmte Adresse in einen der acht Bereiche oder in einen
der acht Strom-FIFOs fällt.
-
Die
folgenden Fälle
sind abgedeckt:
-
A. Direktzugriff mit denselben
Daten, die sich bereits in Strom-FIFOs befinden.
-
- 1. Einzelner direkter PCI-Schreibzugriff auf
Daten, die sich bereits an folgendem Ort befinden:
- – im
Stromlese-FIFO
- – im
Stromschreib-FIFO
- – sowohl
im Stromlese- als auch -schreib-FIFO
- 2. Einzelner direkter Lesezugriff auf Daten, die sich bereits
an folgender Stelle befinden:
- – im
Stromlese-FIFO
- – im
Stromschreib-FIFO
- – sowohl
im Stromlese- als auch im -schreib-FIFO
- 3. Direkter PCI-Burst-Schreibzugriff auf Daten, die sich bereits
an folgender Stelle befinden:
- – im
Stromlese-FIFO
- – im
Stromschreib-FIFO
- – sowohl
im Stromlese- als auch im -schreib-FIFO
- 4. Direkter PCI-Burst-Lesezugriff auf Daten, die sich bereits
an folgender Stellte befinden:
- – im
Stromlese-FIFO
- – im
Stromschreib-FIFO
- – sowohl
im Stromlese- als auch im -schreib-FIFO
-
B. Stromzugriff mit denselben
Daten, die sich bereits in Direktzugriffs-FIFOs befinden.
-
- 1. Direkter PCI-Stromschreibzugriff auf Daten,
die sich bereits an folgender Stelle befinden:
- – im
Stromlese-FIFO
- – im
Stromschreib-FIFO
- – sowohl
im Stromlese- als auch im -schreib-FIFO
- 2. Direkter PCI-Stromlesezugriff auf Daten, die sich bereits
folgender Stelle befinden:
- – im
Stromlese-FIFO
- – im
Stromschreib-FIFO
- – sowohl
im Stromlese- als auch im -schreib-FIFO
-
A. Direktzugriff mit Daten,
die sich bereits im Strom-FIFO befinden:
-
a. Einzelner Nicht-Burst-PCI-Direktschreibzugriff
-
Wenn
die direkte Adresse ein „Treffer" ist, d. h. es sind
Daten vorhanden, die der gleichen Adresse in einem oder mehreren
Strom-FIFOs entsprechen. Es gibt verschiedene Fälle:
- – Wenn dieselben
Daten auch in dem Stromlese-FIFO vorhanden sind: werden die Daten
im Stromlese-FIFO aktualisiert und die PCI-Schreibdaten in den direkten
Schreib-FIFO eingegeben.
- – Wenn
sich die gleichen Daten auch im Stromschreib-FIFO befinden:
werden
die Daten im Stromschreib-FIFO aktualisiert und das Einschreiben
in den Speicher wird gelöscht.
Das Aktualisieren erfolgt ohnehin zu einem späteren Zeitpunkt durch den Schreib-Strom.
- – Wenn
sich die gleichen Daten sowohl im Stromlese- als auch im -schreib-FIFO
befinden:
werden die Daten sowohl im Stromschreib- als
auch im -lese-FIFO aktualisiert, und das Einschreiben in den Speicher,
das dem PCI-Schreibvorgang entspricht, wird gelöscht. Die Speicherdaten werden
ohnehin zu einem späteren
Zeitpunkt von dem PCI-Schreibvorgang
aktualisiert.
-
Anmerkung:
Wenn der Direktschreib-FIFO mehr als einen eingegebenen Schreibvorgang
akzeptieren kann und wenn es mehrere aufeinander folgende Schreib-
und Lesevorgänge
für dieselbe Adresse
gibt, kann nicht garantiert werden, dass die ausgelesenen Daten
die letzte Version darstellen.
-
Der
Direktschreib-FIFO könnte
so implementiert sein, dass nur ein Direktschreibvorgang eingegeben
wird, und die Software stellt sicher, dass der eingegebene direkte
Schreibvorgang ausgeführt wird,
bevor ein direkter Lesevorgang an derselben Stelle stattfindet.
-
b. PCI-Burst-Direktschreibzugriff
-
Wenn
die direkte Adresse ein „Treffer" ist, das heißt, es sind
Daten vorhanden, die derselben Adresse in einem oder mehreren Strom-FIFOs
entsprechen, dann gibt es zwei Hauptfälle:
- i.
Die Burst-Daten sind vollständig
in dem Strom-FIFO enthalten:
- – Wenn
sich das gleiche Datenpaket auch in dem Strom-FIFO befindet: Das
Datenpaket im Stromlese-FIFO wird aktualisiert, und die Burst-PCI-Schreibdaten
werden in den Direktschreib-FIFO eingegeben.
- – Wenn
sich das gleiche Datenpaket auch in dem Stromschreib-FIFO befindet.
Die Paketdaten im Stromschreib-FIFO werden aktualisiert und die Schreiboperation
in den Speicher wird gelöscht. Die
Aktualisierung erfolgt ohnehin später durch den Schreibstrom.
- – Wenn
sich die gleichen Daten sowohl im Stromlese- als auch im -schreib-FIFO
befinden, werden die Paketdaten im Stromschreib-FIFO aktualisiert,
und das Einschreiben in den Speicher, das dem PCI-Schreibvorgang
entspricht, wird ge löscht.
Die Speicherdaten werden ohnehin zu einem späteren Zeitpunkt von dem PCI-Schreibvorgang
aktualisiert.
-
Anmerkung:
Wenn der Direktschreib-FIFO mehr als einen eingegebenen Schreibvorgang
akzeptieren kann und wenn es mehrere aufeinander folgende Schreib-
und Lesevorgänge
für dieselbe Adresse
gibt, kann nicht garantiert werden, dass die ausgelesenen Daten
die letzte Version darstellen.
-
Der
Direktschreib-FIFO könnte
so implementiert sein, dass nur ein Direktschreibvorgang eingegeben
wird, und die Software stellt sicher, dass der eingegebene direkte
Schreibvorgang ausgeführt wird,
bevor ein direkter Lesevorgang an derselben Stelle stattfindet.
- ii. Die Burst-Daten sind teilweise innerhalb
und teilweise außerhalb
des Strom-FIFOs vorhanden:
- – Wenn
sich das „Treffer"-Datenpaket auch
in dem Stromlese-FIFO befindet: Der Teil, der sich mit dem Paket
in dem Stromlese-FIFO überlappt, wird
aktualisiert, und der gesamt Burst wird in den Direktschreib-FIFO
eingegeben.
- – Wenn
sich das Datenpaket ebenfalls im Stromschreib-FIFO befindet: Der
Teil, der sich mit dem Paket in dem Stromlese-FIFO überlappt,
wird aktualisiert, und der gesamte Burst in den Direktschreib-FIFO
eingegeben. Der Speicher-Schreibzyklus
wird nicht wie im vorherigen Fall gelöscht.
- – Wenn
sich das Datenpaket sowohl im Stromlese- UND -schreib-FIFO befindet,
wird der Teil, der sich mit dem Paket in beiden Strom-FIFOs überlappt,
aktualisiert, und der gesamte Burst wird zum Direktschreib-FIFO
geschickt. Der Speicher-Schreibzyklus wird nicht wie im vorherigen Fall
gelöscht.
-
c. Einzelner (Nicht-Burst)
Direkt-PCI-Lesezugriff
-
Wenn
die direkte Adresse ein „Treffer" ist, das heißt, es sind
Daten vorhanden, die der gleichen Adresse in einem oder mehreren
Strom-FIFOs entsprechen, gibt es mehrere Fälle:
- – Wenn die
Datenadresse ein „Treffer" auf einem Stromlese-FIFO
ist, das heißt,
die Daten befinden sich in einem der Stromlese-FIFOs: Jene Daten werden
von dem Stromlese-FIFO zum Direktlese-FIFO „kopiert" und der PCI-Direktlesevorgang geht
vom Direktlese-FIFO aus. Dazu wird keine DRAM-Operation benötigt.
- – Wenn
die Datenadresse ein „Treffer" im Stromschreib-FIFO
ist, werden die Daten aus dem Stromschreib-FIFO in den Direktlese-FIFO „kopiert" und der PCI- Direktlesevorgang
geht von dem Direktlese-FIFO aus. Dazu wird keine DRAM-Operation benötigt.
- – Wenn
die gleichen Daten sowohl in einem der Stromlese- als auch in einem
der Stromschreib-FIFOs vorhanden sind: Dieser Fall sollte nicht
eintreten. Wenn die Daten sowohl in Lese- als auch in Schreib-Strömen vorhanden
sind, überlappen
sich die Ströme,
das heißt,
die Daten werden aus demselben Speicherraum ausgelesen und in diesen
eingeschrieben. Wenn ein solcher Fall erkannt wird, könnte eine
Fehlerunterbrechung generiert werden.
-
d. PCI-Burst-Direktlesezugriff
-
Wenn
die direkte Adresse ein „Treffer" ist, das heißt, es sind
Daten in einem oder mehreren Strom-FIFOs vorhanden, die derselben
Adresse entsprechen, gibt es zwei Hauptfälle:
- i.
Die Burst-Daten sind vollständig
in dem Strom-FIFO enthalten:
- – Wenn
sich dasselbe Datenpaket auch in dem Stromlese-FIFO befindet: Der
Teil, der überlappt wird,
wird aus dem Stromlese-FIFO in den Direktlese-FIFO „kopiert" und der Rest des
Bursts wird aus dem Speicher ausgelesen. Die PCI-Lesedaten können zu
dem PC-Bus-Master geschickt werden, unmittelbar nachdem die Daten
in den Strom-FIFO verschoben wurden, und gleichzeitig wird sobald
wie möglich
ein Speicherlesevorgang gestartet. Wenn der nicht überlappte
Teil des zu lesenden Datenpakets verspätet ist (nicht rechtzeitig
aus dem Speicher in den Direktlese-FIFO geholt wird), gibt der Chip
solange die Meldung „Target
not Ready" aus,
bis alle Daten abgerufen sind.
- – Wenn
sich das gleiche Datenpaket auch in dem Stromschreib-FIFO befindet:
Der überlappte
Teil des Datenpakets wird aus dem Stromschreib-FIFO in den Direktlese-FIFO „kopiert", und der PCI-Direkt-Burst-Lesevorgang
kann sofort beginnen, gleichzeitig wird ein Speicherlesezyklus sobald
wie möglich
in Gang gesetzt. Wenn der nicht überlappte
Teil des gelesenen Datenpakets verspätet ist (nicht rechtzeitig
aus dem Speicher in den Direktlese-FIFO geholt wird), gibt der Chip
die Meldung „Target
not Ready" solange
aus, bis alle Daten abgerufen sind.
- – Wenn
sich das gleiche Datenpaket sowohl in den Stromlese- UND -schreib-FIFOs befindet, wird
das Datenpaket in dem Stromschreib-FIFO aktualisiert, und der Speicherschreibvorgang,
der dem PCI-Schreibvorgang entspricht, wird aufgehoben. Die Speicherdaten
werden zu einem späteren
Zeitpunkt ohnehin durch den PCI-Stromschreibvorgang aktualisiert.
-
B. Stromzugriff mit Daten,
die sich bereits im/in Direkt-FIFO(s) befinden
-
a. PCI-Stromschreibzyklus
-
Wenn
die Stromschreibadresse ein „Treffer ist,
das heißt,
es sind Daten, die der gleichen Adresse entsprechen, in einem der
beiden Direkt-FIFOs oder in beiden vorhanden. Beim Stromzugriff
erfolgt der Treffer bei der Adresse nur dann, wenn die Stromdaten
bereits aus dem Speicher in den Chip geholt wurden. Es gibt mehrere
untergeordnete Fälle:
- – Wenn
sich die gleichen Daten auch in dem Direktlese-FIFO befinden: Die
Daten, die gerade aus dem Speicher in den Stromschreib-FIFO geholt
wurden, werden aktualisiert, und das PCI-Stromschreiben erfolgt
wie gewöhnlich.
- – Wenn
sich die gleichen Daten auch im Direktschreib-FIFO befinden: Die
Daten im Direkt-FIFO sind implizit neuer als die im Speicher. Deshalb werden
die Stromdaten aus dem Speicher in den Strom-FIFO geholt und anschließend mit
den Daten aus dem Direktschreib-FIFO aktualisiert.
- – Wenn
sich die gleichen Daten sowohl im Stromlese- als auch -schreib-FIFO
befinden, werden die Daten sowohl im Direktschreib- als auch -lese-FIFO
aktualisiert, und das PCI-Stromschreiben erfolgt wie gewöhnlich.
-
b. PCI-Stromlese-Zyklus
-
Wenn
die Stromleseadresse ein „Treffer" ist, das heißt, es sind
Daten, die der gleichen Adresse entsprechen, in einem der beiden
Direkt-FIFOs oder in beiden vorhanden. Beim Stromzugriff erfolgt
der Treffer bei der Adresse nur dann, wenn die Stromdaten bereits
aus dem Speicher in den Chip geholt wurden. Es gibt mehrere untergeordnete
Fälle:
- – Wenn
sich die gleichen Daten auch in dem Direktlese-FIFO befinden: Die
Daten, die sich im Direkt-FIFO befinden, sind implizit älter als
die Daten, die gerade durch den Stromzugriff abgerufen wurden. Deshalb
werden die Daten im Direkt-FIFO
mit den Daten aus dem Stromzugriff aktualisiert. Beide Zugriffe,
Direkt- und Stromzugriff, laufen wie üblich ab.
- – Wenn
sich die gleichen Daten auch im Direktschreib-FIFO befinden: Die
Daten im Direkt-FIFO sind implizit neuer als die im Speicher. Deshalb werden
die Stromdaten aus dem Speicher in den Strom-FIFO geholt und anschließend mit
den Daten aus dem Direktschreib-FIFO aktualisiert. Die beiden Zugriffe,
ein Direktschreib- und
ein Stromlesezugriff, laufen wie üblich ab.
- – Wenn
sich die gleichen Daten sowohl im Stromlese- als auch im -schreib-FIFO
befinden, werden die Daten sowohl im Direktschreib- als auch -lese-FIFO
aktualisiert, und die PCI-Zugriffe erfolgen wie gewöhnlich.