FH Oberösterreich, Campus Hagenberg

Dieses Projekt wurde im Sommersemester 2018 und Wintersemester 2018/19 von sieben Studenten des Bachelor-Studiengangs Hardware-Software-Design auf der FH Oberösterreich, Campus Hagenberg durchgeführt.
Weitere InformationenMotivation
Auch die Energiebranche entwickelt sich weiter. In der nächsten Generation der Stationsleittechnik wird der Ansatz verfolgt, dass hart verdrahtete Signale vollständig durch netzwerkbasierte Kommunikation ersetzt werden, diese Technik nennt man Prozessbus. Alle Informationen, auch etwa Spannungs- und Stromwerte, werden digital über das Netzwerk übertragen.
Konventionelle Verdrahtung

Signale werden über Kupferleitungen analog übertragen.
Digital Substation mit Prozessbus

Alle Signale werden über ein Netzwerk übertragen. (Quelle: bulletin.ch)
Die Anforderungen in diesem Anwendungsgebiet in Bezug auf Verlässlichkeit, Sicherheit und Langlebigkeit erfordern eine spezielle Implementierung auf lüfterlosen Embedded-Systemen. Die Modernisierung hat auch massive Änderungen in der Systemarchitektur zur Folge. Die verlustfreie Kommunikation von bis zu 12 Messsensoren muss garantiert werden, dabei können bei digitalen Messungen von 4 KHz bis zu 4 MBits/s an Daten entstehen.
Problemstellung
In diesem Projekt geht es um die Verbesserung einer Steuerungs- und Überwachungskomponente. Die Implementierung eines Industriepartners nutzt eine Mikrocontroller-Platine, die nur über einen dedizierten Ethernet-Port verfügt. Allerdings werden mindestens zwei dieser Ports benötigt: einer für die Verbindung zum Prozessbus und einer für das lokale Netzwerk. Aus diesem Grund wurde diese zweite Ethernet-Schnittstelle auf dem ohnehin schon vorhandenen FPGA (Altera Cyclone IV GX) implementiert und über eine PCIe-Leitung mit dem Mikrocontroller verbunden.
AUSGANGSSITUATION
Diese ursprünglich (ausschließlich funktionale) Implementierung weist allerdings das Problem auf, dass ein CPU-Kern zur Gänze ausgelastet ist während der Datendurchsatz dieser Schnittstelle unter Volllast nur knapp 10 Mbit/s erreicht.
AUFGABE
Die Aufgabe dieses Projekts bestand darin, diese Ethernet-Schnittstelle zu verbessern. Dazu zählen sowohl der Konzeptentwurf (Wie wird die Kommunikation ablaufen?), die Umsetzung im FPGA und die Anpassung des zugehörigen Linux-Treibers.
LIMITIERUNGEN
Die zu verwendende Hardware war aber bereits vorgegeben, somit konnten keine Änderungen am Aufbau oder Design der Platine vorgenommen werden, damit die Lösung in die bereits vorhandenen Systeme einfach integriert werden kann.
Ausgangssituation
Vorhandene Implementierung der FH OÖ Forschungs und Entwicklungs GmbH.

Die ursprüngliche Implementierung war sehr einfach aufgebaut. Die Speicherung der Ethernetpakete erfolgte seitens des FPGAs in einem FIFO-Puffer. Sobald dieser zur Hälfte voll war, wurde dies dem Treiber mittels eines Interrupts mitgeteilt. Daraufhin las der Treiber abwechselnd das Status-Register der FIFO – sind weitere Daten verfügbar? – und ein Datenbyte aus.
Performance
Zu Beginn des Projekts war das Produkt von hoher CPU-Auslastung und Durchsatzproblemen geplagt.
CPU-Auslastung
Durchsatz
iperf3 Performancetest
Bandbreite der Netzwerkschnittstelle und CPU-Auslastung zu Beginn des Projekts.

Ansatz
Kernstück der neuen Implementierung bildet ein intelligenter FIFO-Puffer, der die ankommenden Daten am Ethernet-Port entgegennimmt und zwischenspeichert. Zusätzlich wurde im FPGA ein Konfigurations-, Kontroll- bzw. Statusregister bereitgestellt, welches unter anderem verwendet wird, um die Zieladresse für die DMA-Übertragung festzulegen. Außerdem sind einige Adressen darin mit Debuginformationen ausgestattet, um etwaige Fehler während der Entwicklung besser nachvollziehen zu können.
Der eigentliche Ablauf sieht folgendermaßen aus:
DMA-ÜBERTRAGUNG
Sobald ein vollständiges Paket erhalten wurde, wird der DMA-Controller mit der Übertragung der Daten in den RAM beauftragt
INTERRUPT
Nach Abschluss dieser Übertragung wird der Treiber wieder per Interrupt darüber informiert.
RAM AUSLESEN
Dieser kann dann die Daten vom RAM problemlos, und ohne langsame Buszugriffe, an den Netzwerkstack übergeben
BEREITSCHAFT MITTEILEN
Nach erfolgreicher Verarbeitung der Daten, kann dem FPGA mittels eines Schreibzugriffes auf das Kontrollregister mitgeteilt werden, dass dieser erneut Daten übertragen darf.
Somit findet nur noch ein Buszugriff pro Paket statt.
FPGA – Auswahl
Das ursprüngliche FPGA-Modell war zu Beginn des Projekts bereits zu 98% ausgelastet. Deswegen musste im Laufe des Projekts auf ein größeres Modell umgestellt werden.

altes FPGA (rot), neues FPGA (grün)
FPGA – Aufbau
Im FPGA werden ein fertiger PCIe- und DMA-IP-Core verwendet. Die Kontroll- und Steuereinheit (ConfigurableFIFO) wurde selbst implementiert.

Avalon Memory Mapped Master (M) und Slave (S), Avalon Streaming Source (SO) und Sink (SI)
Linux – Ausgangssituation
In der ursprüngliche Lösung wurde das Statusregister wiederholt abgefragt um darüber informiert zu werden, ob neue Daten verfügbar sind. Anschließend wurden die Daten von der CPU byteweise über PCIe gelesen.

Linux – Lösung
Beim verbesserten Ansatz muss dem FPGA mitgeteilt werden, dass ein neues Paket empfangen werden kann. Die eigentliche Übertragung wird vom FPGA über einen DMA-Transfer gelöst und mit einem Interrupt abgeschlossen.

Performance
Im Laufe des Projekts konnte die CPU-Auslastung verringert und der Durchsatz erhöht werden.
CPU-Auslastung
Durchsatz
iperf3 Performancetest
Bandbreite der Netzwerkschnittstelle und CPU-Auslastung des Endresulats.

Ergebnisse
Hauptziel war das Minimieren der CPU-Auslastung, das Verringern der I/O-Zugriffe auf das FPGA und folglich das Erhöhen des Durchsatzes.
I/O-ZUGRIFFE
Da die Übertragung des Pakets vom FPGA in den RAM nun mittels eines dedizierten DMA erfolgt, konnte die Anzahl an Lese- und Schreibzugriffen stark verringert werden. Anstatt von 2 Lesezugriffen pro Datenbyte wird nun nur 1 Schreibzugriff für jedes Ethernet-Paket (bis zu 1540 Bytes) benötigt.
CPU-AUSLASTUNG UND DURCHSATZ
Die CPU-Auslastung konnte von nahezu 100% auf 30% gesenkt werden. Zugleich ist der Datendurchsatz auf rund das Zehnfache gestiegen.
Die Verbesserungen des Designs legen auch den Grundstein für weitere Verbesserungen, welche der Industriepartner intern umsetzen will.
Erkenntnisse
TEAMPROJEKT
Für einige von uns war dies das erste Teamprojekt. In diesen zwei Semestern konnten zum Thema Teamarbeit wertvolle Erfahrungen sammeln (z.B. Organisation und Kommunikation (zwischen) verschiedenen Subteams).
GIT
Auch das Versionsverwaltungstool Git wurde stark verwendet, welches in der Industrie immer mehr an Popularität gewinnt. Durch die Erfahrungen des Projektes können wir nun dieses Tool besser verwenden.
VUNIT
VUnit, ein Unit-Testing-Framework für VHDL-Komponenten, war uns im Laufe des Projekts eine große Hilfe, um die korrekte Funktionalität unseres VHDL Codes zu verifizieren.VUnit, ein Unit-Testing-Framework für VHDL-Komponenten, war uns im Laufe des Projekts eine große Hilfe, um die korrekte Funktionalität unseres VHDL Codes zu verifizieren.
TOOLS
Vor Beginn des Projektes hatten wir weder Erfahrung mit QSYS/dem Platform-Designer noch mit der PCIe-Architektur an sich. Das Einarbeiten in das bereits vorgegebene Gerüst hat uns dazu gebracht, sich etwas genauer mit PCIe auseinanderzusetzen. Darüber hinaus wurde auch das Altera Tool SignalTap 2 für die Fehlersuche verwendet.Vor Beginn des Projektes hatten wir weder Erfahrung mit QSYS/dem Platform-Designer noch mit der PCIe-Architektur an sich. Das Einarbeiten in das bereits vorgegebene Gerüst hat uns dazu gebracht, sich etwas genauer mit PCIe auseinanderzusetzen. Darüber hinaus wurde auch das Altera Tool SignalTap 2 für die Fehlersuche verwendet.
Das Team

Robert Pibernig
Projektleiter & FPGA
Simon Steindl
Linux
Christoph Böhmwalder
Teamleiter Linux
Sebastian Kaupper
FPGA
Stefan Mayrhofer
FPGA
Simon Danglmaier
Linux
Daniel Lang
Teamleiter FPGA
FH-Prof. DI Dr. Markus Pfaff
Projektbetreuer