Diese Seite ist der sechste Beitrag einer Artikelserie, die den Multi-Gigabit-Transceiver (MGT) vorstellt, und zugleich die zweite Seite über den PMA.
Einführung
Auf der vorherigen Seite wurde die Übertragung von Bits über den physikalischen Kanal mithilfe des PMA behandelt. Dieser Datenstrom ist allerdings nicht immer eingeschaltet: Große Teile des MGTs lassen sich abschalten, um Energie zu sparen. Das ist vor allem dann wichtig, wenn das MGT SATA, PCIe oder SuperSpeed USB in einem Laptop implementiert. Bei diesen Protokollen ist es Energieverschwendung, die physikalische Verbindung aktiv zu halten, wenn keine Daten zu übertragen sind.
Ein MGT muss daher in der Lage sein, in einen Energiesparzustand zu wechseln. Noch wichtiger ist, dass ein MGT der Gegenseite mitteilen kann, wenn es an der Zeit ist, aus diesem Energiesparzustand aufzuwachen. Der PMA ist für das Erzeugen und Erkennen von OOB-Signalen (Out-of-Band-Signale) zu diesem Zweck – und auch für andere Zwecke – zuständig.
Out-of-Band-Signale (OOB-Signale) bestehen aus einfachen Mustern elektrischer Aktivität auf denselben differentiellen Leitungen, die auch für die Übertragung des Datenstroms verwendet werden. Diese OOB-Signale können nur übertragen werden, wenn der reguläre Datenstrom abgeschaltet ist. Das Wichtigste an ihnen ist, dass sie vom Empfänger mit sehr einfacher Logik erkannt werden können. Dadurch kann ein MGT, das ein OOB-Signal empfängt, dieses sogar dann erkennen, wenn es sich selbst in einem Energiesparzustand befindet.
Eine weitere Eigenschaft von MGTs ist die Fähigkeit des Senders zu erkennen, ob er physisch mit einem anderen MGT verbunden ist, ohne dass das andere MGT irgendetwas tun muss. Diese Fähigkeit wird als Receiver Detection (Empfängererkennung) bezeichnet.
Diese Seite stellt diese beiden Fähigkeiten vor: OOB-Signale und die Empfängererkennung. Das Blockdiagramm der beiden vorherigen Seiten ist hier der Übersichtlichkeit halber noch einmal zu sehen:
Senden von OOB-Signalen
Das Out-of-Band-Signal (OOB) ist üblicherweise ein einfaches Rechtecksignal mit konstanter Frequenz. Dieses Signal kann nur anstelle des regulären Datenstroms gesendet werden, niemals gleichzeitig mit ihm.
Jedes Protokoll stellt andere Anforderungen an die Form des OOB-Signals. Ein FPGA-MGT besitzt normalerweise Eingangsports, mit denen die Anwendungslogik OOB-Signale entsprechend den gebräuchlichsten Protokollen anfordern kann (insbesondere PCIe und SATA).
Die Nomenklatur und die Anforderungen an OOB-Signale unterscheiden sich von Protokoll zu Protokoll. Zum Beispiel:
- Das PCIe-Protokoll nennt sein OOB-Signal „Beacon“. Die Anforderungen lassen sich mit einem Rechtecksignal mit einer Frequenz zwischen 30 kHz und 500 MHz erfüllen. Das Protokoll verlangt allerdings nicht einmal, dass das Signal periodisch ist. Der Beacon wird verwendet, um aus einem Energiesparzustand aufzuwachen.
- Das SATA-Protokoll definiert drei Arten von OOB-Signalen: COMRESET, COMINIT und COMWAKE. Das Protokoll legt die Bildung dieser Signale präzise fest. COMRESET wird von der Host-Seite verwendet, um das Gerät zurückzusetzen. COMINIT wird nur vom Gerät gesendet und dient zur Initialisierung der Verbindung. COMRESET und COMINIT sind exakt dasselbe Signal, aber ihre Bedeutung hängt davon ab, welche Seite sie sendet. COMWAKE wird von beiden Seiten verwendet, um die Verbindung aus einem Energiesparzustand aufzuwecken.
- Das SuperSpeed-USB-Protokoll nennt sein OOB-Signal „Low Frequency Periodic Signaling“ (LFPS). Dabei handelt es sich um ein Rechtecksignal mit einer Frequenz zwischen 10 MHz und 50 MHz. Dieses Signal dient zum Beenden eines Energiesparzustands, aber auch für verschiedene andere Zwecke. Insbesondere besteht der anfängliche Aufbau der Datenübertragung aus einem streng festgelegten Austausch von LFPS-Signalen. Das Protokoll definiert mehrere Muster von LFPS-Signalen, wobei jedes Muster eine andere Bedeutung hat. Sendet der Host beispielsweise 100 ms lang ununterbrochen ein LFPS-Signal, ist das eine Aufforderung, das Gerät zurückzusetzen.
Manchmal besitzt ein MGT nicht die Fähigkeit, ein OOB-Signal zu erzeugen, das für ein bestimmtes Protokoll geeignet ist. Das lässt sich lösen, indem man den Sender für die Datenübertragung einschaltet und dem MGT einen Datenstrom zuführt, der dem gewünschten Signalmuster entspricht. Insbesondere wenn die Kodierungsfähigkeiten des MGTs deaktiviert sind, verhält sich das MGT wie ein einfacher SERDES. Das gewünschte Signalmuster kann dann mithilfe der zu übertragenden Daten beliebig geformt werden. Beispielsweise lässt sich ein Rechtecksignal erzeugen, indem man zusammenhängende Folgen aus „0“ und „1“ sendet. Der Hauptnachteil dieser Lösung ist, dass die Kodierungsfähigkeiten des MGTs nicht genutzt werden; die Kodierung muss also stattdessen in der Anwendungslogik implementiert werden.
Elektrischer Leerlauf
Wenn der Sender eines MGTs abgeschaltet ist oder sich in einem Energiesparmodus befindet, liegt sein Ausgang normalerweise im elektrischen Leerlaufzustand (Electrical Idle). Das bedeutet, dass der Sender beide differentiellen Ausgangsleitungen (D+ und D-) mit Masse verbindet. Die Spannung zwischen diesen Leitungen ist also null, aber auch jede Leitung hat gegenüber Masse eine Spannung von null.
Wenn das MGT „schläft“, ist der elektrische Leerlaufzustand das Gegenteil des Sendens eines OOB-Signals. Oder, um die drei möglichen Zustände eines Senders zusammenzufassen:
- Datenübertragung: Nur in diesem Zustand gilt das MGT als eingeschaltet.
- Senden von OOB-Signalen.
- Elektrischer Leerlauf.
Wie bereits oben erwähnt, wird OOB nur gelegentlich verwendet, um die Gegenseite aus einem Energiesparzustand aufzuwecken oder als Teil des Verbindungsaufbaus. Meistens sendet ein MGT also entweder Daten oder es „schläft“ im elektrischen Leerlaufzustand.
Erkennen von OOB-Signalen
Wenn ein MGT abgeschaltet ist oder sich in einem Energiesparzustand befindet, kann von seinem Empfänger verlangt werden zu erkennen, ob die Gegenseite ein OOB-Signal sendet. Das ist insbesondere notwendig, um auf eine Aufforderung zur Wiederaufnahme des normalen Betriebs zu reagieren.
Die meisten Protokolle legen die Wellenform des OOB-Signals nicht exakt fest, sondern definieren einen Bereich von Möglichkeiten. Der Empfänger kann das ankommende Signal daher nicht mit einer erwarteten Wellenform vergleichen. Stattdessen wird ein OOB-Signal erkannt, wenn auf den differentiellen Leitungen irgendeine Aktivität auftritt. Mit anderen Worten: Wenn der Datenstrom abgeschaltet ist, sich die Spannung auf den differentiellen Leitungen aber so stark ändert, dass man nicht von elektrischem Leerlauf ausgehen kann, dann ist die Erklärung, dass die Gegenseite ein OOB-Signal sendet.
Aus diesem Grund besitzt ein FPGA-MGT keinen Ausgangsport für die Erkennung eines OOB-Signals. Stattdessen gibt es einen Ausgangsport, der auf high geht, wenn der Empfänger elektrischen Leerlauf erkennt. Der Name dieses Ports lautet üblicherweise etwa „rx_elecidle“.
Leider kann der Erkennungsmechanismus des MGTs für elektrischen Leerlauf unzuverlässig sein. Insbesondere wenn die Gegenseite einen Datenstrom sendet, verhält sich der Leerlaufdetektor des Empfängers von MGT zu MGT unterschiedlich: Es ist möglich, dass das MGT in dieser Situation elektrischen Leerlauf erkennt. Ebenso möglich ist, dass das MGT eindeutig erkennt, dass kein elektrischer Leerlauf vorliegt. Es können auch zufällige Erkennungen vorkommen. Jedes FPGA verhält sich anders.
Theoretisch ist das kein Problem, denn warum sollte man den elektrischen Leerlauf prüfen wollen, während der Datenstrom aktiv ist? In der Praxis kann ein MGT jedoch Daten senden, selbst wenn die Gegenseite sie nicht erwartet. Die Anwendungslogik sollte daher so ausgelegt sein, dass sie korrekt reagiert, wenn sie erwartet, dass die Gegenseite abgeschaltet ist, stattdessen aber ein regulärer Datenstrom ankommt.
Ein weiteres Problem bei der Erkennung von elektrischem Leerlauf ist die Empfindlichkeit gegenüber Rauschen: Idealer elektrischer Leerlauf liegt vor, wenn beide differentiellen Leitungen die Spannung null haben. Durch Rauschen kann der Empfänger unter Umständen eine Spannung messen, die ausreicht, um elektrischen Leerlauf auszuschließen. Die Anwendungslogik läuft dann Gefahr, das als OOB-Signal zu interpretieren.
Zusammenfassend gibt es keine einfache Lösung, um OOB-Signale zuverlässig zu erkennen. Die Anwendungslogik muss so ausgelegt werden, dass sie die Unzulänglichkeiten des Leerlaufdetektors ausgleicht.
Empfängererkennung
Sowohl das PCIe-Protokoll als auch SuperSpeed USB verlangen die Fähigkeit zu erkennen, ob am anderen Ende der Verbindung etwas angeschlossen ist. Diese Erkennung muss erfolgen, ohne dass man versucht, eine Kommunikation mit der Gegenseite einzuleiten. Diese Fähigkeit wird als Receiver Detection (Empfängererkennung) bezeichnet.
Das ist bei SuperSpeed USB erforderlich, weil der Computer wissen muss, wann das Gerät physisch von ihm getrennt wird. Wenn eine solche Trennung bei einer Verbindung im Energiesparzustand passiert, hat der Computer keine Möglichkeit zu erkennen, dass etwas geschehen ist: Auf den Leitungen wird ohnehin keine Aktivität erwartet. Daher verlangt das Protokoll, dass der Host alle 100 ms eine Empfängererkennung durchführt. Auf diese Weise kann der Computer überprüfen, ob das Gerät noch angeschlossen ist, ohne Energie zu verschwenden.
Das PCIe-Protokoll verlangt, dass an jedem PCIe-Steckplatz eine Empfängererkennung stattfindet, bevor versucht wird, die Verbindung mit dem Gerät aufzubauen, das möglicherweise an diesem Steckplatz angeschlossen ist. Da der Verbindungsaufbau das Einschalten des MGTs für die Datenübertragung erfordert (genauer gesagt eine Trainingssequenz), ist das Vermeiden unnötiger Versuche wichtig, um Energie zu sparen.
Der Sender des MGTs führt die Empfängererkennung durch, indem er auf beiden Ausgangsleitungen (D+ und D-) einen kurzen Spannungsimpuls erzeugt. Es handelt sich um einen Gleichtaktspannungsimpuls, das heißt, auf beide Leitungen wird dieselbe Spannung gegenüber Masse gelegt. Wenn auf der anderen Seite ein Empfänger vorhanden ist, fließt ein messbarer Strom durch die Abschlusswiderstände des Empfängers. Dieser Strom beeinflusst die Spannung am Ausgang des Senders. Ist auf der anderen Seite kein Empfänger angeschlossen, ist der Strom vernachlässigbar. Der Sender misst also kurz nach dem Beginn des Impulses die Spannung an seinem Ausgang und stellt auf diese Weise fest, ob auf der anderen Seite ein Empfänger vorhanden ist oder nicht.
Der Grund, warum ein Impuls benötigt wird (anstatt einer einfachen Gleichspannung), ist, dass sich zwischen Sender und Empfänger ein Kondensator befindet. Unmittelbar nach dem Impuls fließt ein elektrischer Strom, da die Impulsspannung an den Abschlusswiderständen von Sender und Empfänger abfällt. Während sich der Kondensator auflädt, wird der Strom geringer, wie bei jedem RC-Glied. Wenn die Spannung konstant bleibt, wird der Strom schließlich null.
Es ist wichtig zu beachten, dass die Empfängererkennung nur funktioniert, wenn die Abschlusswiderstände des Empfängers sowohl für D+ als auch für D- mit Masse verbunden sind. Das PCIe-Protokoll verlangt zum Beispiel, dass diese Abschlusswiderstände 50 Ω betragen. Dieselbe differentielle Impedanz lässt sich erreichen, indem man einen 100-Ω-Widerstand zwischen D+ und D- schaltet, ohne Verbindung zu Masse. Wenn der Abschluss auf diese Weise ausgeführt ist, funktionieren alle Funktionen ordnungsgemäß außer der Empfängererkennung. Der Unterschied besteht darin, dass alle anderen Funktionen auf der differentiellen Spannung zwischen D+ und D- beruhen, während die Empfängererkennung dadurch implementiert ist, dass auf beiden Leitungen dieselbe Spannung anliegt. Wenn die Abschlusswiderstände an ihrem Mittelpunkt nicht mit Masse verbunden sind, fließt kein Strom, und der Empfänger wird folglich nicht erkannt.
Damit ist die sechste Seite in dieser Serie über MGTs abgeschlossen. Die nächste Seite beendet diese Serie mit einigen Erläuterungen zur Taktversorgung des MGTs.
