Formel 1 der Bits FPGAs als Schnittstellten in Embedded-Systemen

Betrachtet man das Portfolio der Prozessor-Hersteller für Embedded- Systeme, stößt man immer öfter auf den Atom-Prozessor. Dieser kommuniziert über PCI-Express mit seiner Umwelt. Daneben können A/D-Wandler über JESD204/JESD204.a mit bis zu 3,125 Gbit/s Daten übertragen, Gigabit- Ethernet ist zum Standard geworden, und im Bereich der Signalverarbeitung setzen viele DSP mittlerweile auf Serial RapidIO. Bei so vielen unterschiedlichen Schnittstellen ist es sinnvoll, diese in einem Baustein zusammenzufassen. Dazu bietet sich ein FPGA mit integrierten seriellen Kanälen an, da hier über entsprechende Soft-IP die gewünschten Funktionen implementiert werden können.

Im Folgenden werden die Historie, die Nachteile paralleler Schnittstellen wie PCI und die Grundlagen von serieller Kommunikation wie PCI-Express aufgezeigt. Darüber hinaus wird dann für die genannten Schnittstellen ein entsprechender Lösungsansatz im FPGA und dem zugehörigen Design-Ablauf, aber auch auf der Board-Seite aufgezeigt.

Bei parallelen Schnittstellen unterscheidet man zwischen Daten- und Steuerleitungen, die neben der Taktleitung auf dem Board geführt werden. Die Signale auf den Daten- und Steuerleitungen werden entweder in Phase zum Takt oder bereits mit einer Verschiebung von 90 oder 180° übertragen, um auf der Gegenseite ein sicheres Eintakten zu ermöglichen. Beispiele für parallele Busstrukturen findet man z.B. bei Prozessoren, PCI oder RapidIO. Dieser Ansatz mit vielen parallelen Leitungen auf dem Board benötigt viel Platz, es besteht die Gefahr von Übersprechen und beim Layout muss man auf identische Leitungslängen achten.

Diese Nachteile lassen sich bei einer seriellen Übertragung, wie sie heute u.a. bei PCI-Express und Serial RapidIO eingesetzt wird, beseitigen. Dazu gibt es SERDES-Blöcke (SERDES: Serializer Deserializer), die dem Anwender die benötigten Funktionen zur seriellen Übertragung zur Verfügung stellen (Bild 1).

Die SERDES-Blöcke bestehen aus einem Sendeteil, dem Serializer, der die Daten und den Takt seriell wandelt. Hierbei wird meist zur Verbesserung der Übertragung noch mit Codierungen wie 8B/10B gearbeitet. Auf der Empfangsseite werden aus dem seriellen Datenstrom der Takt und die Daten zurückgewonnen, die dann wieder parallel zur Weiterverarbeitung zur Verfügung stehen (Bild 2).

In der Übergangszeit von paralleler zu serieller Datenkommunikation wurde noch oft mit externen SERDES-Bausteinen gearbeitet. Dies ist allerdings keine optimale Lösung, da man wieder mehrere Bausteine auf dem Board hat und der SERDES-Baustein auf der Anwenderseite wieder über eine parallele Schnittstelle, die alle oben genannten Nachteile aufweist, mit dem FPGA kommuniziert.

JESD204 und Gbit-Ethernet

Wie in vielen anderen Gebieten ist auch im Bereich der Datenanalyse die Anforderung an Auflösung und Geschwindigkeit der Daten gestiegen. Beim Einsatz von A/D-Wandlern kommt am häufigsten immer noch eine parallele Schnittstelle zum Einsatz. Aber dort kommt man auch in eine Limitierung, wenn hohe Abtastraten zusammen mit einer hohen Auflösung (z.B. 105 MSPS mit 16 bit Auflösung) gefordert sind.

Entweder man führt diese mit mehreren Leitungen über das Board oder man verwendet A/D-Wandler, die eine Schnittstelle nach der Norm JESD204 bzw. JESD204a haben. Bei dieser Schnittstelle werden die aufgenommenen Daten mit 8B/10B codiert und dann seriell übertragen.

Die Spezifikation unterstützt hier Bandbreiten zwischen 312,5 MHz und bis zu 3,125 Gbit/s, wobei die JESD204a-Spezifikation bereits mehrere serielle Leitungen erlaubt. Im klassischen Anwendungsfall werden die Daten von einem FPGA aufgenommen und zwischengespeichert, evtl. vorverarbeitet und erst später einem Prozessor oder DSP weitergegeben.

Hier ist es natürlich ideal, wenn das FPGA bereits in der Lage ist, diese seriellen Daten aufzunehmen und wieder im Baustein parallel zur Verfügung zu stellen. Für die weitere Umsetzung des Protokolls im FPGA steht von Lattice ein kostenfreies Referenzdesign zur Verfügung (Bild 3).

Im Bereich Ethernet findet man vor der eigentlichen Datenübertragung über Kupfer oder optische Medien immer PHY-Bausteine, die die Daten wieder von einem Baustein erhalten, der die oberen Protokollebenen verarbeitet. Historisch bedingt findet man auch hier wieder einen parallelen Ansatz für die Übertragung der Daten.

So werden z.B. für das MII (Media Independant Interface) bei 10/100 Mbit/s „nur“ vier Datenleitungen mit 25 MHz benötigt. Für Gigabit- Ethernet sind es bei GMII bereits acht Leitungen mit 125 MHz und beim 10G-Ethernet (XGMII) 32 Leitungen mit einem Takt von 156,25 MHz, die auf steigende und fallende Flanken getaktet sind.

Ausweg aus dieser Situation ist wieder der Einsatz von seriellen Datenkanälen. Die Standards 10/100/1GEthernet lassen sich mit der SGMIISchnittstelle abdecken. Dabei kommen je Richtung eine Datenleitung mit 1,25 Gbit/s und eine Taktleitung mit 125 MHz zum Einsatz. Wird eine 10G-Übertragung benötigt, so steht das XAUI-Protokoll zur Verfügung, bei dem in jeder Richtung vier Leitungen mit 3,125 Gbit/s zum Einsatz kommen.

In jedem der genannten seriellen Anwendungsfälle werden bestimmte Funktionen (z.B. Codierung und die Kontrolle des Link-Zustandes) von fest verdrahteten Funktionen im FPGA übernommen. Für die restlichen Aufgaben der jeweiligen Protokollebenen stehen dann Soft-IP-Cores zur Verfügung, wie z.B. ein Ethernet-MAC und ein SGMII-Core (Bild 4).