Interfaces
Überblick über Schnittstellen, die wir in FPGA-, Embedded- und High-Speed-Systemen implementiert und integriert haben.
Amba AXI
AXI („Advanced eXtensible Interface“) ist Teil der von ARM definierten AMBA-Spezifikation und wird in FPGA- und SoC-Systemen als zentraler Bus eingesetzt.
Typische Einsatzbereiche:
- Anbindung von ARM-Prozessorsystemen an FPGA-Logik
- Integration von PCIe-IP-Cores
- Verbindung von FPGA-internen Komponenten und IP-Cores
Wir haben sowohl einen AXI-Lite-Slave als auch einen AXI-Master entwickelt, um eigene Logik an bestehende Systeme anzubinden.
Unser AXI-Master unterstützt unterschiedliche Busbreiten und ermöglicht durch Barrel-Shifting eine flexible Anpassung an verschiedene Datenpfade.
Diese Module werden in AMD/Xilinx-, Intel-SoC- und FPGA-Systemen eingesetzt.
DisplayPort
DisplayPort ist ein von VESA standardisierter Anschluss für die Übertragung digitaler Bild- und Tonsignale.
Wir haben DisplayPort auf einem Intel Arria10 SoC sowohl für Eingang als auch Ausgang implementiert.
Die Implementierung erfolgte auf Basis eines DisplayPort-IP-Cores von Bitec, dessen Reconfiguration-Controller wir für unsere Anforderungen überarbeitet haben.
Innerhalb einer Transceiver-Bank wurden fünf Gigabit-Transceiver-Lanes verwendet: vier Lanes für einen 4-kanaligen DisplayPort und eine Lane für einen 1-kanaligen DisplayPort für das Bediendisplay.
Da der ursprüngliche Controller nur einen DisplayPort unterstützt und alle Lanes über einen gemeinsamen Avalon-Konfigurationsbus angebunden sind, haben wir ihn auf die Unterstützung von zwei DisplayPort-Instanzen und fünf Lanes erweitert.
Unterstützte Auflösungen:
- 800 × 480 (7"-Bediendisplay)
- 4K
- 8K
- bis 16K
PCIe / PCI
PCIe („Peripheral Component Interconnect Express“) ist ein Hochgeschwindigkeitsstandard zur Anbindung externer Komponenten an Prozessorsysteme.
Wir haben Erfahrung sowohl mit klassischem PCI als auch mit modernem PCIe.
Unsere Arbeit umfasst:
- Elektronikentwicklung
- FPGA-Design
- Linux-Treiberentwicklung
Einsatzbereiche:
- PC-Steckkarten
- Anbindung externer PCIe-Komponenten an Embedded-Systeme (z. B. NXP i.MX8)
- Einsatz von PCI in Embedded-Systemen, z. B. auf Basis des TQM5200B
Dabei haben wir PCI/PCIe sowohl in PC-basierten Systemen als auch in Embedded-Plattformen eingesetzt und die vollständige Datenübertragung inklusive DMA, Speicher-Mapping und Interrupt-Handling umgesetzt.
UART
UART („Universal Asynchronous Receiver/Transmitter“) ist eine einfache serielle Schnittstelle, die in nahezu jedem Mikrocontroller vorhanden ist.
Wir setzen UART in verschiedenen Anwendungen ein:
- Anbindung von Mikrocontrollern und FPGAs an SoMs
- Debug- und Diagnose-Schnittstelle in Embedded-Systemen
- Linux-Konsole für Embedded-Plattformen
- Anbindung von Embedded-Systemen an PC-Systeme über UART-USB-Brücken
- Verbindung von Embedded-Systemen über RS422
- Konfigurationsschnittstellen über RS232
- Einsatz von RS232-Bluetooth-Adaptern für drahtlose Anbindungen
Dabei erreichen wir Übertragungsraten von bis zu 3 MBd.
SPI / QSPI
SPI („Serial Peripheral Interface“) ist eine serielle Schnittstelle zur Anbindung von Peripherie an Mikrocontroller, SoCs und FPGAs.
Wir setzen SPI und Quad-SPI (QSPI) in verschiedenen Anwendungen ein:
- Anbindung externer Komponenten an Mikrocontroller und SoCs
- Kommunikation zwischen FPGA und Peripherie
- Erweiterung von SoMs um zusätzliche Funktionen und Peripherie
- Zugriff auf Flash-Speicher und andere SPI-basierte Geräte
Die erreichbaren Datenraten reichen von wenigen Kilohertz bis in den Bereich mehrerer hundert Megahertz, z. B. bei SD-Karten.
Für FPGA-Systeme entwickeln wir SPI-Module in VHDL, jeweils angepasst an den benötigten SPI-Modus, die Datenbreite und die spezifischen Anforderungen der Anwendung.
Durch die klare Struktur der Schnittstelle lassen sich solche angepassten Module effizient implementieren. In vielen Fällen ist der Entwicklungsaufwand für ein schlankes, maßgeschneidertes Modul geringer als die Integration und Anpassung eines universellen, generischen SPI-Subsystems.
Insgesamt haben wir rund 30 SPI-Implementierungen für verschiedene Projekte und Kunden umgesetzt.
I2C
I2C („Inter-Integrated Circuit“) ist ein serielles Kommunikationsprotokoll zur Anbindung mehrerer Komponenten über eine einfache Zweidrahtschnittstelle.
Wir setzen I2C in verschiedenen Anwendungen ein:
- Anbindung von Sensoren und Peripherie an Mikrocontroller und SoCs
- Kommunikation zwischen Komponenten in Embedded-Systemen
- Einsatz in FPGA-Designs und Mikrocontroller-Software
Wir haben Erfahrung mit den Standardgeschwindigkeiten von 100 kHz und 400 kHz.
Darüber hinaus haben wir I2C auch über größere Distanzen eingesetzt, z. B. über mehr als einen Meter unter Verwendung geeigneter I2C-Transceiver.
Für komplexere Topologien haben wir I2C-Busse mit Verteilern und 1:8-Switches aufgebaut.
Für FPGA-Systeme haben wir zudem einen I2C-Slave in VHDL für einen Spartan-6 entwickelt.
SDRAM
SDRAM („Synchronous Dynamic Random-Access Memory“) ist ein getakteter Hauptspeicher, der über einen Speichercontroller an ein Prozessorsystem oder FPGA angebunden wird.
Wir haben SDRAM in verschiedenen FPGA-Systemen eingesetzt, insbesondere in Form von DDR3- und DDR4-Speichern.
Die Anbindung erfolgte über die jeweiligen Controller-IPs:
- AMD/Xilinx MIG
- Intel EMIF
Der Zugriff auf den Speicher erfolgte sowohl direkt aus der FPGA-Logik als auch in SoC-Systemen über AXI-Master und DMA.
Ziel war dabei stets, die maximal mögliche bidirektionale Datenrate auszunutzen.
Ethernet
Ethernet ist der führende Standard für die Datenkommunikation in lokalen Netzwerken.
Wir setzen Ethernet in einer Vielzahl von Embedded-Systemen und FPGA-Designs ein.
Unsere Arbeit umfasst:
- Elektronikentwicklung für Ethernet-basierte Systeme
- Integration von Ethernet über PCIe/Ethernet-Brücken
- Einsatz von Power over Ethernet (PoE) zur Versorgung externer Geräte
Ein Schwerpunkt liegt auf der Integration von Ethernet in FPGA-SoC-Systeme:
- Anbindung von 4 × 10G und 16 × 1G Ethernet-Ports zwischen FPGA-Logik und SoC-Prozessor
- Umsetzung leistungsfähiger Datenpfade zwischen FPGA, AXI und DMA
- Entwicklung von Linux-Ethernet-Treibern für diese Schnittstellen
- Anbindung bis in den Linux-Userspace
Darüber hinaus haben wir Ethernet auch direkt in FPGA-Logik implementiert:
- 1G- und 10G-Ethernet-Designs im FPGA
- Erzeugung und Verarbeitung von UDP-Paketen in der FPGA-Logik
- Implementierung eines einfachen Ethernet-Switches mit Paketfilter im FPGA-SoC
- Dynamisches Umschalten zwischen MAC, FPGA-Logik und Prozessorsystem
Zur Verifikation und Sicherstellung der Langzeitstabilität führen wir umfangreiche Tests durch:
- In TCP/IP-basierten Systemen nutzen wir Werkzeuge wie iperf3 zur Last- und Stabilitätsprüfung
- In FPGA-Designs realisieren wir interne Tests durch Rückkopplung des TX-Pfades auf den RX-Pfad, was insbesondere bei Glasfaserverbindungen effizient möglich ist
- Auswertung von Paketanzahl und Prüfsummen zur Sicherstellung der Datenintegrität
Power over Ethernet (PoE) / Power Sourcing Equipment (PSE)
Power over Ethernet (PoE) ermöglicht die Übertragung von Daten und elektrischer Energie über ein gemeinsames Ethernet-Kabel.
Wir haben PoE in einem Embedded-System zur Versorgung eines Bedienpanels eingesetzt.
Dabei wurde ein PSE-System entwickelt, das die Energieversorgung externer Geräte über Ethernet bereitstellt.
Die Implementierung unterstützt die Standards IEEE 802.3af und IEEE 802.3at. Eine Erweiterung auf IEEE 802.3bt wurde bei der Entwicklung berücksichtigt und ist durch Nachrüstung möglich.
Die erforderliche Versorgungsspannung von 48 V wurde über einen DC/DC-Up-Converter aus einer vorhandenen 24-V-Versorgung erzeugt.
Für Verifikations- und Umweltprüfungen haben wir eine PoE-Laststrecke aufgebaut, die insbesondere für Tests im Klimaschrank eingesetzt wurde.
Die Integration umfasste die Auswahl und Einbindung geeigneter PoE-Controller sowie die Auslegung der Stromversorgung und Schutzbeschaltung.
Framebuffer
Ein Framebuffer dient zur Speicherung von Bilddaten für die Ausgabe auf einem Display.
Wir haben Framebuffer in FPGA-Systemen zur Ansteuerung von VGA- und DisplayPort-Schnittstellen eingesetzt.
Die Bilddaten werden im SDRAM abgelegt und über kontinuierliche Datenströme aus der FPGA-Logik zur Anzeige gebracht.
Für die Integration in Embedded-Systeme haben wir einen Framebuffer-Treiber für Linux entwickelt, der die Anbindung der Displayausgabe an das Betriebssystem ermöglicht.
Gigabit-Transceiver, PMA, PCS
Moderne FPGAs verfügen über integrierte Gigabit-Transceiver, die für Hochgeschwindigkeitsschnittstellen eingesetzt werden.
Wir haben Erfahrung mit deren Einsatz in verschiedenen Systemen, unter anderem in:
- Ethernet, PCIe und DisplayPort
Dabei erfolgt die Anbindung je nach Anwendung entweder über entsprechende IP-Cores (z. B. Ethernet-MAC oder DisplayPort-Core) oder durch direkte Nutzung der Transceiver.
Einen direkten Einsatz der Gigabit-Transceiver haben wir beispielsweise in einem Glasfaser-Extender umgesetzt, bei dem sowohl die Linksteuerung als auch die Kanalkodierung selbst implementiert wurden.
Die Anbindung der Transceiver auf den Ebenen PMA (Physical Medium Attachment) und PCS (Physical Coding Sublayer) erfolgt dabei über die entsprechenden IP-Cores.
VGA
VGA ist eine analoge Videoschnittstelle zur Ansteuerung von Displays.
Wir haben VGA in FPGA-Systemen zur Ausgabe von Bilddaten eingesetzt, z. B. für einfache Bedien- und Visualisierungsanwendungen.
Die Erzeugung der Videosignale erfolgt direkt in der FPGA-Logik, einschließlich der notwendigen Timing-Signale für Synchronisation und Bildaufbau.