Digital Substation

Ein Studienprojekt der FH Oberösterreich, Campus Hagenberg

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 Informationen

Motivation

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.
Diese Vorgehensweise führte dazu, dass pro Datenbyte (!) zwei PCIe-Buszugriffe notwendig waren. Was durch den großen Overhead von PCIe zu erheblichen Durchsatzproblemen führte.

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