01signal.com

Taktversorgung eines MGTs: Die Grundlagen

Diese Seite ist der siebte Beitrag einer Artikelserie, die den Multi-Gigabit-Transceiver (MGT) vorstellt.

Einführung

Man könnte erwarten, dass sich der größte Teil der Arbeit bei der Konfiguration eines FPGA-MGTs auf die Verarbeitung der Daten und die Wahl des richtigen Protokolls bezieht. Umso überraschender ist es, wie viel Zeit und Mühe nötig ist, um die Taktversorgung korrekt hinzubekommen. Ein Großteil dieser Mühe fließt meist in das Verständnis der verschiedenen Optionen, die das MGT in Bezug auf seine Taktressourcen bietet, sowie der damit verbundenen Einschränkungen.

Da die Entwurfsregeln für die Takte des MGTs bei jedem FPGA anders sind, ist die einzige verlässliche Quelle für genaue und umfassende Informationen zu diesem Thema die Dokumentation des MGTs selbst. Solche Dokumentationen konzentrieren sich in der Regel auf die Mechanismen und ihre Details, erklären aber oft nicht, warum diese Mechanismen notwendig sind. Diese Seite versucht, diese Lücke zu schließen, indem sie die Konzepte und Herausforderungen rund um die vom MGT verwendeten Takte erörtert.

PLLs und VCOs

Allgemein gesprochen multiplizieren PLLs die Frequenz eines Referenztakts mit einer Konstante. Diese Konstante ist manchmal eine ganze Zahl, kann aber auch eine gebrochene Zahl sein und auch kleiner als 1. Mit anderen Worten: Die Frequenz am Ausgang einer PLL kann niedriger sein als die Frequenz des Referenztakts. Das ist bei PLLs, die mit MGTs verwendet werden, selten der Fall, kann aber bei PLLs für die Logikstruktur nützlich sein.

In einem FPGA gibt es separate PLLs zur Erzeugung der Takte, die für die MGTs benötigt werden. Die PLLs und anderen Taktressourcen der Logikstruktur sind nicht in der Lage, die für ein MGT erforderlichen Frequenzen zu liefern. Insbesondere benötigt das MGT einen Takt, dessen Frequenz mindestens der halben Datenrate entspricht. Bei niedrigen Datenraten kann die erforderliche Frequenz höher liegen.

Wenn die Datenrate beispielsweise 5 Gb/s beträgt, läuft der Bittakt normalerweise mit 2,5 GHz, da der SERDES des MGTs von beiden Taktflanken aktiviert wird (DDR). Ist die Datenrate jedoch relativ niedrig, kann der Ausgang der PLL des MGTs auf eine niedrigere Frequenz heruntergeteilt werden.

Fast alle PLLs arbeiten nach demselben Prinzip: Das Kernstück ist ein VCO (Voltage Controlled Oscillator, spannungsgesteuerter Oszillator), der einen Takt mit einem Bereich von Frequenzen erzeugen kann. Der Ausgang des VCO wird in einen Taktteiler eingespeist, der die Frequenz durch eine Konstante teilt. Der Ausgang des Taktteilers wird mit dem Referenztakt der PLL verglichen. Ein Regelmechanismus stellt die Frequenz des VCO so ein, dass der Referenztakt und der Ausgang des Taktteilers ausgerichtet sind. Mit anderen Worten: Diese beiden Signale haben dieselbe Frequenz und dieselbe Phase.

Um auf das Beispiel mit 5 Gb/s zurückzukommen: Nehmen wir an, die Frequenz des Referenztakts sei 125 MHz. Eine mögliche Implementierung einer PLL besteht darin, den Ausgang des VCO durch 20 zu teilen. Das geteilte Signal wird mit dem Referenztakt verglichen und ausgerichtet. Die Frequenz des VCO muss also 2500 MHz betragen, denn 2500 MHz / 20 = 125 MHz.

Diese Methode zur Erzeugung eines Takts ist für das Senden von Bits geeignet: Das sendende MGT entscheidet allein, wo die Zeitperiode jedes Bits beginnt und endet. Wenn das MGT jedoch Bits empfängt, bestimmt die Gegenseite das Timing jedes Bits. Der Empfänger muss sich also an den ankommenden Datenstrom anpassen. Wie auf einer der vorherigen Seiten erwähnt, wird dieser Anpassungsmechanismus Takt- und Datenrückgewinnung (Clock Data Recovery, CDR) genannt. Die Implementierung der CDR besteht aus einem Regelkreis, der die Frequenz des VCO anpasst, um den Takt des Empfängers mit dem ankommenden Datenstrom zu synchronisieren. Der Referenztakt wird gelegentlich verwendet, um den VCO auf eine Anfangsfrequenz zu bringen, die nahe genug an der erwarteten Frequenz liegt. Nach Erreichen einer Synchronisation wird der Referenztakt ignoriert.

Nutzung der PLLs

Die PLLs für MGTs in einem FPGA sind ein kompliziertes Thema. Jedes MGT kann seinen Takt von mehr als einer PLL erhalten. Wenn es in dem FPGA-Projekt nur eine Anwendung gibt, die MGTs verwendet, wählen die Tools normalerweise automatisch die am besten geeignete PLL. Werden die MGTs jedoch in einem Projekt für verschiedene Zwecke verwendet, ist es wichtig sicherzustellen, dass jedes MGT mit der PLL verbunden ist, die am besten geeignet ist.

In einem FPGA gibt es normalerweise PLLs, die von mehreren MGTs gemeinsam genutzt werden. AMD (Xilinx) nennt diese QPLL, Altera hat fPLL und ATX PLL. Andererseits gibt es PLLs, die nur für ein bestimmtes MGT lokal vorhanden sind. Diese werden CPLL (AMD / Xilinx) oder CMU PLL (Altera) genannt. Die lokalen PLLs haben in der Regel eine geringere Qualität und weniger Fähigkeiten als die gemeinsamen PLLs. Die Unterschiede können den Frequenzbereich, den Jitter (jitter) und die wählbaren Multiplikationsverhältnisse in Bezug auf den Referenztakt betreffen.

Jedes FPGA hat eine Reihe komplizierter Regeln, die festlegen, wie die PLLs und die MGTs miteinander verbunden werden können. Diese Regeln legen auch fest, welche Möglichkeiten es gibt, die PLLs mit den Referenztakt-Eingängen des FPGAs zu verbinden. Man kann daher nicht ohne weiteres davon ausgehen, dass alle MGTs mit den Takten verbunden werden können, die sie benötigen. Das ist ganz anders als bei den Takten der Logikstruktur, für die es fast keine Einschränkungen gibt.

Es wird daher empfohlen, das Datenblatt sorgfältig zu lesen, bevor man Entscheidungen darüber trifft, welche PLL für jedes MGT gewählt werden soll. Insbesondere ist es wichtig zu überprüfen, ob alle MGTs beim Entwurf einer Platine mit ihren Takten versorgt werden können. Dies lässt sich erreichen, indem man ein FPGA-Projekt erstellt, das alle benötigten MGTs enthält, und sicherstellt, dass die Implementierung dieses Projekts erfolgreich ist und alle Pins an den richtigen Positionen platziert sind.

Referenztakt

Das FPGA hat separate Pins für die Referenztakte, die für die PLLs der MGTs vorgesehen sind. Bei einem Platinen-Design ist es wichtig zu überprüfen, ob ein Referenztakt-Eingang mit den MGTs verwendet werden kann, für die der Takt bestimmt ist. Die Verschaltungsmöglichkeiten zwischen Referenztakt-Eingängen, PLLs und MGTs erlauben nicht alle Kombinationen. Die zulässigen Kombinationen sind in der Dokumentation des FPGAs beschrieben. Es kann jedoch schwierig sein, zu einem endgültigen Schluss zu kommen, da die Regeln kompliziert sein können. Oft ist es besser, sicherzustellen, dass die Anforderungen mithilfe von FPGA-Projekten überprüft werden.

Die für diesen Zweck verwendeten Takte müssen eine hohe Qualität in Bezug auf Genauigkeit und geringen Jitter aufweisen. Ein häufiger Fehler ist es, einen Takt anzuschließen, der von einem allgemeinen Taktgenerator-Chip erzeugt wird. Das wird wahrscheinlich die Leistungsfähigkeit des MGTs verschlechtern und Fehler erzeugen, die wie Signalintegritätsprobleme oder zusätzliches Rauschen auf den Datenleitungen aussehen.

Wenn das MGT für ein bestimmtes Protokoll vorgesehen ist (z. B. PCIe, SuperSpeed USB oder SATA), wird empfohlen, die Dokumentation des FPGA-Herstellers über die Anforderungen an den Referenztakt zu lesen. Mehrere elektronische Bauteile, die als „Low-Jitter-Taktquelle“ bezeichnet werden, sind möglicherweise nicht gut genug.

Jitter ist ein Zufallsprozess. Die Größe des Jitters ist ein wichtiger Parameter, aber nicht immer ausreichend. Die Zufälligkeit des Jitters kann schnelle Änderungen der Taktperiode verursachen, und diese Änderungen können auch langsam sein. Wie sich der Jitter in dieser Hinsicht verhält, lässt sich aus dem Rauschspektrum des Jitters ableiten.

Das Datenblatt des Bauteils, das den Takt erzeugt, enthält manchmal nur eine Zahl für die Größe des Jitters (üblicherweise in Pikosekunden gemessen). Informationen über das Rauschspektrum des Jitters sind oft nicht verfügbar. Es ist möglich, dass ein solches Bauteil trotz dieser fehlenden Information geeignet ist, insbesondere wenn die Größe des Jitters ohnehin extrem gering ist. Für diese Frage gibt es oft keine einfache Antwort.

Die Qualität des Referenztakts ist dennoch für jede Verwendung des MGTs wichtig. Die Anforderungen der bekannten Protokolle sind eine gute Referenz, die in jedem Projekt verwendet werden kann. Nützlich ist auch der Vergleich mit Bauteilen, die auf Entwicklungsboards als Referenztakt verwendet werden.

Taktsignale für die Logikstruktur

Der Takt, der für die Schnittstelle zwischen dem MGT und der Logikstruktur verwendet wird, stammt aus der eigenen PLL des MGTs. Das ist notwendig, weil der SERDES im PMA auf zwei Takte angewiesen ist: auf den Takt, der den Bits auf dem physikalischen Kanal entspricht, und auf den Takt, der zusammen mit den parallelen Wörtern verwendet wird. Damit der SERDES ordnungsgemäß funktioniert, müssen diese beiden Takte innerhalb des PMA ausgerichtet sein.

Andererseits muss jeder Takt, der von der Logikstruktur verwendet wird, so verteilt werden, dass ein geringer Taktversatz (Clock Skew) gewährleistet ist. Ein globaler Taktpuffer wird von den Tools oft zu diesem Zweck gewählt. Die Ausbreitungsverzögerung (Propagation Delay) vom Taktpuffer zu allen Logikelementen ist nahezu gleich, sodass die Taktflanken gleichzeitig an allen Zielen ankommen. Das ist eine notwendige Bedingung, damit die Tools ordnungsgemäße Timing-Berechnungen für die Logikstruktur durchführen können.

Auch wenn diese Ausbreitungsverzögerung über alle Leitungen hinweg gleichmäßig ist, ist sie nicht unbedingt gering. Im Gegenteil: Die Leitungen innerhalb des FPGAs, die den Taktpuffer mit seinen Zielen verbinden, erzeugen eine beträchtliche Verzögerung. Das macht normalerweise nichts, weil die Unterschiede zwischen all diesen Verbindungen gering sind.

Diese Verzögerung führt jedoch dazu, dass die beiden Takte des PMA nicht mit dem Takt der Logikstruktur ausgerichtet sind. Es ist unmöglich, diese drei Takte mit den Ressourcen der Logikstruktur auszurichten, da einer dieser Takte eine zu hohe Frequenz hat. Und dennoch müssen das MGT und die Logikstruktur einen Takt haben, mit dem beide Seiten synchron sind. Die einzige Lösung besteht darin, ein weiteres Taktsignal hinzuzufügen.

Das läuft darauf hinaus, dass für jede Richtung mindestens drei Taktsignale beteiligt sein müssen:

Beachten Sie, dass es im Allgemeinen getrennte Takte für Senden und Empfangen gibt. Dieses Blockdiagramm zeigt die typische Verteilung der Takte in einem MGT:

Clock domains in a typical Multi-Gigabit Transceiver

In diesem Blockdiagramm gibt es für jede Richtung vier Takte, nicht drei wie oben erwähnt. Das wird im Folgenden erklärt.

Erzeugung des Takts für die Logikstruktur

Wie oben erläutert, muss der Takt, der der Logikstruktur und dem MGT gemeinsam ist, über den Taktpuffer der Logikstruktur verteilt werden. Andererseits muss dieser Takt aus dem Inneren des MGTs stammen.

Beginnen wir mit der einfachsten möglichen Lösung für diese beiden widersprüchlichen Anforderungen: Das MGT erzeugt tatsächlich einen Takt und stellt ihn an einem Ausgangsport zur Verfügung. Dieser Ausgangsport heißt üblicherweise TXOUTCLK, RXOUTCLK, tx_clkout, rx_clkout usw. (im Diagramm oben der vierte Takt, „Tx out clock“ und „Rx out clock“). Dieses Signal geht in den Eingang eines Taktpuffers der Logikstruktur. Der Ausgang dieses Taktpuffers ist das Taktsignal, das für die Schnittstelle zwischen MGT und Logikstruktur verwendet wird.

Aufgrund dieser Anordnung ist der einzige Unterschied zwischen dem Takt der Logikstruktur und dem vom MGT erzeugten Takt die Ausbreitungsverzögerung des Taktpuffers. Mit anderen Worten: Das MGT hat die volle Kontrolle über den Takt der Logikstruktur, abgesehen von dessen Phase. Das ist insbesondere für den Datenempfang wichtig, wenn der CDR-Takt als Grundlage für die Schnittstelle zur Logikstruktur verwendet wird (diese Option wird weiter unten besprochen). Das liegt daran, dass der CDR die Frequenz dieses Takts kontinuierlich anpasst, um mit dem ankommenden Datenstrom synchron zu bleiben.

Wie auf einer früheren Seite besprochen, bietet der PCS Mechanismen, um den Unterschied zwischen den Phasen des Takts der Logikstruktur und des Takts des PMA zu überwinden. Der Tx-Puffer oder Rx-Puffer sind die einfachste Wahl, aber der PCS kann den Unterschied auch direkt ausgleichen.

Welcher Takt wird aber am Taktausgangsport des MGTs ausgegeben? Die naheliegende Antwort ist XCLK, denn dieser Takt ist der nächste Kandidat für die Anforderungen an den Takt der Logikstruktur. Es gibt jedoch mehrere andere Möglichkeiten, den Takt der Logikstruktur zu erzeugen. Beispielsweise kann der Taktausgang des MGTs in eine normale PLL der Logikstruktur eingespeist werden, um einen Takt mit einer anderen Frequenz zu erzeugen. Diese PLL wird zusammen mit einem Taktpuffer verwendet, sodass das Taktsignal für seinen Zweck geeignet ist. Die Verwendung einer PLL auf diese Weise eröffnet neue Möglichkeiten, zum Beispiel dass das MGT seinen eigenen Referenztakt am Taktausgangsport ausgibt. Die Frequenz dieses Takts ist möglicherweise nicht für die Verwendung an der Schnittstelle zum MGT geeignet, aber die PLL kann diesen Takt mit dem erforderlichen Verhältnis multiplizieren.

Beachten Sie auch, dass die Frequenz des Takts der Logikstruktur von der XCLK-Frequenz abweichen kann. Das kann erforderlich sein, wenn im PCS eine asynchrone Gearbox aktiviert ist. In diesem Szenario ist der Frequenzunterschied notwendig, um die unterschiedlichen Breiten des parallelen Worts im PMA und in der Schnittstelle zur Logikstruktur auszugleichen.

Die Regeln zu diesem Thema sind kompliziert und von FPGA zu FPGA unterschiedlich. Ein großer Teil der Dokumentation eines MGTs ist oft der detaillierten Beschreibung der verschiedenen Möglichkeiten gewidmet. Leider erfordert das Treffen der richtigen Entscheidungen zur Taktversorgung Zeit, um die für das jeweilige FPGA geltenden Regeln zu lernen.

Wahl des Logikstruktur-Takts für den Datenempfang

Bei der Wahl, wie der für den Datenempfang vorgesehene Takt der Logikstruktur erzeugt werden soll, ist eine grundsätzliche Entscheidung erforderlich: ob dieser Takt vom CDR-Takt oder von einem festen Referenztakt abgeleitet wird. Mit anderen Worten: ob der Takt der Logikstruktur an die exakte Datenrate des ankommenden Datenstroms angepasst ist oder nicht.

In den meisten Anwendungen wird das MGT für die Kommunikation von Daten in beide Richtungen verwendet. Oft besteht eine enge Beziehung zwischen den ankommenden Daten und den gesendeten Daten. Der gesendete Datenstrom kann zum Beispiel Bestätigungen und Neuübertragungsanforderungen enthalten, die als Antwort auf den ankommenden Datenstrom gesendet werden. Bei Anwendungen dieser Art ist es praktisch, wenn die gesamte Logik synchron zu demselben Takt arbeitet (d. h. die gesamte Logik befindet sich in derselben Taktdomäne (Clock Domain)). Insbesondere erfordert die PIPE-Schnittstelle, dass alle Schnittstellen zum MGT synchron zu einem einzigen Takt sind (im Standarddokument PCLK genannt). Erinnern wir uns an früher: PIPE ist die Standardschnittstelle zwischen MGTs und mehreren Protokollen: PCIe, SuperSpeed USB und SATA.

Dieser Komfort hat jedoch seinen Preis: Die Frequenz des Takts der Logikstruktur weicht möglicherweise geringfügig von der Frequenz des parallelen Worts im PMA ab (also von der XCLK-Frequenz). Dieser Unterschied führt zu einem Überschuss oder einem Mangel an Daten im PCS, weil die Logikstruktur die parallelen Wörter langsamer oder schneller übernimmt, als diese Wörter im PMA ankommen. Die Lösung hierfür ist oft die Verwendung des Rx-Puffers und von Skip-Symbolen, wie auf der Seite über den PCS besprochen wurde.

Alternativ kann der Takt der Logikstruktur vom Takt des PMA abgeleitet werden. Bei dieser Methode verbraucht die Logikstruktur die Daten mit derselben Rate, mit der sie ankommen. Das ist die natürliche Lösung, wenn das MGT nur zum Empfangen von Daten verwendet wird. Es ist auch eine mögliche Wahl für eine bidirektionale Verbindung, wenn die Anwendungslogik den Taktdomänenübergang (Clock Domain Crossing) selbst übernimmt. Xillyp2p ist ein Beispiel für ein Protokoll, das diesen Ansatz gewählt hat, wie in seinem vollständigen Beispiel-Design gezeigt wird.

AMD FPGA: Zwei Takte aus der Logikstruktur

MGTs auf AMD-FPGAs (früher Xilinx) haben zwei Takteingangsports aus der Logikstruktur, jeweils zwei Ports pro Richtung: TXUSRCLK und TXUSRCLK2 zum Senden sowie RXUSRCLK und RXUSRCLK2 zum Empfangen. Ein Beispiel für eine Instanziierung (Instantiation) des MGTs wird in diesem Beispiel-Design vorgestellt.

Fast die gesamte Schnittstelle zur Logikstruktur ist synchron zu TXUSRCLK2 bzw. RXUSRCLK2 (je nach Richtung). Die beiden anderen Eingänge, TXUSRCLK und RXUSRCLK, werden nur intern in einigen Teilen des PCS verwendet.

TXUSRCLK ist oft dasselbe Taktsignal wie TXUSRCLK2. Die MGTs in AMD-FPGAs haben jedoch eine Funktion, die es erlaubt, das für die Schnittstelle zur Logikstruktur verwendete parallele Wort doppelt so breit zu machen wie im PCS. Wird diese Funktion genutzt, ist die Frequenz von TXUSRCLK doppelt so hoch wie die von TXUSRCLK2. Dies ist ein weiterer Grund für die Verwendung einer PLL in der Logikstruktur.

Dasselbe Prinzip gilt für RXUSRCLK und RXUSRCLK2.

Zusammenfassung

Diese Seite hat kurz einige Themen im Zusammenhang mit den Takten eines MGTs beleuchtet. Es ist dennoch notwendig, sich mit den spezifischen Funktionen und Einschränkungen des MGTs vertraut zu machen, um fundierte Entscheidungen über die Nutzung der Taktressourcen des MGTs zu treffen. Hoffentlich helfen die Erläuterungen auf dieser Seite zu verstehen, wie die Takte eines MGTs vorgesehen sind zu funktionieren und wie sie miteinander zusammenwirken.

Damit ist die siebte Seite in dieser Serie über MGTs abgeschlossen. Die nächste Seite beendet diese Serie mit einer Diskussion über die Flusskontrolle (Flow Control).

Diese Seite wurde maschinell aus dem Englischen übersetzt. Im Zweifelsfall siehe den Originaltext.
Copyright © 2021-2026. All rights reserved. (dcc38493)