-
Gebiet der
Erfindung
-
Die
vorliegende Erfindung bezieht sich auf Telekommunikationen und insbesondere
auf die Verarbeitung von SONET-Rahmen (SONET = Synchronous Optical
NETwork, synchrones optisches Netz), SDH-Rahmen (SDH = Synchronous
Digital Hierarchy, synchrone digitale Hierarchie) oder ähnlichem.
-
Hintergrund
der Erfindung
-
SONET
und SDH sind äquivalente
Standards (amerikanisch bzw. europäisch) zum Transportieren von
Daten auf optischen Netzwerken. Gemäß dieser Standards werden Daten,
die mehreren Kommunikationskanälen
entsprechen, in hierarchischen Rahmen übermittelt.
-
1 zeigt
eine exemplarische Hierarchie gemäß dem SONET-Standard. Diese Hierarchie entspricht
dem OC3-Signal (OC3 = Optical Carrier level 3, optische Trägerebene
3), das eine Bitrate von 155,52 Mbits/s aufweist. Der Rahmen der
oberen Ebene, STS3 (Synchronous Transport Signal level 3, synchrones
Transportsignal Ebene 3) wird in 125 μs gesendet. Er enthält drei
STS1-Rahmen. Jeder STS1-Rahmen enthält sieben Gruppen von virtuellen Unterbündeln (VT – Virtual
Tributaries). Eine Gruppe kann vier VT1,5-Behälter (Größe 1,5 VTs) umfassen. Jeder
VT1,5-Behälter
umfasst 24 Bytes, die gleichzeitigen DS0-Signalen entsprechen. Eine
DS0 (Digital Signal level 0, digitale Signalebene 0) weist eine Datenübertragungsrate
von 64 Kb/s auf.
-
Das
OC3-Signal übermittelt
somit 2.016 gleichzeitige DS0-Signale
und weist eine effektive Bitrate von 129.024 Mbits/s auf. Der Rest
der Kapazität von
155,52 Mbits/s wird zum Transportieren notwendiger Zusätze verwendet.
-
Es
existieren auch andere Hierarchien. Insbesondere können die
VT-Gruppen eines STS1-Rahmens jeweils drei VT2-Rahmen, zwei VT3-Rahmen oder
einen VT6-Rahmen enthalten.
-
2 zeigt
das SDH-Äquivalent
der Hierarchie der 1. Der Obere-Ebene-Rahmen ist
STM1 (Synchronous Transport Module level 1, synchrones Transportmodul
Ebene 1). Er erhält
drei VC3-Rahmen (VC3 = Virtual Container level 3, virtueller Behälter Ebene
3). Jeder VC3-Rahmen enthält
sieben Gruppen von drei TU12-Rahmen (TU12 = Tributary Unit level
12, Zubringereinheit Ebene 12). Schließlich enthält jeder TU12-Rahmen 32 DS0-Bytes.
Dies beläuft
sich ebenfalls auf 2.016 DS0-Signale.
-
Der
Kürze halber
bezieht sich die folgende Beschreibung lediglich auf den SONET-Standard
als Beispiel, die hierin bereitgestellten Lehren gelten jedoch ohne
weiteres auch für
den SDH-Standard.
-
3 zeigt
die Struktur eines STS3-Rahmens. Er ist in einer Bytematrix von
270 Spalten und 9 Zeilen angeordnet. Die Bytes der Matrix werden von
links nach rechts und von oben nach unten übertragen. Jeder dieser drei übermittelten
STS1-Rahmen weist drei Spalten von Transportzusätzen auf. Diese Zusatz-Spalten
sind in den neun ersten Spalten der Matrix verflochten. Beispielsweise
sind die ersten drei Transportzusatzbytes, als A1, A2 und J0 bezeichnet,
für den
ersten STS1-Rahmen markiert (d. h. die Bytes in der ersten Zeile
der 1., 4. und 7. Spalte).
-
Die
Zusatzbytes sind in dem Standard vollständig dokumentiert. Der Verständlichkeit
der Erfindung halber werden lediglich einige von ihnen hierin erwähnt.
-
Die
drei STS1-Rahmen, die als STS1-1, STS1-2 und STS1-3 bezeichnet sind,
sind in jeweiligen verbleibenden Spalten der Matrix auf verflochtene
Weise enthalten, d. h. von der 10. bis zur 270. Spalte gehören drei
aufeinanderfolgende Spalten jeweils zu den drei STS1-Rahmen.
-
Die
STS1-Rahmen werden auf schwebende bzw. floatende Weise übermittelt:
sie starten bei willkürlichen
Positionen in dem STS3-Rahmen. Zwei Bytes, die als H1 und H2 bezeichnet
sind, der Transportzusätze
jedes STS1-Rahmens bilden einen Zeiger, der die Position des ersten
Bytes des STS1-Rahmens angibt. Das erste Byte eines STS1-Rahmens ist
ein durch J1 bezeichnetes „Pfadzusatz"-Byte.
-
Ein
Zweck dieser Technik des floatenden Rahmens und Zeigers besteht
darin, zu ermöglichen, dass
STS1-Rahmen zu jeglichem Zeitpunkt in eine aktuelle Übertragung
eingefügt
werden. Ein weiterer Zweck besteht darin, Übertragungsgeschwindigkeitsdriften,
vor allem Driften bei Taktgeschwindigkeiten zwischen dem Sender-
und dem Empfängerende,
zu kompensieren. Falls der Sendertakt langsamer ist als der Empfängertakt,
wird zwischen aufeinanderfolgende STS1-Rahmen hie und da ein bedeutungsloses
Byte eingefügt,
wodurch der Zeiger auf den zweiten Rahmen um 1 inkrementiert wird.
Dies wird im Standard als „Positivstopfen" bezeichnet.
-
Falls
der Sendertakt schneller ist als der Empfängertakt, wird der STS1-Rahmen
hie und da um ein Byte zurück
verschoben, wodurch der Zeiger auf den Rahmen um 1 verringert wird.
In der Tat überlappt
der STS1-Rahmen nicht den vorhergehenden Rahmen, da ein spezifisches
Transportzusatzbyte (durch H3 bezeichnet) vorgesehen ist, um das
erste Byte des zurück
verschobenen Rahmens zu empfangen. Dies wird im Standard als „Negativstopfen" bezeichnet.
-
4 zeigt
die Struktur eines STS1-Rahmens. Er ist gemäß einer Bytematrix von 87 Spalten und
9 Zeilen angeordnet. Die erste Spalte enthält den „Pfadzusatz", dessen erstes Byte
durch J1 bezeichnet ist. Die Spalten 30 und 59 enthalten
feststehende Stopfbytes. Die verbleibenden Spalten enthalten die 7
Gruppen von 4 VT1,5-Behältern,
in die Gruppen schichtförmig
eingelagert sind. Diese Spalten sind in 4 durch
Bezugnahmen des Typs i-j bezeichnet, wobei i die Gruppennummer und
j die Rahmennummer in der Gruppe ist.
-
Die
erste Zeile, zwischen Positionen 2 und 29, enthält Zusatzbytes,
die durch V1, V2, V3 und V4 bezeichnet sind und die die Startpunkte
der VT1,5-Behälter
identifizieren sollen, da derartige Rahmen ebenfalls auf floatende
Weise übermittelt werden.
-
5 veranschaulicht,
wie aufeinanderfolgende VT1,5-Behälter gesendet
und identifiziert werden. In der Tat werden vier aufeinanderfolgende VT1,5-Behälter in
einem Superrahmen übermittelt, der
aus vier aufeinanderfolgenden STS1-Rahmen besteht. Die Bytes V1
bis V4 werden jeweils in dem 1. bis 4. STS1-Rahmen des Superrahmens
gesendet. Die Bytes V1 und V2 bilden einen „VT-Nutzlastzeiger" und identifizieren
die Position des ersten Bytes des ersten der vier jeweiligen VT1,5-Behälter. Dieses
erste Byte ist durch V5 bezeichnet. Die ersten Bytes der drei anderen
VT1,5-Behälter sind
jeweils durch J2, Z6 und Z7 bezeichnet. Die Bytes V5, J2, Z6 und
Z7 bilden einen „VT-Pfadzusatz".
-
Eine
derartige Hierarchie wird beispielsweise beim Handhaben von Telefonverbindungen
verwendet, die DS0-Signalen in einer Telefonzentrale entsprechen.
Zu diesem Zweck verwendet man Abzweigmultiplexer bzw. Add-Drop-Multiplexer.
Eine derartige Vorrichtung extrahiert einen spezifischen DS0-Datenfluss von einer
OC3-Verbindung (zweigt einen solchen ab) und/oder fügt einen
DS0-Datenfluss in die OC3-Verbindung
ein (addiert denselben). Der verbleibende Verkehr gelangt ohne zusätzliche Vorverarbeitung
geradewegs durch den Multiplexer.
-
6 zeigt
schematisch einen herkömmlichen
Add-Drop-Multiplexer
(ADM) 10. Der ADM kann um zwei integrierte Schaltungen
herum gebaut sein, die durch PMC-Sierra hergestellt sind, d. h.
das PM5342-Pfad-/Abschnitt-Sende-/Empfangsgerät, aka SPECTRA,
und den PM5362-Zubringereinheit-Nutzlast-Prozessor
(TUPP – tributary
unit payload processor). Die Zuordnung dieser Schaltungen identifiziert
die Positionen der Nutzlasten der VT1,5-Behälter in einer OC3-Verbindung
und ermöglicht
somit, dass diese Behälter
oder ihre DS0-Signale auf einfache Weise einzeln extrahiert werden.
Die Einfügung
von VT1,5-Behältern
in die OC3-Verbindung ist unkompliziert, da die notwendigen Positionsinformationen
bereits für
die Extraktion berechnet wurden.
-
Die
einzelnen DS0-Signale (extrahiert oder einzufügen) werden über einen
standardmäßigen Telekommunikationsbus,
z. B. SC, MUIP oder H.100, ausgetauscht, um jegliche notwendigen
Operationen, z. B. Schalten oder Weiterleiten bzw. Routen, durchzuführen. Die
DS0-Signale jedes VT1,5-Behälters werden über eine
individuelle T1-Verbindung und Busschnittstelle 12 mit
dem Telekommunikationsbus ausgetauscht.
-
Derartige
Add-Drop-Multiplexer sind üblicherweise
auf das Verarbeiten einiger weniger VT1,5-Behälter beschränkt. In der Tat übermittelt
ein einzelner VT1,5-Behälter
24 DS0-Signale,
die statistisch ausreichend sind, um 360 Telefonteilnehmer zu bedienen.
Somit sind bei den meisten Telefonzentralen lediglich einige wenige
VT1,5-Behälter
(bis zu acht) notwendig. Das Verarbeiten aller VT1,5-Behälter würde 84 Busschnittstellen 12, üblicherweise
in Form einzelner Zusatzkarten, erfordern, was die Komplexität und das
Volumen der Vorrichtung beträchtlich
erhöhen
würde.
-
Es
besteht jedoch ein wachsender Bedarf daran, eine große Zahl
von Telefonkommunikationen von zentralisierten Stellen aus zu handhaben.
Ein derartiger Bedarf findet sich vor allem bei Voicemail-Systemen
großen
Umfangs.
-
In
der
US 5,472,600 ist
ein System zum Zurückumwandeln
von STM-Signalen, die unter Verwendung von ATM übermittelt wurden, in STM-Signale
beschrieben.
-
Zusammenfassung
der Erfindung
-
Die
vorliegende Erfindung bezieht sich darauf, eine Vorrichtung einer
geringen Komplexität
und eines geringen Volumens bereitzustellen, vorzugsweise in Form
einer einzelnen Karte, die in der Lage ist, alle DS0-Signale eines
Hochgeschwindigkeitsübertragungssignals,
z. B. OC3, einzeln zu handhaben. Eine Schwierigkeit besteht darin,
alle 2.016 DS0-Signale, die in einem OC3-Signal enthalten sind,
einzelnen Kanälen
zuzuweisen.
-
Diese
Schwierigkeit wird allgemein durch eine Vorrichtung zum individuellen
Verarbeiten einer Mehrzahl von Datenübertragungskanälen überwunden,
wobei Daten für
jeden Kanal an einer vorbestimmten Position in einem seriell empfangenen Rahmen
enthalten sind, dadurch gekennzeichnet, dass die Vorrichtung folgende
Merkmale umfasst: eine Einrichtung zum Bestimmen der Position von
aktuell empfangenen Daten des Rahmens in dem Rahmen; einen Kanalspeicher,
der als Reaktion auf die Position der aktuell empfangenen Daten
eine Kanalnummer liefert; und eine Mehrzahl von FIFOs, die jeweils
den Kanälen
zugeordnet sind, wobei jeder FIFO auf eine jeweilige Kanalnummer,
die durch den Kanalspeicher geliefert wird, zum Speichern der aktuell empfangenen
Daten anspricht.
-
Falls
die Daten des OC3-Signals durch einen PCI-Bus mit einem Hostsystem
ausgetauscht werden, besteht eine Schwierigkeit darin, den Datendurchsatz über den
PCI-Bus zu erfüllen.
-
Diese
Schwierigkeit wird allgemein durch ein Verfahren zum Erzielen aufeinanderfolgender DMA-Lese-
und Schreibtrans fers zwischen einem lokalen Bus und einem PCI-Bus über eine
PCI-Brücke überwunden,
das folgende Schritte umfasst: Versehen der PCI-Brücke mit
Anweisungen zum Einrichten eines DMA-Lesetransfers, worauf unmittelbar
Anweisungen zum Einrichten eines DMA-Schreibtransfers folgen; Bereitstellen
der Daten für
den DMA-Schreibtransfer unmittelbar nach den Anweisungen zum Einrichten
des DMA-Schreibtransfers; und Empfangen der Daten des DMA-Lesetransfers
nach der Bereitstellung der Daten für den DMA-Schreibtransfer.
-
Wenn
die Daten des OC3-Signals durch einen Telekommunikationsbus ausgetauscht
werden, besteht eine Schwierigkeit darin, eine variierende Übertragungsgeschwindigkeit
zu berücksichtigen, wohingegen
der Telekommunikationsbus erfordert, dass die Übertragung synchron ist. Das
Problem ist besonders kritisch, wenn die Übertragungsgeschwindigkeit
einen bleibenden Fehler aufweist.
-
Diese
Schwierigkeit wird allgemein durch ein Verwaltungsverfahren für einen
FIFO überwunden, der
zwischen einen eingehenden und einen ausgehenden Datenfluss platziert
wird, wobei die Datenflüsse
synchron sind und eine Übertragungsgeschwindigkeit
aufweisen, die um eine Nenngeschwindigkeit herum schwankt, wobei
das Verfahren folgende Schritte umfasst: anfängliches Füllen des FIFO auf einen vorbestimmten
Pegel; Schreiben und Lesen von Daten in dem FIFO durch den eingehenden
bzw. ausgehenden Datenfluss; falls der FIFO leer wird, Senden bedeutungsloser
Daten in dem ausgehenden Fluss, bis der FIFO wieder seinen vorbestimmten
Füllpegel
erreicht hat; und sobald der FIFO voll wird, Erklären des
FIFO als leer.
-
Die
vorstehenden und weitere Aufgaben, Merkmale, Aspekte und Vorteile
der Erfindung ergeben sich aus der folgenden ausführlichen
Beschreibung von Ausführungsbeispielen
der vorliegenden Erfindung, wenn sie in Verbindung mit den beiliegenden
Zeichnungen betrachtet werden.
-
Kurze Beschreibung
der Zeichnungen
-
1 zeigt
eine beispielhafte SONET/OC3-Rahmenhierarchie.
-
2 zeigt
eine beispielhafte SDH/STM1-Rahmenhierarchie.
-
3 zeigt
die Struktur eines STS3-Rahmens.
-
4 zeigt
die Struktur eines STS1-Rahmens.
-
5 zeigt
einen Superrahmen von vier aufeinanderfolgenden STS1-Rahmen.
-
6 zeigt
schematisch einen herkömmlichen
Add-Drop-Multiplexer.
-
7 zeigt
eine vereinfachte Architektur einer erfindungsgemäßen Vorrichtung
zum Verarbeiten aller DS0-Signale, die auf einer Hochgeschwindigkeitsverbindung übermittelt
werden.
-
8 ist
ein Zeitdiagramm, das verschiedene Signale veranschaulicht, die
durch eine SONET-Schnittstelle,
die bei der Vorrichtung der 7 verwendet
wird, bereitgestellt werden.
-
9 zeigt
schematisch einen VT-Prozessor, der bei der Vorrichtung der 7 verwendet wird.
-
10 ist
ein Zeitdiagramm eines DMA-Lesezyklus durch einen PCI-Bus.
-
11A und 11B sind
Zeitdiagramme optimierter DMA-Zyklen in einem besten Fall bzw. in einem
schlimmsten Fall.
-
12 zeigt
schematisch ein Ausführungsbeispiel
eines bei der Vorrichtung der 7 verwendeten
TDM-Pufferverwalters.
-
13 zeigt
schematisch ein optimiertes Ausführungsbeispiel
einer Schaltzentrale.
-
Bester Modus
zum Durchführen
der Erfindung
-
Bei 7 dient
eine SONET-Schnittstelle 14 dazu, ein eingehendes OC3-Signal
bei 155,52 Mbits/s in einen Empfangsbytestrom Rx bei 19,44 Mbytes/s
umzuwandeln und einen Sendebytestrom Tx derselben Geschwindigkeit
in ein ausgehendes OC3-Signal umzuwandeln. Zu diesem Zweck verwendet
die Schnittstelle 14 einen Teil der Funktionalität eines
herkömmlichen
Add-Drop-Multiplexers des Typs der 6. Insbesondere
kann sie die bei einem derartigen Multiplexer verwendeten SPECTRA-
und TUPP-Schaltungen verwenden.
-
Bei
derartigen Schaltungen liegen die Byteströme Rx und Tx in einem STS3-Rahmenformat
vor, d. h. sie entsprechen dem Abtasten der in 3 gezeigten
Matrix von links nach rechts und von oben nach unten.
-
Der
Empfangsstrom Rx ist derjenige, der die intensivste Verarbeitung
durch die Schnittstelle 14 erfordert. Die TUPP-Schaltung
ist dafür
verantwortlich, die STS1-Rahmen und die VT1,5-Behälter zu
identifizieren, die, wie zuvor erwähnt wurde, bei willkürlichen
Positionen in ihren jeweiligen Rahmen STS3 und STS1 einer höheren Ebene
starten. Zu diesem Zweck führt
sie die notwendige Zeigerverwaltung durch und erzeugt verschiedene
Synchronisationssignale, die bei 8 veranschaulicht
sind. Ein STS1-Sync-Signal erzeugt einen Taktpuls für jedes erste
Byte (J1) eines STS1-Rahmens, und ein VT1,5-Sync-Signal erzeugt
einen Taktpuls für
jedes V5-Byte, d. h. jedes erste Byte einer Gruppe von vier aufeinanderfolgenden
VT1,5-Behältern
eines Superrahmens.
-
Ein
STS3-Sync-Signal wird durch die SPECTRA-Schaltung erzeugt. Es erzeugt
einen Taktpuls für
jedes erste Byte der STS3-Nutzlast, d. h. in der ersten Zeile, 10.
Spalte des STS3-Rahmens.
-
Der
Sendebytestrom Tx wird direkt der SPECTRA-Schaltung bereitgestellt,
die dafür
verantwortlich ist, ihn, sobald er eingeht, in das ausgehende OC3-Signal
einzufügen.
Dies bedeutet, dass alle Zusatzbytes zuvor berechnet und in den
Tx-Strom platziert wurden. Dies ist jedoch nicht komplex, da die Vorrichtung
der 7 alle Daten vollständig aus dem eingehenden OC3-Signal
extrahiert und somit nicht floatende Positionen von Rahmen in dem
ausgehenden OC3-Signal
verwalten muss, d. h. die Rahmen werden alle ausgerichtet und die
Rahmenzeiger auf Null gesetzt.
-
Jedoch
ist eine derartige Funktionalität
der Schnittstelle 14 ähnlich
derjenigen von herkömmlichen
Add-Drop-Multiplexern.
Der Zweck der Erfindung besteht darin, alle 2.016 DS0-Signale eines OC3-Signals
individuell zu handhaben.
-
Die
Schwierigkeit besteht somit darin, die eingehenden DS0-Signale von dem Eingangsstrom Rx
zu demultiplexieren und, umgekehrt, die ausgehenden DS0-Signale
zu dem ausgehenden Strom Tx zu multiplexieren.
-
Diese
Funktionalität
wird durch einen in 7 gezeigten „Virtuelles-Unterbündel-Prozessor" 16 gewährleistet.
Dieser Prozessor arbeitet in Zuordnung mit einem Speicher 18 und
einem spezifischen Bus, der als VT-Bus bezeichnet wird. Der VT-Bus
ist mit einer Benutzerschaltung gekoppelt, die die individuellen
DS0-Signale ausnutzt. 7 veranschaulicht zwei exemplarische
Benutzer.
-
Ein
erster Benutzer ist ein Hostcomputer 20, der durch einen
PCI-Bus mit der Vorrichtung verbunden ist. Der VT-Bus ist nacheinander
durch einen Hostpufferverwalter 22, der in Verbindung mit
einem Puffer 24 arbeitet, und eine PCI-Brücke 26 mit
dem PCI-Bus gekoppelt.
-
Der
Hostcomputer wird beispielsweise verwendet, um Sprachnachrichten,
die durch jeweilige DS0-Signale, die Telefonverbindungen entsprechen, empfangen
und gesendet werden, in Form von Dateien zu speichern.
-
Ein
zweiter Benutzer ist ein Telekommunikationsbus, z. B. H.100. Dieser
Bus ist durch einen TDM-Pufferverwalter 28, der in Verbindung
mit einem Puffer 30 arbeitet, mit dem VT-Bus gekoppelt.
-
Der
H.100-Bus, der zum Transportieren von 2.048 DS0-Signalen in der Zeitbündelung
(TDM – Time
Division Multiplex) fähig
ist, wird beispielsweise dazu verwendet, während des Betriebs eine Signalverarbeitung,
z. B. Komprimierung oder Verschlüsselung,
an eingehenden DS0-Signalen durchzuführen. Die verarbeiteten Signale
werden zu jeweiligen ausgehenden DS0-Signalen. Er kann ferner zu
Schalt- und Weiterleitungszwecken wie bei einem Add-Drop-Multiplexer
verwendet werden.
-
9 zeigt
eine Architektur des VT-Prozessors der 7 ausführlicher.
Für die
Verarbeitung des Empfangsbytestroms Rx werden die durch die SONET-Schnittstelle 14 bereitgestellten
verschiedenen Synchronisationssignale SYNC (STS3-Sync, STS1-Sync, VT1,5-Sync) einer Positionsberechnungseinheit 32 bereitgestellt.
Die Rolle dieser Einheit besteht darin, die Position in einem aktuellen STS3-Rahmen
eines Nutzlast-Bytes (oder DS0-Bytes), der aktuell in dem Rx-Strom übermittelt wird,
bereitzustellen. Die Berechnung wird erreicht, so dass die Positionen
der Bytes und nachfolgender VT1,5-Behälter dieselben bleiben, auch
wenn sich die entsprechenden STS1-Rahmen verschieben, um Taktdriften
zu kompensieren (Positiv- oder Negativstopfen).
-
Beispielsweise
werden die Positionen hierarchisch den DS0-Bytes eines einzelnen VT1,5-Behälters, den
VT1,5-Behältern
einer selben VT-Gruppe, den VT-Gruppen eines selben STS1-Rahmens und schließlich den
STS1-Rahmen zugewiesen. Bei dieser Regel lauten die Positionen der
ersten DS0-Bytes, die auf dem Rx-Strom empfangen werden, wenn der
Einfachheit halber angenommen wird, dass alle VT1,5-Behälter in
dem STS3-Rahmen ausgerichtet sind, folgendermaßen: 1, 672 + 1, 1.344 + 1,
97, 672 + 97, 1.344 + 97, 193, 672 + 193, 1.344 + 193, 289, 672
+ 289, 1.344 + 289 usw. Diese unregelmäßigen Positionswerte sind auf
die Tatsache zurückzuführen, dass
die drei STS1-Rahmen in dem STS3-Rahmen verflochten sind (siehe 3)
und dass die VT1,5-Behälter
durch Gruppen in jedem STS1-Rahmen verflochten sind (siehe 4).
-
Fachleute
werden ohne weiteres eine derartige Positionsberechnungseinheit
konstruieren, wobei sie die verschiedenen Synchronisationssignale, die
herkömmlicherweise
durch die SPECTRA- und TUPP-Schaltungen bereitgestellt werden, und
die Kenntnis der Rahmenstrukturen nutzen.
-
Die
Positionsinformationen werden durch die Einheit 32 einem
Empfangskanalspeicher 34 als Leseadresse bereitgestellt.
Dieser Speicher enthält eine
benutzerdefinierte Kanalnummer an jeder Stelle, d. h. für jede Position.
Die durch den Speicher 34 als Reaktion auf die Positionsinformationen
bereitgestellte Kanalnummer wird als Schreibadresse auf dem VT-Bus
platziert, wobei die zu schreibenden Daten das aktuelle Byte auf
dem Strom Rx sind. Wenn die dem Speicher 34 bereitgestellten
Positionsinformationen nicht bedeutend sind, d. h. wenn die Bytes auf
dem Strom Rx Zusatzbytes sind, werden die Schreiboperationen unterbunden,
beispielsweise durch einen inaktiven Zustand eines Datenfreigabesignals
DEN.
-
Das
Datenfreigabesignal DEN wird durch die Positionsberechnungseinheit 32 aus
den SYNC-Signalen und der Kenntnis der Rahmenstrukturen, nämlich der
Stellen der Zusatzbytes, erzeugt. Somit wird das Signal DEN lediglich
während
der effektiven Nutzlastbytes aktiviert, wie in 8 veranschaulicht ist.
-
Die
Vorrichtung, in die Daten geschrieben werden, ist ein mit dem VT-Bus
gekoppelter Empfangspuffer 36. Der Puffer 36 besteht
aus so vielen FIFOs, wie DS0-Signale zu verarbeiten sind (2.016), und
jeder FIFO reagiert auf eine jeweilige Kanalnummer, die als Schreibadresse
auf dem VT-Bus präsentiert
wird, indem er das aktuelle DS0-Byte speichert. Die FIFOs sind für eine Benutzerschaltung
einzeln zugänglich,
wodurch jeder Kanal, somit jedes DS0-Signal, einzeln verarbeitet
werden kann.
-
In
der Praxis sind die FIFOs als jeweilige Speicherbereiche in einem
einzelnen Speicher mit Doppelzugriff implementiert. Die Lese- und
Schreibadressen des Speichers mit Doppelzugriff werden durch eine
Zustandsmaschine verwaltet, die Zeiger unterhält, die für jeden FIFO die Stellen, in
die zu lesen und zu schreiben ist, angeben.
-
Ausgehende
DS0-Bytes werden durch die Benutzerschaltung in einen Sendepuffer 38 geschrieben,
in einzelnen FIFOs, die jeweils 2.016 Ausgangskanälen zugeordnet
sind. Die Puffer 36 und 38 bilden zusammen einen
Puffer (in 7 24 oder 30),
der einer Benutzerschaltung zugeordnet ist. Jeder FIFO des Puffers 38 reagiert
auf eine entsprechende Kanalnummer, die als Leseadresse auf dem
VT-Bus präsentiert
wird, indem er ein nächstes
Byte in den Sendestrom Tx platziert. Die Kanalnummer wird durch
einen Sendekanalspeicher 40 bereitgestellt, der, wie der
Kanalspeicher 34, eine benutzerdefinierbare Kanalnummer
für jede
Position eines DS0-Bytes in einem ausgehenden STS3-Rahmen enthält.
-
Die
Positionen der ausgehenden DS0-Bytes werden durch einen Positionszähler 42 auf ähnliche Weise
erzeugt, wie die Positionen für
den eingehenden Strom Rx berechnet werden. Jedoch ist diese Positionserzeugung
viel einfacher, da alle Rahmen miteinander ausgerichtet sind und
die Rahmenzeiger Null sind. Ein Freigabesignal EN, das äquivalent
zu dem Signal DEN ist, wird ebenfalls erzeugt, um die Nutzlastbytepositionen
von den Zusatzbytepositionen zu unterscheiden. Dieses Signal EN
wird auf dem VT-Bus bereitgestellt, um zu vermeiden, dass Daten
von dem Puffer 38 gelesen werden, wenn die durch den Zähler 42 bereitgestellte
Position einem Zusatzbyte entspricht.
-
Die
notwendigen Zusatzbytes werden durch eine Einheit 44 berechnet
und in den ausgehenden Strom Tx eingefügt, wobei die Positions- und
Freigabesignale von dem Zähler 42 genutzt
werden.
-
Jeder
der Ströme
Rx und Tx weist eine Übertragungsrate
von 19,44 Mbytes/s auf. Dies bedeutet, dass der VT-Bus bei 38,88
Mbytes/s getaktet ist, um den Rx-Strom in jedem ersten Taktzyklus
und den Tx-Strom in jedem zweiten Taktzyklus zu verarbeiten.
-
Die
Positionsberechnungsaufgabe für
den eingehenden Strom Rx kann vereinfacht werden, wenn dem TUPP
ein spezifischer Befehl gegeben wird, der ihn veranlasst, die drei
STS1-Rahmen in dem
entsprechenden STS3-Rahmen neu auszurichten. Mit anderen Worten
sind die Pfadzusatzspalten der drei STS1-Rahmen die 10. bis 12.
Spalte des STS3-Rahmens, die unmittelbar auf die Transportzusatzspalten
folgen, und die Bytes V1–V4
sind in der ersten Zeile, von den Positionen 13 bis 96.
-
Im
folgenden wird die Funktionsweise des Hostpufferverwalters 22 (7)
beschrieben. Der Hostpufferverwalter 22 ist dafür verantwortlich,
die in den FIFOs des Empfangspuffers 36 (9)
gespeicherten DS0-Bytes durch den PCI-Bus an das Hostsystem zu transferieren
und die auf dem Hostsystem gelesenen DS0-Bytes durch den PCI-Bus
in die FIFOs des Sendepuffers 38 zu transferieren. Aufgrund
der Funktionsweise des VT-Prozessors enthält jeder FIFO DS0-Bytes, die
einem jeweiligen einzelnen Kanal entsprechen, wodurch die Verarbeitung dieser
Daten besonders einfach und unkompliziert ist. Beispielsweise entspricht
der Inhalt jedes FIFO einer auf dem Hostsystem gespeicherten entsprechenden
Datei.
-
Der
Empfangspuffer 36 wird bei einer effektiven Rate von 16
Mbytes/s durch den VT-Prozessor gefüllt, wohingegen der Sendepuffer 38 bei
einer effektiven Rate von 16 Mbytes/s durch diesen Prozessor geleert
wird (der effektive Verkehr von DS0-Bytes beträgt aufgrund des Entfernens
des Zusatzes 32 Mbytes/s statt 38,88 Mbytes/s). Somit muss der Hostpufferverwalter
gewährleisten,
dass dieser Verkehr durch den PCI-Bus aufrechterhalten wird und
dass bei den FIFOs niemals eine Über-
oder Unterschreitung erfolgt.
-
Der
32 Mbytes/s-Verkehr ist ein Viertel des theoretischen Durchsatzes
des PCI-Busses. Der theoretische Durchsatz eines PCI-Busses kann
kaum jemals aufrechterhalten werden, insbesondere wenn Daten, die
auf einer Festplatte oder einem anderen Massenspeichermedium gespeichert
sind, über
den PCI-Bus wiedergewonnen werden. In der Tat weisen Massenspeichermedien
einen Durchsatz auf, der weit unter dem des PCI-Busses liegt, wodurch
die Daten teilweise in einem Cachespeicher oder einem TLB-Puffer
(TLB = Translate Lookaside Buffer, assoziativer Übersetzungs-Pufferspeicher),
der den notwendigen Durchsatz aufweist, aufrechterhalten werden.
Trotzdem liegen immer Lesezugriffslatenzen vor, auch in dem Cachespeicher
oder TLB, wobei diese Latenzen im Fall eines Cache-Fehltreffers
1 μs erreichen
können.
-
Überdies
erzielt eine herkömmliche
PCI-Brücke
Transfers als Reaktion auf spezifische Befehle, deren Abschluss
mehrere Zyklen erfordert, während derer
keine effektiven Daten transferiert werden.
-
All
diese Überlegungen
machen es sehr schwierig, auch nur ein Viertel des theoretischen Durchsatzes
des PCI zu erreichen, auch wenn der PCI-Bus für die Aufgabe zweckgebunden
ist.
-
Die
effektivste Weise, die Auswirkung von Leselatenz- und Anweisungszyklen
zu verringern, besteht darin, DMA-Transfers über den PCI-Bus zu erzielen.
In der Tat ermöglicht
dies, dass Daten durch große
Bursts transferiert werden, an denen die Latenz- und Anweisungszyklen
für jeden
Burst nur einmal beteiligt sind.
-
10 veranschaulicht
einen typischen DMA-Lesezyklus über
einen PCI-Bus, der an dem lokalen Bus Lbus zwischen der PCI-Brücke 26 und dem
Hostpufferverwalter 22 eingeleitet wird. Eine erste Anweisung
RDAD wird der PCI-Brücke
bereitgestellt, die einen Lesevorgang, die zu lesende Adresse und
die Größe des Bursts
angibt. Unmittelbar danach wird der PCI-Brücke zum Auslösen des Lesevorgangs
eine zweite Anweisung RDtrig bereitgestellt.
-
Derartige
Anweisungen können
jeweils bis zu 12 Taktzyklen für
eine herkömmliche
PCI-Brücke, wie
z. B. die PLX-PCI9080-Schaltung,
brauchen, d. h. jeweils 0,3 μs
in dem vorliegenden Fall, bei dem der lokale Bus bei 38,88 MHz getaktet
wird. Im schlimmsten Fall, wie gezeigt ist, kann der Leseburst 1 μs nach dem
Ende der RDtrig-Anweisung an dem PCI-Bus und dann an dem lokalen
Bus ankommen.
-
Nach
dem DMA-Leseburst kann ein weiterer DMA-Lese- oder -Schreibzyklus
starten. 10 zeigt dies für einen
Schreibzyklus, der durch eine WRAD-Anweisung und eine WRtrig-Anweisung
eingeleitet wird.
-
Bei
einem DMA-Schreibzyklus kann der Burst unmittelbar nach der Schreibauslöseanweisung
WRtrig geschrieben werden.
-
Bei
derartigen DMA-Zyklen ist es nützlich, die
Größe der Bursts
zu erhöhen,
um die Bedeutung der Anweisungs- und Latenzzyklen zu verringern.
In dem vorliegenden Fall ist es jedoch nicht möglich, die Schreibbursts über eine
bestimmte Grenze hinaus zu erhöhen.
In der Tat entsprechen Daten, die in einem DMA-Burst geschrieben
sind, einem einzelnen Kanal, d. h. dem Inhalt eines einzelnen FIFOs
des Empfangspuffers 36, was bedeutet, dass dieser FIFO
alle Bytes für
den Burst enthalten muss. Der FIFO empfängt jedoch nur ein Byte in
jedem STS3-Rahmen, d. h. alle 125 μs. Dies bedeutet, dass der Datenstrom um
N × 125 μs verzögert ist,
wobei N die Größe eines Bursts
ist. In der Praxis sollte diese Verzögerung 8 ms nicht überschreiten,
um Echoprobleme zu vermeiden. Die maximale Größe der Schreibbursts beträgt somit
64 Bytes.
-
In
dem vorliegenden Fall ist es notwendig, zwischen Lesezyklen und
Schreibzyklen derselben Größe abzuwechseln,
um gleiche Eingangs- und Ausgangsübertragungsraten zu haben,
wodurch die Größe der Lesebursts
ebenfalls 64 Bytes beträgt.
-
Überdies
transferiert ein DMA-Burst nicht nur effektive Daten: Busentscheidungsinformationen müssen ebenfalls
ausgetauscht werden. Folglich benötigt ein DMA-Burst für 64 Bytes,
angenommen der lokale Bus ist 32 Bits breit, 30 Taktzyklen (oder
0,8 μs)
auf dem lokalen Bus (16 für
die effektiven Daten und 14 für
die Busentscheidung).
-
Von
diesen Annahmen ausgehend brauchen ein 64-Byte-Lesezyklus und ein 64-Byte-Schreibzyklus
insgesamt 3,8 μs
(4 × 0,3
+ 1 + 2 × 0,8),
was einem Durchsatz von 33,7 Mbytes/s entspricht. Dies ist dann
der maximal erreichbare Durchsatz auf dem lokalen Bus. Dieser Durchsatz
ist unzureichend, da er kaum größer ist
als der notwendige Durch satz von 32 Mbytes/s und zu wenig Raum für Fluktuationen
und andere notwendige Zusätze
lässt,
z. B. Unterbrechungshandhabung zum Umschalten des PCI-Busses zwischen
einem Master- und einem Slave-Modus.
-
11A und 11B veranschaulichen
ein DMA-Zugriffsschema, das dieses Problem vermeidet. Ein DMA-Schreibzyklus
wird unmittelbar nach dem Aufbau eines DMA-Lesezyklus aufgebaut,
d. h. die PCI-Brücke-Anweisungen
für einen
Schreibzyklus (WRAD und WRtrig) werden unmittelbar nach der RDtrig-Anweisung auf dem
lokalen Bus Lbus bereitgestellt.
-
Im
besten Falle, der in 11A veranschaulicht ist, wird
der Burst von zu lesenden Daten kurz nach der RDtrig-Anweisung auf dem
PCI-Bus platziert, während
die Schreibaufbauanweisungen WRAD und WRtrig auf dem lokalen Bus
bereitgestellt werden. Dies bedeutet, dass der Leseburst nicht unmittelbar
auf dem lokalen Bus platziert werden kann, da der lokale Bus beschäftigt ist.
Der Leseburst wird in einem Puffer der PCI-Brücke gespeichert und wartet
auf einen Zeitpunkt, wenn der lokale Bus frei wird. Dieser Zeitpunkt
könnte
unmittelbar nach der WRtrig-Anweisung sein. Statt dessen wird der
Burst von zu schreibenden Daten unmittelbar nach der WRtrig-Anweisung
auf dem lokalen Bus platziert, und der Leseburst wird unmittelbar
nach dem Schreibburst auf dem lokalen Bus platziert. Auf diese Weise
ist dieselbe Vorgehensweise sowohl im besten Fall als auch in dem
nachstehend beschriebenen schlimmsten Fall einsetzbar. Der Schreibburst
wird ferner in einem Puffer gespeichert bevor er auf dem PCI-Bus platziert
wird, da es wahrscheinlich ist, dass der PCI-Bus mit dem Ende des
Lesebursts beschäftigt ist,
wenn der Schreibburst auf dem lokalen Bus beginnt.
-
Wie
gezeigt ist, sind die Bursts auf dem PCI-Bus kürzer als diejenigen auf dem
lokalen Bus (sie dauern 0,6 μs
statt 0,8 μs).
Es ist in der Tat so, dass, obwohl der PCI-Bus bei 33 MHz getaktet
wird (langsamer als der lokale Bus), bei jedem Burst auf dem PCI-Bus
weniger Zusätze
ausgetauscht werden.
-
Im
schlimmsten Fall, wie er in 11B veranschaulicht
ist, kommt der Leseburst 1 μs
nach der RDtrig-Anweisung auf dem PCI-Bus an, und zwar inmitten
des Schreib-DMA-Bursts, der unmittelbar nach der WRtrig-Anweisung
auf dem lokalen Bus platziert wurde. Der Schreibburst auf dem lokalen Bus
endet vor dem Leseburst auf dem PCI-Bus, weshalb der Transfer des
Lesebursts zu dem lokalen Bus und des Schreibbursts zu dem PCI-Bus
erst nach dem Ende des Lesebursts auf dem PCI-Bus erfolgen. Wie
gezeigt ist, hinterlässt
dies ein Ruheintervall zwischen den Lese- und Schreibbursts auf
dem lokalen Bus. Dieses Ruheintervall, im wesentlichen 0,2 μs, ist kürzer als
die Zeit, die den Beginn des Lesebursts auf dem PCI-Bus von dem
Beginn des Schreibbursts auf dem lokalen Bus trennt, da, wie zuvor
erwähnt
wurde, die PCI-Bursts kürzer
sind als die Bursts des lokalen Busses.
-
Bei
diesem Verfahren dauert der Transfer von zwei 64-Byte-Bursts insgesamt
3 μs, was
einem ausreichenden Durchsatz von 42,7 Mbytes/s entspricht.
-
Die
64 Bytes eines DMA-Bursts werden in einem einzelnen FIFO des Puffers 36 (oder 38)
gelesen (oder geschrieben). Die FIFOs werden sequentiell abgefragt,
nicht unbedingt in der Reihenfolge, in der sie durch den VT-Prozessor 16 gefüllt oder
geleert wurden. In der Praxis weisen die FIFOs eine Tiefe von 256
Bytes auf, und beim Starten wird ihnen Zeit gegeben, sich halb zu
füllen,
bevor sie das erste Mal abgefragt werden. Da die Füll- und
Leerungsraten der FIFOs normalerweise gleich sind, enthält ein FIFO
normalerweise jedes Mal, wenn er abgefragt wird, dieselbe Anzahl
von Bytes, nominell 128.
-
Wenn
ein virtuelles Unterbündel
langsamer ist als ein Nennwert in dem OC3-Signal, nimmt die Anzahl
von Bytes, die in den entsprechenden FIFOs enthalten sind, zwischen
zwei Abfragen ab. Zu einem gegebenen Zeitpunkt enthalten die FIFOs
nicht genügend
Daten zum Abfragen, d. h. weniger als 64 Bytes bei jeder Abfrage.
Folglich empfängt
der Hostcomputer bei jedem DMA-Schreibburst weniger Bytes. Dies
hat jedoch keine negativen Folgen, da die effektiv transferierten
Bytes an eine Datei in dem Hostsystem angehängt werden, wodurch die Integrität des Bytestroms
bewahrt wird.
-
Falls
ein virtuelles Unterbündel
schneller ist als ein Nennwert, erhöht sich die Anzahl von Bytes, die
in den entsprechenden FIFOs enthalten sind, zwischen zwei Abfragen.
Zu einem gegebenen Zeitpunkt sind die FIFOs voll und tendieren zu
einer Umwicklung, d. h. ein eingehendes Bytes wird über das erste
Byte des FIFO geschrieben, bevor dieses erste Byte in einem DMA-Burst
ausgesendet werden kann. Dies würde
einen Datenverlust bewirken.
-
Um
diesen Datenverlust zu vermeiden, wird eine kleine Gruppe von FIFOs
zwischen zwei Hauptabfragesequenzen aller FIFOs abgefragt, wobei
die Gruppe von FIFOs jedes Mal gewechselt wird. Beispielsweise werden
die FIFOs gemäß den folgenden
Sequenzen abgefragt:
1 – 2.016,
1 – 8,
1 – 2.016,
9 – 16,
1 – 2.016,
17 – 24
usw.
-
Während jeder
Hauptabfragesequenz werden 64 Bytes systematisch aus jedem FIFO
gelesen. Während
einer zusätzlichen
Abfragesequenz werden nur dann 64 Bytes aus einem FIFO gelesen,
wenn der FIFO mehr als 128 Bytes enthält. Mit dieser Technik wird
ein FIFO, der eine höhere
als nominelle Füllrate
aufweist, hie und da ein zusätzliches
Mal geleert, je nach der effektiven Füllrate des FIFO.
-
Die
Sende-FIFOs 38, d. h. diejenigen, die die DMA-Lesebursts von dem
PCI-Bus empfangen, brauchen keine Überschreitungsverwaltung. In
der Tat werden die Daten, die von dem PCI-Bus kommen, auf den Takt
des lokalen Busses (38,88 MHz) synchronisiert. Sie sind nur dazu
da, um der Tatsache Rechnung zu tragen, dass die von dem PCI-Bus kommenden
Daten in einem STS3-Rahmen nicht unbedingt in derselben Reihenfolge
ausgesendet werden müssen.
-
Im
folgenden wird die Funktionsweise des TDM-Pufferverwalters 28 (7)
beschrieben. Der TDM-Pufferverwalter 28 ist
dafür verantwortlich, DS0-Bytes
zwischen einem Telekommunikationsbus, bei dem vorliegenden Beispiel
H.100, und dem Puffer 30 auszutauschen. Wie der Puffer 24 für den PCI-Bus
umfasst der Puffer 30 Empfangs- und Sendepuffer 36 und 38,
die jeweils 2.016 FIFOs enthalten, die jeweils einzelnen Kanälen zugeordnet
sind.
-
Ob
ein Kanal dem PCI-Bus oder einem Telekommunikationsbus zugeordnet
ist, wird durch den Benutzer in Kanalspeichern 34 und 40 (9)
bestimmt.
-
Ein
H.100-Bus weist 32 Drähte
auf, von denen jeder 128 „Zeitschlitze", die in 125 μs-Rahmen angeordnet
sind, übermittelt.
Mit anderen Worten übermittelt
der H.100-Bus 4.096 Zeitschlitze in 125 μs. Jeder Zeitschlitz entspricht
einer seriellen Übertragung
eines jeweiligen DS0-Bytes, wodurch ein H.100-Bus ausreichend ist,
um den gesamten OC3-Vollduplexverkehr
zu übermitteln.
-
Um
Daten mit den H.100-Bussen auszutauschen, werden die Daten durch
den TDM-Pufferverwalter Byte um Byte in jeden FIFO gelesen und geschrieben,
und nicht nach Bursts von 64 Bytes auf der Seite des PCI-Busses.
-
Ein
einzelnes Byte wird während
einer Abfragesequenz in jedem Empfangs-FIFO 36 gelesen. Das
Byte wird gespeichert, wobei es auf seinen Zeitschlitz auf dem entsprechenden
H.100-Bus wartet, und wird schließlich in Serie auf dem entsprechenden Draht
ausgesendet.
-
Eine
Schwierigkeit bei der Verwendung eines Telekommunikationsbusses
sind die Echtzeitanforderungen, die er stellt, insbesondere in Bezug
auf ein Platzieren von Daten auf dem Bus. Es wird immer ein Zeitschlitz
gesendet, ob er Daten enthält
oder nicht; falls das Byte für
den Zeitschlitz zu spät
ankommt, wird der Zeitschlitz mit Müll gesendet. Falls das Byte
zu früh
ankommt, kann es ebenfalls nicht ausgesendet werden, da der Zeitschlitz
mit dem vorherigen Byte besetzt ist.
-
Die
Verwendung eines FIFO ermöglicht, dass Übertragungsratendriften
kompensiert werden, vorausgesetzt, dass er keinen Unterschreitungszustand
erreicht, d. h. dass die durchschnittliche Übertragungsrate gleich der
nominellen Rate ist.
-
Falls
die Bytes eines Kanals langsamer als bei einer nominellen Rate empfangen
werden, nimmt die Anzahl von Bytes, die in dem entsprechenden FIFO
enthalten sind, mit der Zeit ab. Zu einem gegebenen Zeitpunkt weist
der FIFO eine Unterschreitung auf, d. h. enthält keine Bytes, wenn er abgefragt
wird. Herkömmlicherweise
signalisiert der FIFO, dass der Leseprozess enden muss. Der Übertragungsprozess auf
einem H.100-Bus kann jedoch nicht angehalten werden, weshalb ein
Müllbyte
auf dem Bus gesendet wird.
-
Dieser
Zustand wird erreicht, wenn das Übertragungssignal
eine zeitliche Verzögerung
von N Bytes erreicht hat, wobei N die Anzahl von Bytes ist, die
anfänglich
in dem FIFO gespeichert sind. Die Zahl N wird so gewählt, dass
die Fehlerrate ein erforderliches Kriterium erfüllt, beispielsweise ein Fehler alle
10 mn.
-
Die
Takte der mit einer SONET- oder SDH-Verbindung verbundenen Vorrichtungen
sind ein sogenanntes „Stratum
3", was bedeutet,
dass sie in einem Freilaufmodus eine Genauigkeit von +/–4,6 ppm
aufweisen. Der Freilaufmodus ist ein Ausnahmemodus, bei dem eine
Vorrichtung die Synchronisation verloren hat. Der Datenfluss, den
die Vorrichtung sendet, in der Regel VT1,5-Behälter, überspringt somit 4,6 Bits alle
Million, was für
die VT1,5-Übertragungsrate
von 1,544 Mbits/s einen Fehler alle 27 Sekunden ergibt. Um das Kriterium „ein Fehler
alle 10 mn" zu erfüllen, wird
der anfängliche
Gehalt N der FIFOs gleich 32 gewählt,
und die FIFO-Tiefe
wird gleich 64 gewählt.
Bei dem Wert 32 beträgt
die Fehlerrate in der Tat ein Fehler alle 14 mn.
-
Falls
die Daten Ton oder Bildern entsprechen, hat ein von Zeit zu Zeit
auftretender Fehler keine wahrnehmbare Auswirkung. Falls keine Fehler
toleriert werden, wird ein Fehlerbehebungsmechanismus verwendet.
Beispielsweise wird der Fehler durch die Benutzerschaltung mittels
einer CRC-Prüfung erfasst,
die an einem aktuellen Datenpaket durchgeführt wird, und die Benutzerschaltung
fordert an, dass das aktuelle Paket durch den Sender erneut gesandt wird.
Die Daten, die bis zur Ankunft des erneut gesandten Pakets empfangen
werden, werden anschließend
verworfen.
-
Die
Verwendung von FIFOs, wie sie oben beschrieben wurden, ist zufriedenstellend,
wenn das Übertragungssignal
eine Geschwindigkeitsdrift aufweist, die zwischen zu langsam und
zu schnell variiert. Ein Problem tritt dann auf, wenn das Übertragungssignal
einen bleibenden Geschwindigkeitsfehler aufweist.
-
Im
Fall einer bleibenden zeitlichen Übertragungsgeschwindigkeitsverzögerung wird,
nachdem der FIFO einen leeren Zustand erreicht hat, z. B. nach einem
Betrieb von 14 mn, ein erstes Müllbyte auf
dem H.100-Bus gesandt. Die nachfolgenden Male, die das FIFO abgefragt
wird, enthält
es höchstens ein
Byte und ist alle 14/32 = 0,44 mn leer (bei dem vorliegenden Beispiel,
bei dem der Wert von 14 mn mit anfänglich 32 Bytes in dem FIFO
erreicht wird). Folglich wird die Fehlerrate mit 32 multipliziert
und wird inakzeptabel.
-
Um
diesen Nachteil zu überwinden,
hört der TDM-Pufferverwalter auf,
den FIFO zu lesen, nachdem er einen Unterschreitungszustand erreicht
hat, und zwar so lange, bis der FIFO wieder 32 Bytes enthält. Folglich
wird ein Burst von 32 aufeinanderfolgenden Müllbytes auf dem H.100-Bus gesendet. Dies
ist jedoch nicht schädlicher
als das Senden eines einzigen Müllbytes,
da die Benutzerschaltung nur die Übertragung benötigt, um
von dem Paket, das das erste der 32 Müllbytes enthält, neu
zu beginnen, d. h. anzufordern, dass ein einzelnes Paket erneut gesandt
wird. In der Tat kann ein Burst von aufeinanderfolgenden Fehlern
unter diesen Umständen
als einzelner Fehler betrachtet werden.
-
Die
Fehlerrate beträgt
dann wiederum eins alle 14 nm.
-
Wenn
die Bytes eines Kanals zu schnell empfangen werden, nimmt die Anzahl
von Bytes, die in dem entsprechenden FIFO enthalten sind, mit der Zeit
zu. Nach einer gegebenen Zeit ist der FIFO voll. Herkömmlicherweise
würde dann
eine Anforderung an den Sender gesendet werden, das Senden von Daten
zu beenden, aufgrund der synchronen Charakteristik der SONET-Verbindung
ist dies in dem vorliegenden Fall jedoch nicht möglich. Folglich wird jegliches
Bytes, das empfangen wird, wenn der FIFO voll ist, verworfen. Die Benutzerschaltung
des H.100-Busses erfasst den Fehler und fordert an, dass das Datenpaket
erneut gesandt wird.
-
Die
FIFO-Tiefe ist so gewählt,
dass die Fehlerrate, die sich aus einer Übertragungsgeschwindigkeitsvoreilung
ergibt, eine vorbestimmte Spezifikation erfüllt, bei dem vorliegenden Beispiel
ein Fehler alle 10 mn. Die gewählte
Tiefe beträgt
bei dem Beispiel 64, was 32 Bytes über dem anfänglichen Inhalt von 32 Bytes
lässt und
einen Fehler alle 14 mn ergibt.
-
Falls
die Übertragungsgeschwindigkeitsvoreilung
bleibend ist, wird der FIFO nach einem Betrieb von 14 mn voll, wodurch
ein erstes Byte verworfen wird. Für die nächsten empfangenen Bytes weist
der FIFO höchstens
eine freie Stelle auf und ist alle 0,44 mn voll. Folglich werden
weitere Bytes mit einer inakzeptablen Rate von eins alle 0,44 mn
verworfen.
-
Um
diesen Nachteil zu überwinden,
ermöglicht
der TDM-Pufferverwalter
dem FIFO eine Umwicklung, d. h. das erste ungelesene Byte des FIFO wird
mit einem eingehenden Byte überschrieben, wenn
der FIFO voll ist. Folglich werden alle in dem FIFO enthaltenen
64 Bytes verworfen. Dies ist wiederum nicht schädlicher als das Verwerfen eines
einzigen Bytes, da die Benutzerschaltung des H.100-Busses nur einmal
einen Fehler erfasst und anfordert, dass die Übertragung von dem Paket, in dem
der Fehler erfasst wurde, neu beginnt.
-
Um
der Tatsache Rechnung zu tragen, dass ein Risiko besteht, dass die Übertragungsgeschwindigkeit
in der Zwischenzeit unter die nominelle Geschwindigkeit absinkt,
ermöglicht
der TDM-Pufferverwalter dem FIFO, sich halb (32 Bytes) wieder aufzufüllen, bevor
er seinen Inhalt auf dem H.100-Bus sendet. Dies führt zum
Senden von 32 Müllbytes
auf dem H.100-Bus. Wiederum ist dies jedoch aus den oben dargelegten
Gründen
nicht schädlich.
-
Die
effektive Fehlerrate beträgt
dann wiederum eins alle 14 mn.
-
Ein
Senden der Daten, die auf dem H.100-Bus kommen, auf der SONET-Verbindung
erfolgt synchron mit den Zeitschlitzen des H.100-Busses, wodurch
die Sende-FIFOs 38 einfach zu Neuordnungszwecken verwendet
werden, wie die Sende-FIFOs auf der Seite des PCI-Busses.
-
12 zeigt
schematisch ein Ausführungsbeispiel
eines TDM-Pufferverwalters 28 für den eingehenden Bytestrom
Rx. Die Empfangs-FIFOs sind in einem einzelnen RAM 30 mit
Einfachzugriff enthalten, auf den mit Adressen, die durch einen
Lese-/Schreibzeigerspeicher 50, der bei diesem Ausführungsbeispiel
ein RAM mit Doppelzugriff ist, bereitgestellt werden, abwechselnd
ein Lese- und ein Schreibzugriff durchgeführt wird. Jede Stelle des Zeigerspeichers 50 enthält einen
Schreibzeiger und einen Lesezeiger und wird durch eine entsprechende Kanalnummer
ausgewählt,
die abwechselnd durch den VT-Bus und durch einen Zeitschlitz-/Kanalnummer-Speicher 52 bereitgestellt
wird. Dieser Speicher 52 weist die Kanalnummern jeweiligen
Zeitschlitzen zu und ist durch den Benutzer programmierbar.
-
Eine
derartige Lösung
zum Implementieren einer Mehrzahl von FIFOs kann selbstverständlich auch
auf der Seite des PCI-Busses
verwendet werden. Dann bildet der Kanalspeicher 52 DMA-Bursts auf
Kanalnummern ab, statt Zeitschlitze auf Kanalnummern abzubilden.
-
Wenn
ein Byte von dem VT-Bus in einen FIFO geschrieben wird, spricht
der Zeigerspeicher 50 auf die auf dem VT-Bus bereitgestellte
Kanalnummer an. Der FIFO-Speicher 30 wird dann mit einer
Adresse, deren MSBs die Kanalnummer sind und die LSBs der durch
den Zeigerspeicher 50 bereitgestellte Schreibzeiger sind,
leseausgewählt.
Dieser Schreibzeiger wird dann durch einen Sequenzer 54 aktualisiert
und erneut in seine aktuelle Stelle in dem Zeigerspeicher 50 geschrieben.
-
In
einem nächsten
Zyklus wird ein Byte, das in einem H.100-Zeitschlitz gesendet werden soll, aus einem
FIFO in dem Speicher 30 gelesen. Der Zeitschlitz wird durch
den Sequenzer 54 identifiziert und dem Kanalnummernspeicher 52 als
Leseadresse bereitgestellt. Der Speicher 52 liefert somit
eine Kanalnummer als Leseadresse an den Zeigerspeicher 50. Diese
selbe Kanalnummer wird als die MSBs an den Lesezeiger angehängt, der
dann durch den Zeigerspeicher 50 bereitgestellt ist, um
die Leseadresse des FIFO-Speichers 30 zu bilden. Dieser
Lesezeiger wird durch den Sequenzer aktualisiert und erneut in seine
aktuelle Stelle des Zeigerspeichers 50 geschrieben.
-
Die
durch den Sequenzer 54 erzeugten Zeitschlitznummern sind
vorzugsweise aufeinanderfolgend und derart, dass Zahlen 0 bis 31
dem ersten Zeitschlitz jedes der 32 Drähte entsprechen, Nummern 32
bis 63 dem zweiten Zeitschlitz jedes der 32 Drähte entsprechen usw.
-
Obwohl
die effektive Übertragungsrate
des Bytestroms Rx 16 Mbytes/s beträgt, werden die Bytes bei 19,44
Mbytes/s in dem FIFO-Speicher 30 gelesen und geschrieben,
d. h. mit der Zeitbasis, die zum Verarbeiten von SONET-Signalen
verwendet wird. Da der FIFO-Speicher 30 einen Einfachzugriff aufweist,
sind die Lese- und Schreibraten gleich. Jedoch erfordert der H.100-Bus,
dass die Bytes bei ihrer effektiven Rate von 16 Mbytes/s bereitgestellt werden.
Zu diesem Zweck werden die Bytes mit 19,44 MHz in einen Taktadapter-FIFO 56 geschrieben
und mit 16 MHz aus demselben ausgelesen.
-
Schließlich werden
die Bytes durch einen Schalter 58 in jeweiligen Zeitschlitzen
des H.100-Busses platziert. Der Schalter 58 sendet während des
jeweiligen Zeitschlitzes jedes Byte in Serie auf einem entsprechenden
von 32 Drähten
aus.
-
Der
Schalter 58 kann 32 Paare von Registern umfassen, die jeweils
den Drähten
zugeordnet sind. 32 aufeinanderfolgende Bytes von dem FIFO 56 werden
jeweils in die ersten Register der Paare geschrieben, während die
zweiten Register der Paare Bit um Bit auf die jeweiligen Drähte ausgelesen
werden. Die Rollen der ersten und der zweiten Register werden für einen
nächsten
Stapel von 32 Bytes vertauscht.
-
Die
Schaltungsanordnung zum Verarbeiten des Sendebytestroms Tx, d. h.
der Daten, die von dem H.100-Bus kommen und an die SONET-Verbindung
gesendet werden, ist zu der oben beschriebenen Schaltungsanordnung
streng symmetrisch und wird daher nicht beschrieben.
-
13 zeigt
schematisch ein Ausführungsbeispiel
eines Schalters 58, der besonders gut an eine FPGA-Implementierung (FPGA
= Fully Programmable Gate Array, vollständig programmierbares Gatterarray)
angepasst ist. Die oben beschriebene Lösung für den Schalter ist an einen
vollständigen kundenspezifischen
Entwurf einer integrierten Schaltung angepasst; falls sie in einem
FPGA implementiert wäre,
würde sie
zumindest einen Logikblock des Arrays pro Flip-Flop erfordern, d.
h. 2 × 8 × 32 = 512 Logikblöcke, was
sehr viel ist.
-
Der
Schalter der 13 umfasst vier Gruppen von
acht 1-Bit-Speichern 60 mit
Doppelzugriff. Jeder Speicher 60 ist 16 Bits tief, wobei
8 Bits dazu gedacht sind, Daten von dem FIFO 56 zu empfangen,
während
die anderen 8 Bits auf Drähten
des H.100-Busses gesendet werden.
-
Jeder
Speicher 60 mit Doppelzugriff weist den Vorteil auf, dass
er mit lediglich zwei FPGA-Logikblöcken verwirklicht werden kann,
wodurch insgesamt 32 Logikblöcke
zur Speicherung in dem Schalter verwendet werden.
-
Jeder
Speicher 60 einer Gruppe ist vier aufeinanderfolgenden
Drähten
zugewiesen. Jede Gruppe ist zwei benachbarten Bits eines von dem
FIFO 56 empfangenen Bytes zugewiesen. Die Eingänge der acht
Speicher 60 einer Gruppe sind mit dem Ausgang eines 2-1-Multiplexers 62 verbunden,
der an seinen zwei Eingängen
die jeweiligen zwei Bits des aktuellen Bytes von dem FIFO 56 empfängt.
-
Acht
4-1-Multiplexer 64 sind so verbunden, dass der i-te Multiplexer
an seinem j-ten Eingang den Ausgang des i-ten Speichers 60 der
j-ten Gruppe empfängt,
wobei i zwischen 1 und 8 variiert und j zwischen 1 und 4 variiert.
-
Acht
1-4-Demultiplexer 66 empfangen jeweils die Ausgänge der
Multiplexer 64, und die vier Ausgänge eines jeden entsprechen
vier aufeinanderfolgenden Drähten
des H.100-Busses.
-
Jeder
Multiplexer oder Demultiplexer erfordert einen einzigen FPGA-Logikblock.
Folglich erfordert der ganze Schalter 52 Logikblöcke (plus
einige weitere zum Steuern der Elemente) statt der 512, die erforderlich
wären,
wenn eine herkömmliche Schaltstruktur
in einem FPGA implementiert wäre.
-
Ein
Byte wird zusammen mit einer durch den Sequenzer 54 bereitgestellten
Zeitschlitznummer dem Schalter durch den FIFO 56 bereitgestellt.
In der Tat werden lediglich die 5 LSBs der Zeitschlitznummer verwendet,
die den Draht identifizieren, auf dem das Byte gesendet wird, z.
B. Draht k. Die 3 MSBs der Nummer k wählen einen Speicher 60 in
jeder Gruppe aus, und die 2 verbleibenden LSBs der Zahl k wählen in
diesen Speichern die Stelle aus, die dem Draht k entspricht. Die
ausgewählte
Stelle des ersten ausgewählten
Speichers empfängt
Bits 0 und 1 des aktuellen Bytes in zwei aufeinanderfolgenden 32-MHz-Taktzyklen
durch den ersten Multiplexer 62. Die ausgewählte Stelle
des zweiten ausge wählten Speichers
empfängt
Bits 2 und 3 durch den zweiten Multiplexer 62 usw.
-
Die
Bits des aktuellen Bytes werden in eine erste Hälfte der Speicher 60 geschrieben,
während die
in der zweiten Hälfte
enthaltenen Bits auf die Drähte
platziert werden. Die Platzierung der Bits, die einem einzelnen
H.100-Bus-Taktzyklus
(8 MHz) entsprechen, erfolgt in vier 32-MHz-Taktzyklen.
-
Bei
einem ersten Zyklus wird die erste Stelle jedes Speichers 60 ausgewählt, und
die Multiplexer 64 wählen
ihren ersten Eingang aus, während
die Demultiplexer 66 ihren ersten Ausgang auswählen. Somit
wird ein erstes Bit auf Drähte
0, 4, 8 ... 28 platziert.
-
Bei
einem zweiten Zyklus wird die zweite Stelle jedes Speichers 60 ausgewählt, die
Multiplexer 64 wählen
immer noch ihren ersten Eingang aus, und die Demultiplexer 66 wählen ihren
zweiten Ausgang aus. Ein erstes Bit wird somit auf die Drähte 1, 5,
9 ... 29 platziert.
-
Bei
einem dritten Zyklus wird die dritte Stelle jedes Speichers 60 ausgewählt, die
Multiplexer 64 wählen
immer noch ihren ersten Eingang aus, und die Demultiplexer 66 wählen ihren
dritten Ausgang aus. Somit wird ein erstes Bit auf die Drähte 2, 6,
10 ... 30 platziert.
-
Bei
einem vierten Zyklus wird die vierte Stelle jedes Speichers 60 ausgewählt, die
Multiplexer 64 wählen
immer noch ihren ersten Eingang aus, und die Demultiplexer 66 wählen ihren
vierten Ausgang aus. Ein erstes Bit wird somit auf die Drähte 3, 7,
11 ... 31 platziert.
-
Auf
dieser Stufe übermitteln
alle 32 Drähte ein
jeweiliges Bit, das dem Bit 0 von 32 Bytes entspricht, um in jeweiligen
Zeitschlitzen zu übermitteln. Und
die erste Gruppe der Speicher 60 wurde geleert.
-
Die
obigen vier Zyklen werden noch einmal wiederholt, um Bit 1 der 32
Bytes auf den 32 Drähten zu
platzieren.
-
Um
Bits 3 und 4 der 32 Bytes nacheinander auf den Drähten zu
platzieren, werden die vier oben genannten Zyklen noch zweimal wiederholt,
mit der Ausnahme, dass die Multiplexer 64 ihren zweiten Eingang
auswählen.
Und so weiter, bis alle Eingänge der
Multiplexer 64 auswählt
und die Speicher 60 geleert wurden.
-
Zum
Verarbeiten eines Sendebytestroms Tx wird ein Schalter verwendet,
dessen Struktur symmetrisch zu dem der 13 ist.
Mit anderen Worten werden die Eingänge und Ausgänge der
Speicher 60 vertauscht, werden die Multiplexer 62 und 64 durch Demultiplexer
ersetzt, und werden die Demultiplexer 66 durch Multiplexer
ersetzt. Überdies
werden die Direktverbindungen zwischen den Multiplexern 62 und den
Speichern 60 durch 8-1-Multiplexer ersetzt.
-
Die
vorliegende Erfindung wurde beispielhaft in Bezug auf den SONET-Standard
beschrieben, Fachleute können
die Erfindung jedoch ohne weiteres auch auf andere, ähnliche
Standards, z. B. SDH, anwenden.