Elastic Node Middleware

Übersicht

Kontakt: Christopher Cichiwskyj

Innerhalb des Elastic Node Projekts wird ein leistungsstarker, adaptiver Sensor Knoten entwickelt, welcher rekonfigurierbare Hardware, wie Field Programmable Gate Arrays (FPGAs) mit traditionellen 8-bit Microcontrollern (MCU) verbindet. Das Hauptziel hierbei ist es Entwicklern von drahtlosen Sensorknoten die Möglichkeit zu geben die verfügbare Hardware an sich ändernde Anwendungsanforderungen anpassen zu können, ohne neue Hardwaredefinitonen manuell entwickeln zu müssen.

Kombiniert man jedoch zwei vollkommen unterschiedliche Arten von Computerhardware in einer einzigen Plattform steigert das die Komplexität der Entwicklung von Applikationen für solch ein Gerät. Um für eine solche Plattform entwickeln zu können werden ganz verschiedene Fähigkeiten benötigt, da MCUs typischerweise in C/C++ programmiert werden, während FPGAs in sich sehr davon unterscheidenden Hardwarebeschreibungssprachen (HDLs) programmiert werden.

Um den benötigten Aufwand, eine Applikation für den Elastic Node zu entwickeln, zu reduzieren beschäftigt sich dieses Forschungsprojekt mit dem Ziel eine minimalistische Middleware zu entwickeln. Diese soll zur Aufgabe haben gewisse Verwaltungsaufgaben um den Elastic Node zu automatisieren. Hierunter fallen beispielsweise das Rekonfigurieren des FPGAs, die Steuerung des Energiezustandes, die Kommunikation zwischen MCU und FPGA, oder den Datentransfer zwischen der eingebetteten Applikation auf der MCU und dem FPGA zu kontrollieren.

Zusätzlich kann die Middleware dabei helfen das Potenzial des FPGAs für eingebettete Applikationen noch weiter auszunutzen, indem man die Fähigkeit zur Rekonfiguration in einem deutlich größeren Umfang verwendet. Klassischerweise werden enthalten FPGA-Konfigurationen nur eine Funktionalität, die auch in sich abgeschlossen ist. Bei FPGAs, welche für eingebettete Applikationen geeignet sind, stehen jedoch nur sehr begrenzte Ressourcen pro Konfiguration zur Verfügung, welches es erschwert komplexe und in sich abgeschlossene Lösungen umzusetzen. Kombiniert man jedoch, mittels der Middleware logisch verschiedene Konfigurationen und erlaubt es dem FPGA zwischen diesen in schneller Reihenfolge zu wechseln, braucht jede Konfiguration nur einen Teil der Gesamtlösung abzubilden.

Solch eine kollaborative Ausführung verschiedener Konfigurationen benötigt jedoch eine präzise Kontrolle des Datenflusses zwischen diesen, wobei vor allem auch die Datenabhängigkeiten zwischen den Konfigurationen genau beachtet werden muss, damit diese in korrekter Reihenfolge auf die effizienteste Weise konfiguriert werden können.

Aktueller Fokus

In diesem Projekt wird aktuell an folgenden Aspekten gezielt geforscht:

  • Datenabhängigkeit von Konfigurationsgruppen: Eines der Hauptziele ist die effiziente Ausführung einer Gruppe von logisch zusammenhängender Konfigurationen. Die Datenabhängigkeit zwischen den einzelnen Konfigurationen, d.h. welche Ergebnisse einer Konfiguration sind die Eingabeparameter einer Folgekonfiguration, stellt dabei eines der größten Herausforderungen dar. Hierbei besteht aktuell die Frage, wie sich diese Datenabhängigkeit in einem Format modellieren lässt, so dass es für Geräte mit so geringen Resourcen wie 8-bit MCUs praktikabel ist. Zusätzlich ergibt sich hier die Frage, was für einen Einfluss die Verwendung von Konfigurationsgruppen auf die Ausführung und Ausführungsreihenfolge auf dem FPGA hat.

  • Datenflussmanagement: Eine weitere Frage, die mit der Datenabhängigkeit verbunden ist, ist wie Applikationsdaten gepuffert und verwaltet werden müssen, um über mehrfache Rekonfigurationen verfügbar zu bleiben, da der lokale Zustand von FPGAs während einer Rekonfiguration typischerweise verloren geht. Die entsprechenden Daten müssen hierfür vor der Rekonfiguration in einen externen Puffer transferiert werden. Die Verwendung des internen RAMs der MCU stellt jedoch für den Großteil an IoT-Applikationen nur eine unzureichende Lösung dar, da diese schlicht nicht genügend Ressourcen bereitstellen kann. Eine mögliche Lösung hierfür ist die Verwendung eines externen RAM-Chips, welcher sowohl an den FPGA als auch an die MCU angebunden ist. Die Verwaltung dieses externen RAM Chips muss jedoch aus dem gleichen Grund des Zustandsverlust des FPGAs auch von der MCU übernommen werden. Hier stellt sich nun die Frage wie diese Verwaltung zum einen, sowohl effizient in der Ausführung, als auch in der Verwendung des verfügbaren RAM realisiert werden kann, sowie zum anderen auch in einer Art, so dass diese die vorhandenen Ressourcen der MCU nicht übersteigt.

  • IDLs zur einfacheren Einbindung: Jede Konfiguration und jede Konfigurationsgruppe entspricht einer "Hardwarefunktion", welches logisch gesehen in der Lage ist, genau ein Problem zu lösen. Um solche Konfigurationen in einer C/C++ geschriebenen Applikation auf der MCU verwenden zu können muss jedoch eine Schnittstelle verwendet werden, welche genau definiert, welche Daten eine Konfiguration verwendet und zurückgibt. Im Falle von Konfigurationsgruppen kommt noch hinzu in welcher Reihenfolge diese ausgeführt werden müssen. Um den Aufwand, um eine solche Schnittstelle zu kreieren, zu minimieren, wird ein System entwickelt, welches Interface Description Languages (IDL) verwendet, um solchen Code automatisch zu generieren. Hierfür wird vorausgesetzt, dass FPGA-Entwickler beim Erzeugen einer Konfiguration eine IDL-Definition hinzufügen, welche genau festhält, welche Ein- und Ausgabetypen diese verwenden, welche MCU-Programmierer später zur Codegenerierung verwenden können. Solch ein System würde es auch ermöglichen jeweils in sich abgeschlossene Konfigurationen zu einer Konfigurationsgruppe zu kombinieren, indem nur noch Datenabhängigkeiten und Ausführungsreihenfolge definiert wird.

Ausblick

Im weiteren Verlauf dieses Projekts werden folgende Punkte noch betrachtet werden:

  • Effizientere Ausführung durch weniger Rekonfigurationen: Auch wenn die Rekonfiguration in schneller Wiederholung neue Möglichkeiten für eingebettete Applikationen schafft, stellt jede Rekonfiguration einen Mehraufwand und damit einen Verlust an Energie dar, eine Ressource, die in batteriebetriebenen IoT-Systemen nur begrenzt verfügbar ist. Unter der Annahme, dass mithilfe eines Schedulers mehrere Tasks, wobei jeder Task einer Konfiguration oder Konfigurationsgruppe entspricht, geplant werden können, könnte die Ausführungsreihenfolge entsprechend angepasst werden. Tasks, welche die selbe Konfiguration verwenden, können so direkt hintereinander ausgeführt werden, um somit die Zahl Rekonfigurationen zu reduzieren, auch über Tasks aus Einzelkonfigurationen und Konfigurationsgruppen hinweg.