-
Die
Erfindung betrifft die Durchführung
von isochronen Datentransferoperationen zu und von einer Applikation über eine
Busstruktur. Die Erfindung bezieht sich insbesondere auf das Verwalten
und Bearbeiten eines Hochgeschwindigkeitsstroms von isochronen Daten
zur Durchführung
einer Datentransferoperation zwischen einer Applikation und einem
mit einer Busstruktur verbundenen Knoten.
-
Der
IEEE-1394-Standard "P1394
Standard For A High Performance Serial Bus", Entwurf 8.01v1, 16. Juni 1995, ist
ein internationaler Standard zur Implementierung einer kostengünstigen
seriellen Hochgeschwindigkeits-Busarchitektur, die Datentransfer
sowohl in asynchronem als auch in isochronem Format unterstützt. Isochrone
Datentransfers sind Echtzeitübertragungen,
die in der Weise stattfinden, daß die Zeitintervalle zwischen
signifikanten Zeitpunkten sowohl in der sendenden als auch in der
empfangenden Applikation gleiche Dauer haben. Jedes isochron übertragene
Datenpaket wird in seiner eigenen Zeitperiode übertragen. Ein Beispiel einer
idealen Applikation für
die isochrone Übertragung
von Daten wäre
die Übertragung
von einem Videorecorder zu einem Fernsehgerät. Der Videorecorder zeichnet
Bilder und Töne
auf und sichert die Daten in diskreten Stücken oder Paketen. Der Videorecorder überträgt dann
jedes Paket, das über
eine begrenzte Zeitperiode aufgezeichnete Bild- und Toninformation
repräsentiert,
während
dieser Zeitperiode für
die Anzeige in dem Fernsehgerät.
Die Busarchitektur nach dem IEEE-1394-Standard sieht Mehrfachkanäle für die isochrone
Datenübertragung
zwischen Applikationen vor. Mit den Daten wird eine 6-Bit-Kanalnummer gesendet,
um den Empfang durch die passende Applikation zu gewährleisten.
Dadurch können
mehrere Applikationen gleichzeitig isochrone Daten über die
Busstruktur senden. Asynchrone Übertragungen
sind traditionelle Datenübertragungsoperationen,
die so bald wie möglich
stattfinden und eine Datenmenge von einer Quelle zu einem Ziel übertragen.
-
Der
IEEE-1394-Standard stellt einen seriellen Hochgeschwindigkeits-Bus
für die
Verbindung von digitalen Geräten
zur Verfügung
und liefert damit eine universelle I/O-Verbindung. Der IEEE-1394-Standard
definiert ein digitales Interface für die Applikationen, so daß die Notwendigkeit
entfällt,
daß eine
Applikation digitale Daten in analoge Daten umwandeln muß, bevor
sie über
den Bus übertragen
werden. Dementsprechend empfängt
eine empfangende Applikation digitale Daten und keine analogen Daten
von dem Bus und muß deshalb keine
analogen Daten in digitale Daten umwandeln. Das von dem IEEE-1394-Standard
benötigte
Kabel ist sehr dünn
im Vergleich zu den dickeren Kabeln, die für die Verbindung solcher Geräte benutzt
werden. Geräte können an
einen IEEE-1394-Bus angeschlossen und von ihm getrennt werden, während der
Bus aktiv ist. Wenn ein Gerät
in dieser Weise angeschlossen oder getrennt wird, rekonfiguriert
sich der Bus automatisch selbst, um Daten zwischen den dann existierenden
Knoten zu übertragen.
Ein Knoten wird als eine logische Entität mit einer eindeutigen Adresse
an der Busstruktur betrachtet. Jeder Knoten stellt ein Identifikations-ROM, einen standardisierten
Satz von Steuerregistern und seinen eigenen Adressenraum zur Verfügung.
-
Der
IEEE-1394-Standard definiert ein Protokoll, wie es in 1 dargestellt
ist. Dieses Protokoll umfaßt einen
Verwaltungsblock 10 für
einen seriellen Bus, der mit einer Transaktionsschicht 12,
einer Verknüpfungsschicht 14 und
einer physikalischen Schicht 16 verbunden ist. Die physikalische
Schicht 16 liefert die elektrische und mechanische Verbindung
zwischen einem Gerät
oder einer Applikation und dem IEEE-1394-Kabel. Die physikalische
Schicht 16 führt
auch eine Bewertung durch, um sicherzustellen, daß alle mit
dem IEEE-1394-Bus
verbundenen Geräte
Zugriff auf den Bus haben, um das tatsächliche Senden und Empfangen der
Daten zu gewährleisten.
Die Verknüpfungsschicht 14 bietet
einen Datenpaket-Lieferservice sowohl für asynchronen als auch isochronen
Datenpakettransport. Dieser unterstützt sowohl asynchronen Datentransport,
wobei ein Quittungsprotokoll benutzt wird, als auch isochronen Datentransport,
bei dem ein echtzeit-garantiertes Bandbreitenprotokoll für die zeitgerechte
Datenlieferung vorgesehen ist. Die Transaktionsschicht 12 unterstützt die
Befehle, die für
die Durchführung
von asynchronen Datenübertragungen,
einschließlich
Lesen, Schreiben und Sperren, erforderlich sind. Der Verwaltungsblock 10 für den seriellen
Bus enthält
einen isochronen Ressourcen-Manager zum Verwalten der isochronen
Datenübertragungen.
Der Verwaltungsblock 10 für den seriellen Bus ermöglicht auch
die Kontrolle über
die Gesamtkonfiguration des seriellen Busses in Form von optimierender
zeitlicher Abstimmung der Bewertung, eine Garantie für die passende
elektrische Leistung für
alle Geräte
an dem Bus, die Zuteilung des Zyklus-Masters, die Zuteilung von
isochronen Kanal- und Bandbreiten-Ressourcen und eine grundlegenden
Fehlermeldung.
-
Zur
Initialisierung des isochronen Transfers können mehrere asynchrone Datenübertragungen
erforderlich sein, um die Applikationen zu konfigurieren und den
spezifischen Kanal zu bestimmen, der für die Datenübertragung benutzt wird. Sobald
der Kanal festgelegt ist, werden Puffer benutzt, in der sendenden
Applikation, um die Daten zu speichern, bevor sie gesendet werden,
und in der empfangenden Applikation zur Speicherung der Daten, bevor
sie verarbeitet werden. In einem Universal-Host oder einer peripheren
Implementierung liegt das Format der gesendeten Daten nicht in einer
von der Applikation verwendbaren Form vor. In den meisten Fällen muß ein Universal-Prozessor
den Datenstrom vorverarbeiten, bevor er zu der Applikation gesendet
wird. Die Vorverarbeitung nimmt oft erhebliche Rechenleistung in
Anspruch, so daß es
unter Umständen
nicht gelingt, den Echtzeit-Datenstrom effektiv zu verarbeiten.
-
Was
benötigt
wird, ist eine isochrone Daten-Pipe, die der Applikation die Fähigkeit
verleiht, einen Hochgeschwindigkeits-Datenstrom, der über eine
Busstruktur von der Applikation gesendet oder empfangen wird, zu
verwalten und zu manipulieren. Was außerdem benötigt wird, ist eine isochrone
Daten-Pipe, die es der Applikation erlaubt, Daten in ihrem nativen
Format zu senden und zu empfangen und dadurch die Fähigkeit der
Applikation zu verbessern, einen kontinuierlichen Datenstrom über die
Zeit effektiv zu bearbeiten.
-
Das
Dokument "The Programmable
Protocol VLSI Engine (PROVE)" von
Krishnakumar et al., veröffentlicht
in IEEE Transactions on Communications, Band 42, Nr. 8, 1. August
1994, Seiten 2630 bis 2642, beschreibt eine sehr hoch integrierte
(VLSI) programmierbare Protokollmaschine. Die VLSI-Protokollmaschine
ist ein programmierbarer VLSI-Chipsatz, der zur Implementierung
verschiedener Standard-Kommunikationsprotokolle benutzt werden kann.
Das zu implementierende Protokoll wird in einer formalen APSL (augmented
protocol specification language) beschrieben. Die VLSI-Protokollmaschine
besteht aus einem Message-Parser, einem
Message-Assembler, einer zentralen Steuereinheit und einem Interface
zu der oberen Schicht. Der Message-Parser trennt den Header jedes
ankommenden Pakets von der unteren Schicht und leitet die in dem Paket
enthaltenen Daten zu der Datenverwaltungseinheit. Die zentrale Steuereinheit
lädt den
Message-Assembler mit der für
den Aufbau des Headers eines abgehenden Pakets benötigten Information.
Der Message-Assembler konstruiert den Header dann entsprechend den
Paket-Formatierungsregeln und sendet ihn zu der unteren Schicht.
Die zentrale Steuereinheit implementiert die Protokoll-Funktionen,
die als eine Kollektion von Finite-State-Maschinen spezifiziert
sind. Die von der zentralen Steuereinheit implementierten Zustandsmaschinen
sind in einem in einem externen RAM residenten Mikroprogramm beschrieben,
das die Prozesse spezifiziert, die das Protokoll umfassen.
-
Die
europäische
Patentanmeldung EP-A-0 696 853 beschreibt ein Signalempfangsgerät, das isochrone
Daten kontinuierlich ohne Unterbrechung empfangen kann und unregelmäßig gesendete
asynchrone Daten ebenfalls empfangen kann. Das Signalempfangsgerät empfängt isochrone
und asynchrone Pakete, die an den Empfänger adressiert sind, und sendet
sie zu einem Separator. Der Separator liefert dann die isochronen
Pakete an ein isochrones Empfangs-FIFO und die asynchronen Pakete
an ein asynchrones Empfangs-FIFO. Die isochronen Pakete werden dann
aus dem isochronen Empfangs-FIFO in einen isochronen Datenverarbeitungsblock
ausgelesen. Die asynchronen Pakete werden aus dem asynchronen Empfangs-FIFO
in den asynchronen Datenverarbeitungsblock ausgelesen.
-
Das
Dokument "The Parallel
Protocol Engine" von
Kaiserswerth, veröffentlicht
in IEEE/ACM Transactions on Networking, Band 1, Nr. 6, 1. Dezember
1993, Seiten 650 bis 663, beschreibt eine Parallel-Protokollmaschine
für die
Ausführung
von Protokollen mit Parallelpipelines. Die parallele Protokollmaschine
verwendet zwei separate, gemeinsam genutzte Speicher zum Senden
und Empfangen von Daten. Bis zu vier Protokoll-Prozessoren greifen
auf jeder Seite des Adapters auf den gemeinsam genutzten Speicher
zu.
-
In
den anliegenden Ansprüchen
sind verschiedene Aspekte der Erfindung angegeben.
-
In
einem speziellen Ausführungsbeispiel
der Erfindung bietet eine isochrone Daten-Pipe einen bidirektionalen
Datenpfad zwischen einer Applikation und einer Busstruktur. Die
isochrone Daten-Pipe kann senden, empfangen und an einem beliebigen
isochronen Datenstrom, der Daten auf einer beliebigen Anzahl von
isochronen Kanälen
einschließt,
Manipulationen vornehmen. Die isochrone Daten-Pipe ist eine programmierbare Folgesteuerung
(sequencer), die den isochronen Datenstrom bearbeitet, wenn dieser
durch die isochrone Daten-Pipe wandert. Die isochrone Daten-Pipe
wird von einer Applikation programmiert, um spezifische Operationen
an dem Datenstrom vorzunehmen, bevor die Daten entweder über die
Busstruktur übertragen
oder zu der Applikation gesendet werden, und führt dadurch eine Vorverarbeitung
und Manipulation der Daten durch, bevor sie an ihr Ziel ausgeliefert
werden. Die Operationen werden sowohl an dem Paket-Header als auch
an dem Datenfeld des Datenpakets vorgenommen. Die isochrone Daten-Pipe
kann beim Auftreten spezifischer Ereignisse gestoppt und gestartet
werden. In einem alternativen Ausführungsbeispiel der Erfindung
ist die isochrone Daten-Pipe so programmiert, daß sie sowohl isochrone als
auch asynchrone Daten sendet und empfängt, einschließlich der
Erzeugung von Anforderungen und geeigneten Paket-Headern.
-
1 zeigt
ein durch den IEEE-1394-Standard definiertes Protokoll,
-
2 zeigt
ein schematisches Blockdiagramm einer Verknüpfungsschaltung mit einer isochronen
Daten-Pipe gemäß der Erfindung
und einer asynchronen Daten-Pipe,
-
3 zeigt
eine Registerdatei in der isochronen Daten-Pipe,
-
4 zeigt
eine Registerdatei in dem isochronen Daten-Pipe-Sequencers,
-
5 zeigt
ein Beispiel für
einen isochronen Datenstrom und veranschaulicht das isochrone Aufzeichnungsformat.
-
Eine
isochrone Daten-Pipe sendet und empfängt über eine Busstruktur Daten
für eine
Applikation. Die Busstruktur ist vorzugsweise eine Busstruktur nach
dem IEEE-1394-Standard. Die isochrone Daten-Pipe ist programmierbar
und führt
eine Reihe von Instruktionen an einem Datenstrom aus, um an den
Daten die von der Applikation geforderten Manipulationen vorzunehmen.
Eine Verknüpfungsschaltung
enthält
eine isochrone Daten-Pipe zum Senden und Empfangen von isochronen
Daten und eine asynchrone Daten-Pipe zum Senden und Empfangen von
asynchronen Daten. Die Daten aus der isochronen Daten-Pipe und die
Daten aus der asynchronen Daten-Pipe sind auf der Busstruktur gemultiplext.
Die von der Busstruktur empfangenen Daten werden auf die isochrone
Daten-Pipe und die asynchrone Daten-Pipe demultiplext. Alternativ
ist die isochrone Daten-Pipe so programmiert, daß sie sowohl isochrone als
auch asynchrone Daten sendet und empfängt.
-
2 zeigt
eine Verknüpfungsschaltung
mit einer isochronen Daten-Pipe (IDP) nach der vorliegenden Erfindung
und einer asynchrone Daten-Pipe. Die Verknüpfungsschaltung 10 stellt
eine Verknüpfung
her zwischen Applikationen 12 und 14 und einer
Busstruktur 58. Beide Applikationen 12 und 14 sind
mit einem Systembus 16 verbunden. Der Systembus 16 ist
sowohl mit der isochronen Daten-Pipe 20 als auch mit der
asynchronen Daten-Pipe 26 verbunden. Die Applikationen 12 und 14 sind
außerdem
mit einer Applikations-Interface-Schaltung 18 verbunden.
Die Applikations-Interface-Schaltung 18 ist mit einem Satz
von Steuerregistern 38, der isochronen Daten-Pipe 20,
der asynchronen Daten-Pipe 26 und einem Verknüpfungskern 44 verbunden.
Sowohl die isochrone Daten-Pipe als auch die asynchrone Daten-Pipe 26 enthalten
einen Registersatz 24 bzw. 28. Das abgehende FIFO 30 entspricht
der isochronen Daten-Pipe 20 und ist zwischen der isochronen Daten-Pipe 20 und
einem Multiplexer 40 angeordnet. Das abgehende FIFO 32 entspricht
der asynchronen Daten-Pipe 26 und ist zwischen der asynchronen
Daten-Pipe 26 und dem Multiplexer 40 angeordnet.
Die Steuerregister 38 sind ebenfalls sowohl mit der isochronen
Daten-Pipe 20 als auch mit der asynchronen Daten-Pipe 26 verbunden.
Ein ankommendes FIFO 34 ist mit einem Demultiplexer 42 verbunden.
Der Demultiplexer 42 ist sowohl mit der isochronen Daten-Pipe 20 als
auch mit der asynchronen Daten-Pipe 26 verbunden.
-
Der
Verknüpfungskern 44 enthält einen
Sender 46, einen Empfänger 48,
einen Zyklus-Timer 50, einen Zyklus-Monitor 52,
eine CRC-Fehlerprüfschaltung 54 und
eine physikalische Interfaceschaltung 56 für den physikalischen
Anschluß an
die Busstruktur 58. Der Sender 46 ist mit dem
Multiplexer 40, dem Zyklus-Timer 50, der CRC-Fehlerprüfschaltung 54 und
der physikalischen Interface-Schaltung 56 verbunden. Der
Empfänger 48 ist
mit dem ankommenden FIFO 34, dem Zyklus-Monitor 52,
der CRC-Fehlerprüfschaltung 54 und
der physikalischen Interfaceschaltung 56 verbunden. Der
Zyklus-Timer 50 ist mit dem Zyklus-Monitor 52 verbunden.
Die physikalische Interfaceschaltung 56 ist mit der Busstruktur 58 verbunden.
-
Die
in 2 dargestellte Verknüpfungsschaltung 10 enthält ein Einfach-FIFO 34 für alle ankommenden
sowohl isochronen als auch asynchronen Daten, ein speziell für die isochrone
Daten-Pipe 20 bestimmtes FIFO 30 für abgehende
Daten und ein speziell für
die asynchrone Daten-Pipe 26 bestimmtes FIFO 32 für ausgehende
Daten. Die ausgehenden Daten aus den FIFOs 30 und 32 werden
von dem Multiplexer 40 über
den Verknüpfungskern 44 und auf
die Busstruktur 58 gemultiplext. Die ankommenden Daten
aus dem FIFO 34 werden von dem Demultiplexer 42 entweder
der isochronen Daten-Pipe 20 oder der asynchronen Daten-Pipe 26 zugeführt, wie
dies weiter unten erläutert
wird.
-
Das
ankommende FIFO 34 hat vorzugsweise eine Breite von 33
Bit, das ausgehende FIFO 30 hat eine Breite von 34 Bits
und das abgehende FIFO 32 hat eine Breite von 33 Bits.
In jedem der FIFOs 30, 32 und 34 sind
die Bits 0 bis 31 für
den Datentransport bestimmt, und das Bit 32 ist für Transport
eines Paket-Grenz-Markierer bestimmt. Für abgehende Pakete setzen die
isochrone Daten-Pipe 20 und die asynchrone Daten-Pipe 26 das
Bit 32 in dem ersten Quadlet jedes Pakets auf hohen logischen Spannungspegel.
Für ankommende Pakete
setzt der Verknüpfungskern 44 das
Bit 32 in dem ersten Quadlet jedes Pakets auf hohen logischen Spannungspegel.
-
In
dem abgehenden FIFO 30, das der isochronen Daten-Pipe 20 entspricht,
dient das Bit 33 zur Bezeichnung einer isochronen Zyklus-Grenze.
Die isochrone Daten-Pipe 20 setzt das Bit 33 in dem ersten
Quadlet des ersten isochronen Pakets jedes isochronen Zyklus auf
hohen logischen Spannungspegel. Wenn der Verknüpfungskern 44 ein
Daten-Quadlet empfängt,
bei dem das Bit 33 auf einen hohen logische Spannungspegel gesetzt
ist, verzögert
er bis zu dem nächsten
Zyklusstart, sendet dann alle isochronen Pakete in dem abgehenden
FIFO 30, bis ein weiteres Quadlet detektiert wird, dessen
Bit 33 auf hohen logischen Spannungspegel gesetzt ist.
-
Um
von einer der Applikationen 12 und 14 Applikationsdaten
auf die Busstruktur 58 zu senden, erzeugen sowohl die isochrone
Daten-Pipe 20 als auch die asynchrone Daten-Pipe 26 eine
geeignete Header-Information und hängen die passenden Applikationsdaten
an, um ein Paket in der von der Busstruktur 58 geforderten
Form zu bilden. Diese Pakete werden dann in dem passenden FIFO 30 bzw. 32 für das Senden
auf der Busstruktur 58 gespeichert.
-
Die
asynchrone Daten-Pipe 26 ist vorzugsweise so implementiert,
wie dies in der internationalen Patentanmeldung WO 97/33230 mit
dem Titel "Asynchronous
Data Pipe For Automatically Managing Asynchronous Data Transfers
Between An Application And A Bus Structure" beschrieben ist, die am 12. September 1997
veröffentlicht
wurde. Die asynchrone Daten-Pipe 26 erzeugt automatisch
Transaktionen, die zur Durchführung
von asynchronen Datentransfer-Operationen für eine Applikation über eine
Busstruktur erforderlich sind. Die asynchrone Daten-Pipe 26 enthält eine
von der Applikation programmierte Registerdatei 28. Die
Registerdatei 28 ermöglicht
es der Applikation, Erfordernisse und Eigenschaften für die Datentransfer-Operation zu
programmieren. Die Registerdatei 28 enthält die Bus-Geschwindigkeit,
ein Transaktions-Label, einen Transaktions-Code, einen Zielknoten-Identifi zierer,
eine Ziel-Offset-Adresse, die Länge
der einzelnen Datenpakete, einen Paketzähler, ein Paketzähler-Pufferfeld,
ein Steuerfeld und ein Statusfeld.
-
Nachdem
die Registerdatei 28 programmiert und von der Applikation
initiiert ist, erzeugt die asynchrone Daten-Pipe 26 automatisch
die Lese- oder Schreib-Transaktionen, die zur Durchführung der
Datentransfer-Operation über
den passenden Adressenbereich benötigt werden, wobei die Information
in der Registerdatei als Schablone zur Erzeugung der Transaktionen
und Header benutzt wird. Die asynchrone Daten-Pipe 26 inkrementiert
automatisch den Wert in dem Ziel-Offset-Adressenfeld für jede Transaktion
entsprechend der Länge
jedes Datenpakets, außer
wenn ein Inkrementierungs-Merkmal deaktiviert wurde, wodurch signalisiert wird,
daß die
Transaktionen an eine Einzeladresse stattfinden sollen. Der Wert
des Paket-Zählers
repräsentiert die
Zahl der verbleibenden Generationen, die erzeugt werden sollen.
Nach jeder Übertragung
eines Datenpakets wird der Wert des Paket-Zählers dekrementiert. Das Paketzähler-Pufferfeld
ermöglicht
es der Applikation, den Wert des Paketzählers zu inkrementieren, indem
in das Paketzähler-Pufferfeld
eingeschrieben wird.
-
In
einer Verknüpfungsschaltung 10 können mehrere
asynchrone Daten-Pipes enthalten sein, um mehrere asynchrone Datentransfer-Operationen
zu verwalten. In einem solchen System besitzt jede asynchrone Daten-Pipe
ihren eindeutigen Transaktions-Labelwert oder Wertebereich. Der
Multiplexer 40 multiplext die Transaktionen und Datenpakete
aus den asynchronen Daten-Pipes und der isochronen Daten-Pipe auf
der Busstruktur 58. Der Demultiplexer 42 empfängt Signale
und Datenpakete von der Busstruktur 58 und leitet sie zu
der passenden asynchronen Daten-Pipe oder isochronen Daten-Pipe,
wobei der Transaktions-Code
und die Transaktions-Labelwerte benutzt werden.
-
In
der Verknüpfungsschaltung 10 gibt
es nur eine isochrone Daten-Pipe 20. Diese isochrone Daten-Pipe 20 kann
mehrere isochrone Kanäle
verarbeiten, und in dem Daten-Interface kann die isochrone Daten-Pipe 20 mehr
als einen Strom von isochronen Daten unterstützen, wobei jeder Datenstrom
aus einem oder mehreren isochronen Kanälen besteht. In einem alternativen
Ausführungsbeispiel,
das weiter unten beschrieben wird, kann die isochrone Daten-Pipe 20 auch
asynchrone Daten senden und empfangen und damit die Funktionen einer
asynchronen Daten-Pipe ausüben.
-
Der
Verknüpfungskern 44 akzeptiert
Datenpakete aus den abgehenden FIFOs 30 und 32,
erzeugt Pakete, die dem von der Busstruktur 58 geforderten
Format entsprechen, und überträgt dann
die Pakete über
das physikalische Interface 56 auf die Busstruktur 58.
Der Verknüpfungskern 44 sendet
in jedem isochronen Zyklus ein Datenwort des isochronen Zyklus aus
dem abgehenden isochronen FIFO 30. Wenn der Verknüpfungskern 44 keine
isochro nen Daten sendet, sendet er asynchrone Pakete aus dem abgehenden
asynchronen FIFO 32.
-
Der
Verknüpfungskern 44 sendet
alle empfangenen Pakete an das ankommende FIFO 34. Sofern
der Verknüpfungskern 44 nicht
in einem Überwachungs-Modus
(Snoop-Modus) arbeitet, empfängt
er nur asynchrone Pakete, die an die passende Knoten-ID adressiert
sind, sowie isochrone Pakete mit den passenden Kanalnummern. Im
Snoop-Modus empfängt
der Verknüpfungskern 44 alle
Pakete ohne Rücksicht
auf ihre Zielknoten-ID oder ihre isochrone Kanalnummer.
-
Die
isochrone Daten-Pipe 20 bildet einen bidirektionalen Datenpfad
für Applikationsdaten,
die über
die Busstruktur 58 gesendet werden sollen. Ein Strom von
isochronen Daten ist aus Daten eines oder mehrerer isochroner Kanäle zusammengesetzt.
Die isochrone Daten-Pipe 20 kann
mit einem beliebigen Strom von isochronen Daten arbeiten, der Daten
auf einer beliebigen Anzahl von isochronen Kanälen enthält. Die isochrone Daten-Pipe 20 ist
ein programmierbarer Sequencer, der auf einen Strom von isochronen
Daten von dem Bus 16 zu dem abgehenden isochronen FIFO 30 oder
von dem Empfangs-FIFO 34 zu dem Bus 16 einwirkt.
-
Die
isochrone Daten-Pipe 20 führt für jedes übertragene Daten-Quadlet eine
vorbestimmte Anzahl von Instruktionen aus, um die Daten so zu manipulieren,
wie dies notwendig ist. Diese Instruktionen können auf das isochrone Datenblock-Paket
einwirken. Beim Senden von Daten, die an die Busstruktur 58 ausgegeben werden
sollen, ist der von der isochronen Daten-Pipe 20 ausgegebene
Datenstrom sowohl von dem der isochronen Daten-Pipe 20 zugeführten Datenstrom
als auch von den Manipulationen, die von der isochronen Daten-Pipe 20 an
den Daten vorgenommen werden, abhängig. Wenn Daten von der Busstruktur 58 empfangen werden,
ist der von der isochronen Daten-Pipe 20 an den Bus 16 ausgegebene
Datenstrom dementsprechend von dem der isochronen Daten-Pipe 20 zugeführten Datenstrom
und von den Manipulationen, die von der isochronen Daten-Pipe 20 an
den Daten vorgenommen werden, abhängig.
-
Die
isochrone Daten-Pipe 20 unterstützt verschiedene Scheduling-Merkmale
für das
Starten und Stoppen von isochronen Datenübertragungen in Abhängigkeit
von dem laufenden Betriebszustand der isochronen Daten-Pipe. Mit
einer geeigneten Programmierung unterstützt die isochrone Daten-Pipe
die isochronen Aufzeichnungs-Datenformate, wie sie in dem seriellen
Sus-Protokoll-Standard SCSI-3 definiert sind. Dieses Protokoll definiert,
wie ein isochroner Datenstrom zu etikettieren ist, wenn er aufgezeichnet
wird, so daß er
bei der Wiedergabe präzise
wiederhergestellt werden kann. Die isochrone Daten-Pipe ist eine
programmierbare Datenbearbeitungsmaschine in dem isochronen Datenpfad.
Mit geeigneter Pro grammierung implementiert diese Maschine die isochronen
Aufzeichnungsformate und besitzt darüber hinaus die Fähigkeit,
die Daten zu filtern, indem sie Quadlets löscht oder spezifische Operationen
an jedem Ouadlet ausführt,
das zu der oder von der Busstruktur 58 übertragen wird.
-
Das
FIFO-Interface sowohl für
die isochrone Daten-Pipe 20 als auch für die asynchrone Daten-Pipe 26 ist
direkt mit dem FIFO 30 bzw. 32 verbunden. Das
FIFO 30 ist speziell für
den Datenpfad bestimmt, der von der isochronen Daten-Pipe 20 gesteuert
wird. Das FIFO 32 ist speziell für den Datenpfad bestimmt, der von
der asynchronen Daten-Pipe 26 gesteuert wird. Das Verknüpfungs-Interface
für die
isochrone Daten-Pipe 20 und Verknüpfungs-Interface für die asynchrone
Daten-Pipe 26 sind beide über den Multiplexer 40 und
den Demultiplexer 42 mit dem Verknüpfungskern 44 verbunden.
Die Daten, die von der isochronen Daten-Pipe 20 und der
asynchronen Daten-Pipe 26 dem Verknüpfungskern 44 präsentiert
werden, liegen in dem von der Verknüpfungskern-Funktion geforderten
Format vor. Sowohl die isochrone Daten-Pipe 20 als auch
die asynchrone Daten-Pipe 26 erwarten, daß die von
dem Verknüpfungskern 44 kommenden
Daten das durch die Verknüpfungskern-Spezifikation
definierte Format haben. Falls das System zusätzliche logische Blöcke enthält, ist
jeder logische Block über
den Multiplexer 40 und den Demultiplexer 42 mit
dem Verknüpfungskern 44 verbunden.
Ein System kann beispielsweise mehrere asynchrone Daten-Pipes enthalten.
In einem System mit mehreren asynchronen Daten-Pipes ist jede der
asynchronen Daten-Pipes über
das FIFO 32 mit dem Multiplexer 40 verbunden.
In einem solchen System ist zwischen den asynchronen Daten-Pipes
und dem FIFO 32 ein zusätzlicher
Multiplexer vorgesehen, um Datenpakete in das FIFO 32 zu
multiplexen.
-
Wenn
Daten aus der isochronen Daten-Pipe 20 geleitet werden,
erkennt der Multiplexer 40, wenn Daten aus der isochronen
Daten-Pipe verfügbar
sind, und der Multiplexer 40 sendet für jeden isochronem Zyklus pro
Kanal ein Datenpaket. Die von dem Verknüpfungskern 44 zu der
isochronen Daten-Pipe 20 und der asynchronen Daten-Pipe 26 gesendeten
Daten werden durch das FIFO 34 und den Multiplexer 42 umgeleitet.
Der Demultiplexer 42 ändert
keine Information, wenn er Pakete von dem Verknüpfungskern 44 zu dem
geeigneten Exemplar der isochronen Daten-Pipe 20 oder der
asynchronen Daten-Pipe 26 umleitet. Jede von dem Verknüpfungskern
erzeugte Information wird zu dem logischen Ziel-Block gesendet.
Die isochrone Daten-Pipe 20 und die asynchrone Daten-Pipe 26 nehmen
an den Daten aus dem Verknüpfungskern 44 jede
erforderliche Manipulation vor, bevor diese Daten zu einer der Applikationen 12 und 14 übertragen
werden, wobei diese Manipulation das Abtrennen der Header-Information
umfassen kann, die von dem Protokoll für die Busstruktur 58 benötigt wird.
Für abgehende
Daten bereiten sowohl die isochrone Daten-Pipe 20 als auch
die asynchrone Daten-Pipe 26 die Daten aus der Applikation
so vor, daß sie
die passende Form haben, wie sie von dem Verknüpfungskern 44 benötigt wird.
Sowohl die isochrone Daten-Pipe 20 als auch die asynchrone
Daten-Pipe 26 erzeugen die geeignete Header-Information
und betten diese in die Daten aus der Applikation ein, bevor die
Daten über
den Multiplexer 40 zu dem Verknüpfungskern 44 gesendet
werden.
-
Sowohl
für die
isochrone Daten-Pipe 20 als auch für die asynchrone Daten-Pipe 26 erzeugt
und konsumiert das Verknüpfungs-Interface
Daten in einem Format, das mit den Forderungen der Funktion des
Verknüpfungskerns 44 kompatibel
ist. Während
einer Datensendeoperation erzeugt die isochrone Daten-Pipe 20 die
für die
Busstruktur erforderliche, spezifische Header-Information und bettet
sie in die Daten aus der Applikation ein, wie dies von dem Verknüpfungskern 44 gefordert
wird. Um während
einer Datenempfangsoperation Daten von dem Verknüpfungskern 44 entweder
zu der isochronen Daten-Pipe 20 oder zu der asynchronen
Daten-Pipe 26 bewegen zu können, akzeptieren sowohl die
isochrone Daten-Pipe 20 als auch die asynchrone Daten-Pipe 26 diese
Daten in dem von dem Verknüpfungskern 44 gelieferten
Format. Mit anderen Worten, es ist keine Manipulation der Daten
erforderlich, um Daten aus dem Verknüpfungskern 44 zu der
isochronen Daten-Pipe 20 oder der asynchronen Daten-Pipe 26 zu übertragen.
-
Wenn
innerhalb eines Systems nur ein logischer Block enthalten ist, kann
dieser logische Block direkt mit dem Verknüpfungskern 44 verbunden
sein. Wenn mehrere logische Blöcke
innerhalb eines Systems vorhanden sind, besitzt das System einen
geeigneten Multiplexer 40 und einen geeigneten Demultiplexer 42 zwischen
den logischen Blöcken
und dem Verknüpfungskern 44.
Der Multiplexer 40 ist dafür verantwortlich, die Daten
an den Verknüpfungs-Interfaces
der mehreren logischen Blöcke
zu übernehmen
und diese Daten auf einer Basis Paket für Paket über den Verknüpfungskern 44 und
auf die Busstruktur 58 zu multiplexen. Diese Information
ist applikationsspezifisch und wird zu der Busstruktur in einer
Priorität
umgeleitet, die durch die Übertragungsoperation
festgelegt ist. Jedes isochrone Datenpaket wird von dem Multiplexer 40 während seiner
passenden Zeitperiode gesendet. Der Demultiplexer 42 benutzt
den Wert in dem Transaktionscode und die Kanalnummernfelder jedes
von der Busstruktur 58 empfangenen Pakets, um das Paket
zu dem passenden logischen Block 20 oder 26 umzuleiten.
Wenn nicht mehr als eine isochrone Daten-Pipe 20 und eine
asynchrone Daten-Pipe 26 vorhanden ist, ist der Transaktionscode
das einzige, was für
die richtige Umlenkung des Pakets benötigt wird. Der Demultiplexer 42 liest
zuerst den Transaktionscode aus, um festzustellen, ob das Paket aus
asynchronen Daten besteht und zu einer asynchronen Daten-Pipe gelenkt
werden sollte. Falls nicht mehr als eine asynchrone Daten-Pipe in
dem System vorhanden ist, benutzt der Demultiplexer 42 dann
den Wert in dem Transaktions-Label des asynchronen Antwort-Paket-Headers,
um das Paket zu der passenden asynchronen Daten-Pipe umzulenken.
-
Die
isochrone Daten-Pipe der vorliegenden Erfindung bildet einen bidirektionalen
Datenpfad zwischen einem entsprechenden FIFO und dem Verknüpfungskern 44.
Mit geeigneter Programmierung unterstützt die isochrone Daten-Pipe
das isochrone Datenaufzeichnungsformat, wie es in dem seriellen
Bus-Protokoll-(SBP)-Standard SCSI-3 dokumentiert ist, und ermöglicht eine
programmierbare Manipulation der Daten in dem isochronen Strom.
-
Wenn
Daten durch das entsprechende FIFO 30 zu dem Verknüpfungskern 44 übertragen
oder wenn Daten von dem Demultipiexer 42 empfangen werden,
wirkt die isochrone Daten-Pipe 20 unabhängig auf jedes Daten-Quadlet
ein. Die isochrone Daten-Pipe 20 führt an jedem Quadlet eine programmierbare
Anzahl von Instruktionen aus, um die Daten so zu manipulieren, wie
dies notwendig ist. Die möglichen
Instruktionen, die von der isochronen Daten-Pipe 20 ausgeführt werden
können,
sind in einem Instruktionssatz enthalten, der weiter unten im Detail
erläutert
wird. Die isochrone Daten-Pipe 20 enthält auch eine unabhängige dedizierte
Registerdatei 24, die ebenfalls weiter unten im Detail
erläutert
wird.
-
Wenn
ein Bus-Reset stattfindet, während
die isochrone Daten-Pipe 20 Daten überträgt, wird die Operation der
isochronen Daten-Pipe 20 exakt dort wiederaufgenommen,
wo sie eingestellt wurde, wenn das nächste Zyklus-Startpaket auf
der Busstruktur 48 erscheint. Obwohl die Verarbeitung von
isochronen Daten unverzüglich
wiederaufgenommen wird, ordnet die eingebettete Applikation Kanalnummern,
Bandbreite und irgendwelche Verbindungen, die vor dem Bus-Reset
in Benutzung waren, neu zu, wie dies in dem IEEE-1394-Standard und dem
IEC-Standard für
Consumergeräte
definiert ist.
-
Die
isochrone Daten-Pipe 20 wird von einer unabhängigen dedizierten
Registerdatei gesteuert, wie dies in 3 dargestellt
ist. Diese Registerdatei wird von der Ursprungs-Applikation programmiert
und dient zur Erzeugung von Headern, Befehlen und Transaktionen,
die für
die Durchführung
einer isochronen Datentransfer-Operation über die Busstruktur 58 benötigt werden.
Die Registerdatei 80 enthält 120 Datenbytes, die hexadezimal
von 0 bis 77 numeriert sind. In 3 ist die
Registerdatei 80 in einem Tabellenformat mit 30 horizontalen
Zeilen mit jeweils vier Datenbytes dargestellt. 3 enthält eine
Offset-Spalte 82, um den Versatz des Anfangs-Bytes in jeder
Zeile gegenüber
der Adresse des Anfangs der Registerdatei 80 darzustellen.
Eine Lese-/Schreib-Spalte 84 ist ebenfalls enthalten, um
darzustellen, ob aus den Feldern in jeder Spalte ausgelesen und
in sie eingeschrieben werden kann oder nur aus ihnen ausgelesen
werden kann.
-
Die
Zykluszeit cycle_time ist ein 20-Bit-Feld innerhalb der Bytes 0
bis 2 der Registerdatei 80. Die Zykluszeit kann ausgelesen
und beschrieben werden. Wenn das weiter unten näher erläuterte Steuer-Ereignis-Feld
den Zykluszahlwert enthält,
speichert das Zykluszeit-Feld die Zykluszeit, zu der die isochrone
Daten-Pipe 20 die Übertragung
von isochronen Daten startet oder stoppt.
-
Das
Steuerfeld ist ein 32-Bit-Feld innerhalb der Bytes 4 bis 7 der Registerdatei 80.
Das Steuerfeld kann ausgelesen und beschrieben werden. Das Steuerfeld
enthält
ein Ereignis-Feld, ein Ausgabe-Aktivierungs-Feld, ein Stopp-bei-Fehler-Feld,
ein Sende-Aktivierungs-Feld und ein GO-Feld. Das Ereignis-Feld ist
ein 4-Bit-Feld in den Bits 28 bis 31 des Steuerregisters. Der Wert
in dem Ereignis-Feld definiert das Bus-Ereignis für die isochrone
Daten-Pipe 20, das als Trigger benutzt werden soll. Wenn
dieses Bus-Ereignis eintritt, überträgt die isochrone
Daten-Pipe den Wert, der in dem wartenden Kanalmasken-Register pending_ch_mask
gespeichert ist, zu dem laufenden Kanalmasken-Register_ch_mask.
Das Ereignis-Feld ist für
die möglichen Bus-Ereignisse
so kodiert, wie dies in der folgenden Tabelle I dargestellt ist.
-
-
Deshalb
startet oder stoppt die isochrone Daten-Pipe unverzüglich, wenn
das Ereignis-Feld den Wert 0 hält.
Wenn das Ereignis-Feld den Wert 1 hält, startet oder stoppt die
isochrone Daten-Pipe in einem Zeitpunkt, der durch den Wert in dem
Zykluszeit-Feld spezifiziert ist, wie dies oben diskutiert wurde.
-
Das
Ausgabe-Aktivierungsfeld ist ein 4-Bit-Feld in den Bits 4 bis 7
des Steuerfelds. Wenn eines der Bits in dem Ausgabe-Aktivierungsfeld
auf hohen logischen Spannungspegel gesetzt ist, stellt der entsprechende
Kanal für
den direkten Speicherzugriff (DMA-Kanal) sicher, daß das Vorfüll-FIFO
voll gehalten wird und die isochrone Daten-Pipe 20 den
Ausgabebefehl jedesmal an den Steuerspeicher absendet, wenn es in
dem abgehenden FIFO 30 ein leeres Quadlet gibt.
-
Das
Stopp-bei-Fehler-Feld ist ein 1-Bit-Feld in dem Bit 3 des Steuerfelds.
Wenn das Stopp-bei-Fehler-Bit
auf einen hohen logischen Pegelwert gesetzt ist, stoppt die isochrone
Daten-Pipe die laufende
Operation bei dem ersten angetroffenen Fehler, indem der Wert in
dem Kanal-Masken-Register auf niedrigen logischen Spannungspegel
gesetzt wird. Zu den möglichen
Fehlern beim Senden von Daten gehört ein FIFO-Unterlauf oder
ein fehlendes Zyklusstart-Paket. Zu den möglichen Fehlern beim Empfang
von Daten gehört
ein FIFO-Überlauf, ein
fehlendes Zyklusstart-Paket, ein Daten-CRC-Fehler, ein Fehler im
Paketformat oder ein Fehler aufgrund eines fehlenden Kanals.
-
Das
Sende-Aktivierungs-Feld ist ein 1-Bit-Feld in dem Bit 1 des Steuerfelds.
Wenn das Sende-Aktivierungs-Bit auf hohen logischen Spannungspegel
gesetzt ist, beginnt die isochrone Daten-Pipe 20 mit der
Ausführung
des Ausgabesteuer-Speicherprogramms. Wenn das GO-Bit einen niedrigen logischen Spannungspegel
hat oder das Ausgabe-Steuerspeicherprogramm einen Rückkehrbefehl
ausführt,
wird das Sende-Aktivierungs-Bit gelöscht.
-
Das
GO-Feld ist ein 1-Bit-Feld in dem Bit 0 des Steuerfelds. Die Applikation
setzt das GO-Bit auf hohen logischen Spannungspegel, um die isochrone
Daten-Pipe in die Lage zu versetzen, ein Ereignis zu überwachen.
Wenn die spezifizierte Ereignis-Bedingung erfüllt ist, überträgt die isochrone Daten-Pipe 20 die
Inhalte des wartenden Kanal-Masken-Registers in das laufende Kanal-Masken-Register.
-
Das
Status-Feld ist ein 32-Bit-Feld innerhalb der Bytes 8 bis B der
Registerdatei 80. Das Status-Feld kann ausgelesen und beschrieben
werden. Das Status-Feld enthält
Status-Informationen, die den laufenden Zustand der isochronen Daten-Pipe 20 melden.
Die Bits 0 bis 7 des Status-Felds entsprechen den Bits 0 bis 7 des
Steuerfelds und enthalten ein Ausgabe-Feld, ein Stopp-bei-Fehler-Feld, ein
Sende-Aktivierungs-Feld und ein aktives Feld. Der Wert dieser Felder
in dem Status-Register zeigt den laufenden Betriebszustand der isochronen
Daten-Pipe 20 an. Die Bits 8 bis 27 des Status-Felds sind
reserviert. Innerhalb des Status-Felds
ist das aktive Feld ein 1-Bit-Feld in dem Bit 0 des Status-Felds,
das anzeigt, ob die isochrone Daten-Pipe aktiv ist oder nicht. Insbesondere
wenn das aktive Bit einen hohen logischen Spannungspegel hat, ist
die isochrone Daten-Pipe laufend aktiv und überträgt Daten. Wenn das aktive Bit
einen niedrigen logischen Spannungspegel hat, ist die isochrone
Daten-Pipe nicht
laufend aktiv. Das Fehlerfeld ist ein 4-Bit-Feld in den Bits 28
bis 31 des Status-Felds.
Wenn die isochrone Daten-Pipe 20 ihren Betrieb aufgrund
eines Fehlers anhält,
enthält
das Fehlerfeld einen Wert, der den Fehlerzustand anzeigt. Das Fehlerfeld
ist nur gültig,
wenn das aktive Bit einen niedrigen logischen Spannungspegel hat.
Die möglichen
Werte für
das Fehlerfeld und den Fehler, dem sie entsprechen, sind in der
folgenden Tabelle II aufgelistet.
-
-
Das
wartende hohe Kanal-Masken-Feld pending_ch_mask_hi ist ein 4-Byte-Feld
in den Bytes 20 bis 23 der Registerdatei 80. Das wartende
niedrige Kanal-Masken-Feld pending_ch_mask_lo ist ein 4-Byte-Feld in
den Bits 24 bis 27 der Registerdatei 80. Die beiden wartenden
Kanal-Masken-Felder pending_ch_mask_hi und pending_ch_mask_lo bilden
zusammen ein 8-Byte-Feld, das die Maske von zu empfangenden isochronen Kanalnummern
für die
isochrone Daten-Pipe 20 enthält. Die isochrone Daten-Pipe 20 überträgt die Inhalte
dieses Felds zu einem Kanal-Masken-Register, wenn das programmierte
Trigger-Ereignis auftritt. Die Bit-Zuordnung des wartenden Kanal-Masken-Felds
ist die gleiche wie die Bit-Zuordnung des Register der verfügbaren Kanäle, die
in Kapitel 8 des IEEE-1394-Standards definiert sind.
-
Das
laufende hohe Kanal-Masken-Feld ch_mask_hi ist ein 4-Byte-Feld in
den Bytes 28 bis 2B der Registerdatei 80. Die beiden laufenden
Kanal-Masken-Felder ch_mask_hi und ch_mask_lo bilden zusammen ein 8-Byte-Feld,
das die Kanalmaske enthält,
die sich im laufenden Betrieb befindet, wobei jedes Bit innerhalb
der laufenden Kanal-Masken-Felder einen isochronen Kanal repräsentiert.
Das Kanal-Masken-Feld wird nur dann aus dem wartenden Kanal-Masken-Feld
geladen, wenn ein Trigger-Ereignis stattfindet. Die isochrone Daten-Pipe 20 ignoriert
empfangene isochrone Kanalnummern, für die das entsprechende Bit
in dem laufenden Kanal-Masken-Feld auf hohen logischen Spannungspegel
gesetzt ist.
-
Das
Steuerspeicher-Ausgabe-Feld CS_output ist ein 1-Byte-Feld in dem
Byte 34 der Registerdatei 80. Das Steuerspeicher-Ausgabe-Feld
CS_output enthält
die Steuerspeicher-Adresse
innerhalb des Steuerspeiches, zu der die isochrone Daten-Pipe 20 jedesmal
verzweigt, wenn sich in dem ausgehenden FIFO ein leeres Quadlet
befindet und die isochrone Daten-Pipe 20 nicht laufend
ein isochrones Daten-Paket empfängt.
Der Steuerspeicher enthält
Instruktionen, die von der isochronen Daten-Pipe bei der Durchführung ihrer
Operationen an einem Datenstrom benutzt werden.
-
Das
Steuerspeicher-Zyklusstart-Adressenfeld CS_addr_CS ist ein 1-Byte-Feld
in dem Byte 37 der Registerdatei 80. Das Steuerspeicher-Adressenfeld
CS_addr_CS enthält
die Steuerspeicher-Adresse, zu der die isochrone Daten-Pipe verzweigt,
wenn das Zyklus-Start-Paket empfangen wird. Das erste Quadlet, das
dem Steuerspeicherprogramm zur Verfügung steht ist das erste Quadlet
des Zyklus-Startpakets. Die Steuerspeicher-Adressenfelder CS_addr_0
bis CS_addr_63 sind jeweils 1-Byte-Felder in den Bytes 38 bis 77
der Registerdatei 80. Diese Felder enthalten die Steuerspeicher-Adresse,
an der die isochrone Daten-Pipe verzweigen soll, wenn auf dem isochronen
Kanal Daten empfangen werden, die der Bytenummer des Steuerspeicher-Adressenfelds
entsprechen. So enthält
z.B. das Steuerspeicher-Adressenfeld CS_addr_10 die Adresse in dem
Steuerspeicher, an der die isochrone Daten-Pipe verzweigen soll,
wenn auf dem isochronen Kanal mit der Nummer 10 Daten empfangen
werden. Die isochrone Daten-Pipe ignoriert alle isochronen Kanäle, für die der
entsprechende Wert in dem Steuerspeicher-Adressenfeld gleich FFh
ist. Es ist zu beachten, daß das
Steuerspeicher-Adressenfeld sich beim Senden von isochronen Daten
in der gleichen Weise verhält
wie beim Empfang.
-
Es
gibt 64 potentielle isochrone Kanäle 0 bis 63. Die Steuerspeicher-Adressenfelder
CS_addr_0 bis CS_addr_63 entsprechen jeweils einem isochronen Kanal
und enthalten die Adresse in dem Steuerspeicher, an der die Befehle
für diesen
isochronen Kanal beginnen. Wenn die isochrone Daten-Pipe 20 Daten
auf einem speziellen isochronen Kanal empfängt, verzweigt deshalb die
isochrone Daten-Pipe 20 zu der Adresse, die in dem entsprechenden
Steuerspeicher-Adressenfeld enthalten ist, um die Befehle für die Behandlung
der Daten für
diesen Kanal zu gewinnen. Isochrone Kanäle, für die der entsprechende Wert
in dem Steuerspeicher-Adressenfeld gleich FFh ist, werden ignoriert.
-
Ein
Strom von isochronen Daten wird aus einem oder mehreren isochronen
Kanälen
gebildet. Die isochrone Daten-Pipe 20 empfängt isochrone
Kanäle,
für die
das entsprechende Bit in dem laufenden Kanal-Masken-Feld auf hohen
logischen Spannungspegel gesetzt ist. Die isochrone Daten-Pipe sendet
isochrone Daten nach Maßgabe
des Steuerspeicherprogramms, beginnend an der Steuerspeicher-Adresse,
auf die der Wert in dem Steuerspeicher-Ausgaberegister CS_output
zeigt. Wenn z.B. die isochronen Kanäle 3, 4 und 5 in der Busstruktur
58 existieren und die Applikation wünscht, daß die isochrone Daten-Pipe 20 die
Kanäle
3 und 5 zu einem einzigen Strom kombiniert, ohne irgendwelche Manipulationen
an den in diesen isochronen Kanälen enthaltenden
Daten vorzunehmen, programmiert die Applikation z.B. in den Steuerspeicher-Adressenfeldern CS_addr_3
und CS_addr_5 einen Wert "10h". An der Steuerspeicher-Adresse "10h" lädt die Applikation
dann eine Befehls-Sequenz, wie sie in der Tabelle III dargestellt
ist.
-
-
Die
Applikation programmiert dann einen Wert "28h" in
die wartende Kanal-Maske unf schreibt dann einen Wert "i" in das Steuerfeld. Dieser Wert in dem
Steuerfeld zeigt ein Ereignis an, bei dem keine DMA-Kanäle unmittelbar
für die
Ausgabe programmiert sind. Dies hat zur Folge, daß die isochrone
Daten-Pipe 20 den Wert des wartenden Kanal-Masken-Felds
unverzüglich
in das laufende Kanal-Masken-Feld verschiebt. Da die Bits 3 und
5 nun in dem laufenden Kanal-Masken-Feld auf hohen logischen Spannungspegel
gesetzt sind, beginnt die isochrone Daten-Pipe 20 mit der
Verarbeitung der isochronen Kanäle
3 und 5 entsprechend dem an der Adresse "10h" beginnenden
Steuerspeicherprogramm. Es ist zu beachten, daß in diesem Beispiel beide Steuerspeicher-Felder
CS_addr_3 und CS_addr_5 den Wert "10h" enthalten,
so daß die
Daten für
die beiden isochronen Kanäle
3 und 5 nach der gleichen Steuerspeicherbefehlssequenz verarbeitet
werden, beginnend an der Adresse "10h".
-
Das
in der Tabelle III dargestellte Steuerspeicherprogramm ist ein Programm,
das die Daten aus dem Empfangs-FIFO 34 in den DMA-Kanal
0 auf dem Bus 16 verschiebt. Die isochrone Daten-Pipe 20 ignoriert
alle Daten, die auf dem isochronen Kanal 4 empfangen werden, weil
das Bit 4 in dem laufenden Kanal-Masken-Feld nicht auf hohen logischen
Spannungspegel gesetzt ist.
-
In
der letzten Zeile des in Tabelle III dargestellten Steuerspeicherprogramms
ist ein Rückkehrbefehl enthalten.
Der Rückkehr-Befehl
bewirkt in allen Fällen,
daß die
isochrone Daten-Pipe 20 die
gleichen Aufgaben ausführt.
Und zwar dekrementiert die isochrone Daten-Pipe den Wert des Stapelzeigers
und übergibt
an den Befehl innerhalb des Stapels, auf den der Stapelzeiger laufend
zeigt. Falls der Stapelzeiger gleich 0 ist, wenn ein Rückkehrbefehl
ausgeführt
wird, hält
die isochrone Daten-Pipe 20 die Operation an, bis der nächste aktivierte
isochrone Kanal empfangen wird oder ein Zyklusstart-Paket empfangen
wird. Falls die isochrone Daten-Pipe 20 ein Ausgabe-Steuerspeicherprogramm
ausführt,
bewirkt ein Rückkehrbefehl,
daß die
isochrone Daten-Pipe die Operation bei einem Befehl wieder aufnimmt, bei
dem das Ausgabeprogramm durch das empfangene isochrone Paket unterbrochen
wurde.
-
Die
isochrone Daten-Pipe ist in der Praxis ein programmierbarer Sequencer,
der so programmiert werden kann, daß er Operationen an dem empfangenen
isochronen Datenstrom ausführen
kann. Der isochrone Daten-Pipe-Sequencer enthält eine Registerdatei, wie
sie in 4 dargestellt ist. Innerhalb der Registerdatei 90 ist
das Direkt-Wert-Register IMM ein 34-Bit-Register mit einem Registercode "0" das nur ein Source-Register sein kann.
Das Direkt-Wert-Register
IMM gibt an, daß das
34-Bit-Direkt-Feld des Befehls die Source-Daten für die gegebene
Operation enthält.
-
Das
Bus-Eingabe-Register BUS_IN ist ein 32-Bit-Register mit dem Registercode "1", das nur ein Source-Register sein kann.
Das Zugreifen auf das Bus-Eingabe-Register BUS_IN als Quelle einer
Operation taktet ein Daten-Quadlet aus dem Empfangs-FIFO 34 durch
die isochrone Daten-Pipe 20. Nachfolgende Zugriffe auf das
Bus-Eingabe-Register BUS_IN greifen auf nachfolgende Daten-Quadlets
in dem Eingangs-Datenstrom zu.
-
Das
Bus-Ausgabe-Register BUS_OUT ist ein 34-Bit-Register mit dem Registercode "2", das nur ein Ziel-Register sein kann.
Das Zugreifen auf das Bus-Ausgabe-Register BUS_OUT als Ziel einer
Operation taktet ein Daten-Quadlet durch die isochrone Daten-Pipe 20 zu
dem abgehenden isochronen FIFO 30. Nachfolgende Zugriffe
auf das Bus-Ausgabe-Register BUS_OUT takten nachfolgende Daten-Ouadlets
in den Ausgangs-Datenstrom.
-
Die
Datenregister D0 bis D7 sind jeweils 34-Bit-Register mit dem Registercode "4", "5", "6", "7", "8", "9", "A" bzw. "B",
die entweder Source- oder Zielregister sein können. Die Datenregister D0
bis D7 können
für eine
beliebige Operation als Source- oder Zielregister benutzt werden.
-
Die
Daten-Interface-Register DATA_0 bis DATA_3 sind jeweils 32-Bit-Register
mit einem Registercode "10", "11 ", "12" bzw. "13", die entweder Source-
oder Zielregister sein können.
Jedes der Daten-Interface-Register DATA_0 bis DATA_3 greift auf
einen anderen DMA-Kanal
zu. Die Verwendung dieser Register muß mit der Programmierung des
Ausgabe-Aktivierungs-Felds DMA_out_en konsistent sein. Die isochrone
Daten-Pipe 20 implementiert einen Stapel, der aus einer
linearen Liste von acht 1-Byte-Registern besteht. Auf die Stapel-Register wird nur
während
eines Befehls zur Verzweigung zu einer Subroutine und einem Rückkehrbefehl zugegriffen.
In dem bevorzugten Ausführungsbeispiel
der vorliegenden Erfindung haben die Stapel-Register S0 bis S7 jeweils
eine entsprechende Registeradresse 0 bis 7. Alternativ variiert
die tatsächliche
Zahl der Stapel-Register in Abhängigkeit
von der spezifischen Implementierung. Wenn das Steuerspeicherprogramm
geladen wird, wird der Stapelzeiger automatisch auf den Wert 0 initialisiert,
so daß er
auf das entsprechende Stapel-Register S0 zeigt.
-
Wenn
die isochrone Daten-Pipe 20 zu einer Subroutine verzweigt,
dekrementiert die isochrone Daten-Pipe 20 den Stapelzeiger,
speichert die Adresse des nächsten
Steuerspeicherbefehls in dem laufenden Stapel-Register, inkrementiert
den Wert des Stapelzeigers, verzweigt dann zu dem in dem niedrigsten
Byte des Source-Felds enthaltenen Steuerspeicherbefehl. Wenn die
isochrone Daten-Pipe 20 einen Rückkehrbefehl ausführt, dekrementiert
sie den Stapelzeiger, dann verzweigt die isochrone Daten-Pipe 20 zu
dem in dem laufenden Stapel-Register enthaltenen Steuerspeicherbefehl.
Falls der Stapelzeiger dekrementiert wird, wenn er den Wert 0 enthält, bleibt
der Wert des Stapelzeigers auf 0, und die isochrone Daten-Pipe 20 hält die Operation an,
bis sie ein isochrones Datenpaket oder ein Zyklusstart-Paket empfängt. Wenn
die isochrone Daten-Pipe ein Ausgabe-Steuerspeicherprogramm ausführt und
ein Zyklusstart-Paket oder ein aktivierter isochroner Kanal empfangen
wird, unterbricht die isochrone Daten-Pipe 20 die Ausführung des
Ausgabe-Steuerspeicherprogramms, sichert die Adresse des laufenden
Befehls in dem Stapel, dekrementiert den Stapelzeiger und übergibt
dann an die passende Stelle, um das empfangene Paket zu bearbeiten.
-
Jeder
isochrone Steuerspeicherbefehl enthält ein OpCode-Feld, ein Source-Feld,
ein Ziel-Feld, ein
Direkt-Wert-Feld, ein Direkt-Feld und ein reserviertes Feld. Das
OpCode-Feld ist ein 6-Bit-Feld, das eine auszuführende Operation beschreibt,
wie dies unten anhand von 5 erläutert wird.
Das Source-Feld src ist ein 4-Bit-Feld, das ein Register oder einen
Direkt-Wert bezeichnet, der den Source-Wert für die spezifizierte Operation
enthält.
Das Ziel-Feld dest ist ein 4-Bit-Feld, das ein Zielregister für die spezifizierte
Operation angibt. Das Direkt-Wert-Feld imm_val ist ein 1-Bit-Feld,
das, wenn es auf hohen logischen Spannungspegel gesetzt wird, anzeigt,
daß einer
der Operanden in dem Direkt-Feld enthalten ist. Das Direkt-Feld
imm ist ein 34-Bit-Feld, das einen Direkt-Wert spezifiziert, der
für eine
Operation zu benutzen ist, wenn das Direkt-Wert-Feld imm_val auf
hohen logischen Spannungspegel gesetzt ist. In dem bevorzugten Ausführungsbeispiel
der Erfindung enthält
das reservierte Feld 13 Bits, die für die Verwendung bei anderen
Ausführungsformen
der isochronen Daten-Pipe 20 reserviert sind.
-
Die
Operations-Codes, die von dem isochronen Daten-Pipe-Sequencer während der
Behandlung eines Datenstroms implementiert werden und in dem OpCode-Feld
enthalten sein können,
sind unten in der Tabelle IV aufgelistet. Die isochrone Daten-Pipe 20 speichert
die Ergebnisse für
irgendwelche dieser Operationen in einem Register, das ein Ziel
sein kann, einschließlich
der Daten-Register D0 bis D7, des abgehenden isochronen FIFO 30 und
eines als Ziel konfigurierten DMA-Kanals, wie dies in 4 dargestellt
ist.
-
-
-
Für die meisten
der in der Tabelle IV aufgelisteten Operationen sind dort zwei mnemotechnische
Instruktionen enthalten. Die mnemotechnische Instruktion, die ein "I" enthält, gibt an, daß die Operation
unter Verwendung des Direkt-Werts durchzuführen ist. Die mnemotechnische
Instruktion, die kein "I" enthält, gibt
an, daß die
Operation zwischen den Werten in den Source- und Ziel-Registern
auszuführen
ist.
-
Wenn
eine MOVE-Operation ausgeführt
wird, wird der Wert in dem Register, das in dem Source-Feld src
spezifiziert ist, in das Register verschoben, das in dem Ziel-Feld
dest spezifiziert ist. Falls das in dem Source-Feld src spezifizierte
Register ein 34-Bit-Register ist und das in dem Ziel-Feld dest spezifizierte
Register ein 32-Bit-Register ist, gehen die zwei obersten Bits verloren.
Wenn das in dem Source-Feld src spezifizierte Register ein 32-Bit-Register
ist und das in dem Ziel-Feld dest spezifizierte Register ein 34-Bit-Register
ist, werden die beiden oberen Bits auf niedrigen logischen Spannungspegel
gesetzt.
-
Wenn
eine Mehrfach-MOVE-Operation ausgeführt wird, wird eine durch einen
Zählwert
spezifizierte Anzahl von Daten-Quadlets aus dem in dem Source-Feld
src spezifizierten Register in das in dem Ziel-Feld dest spezifizierte
Register verschoben. Der Zählwert
ist in dem Register gespeichert, das in dem Direkt-Feld des Befehls
festgelegt ist. Für
die Mehrfach-MOVE-Operation
ist das in dem Source-Feld src spezifizierte Register vorzugsweise
eines der Daten-Interface-Register DATA_0 bis DATA_3, die auf einen
DMA-Kanal zugreifen, oder das Bus-Eingabe-Register BUS_IN. Für diese
Operation ist das in dem Ziel-Feld dest spezifizierte Register vorzugsweise
eines der Daten-Interface-Register DATA_0 bis DATA_3, die auf einen
DMA-Kanal zugreifen, oder das Bus-Ausgabe-Register BUS-OUT.
-
Während einer
UND-Operation wird an den Werten in dem Source-Feld src und dem
Ziel-Feld dest eine
logische UND-Verknüpfung
ausgeführt,
und das Ergebnis wird in dem in dem Ziel-Feld dest des spezifizierten
Registers gespeichert. Die ANDI-Form dieses Befehls benutzt den
Wert in dem Direkt-Feld anstelle des Werts in dem Ziel-Feld als
einen der Operanden und speichert das Ergebnis in dem in dem Ziel-Feld
dest spezifizierten Register. Falls das in dem Source-Feld src spezifizierte
Register ein 34-Bit-Register ist und das in dem Ziel-Feld dest spezifizierte
Register ein 32-Bit-Register ist, gehen die beiden oberen Bits verloren.
Falls das in dem Source-Feld src spezifizierte Register ein 32-Bit-Register
ist und das in dem Ziel-Feld dest spezifizierte Register ein 34-Bit-Register
ist, werden die beiden oberen Bits auf niedrigen logischen Spannungspegel
gesetzt. Falls sowohl das in dem Source-Feld src spezifizierte Register
als auch das in dem Ziel-Feld dest spezifizierte Register 34-Bit-Register
sind, wird die UND-Operation an allen 34 Bits durchgeführt.
-
Während einer
ODER-Operation wird eine logische ODER-Operation an den Werten in
den Registern durchgeführt,
die durch das Source-Feld src und das Ziel-Feld dest spezifiziert
sind, und das Ergebnis wird in dem durch das Ziel-Feld dest spezifizierten
Register gespeichert. Die ORI-Form dieses Befehls benutzt den Wert
in dem Direkt-Feld anstelle des Werts in dem Ziel-Feld als einen
der Operanden und speichert das Ergebnis in dem in dem Ziel-Feld lest spezifizierten
Register. Falls das in dem Source-Feld src spezifizierte Register
ein 34-Bit-Register ist und das in dem Ziel-Feld dest spezifizierte
Register ein 32-Bit-Register ist, gehen die beiden oberen Bits verloren.
Falls das in dem Source-Feld src spezifizierte Register ein 32-Bit-Register
ist und das in dem Ziel-Feld dest spezifizierte Register ein 34-Bit-Register ist, werden
die zwei oberen Bits beide auf niedrigen logischen Spannungspegel
gesetzt. Wenn sowohl das in dem Source-Feld src spezifizierte Register
als auch das in dem Ziel-Feld dest spezifizierte Register 34-Bit-Register
sind, wird die ODER-Operation an allen 34 Bits ausgeführt.
-
Wenn
eine SHIFT-Operation durchgeführt
wird, wird der Wert in dem Zielregister dest um die Bitzahl verschoben,
die durch den Wert in dem Source-Register src angegeben ist, und
das Ergebnis wird in dem in dem durch das Ziel-Feld dest spezifizierten
Register gespeichert. Ein positiver Verschiebungswert verschiebt den
Wert in dem Ziel-Register nach rechts in Richtung auf das niedrigstwertige
Bit, und zum Ausfüllen
in den nach links verschobenen Bits, beginnend mit dem höchstwertigen
Bit, werden Nullen verwendet. Ein negativer Verschiebungswert verschiebt
den Wert in dem Ziel-Register nach links in Richtung auf das höchstwertige
Bit, und zum Ausfüllen
der verschobenen Bits nach rechts, beginnend mit dem niedrigstwertigen
Bit, werden Nullen benutzt. Die SHIFTI-Form dieses Befehls verschiebt
den Wert in dem Source-Register um die dem Direkt-Feld spezifizierte
Bitzahl und speichert das Ergebnis in dem in dem Ziel-Feld spezifizierten
Register. Falls das in dem Source-Feld src spezifizierte Register
ein 34-Bit-Register ist und das in dem Ziel-Feld dest spezifizierte Register
ein 32-Bit-Register ist, gehen die beiden oberen Bits verloren.
Falls das in dem Source-Feld src spezifizierte Register ein 32-Bit-Register
ist und das in dem Ziel-Feld dest spezifizierte Register ein 34-Bit-Register ist,
werden die beiden oberen Bits auf niedrigen logischen Spannungspegel
gesetzt. Wenn sowohl das in dem Source-Feld src spezifizierte Register
als auch das in dem Ziel-Feld dest spezifizierte Register 34-Bit-Register sind,
wird die SHIFT-Operation nur an den unteren 32 Bits vorgenommen.
-
Wenn
eine CMP-Operation durchgeführt
wird, wird der Wert in dem Source-Register src von dem Wert in dem
Ziel-Register dest subtrahiert. Wenn das Ergebnis der CMP-Operation
ein positiver Wert ist, wird das Z-Bit auf hohen logischen Spannungspegel
gesetzt. Wenn das Ergebnis der CMP-Operation negativ oder gleich
Null ist, wird das Z-Bit auf niedrigen logischen Spannungspegel
gesetzt. Die Ergebnisse der CMP-Operation werden nirgendwo gespeichert.
Die CMPI-Form dieses Befehls subtrahiert den Direkt-Wert von dem Wert
in dem Source-Register src und setzt das Z-Bit entsprechend dem
Ergebnis, wie oben spezifiziert. Dieser Befehl speichert das Ergebnis
der Operation ebenfalls nicht.
-
Wenn
eine ADD-Operation durchgeführt
wird, wird der Wert in dem Source-Register src zu dem Wert in dem
Ziel-Register dest addiert, und das Ergebnis wird in dem Ziel-Register
dest gespeichert. Die ADDI-Form dieses Befehls addiert den Wert
in dem Source-Register src zu dem Direkt-Wert und speichert das
Ergebnis in dem Ziel-Register dest. Falls das in dem Source-Feld
src spezifizierte Register ein 34-Bit-Register ist und das in dem
Ziel-Feld dest spezifizierte Register ein 32-Bit-Register ist, gehen
die beiden oberen Bits verloren. Wenn das in dem Source-Feld src
spezifizierte Register ein 32-Bit-Register ist und das in dem Ziel-Feld
dest spezifizierte Register ein 34-Bit-Register ist, werden die
zwei oberen Bits beide auf niedrigen logischen Spannungspegel gesetzt.
Wenn sowohl das in dem Source-Feld
src spezifizierte Register als auch das in dem Ziel-Feld dest spezifizierte
Register 34-Bit-Register
sind, wird die ADD-Operation nur an den unteren 32 Bits vorgenommen.
-
Wenn
eine SUB-Operation durchgeführt
wird, wird der Wert in dem Ziel-Register dest von dem Wert in dem
Source-Register src subtrahiert, und das Ergebnis wird in dem Ziel-Register
dest gespeichert. Die SUBI-Form dieses Befehls subtrahiert den Direkt-Wert
von dem Wert in dem Source-Register, und das Ergebnis wird in dem
Ziel-Register dest gespeichert. Wenn das in dem Source-Feld src
spezifizierte Register ein 34-Bit-Register ist und das in dem Ziel-Feld
dest spezifizierte Register ein 32-Bit-Register ist, gehen die beiden oberen
Bits verloren. Wenn das in dem Source-Feld src spezifizierte Register
ein 32-Bit-Register ist und das in dem Ziel-Feld dest spezifizierte
Register ein 34-Bit-Register ist, werden die zwei oberen Bits beide
auf niedrigen logischen Spannungspegel gesetzt. Wenn sowohl das
in dem Source-Feld src spezifizierte Register als auch das in dem
Ziel-Feld dest spezifizierte Register 34-Bit-Register sind, wird
die SUB-Operation nur an den unteren 32 Bits vorgenommen.
-
Wenn
eine MULT-Operation durchgeführt
wird, wird der Wert in dem Source-Register src mit dem Wert in dem
Ziel-Register dest multipliziert, und das Ergebnis wird in dem Ziel-Register
dest gespeichert. Die MULTI-Form dieses Befehls multipliziert den
Direkt-Wert mit dem Wert in dem Source-Register src, und das Ergebnis
wird in dem Ziel-Register dest gespeichert. Wenn das in dem Source-Feld
src spezifizierte Register ein 34-Bit-Register ist und das in dem
Ziel-Feld dest spezifizierte Register ein 32-Bit-Register ist, gehen
die beiden oberen Bits verloren. Wenn das in dem Source-Feld src
spezifizierte Register ein 32-Bit-Register und das in dem Ziel-Feld
dest spezifizierte Register ein 34-Bit-Register ist, werden die
beiden oberen Bits auf niedrigen logischen Spannungspegel gesetzt.
Wenn sowohl das in dem Source-Feld src spezifizierte Register als
auch das in dem Ziel-Feld dest spezifizierte Register 34-Bit-Register
sind, wird die MULT-Operation nur an den unteren 32 Bits vorgenommen.
-
Wenn
eine BRANCH-Operation (Verzweigungs-Operation) durchgeführt wird,
verzweigt die isochrone Daten-Pipe 20 zu der in dem untersten
Byte des Source-Felds src enthaltenen Steuerspeicher-Adresse. Das Source-Feld
src kann ein Register oder einen Direktwert spezifizieren.
-
Wenn
eine BRANCH-ON-ZERO-Operation (Verzweigung-auf-Null-Operation) durchgeführt wird,
verzweigt die isochrone Daten-Pipe 20 zu der in dem untersten
Byte des Source-Felds src enthaltenen Steuerspeicher-Adresse, falls
das Ergebnis des letzten Rechen- oder Bewegungs-Steuerspeicherbefehls
gleich Null war. Das Source-Feld src kann ein Register oder einen
Direktwert spezifizieren.
-
Wenn
eine BRANCH-ON-NOT-ZERO-Operation (Verzweigung-auf-nicht-Null-Operation)
durchgeführt wird,
verzweigt die isochrone Daten-Pipe 20 zu der in dem untersten
Byte des Source-Felds src enthaltenen Steuerspeicher-Adresse, falls
das Ergebnis der letzten Rechen- oder Bewegungs-Steuerspeicherbefehls
nicht gleich Null war. Das Source-Feld kann ein Register oder einen
Direktwert spezifizieren.
-
Wenn
eine BSR-Operation durchgeführt
wird, wird die Adresse des nächsten
Steuerspeicherbefehls auf den Stapel geschoben, und die isochrone
Daten-Pipe 20 verzweigt zu der in dem untersten Byte des
Source-Felds src enthaltenen Steuerspeicher-Adresse. Das Source-Feld src kann ein
Register oder einen Direktwert spezifizieren.
-
Wenn
eine BSR-ON-ZERO-Operation durchgeführt wird, falls das Ergebnis
des letzten Rechen- oder Bewegungs-Steuerspeicherbefehls gleich
Null war, wird die Adresse des nächsten
Steuerspeicherbefehls auf den Stapel geschoben, und die isochrone
Daten-Pipe 20 verzweigt zu der in dem untersten Byte des
Source-Felds src enthaltenen Steuerspeicher-Adresse. Das Source-Feld src kann ein
Register oder einen Direktwert spezifizieren.
-
Wenn
eine BSR-ON-NOT-ZERO-Operation durchgeführt wird, falls das Ergebnis
des letzten Rechen- oder Bewegungs-Steuerspeicherbefehls nicht gleich
Null war, wird die Adresse des nächsten
Steuerspeicherbefehls auf den Stapel geschoben, und die isochrone
Daten- Pipe 20 verzweigt
zu der in dem untersten Byte des Source-Felds src enthaltenen Steuerspeicher-Adresse.
Das Source-Feld src kann ein Register oder einen Direktwert spezifizieren.
-
Wenn
eine RETURN-Operation durchgeführt
wird, wird die letzte Steuerspeicher-Adresse aus dem Stapel herausgeholt,
und die isochrone Daten-Pipe 20 verzweigt zu dieser Adresse.
-
Das
in dem seriellen Bus-Protokoll definierte isochrone Aufzeichnungsformat
definiert ein Standard-Format zum Aufzeichnen eines Stroms von isochronen
Daten, wie sie über
die Busstruktur 58 gesendet werden. Die isochrone Daten-Pipe 20 der
vorliegenden Erfindung kann so programmiert werden, daß sie einen empfangenen
Strom von isochronen Daten nach dem seriellen Bus-Protokoll in das
isochrone Aufzeichnungsformat umwandelt. Entsprechend kann die isochrone
Daten-Pipe auch so programmiert werden, daß sie aus einem Strom von Daten
in dem isochronen Aufzeichnungsformat einen Strom von isochronen
Daten erzeugt. Ein Strom von Daten im isochronen Aufzeichnungsformat
ist in 5 dargestellt. Es ist zu beachten, daß der in 5 dargestellte
Datenstrom an einer isochronen Zyklus-Grenze beginnt.
-
Der
Datenstrom in 5 enthält 94 Datenpakete,
die für
jeden isochronen Zyklus in beiden Kanälen A und B enthalten sind. 5 enthält eine
Offset-Spalte 92, um den Offset des Beginns jeder horizontalen
Zeile darzustellen. Die horizontalen Header-Zeilen enthalten jeweils
vier Bytes. Der Datenabschnitt enthält so viele Bytes, wie für die Übertragung
des Datenpakets benötigt
werden. Der Header für
jedes Paket enthält
ein Sekunden-Feld, ein Zyklusnummer-Feld und ein Zyklus-Feld. Jeder
Subheader für
jeden Kanal innerhalb jedes Pakets enthält ein Datenlänge-Feld
(data_length), ein Kennzeichen-(tag)-Feld tg, ein Kanal-Feld, ein Daten-Felg
und ein Synchronisier-Feld sy. Auf den Subheader folgt dann in dem
Paket der Datenabschnitt.
-
Beispiel: Umwandlung von
isochronen Daten in das isochrone Aufzeichnungsformat
-
Das
Steuerspeicherprogramm in der folgenden Tabelle V zeigt ein Beispiel
dafür,
wie die isochrone Daten-Pipe 20 der vorliegenden Erfindung
von einer Applikation so programmiert werden kann, daß sie einen aus
Kanälen
3 und 5 bestehenden isochronen Datenstrom erfaßt, Kanal 3 auf Kanal 7 und
Kanal 5 auf Kanal 9 abbildet und dann den resultierenden Datenstrom
im isochronen Aufzeichnungsformat zu dem DMA-Kanal 0 sendet.
-
-
Beispiel: Umwandlung aus
dem isochronen Aufzeichnungsformat
-
Das
in der folgenden Tabelle VI enthaltene Steuerspeicherprogramm zeigt
ein Beispiel dafür,
wie die isochrone Daten-Pipe 20 der vorliegenden Erfindung
von einer Applikation so programmiert werden kann, daß sie einen
im isochronen Aufzeichnungsformat vorliegenden Datenstrom in dem
DMA-Kanal 3 aufnimmt und einen Strom von isochronen Daten für die Übertragung über die
Busstruktur 58 erzeugt. Der Source-Datenstrom enthält isochrone
Kanäle
7 und 9. Das Steuerspeicherprogramm bildet den Kanal 7 auf den Kanal
1 und den Kanal 9 auf den Kanal 2 ab. Es ist zu beachten, daß es für das in
Tabelle VI dargestellte Programm erforderlich ist, daß das erste
in dem DMA-Kanal präsentierte
Daten-Quadlet ein Zyklusstart-Quadlet ist.
-
-
-
Formate
zur Übertragung
von digitalen Consumer-Audio- und -Videodaten über einen Bus nach dem IEEE-1394-Format
mittels eines isochronen Kanals enthalten Absolutzeit-Marken, die
von dem Sender eingefügt
und in dem Empfänger
zur Wiederherstellung der Zeitinformation benutzt werden, die zum
Dekodieren des Datenstroms benötigt
wird. In ähnlicher
Weise modifizieren auch Nicht-Consumer-Audio- und -Videospeichervorrichtungen,
wie ein Festplattenlaufwerk, diese eingebettete Zeitmarkeninformation
in der Weise, daß ein Consumer-Gerät, das die
Daten empfängt,
richtig arbeitet, wenn die Daten zu einem späteren Zeitpunkt wiedergegeben
werden.
-
Die
isochrone Daten-Pipe 20 wird zunächst durch eine Applikation
initialisiert, bevor sie isochrone Daten übertragen kann. Sobald sie
initialisiert ist, benutzt die Applikation das Steuer-Register dazu, den
Betriebszustand der isochronen Daten-Pipe 20 zu ändern. Der
laufende Betriebszustand ist durch den Wert in dem laufenden Kanal-Masken-Register
und die in dem untersten Byte des Status-Registers enthaltene Information vollständig definiert.
-
Um
den Zustand der isochronen Daten-Pipe 20 zu ändern, programmiert
die Applikation einen neuen Kanal-Masken-Wert in das wartende Kanal-Masken-Register
und einen neuen Betriebszustand in das Steuer-Register. In dem gleichen
Register-Zugriff auf das Steuer-Register
setzt die Applikation auch das GO-Bit und programmiert ein Ereignis
in das Ereignis-Feld. Wenn das programmierte Ereignis auftritt, überträgt die isochrone
Daten-Pipe 20 den Wert in dem wartenden Kanal-Masken-Register
zu dem laufenden Kanal-Masken-Register. Die isochrone Daten-Pipe 20 überträgt außerdem die
Information in dem niedrigstwertigen Byte des Steuer-Registers in
das niedrigstwertige Byte des Status-Registers.
-
Um
die Operation der isochronen Daten-Pipe 20 zu stoppen,
programmiert die Applikation einen Wert Eins in das wartende Kanal-Masken-Register
und einen niedrigen logischen Spannungspegel in das Sende-Aktivierungs-Bit
in dem Steuer-Register. Wie bei jeder Zustandsänderung setzt die Applikation
auch das GO-Bit und programmiert ein Ereignis in das Ereignis-Feld
des Steuer-Registers. Wenn das Ereignis auftritt, wird der Wert
in dem laufenden Kanal-Masken-Register gleich Null, und das Sende-Aktivierungs-Bit
in dem Status-Register wird auf niedrigen logischen Spannungspegel
gezogen, wodurch die Operation der isochronen Daten-Pipe 20 gestoppt
wird. Wenn die Operation der isochronen Daten-Pipe 20 gestoppt
ist, wird auch das aktive Bit in dem Status-Register auf niedrigen
logischen Spannungspegel gezogen.
-
Um
die isochrone Daten-Pipe 20 zu aktivieren, lädt die Applikation
zunächst
ein Speicher-Steuer-Programm
und programmiert die passenden Steuerspeicher-Offsets in die Steuerspeicher-Adressen-Registerdatei.
Das wartende Kanal-Masken-Register wird dann mit einer Bit-Maske
der Kanäle
programmiert, die von der isochronen Daten-Pipe 20 empfangen
werden sollen. Falls die isochrone Daten-Pipe 20 keine
Daten empfängt,
wird der Wert in dem wartenden Kanal-Masken-Register auf Null programmiert.
Das GO-Bit in dem Steuer-Register wird auf hohen logischen Spannungspegel
gesetzt, um eine Zustandsänderung
anzuzeigen. Das Sende-Aktivierungs-Bit in dem Steuer-Register wird
auf hohen logischen Spannungspegel gesetzt, falls die isochrone
Daten-Pipe 20 isochrone Daten sendet. Das Stopp-bei-Fehler-Bit in
dem Steuer-Register wird auf hohen logischen Spannungspegel gesetzt,
wenn die isochrone Daten-Pipe 20 die Operation bei einem
Fehler stoppen soll. Wenn die isochrone Daten-Pipe 20 isochrone
Daten überträgt, werden
die Ausgabe-Aktivierungs-Bits in dem Steuer-Register, die den mit
der Übertragung
von isochronen Daten befaßten
DMA-Kanälen entsprechen,
auf hohen logischen Spannungspegel setzt. Das Ereignis-Feld in dem
Steuer-Register wird auf ein Ereignis programmiert, bei dem die
isochrone Daten-Pipe ihren Zustand ändern soll.
-
Die
asynchrone Daten-Pipe 26 erzeugt, wie oben erwähnt, automatisch
Transaktionen, die für
die Durchführung
von asynchronen Datentransfer-Operationen für eine Applikation über die
Busstruktur 58 benötigt
werden. In einem alternativen Ausführungsbeispiel der isochronen
Daten-Pipe 20 der vorliegenden Erfindung kann die isochrone
Daten-Pipe 20 so programmiert werden, daß sie sowohl
isochrone als auch asynchrone Daten überträgt und empfängt. Dementsprechend können in
diesem Ausführungsbeispiel
die asynchrone Daten-Pipe 26 und
das entsprechende FIFO 32 entfallen. Da die isochrone Daten-Pipe 20 der
einzige logische Block innerhalb der Verknüpfungsschaltung ist, können außerdem auch
der Multiplexer 40 und der Demultiplexer 42 entfallen.
-
Wie
oben beschrieben wurde, ist die isochrone Daten-Pipe 20 des
bevorzugten Ausführungsbeispiels so
programmiert, daß sie
ein Steuerspeicherprogramm ausführt
und eine Reihe von Operationen an einem Strom von isochronen Daten
vornimmt. In diesem alternativen Ausführungsbeispiel kann die isochrone
Daten-Pipe 20 auch so programmiert werden, daß sie asynchrone
Daten sendet und empfängt.
In diesem Ausführungsbeispiel
erscheint die isochrone Daten-Pipe 20 als virtuelle asynchrone
Daten-Pipe und ist so programmiert, daß sie die für die Durchführung von
asynchronen Datentransfer-Operationen erforderlichen Transaktionen
erzeugt und die passenden Header generiert, wenn Daten gesendet
und Header von empfangenen Daten getrennt werden, wie dies in der
internationalen Patentanmeldung WO 97/33230 mit dem Titel "Asynchronous Data
Pipe For Automatically Managing Asynchronous Data Transfers Between
An Application And A Bus Structure", veröffentlicht am 12. September
1997, beschrieben ist.
-
In
diesem alternativen Ausführungsbeispiel
sendet oder empfängt
die isochrone Daten-Pipe 20 sowohl isochrone als auch asynchrone
Daten. Die isochrone Daten-Pipe 20 wird von einer Applikation
so programmiert, daß sie
ein geeignetes Programm für
die Behandlung entweder eines isochronen oder eines asynchronen
Datenstrom ausführt,
so wie dies erforderlich ist. Beim Empfangen oder Senden von asynchronen
Daten wird die isochrone Daten-Pipe 20 so programmiert,
daß sie
die für
die Durchführung
der Datentransfer-Operation erforderlichen Lese- oder Schreib-Transaktionen über den
passenden Adressenbereich erzeugt. Die isochrone Daten-Pipe inkrementiert
den Wert in dem Ziel-Offset-Adressenfeld für jede Transaktion entsprechend der
Länge jedes
Datenpakets automatisch richtig, falls nicht ein Inkrementierungs-Merkmal
deaktiviert wurde, was anzeigt, daß die Transaktionen an einer
einzelnen Adresse stattfinden sollen.
-
Die
vorliegende Erfindung wurde an spezifischen Ausführungsbeispielen beschrieben,
die Details enthalten, die das Verständnis der Konstruktions- und
Funktionsprinzipien der Erfindung erleichtern sollen. Eine solche
Bezugnahme auf spezifische Ausführungsbeispiele
und deren Details soll den Rahmen der anliegenden Ansprüche nicht
einschränken.