Masterarbeit: Done

So, nach meiner Bachelorarbeit ist nun auch meine Masterarbeit abgehakt. Ich muss gestehen, ich bin ziemlich froh, das ich die letzten 6 Monate hinter mir habe, das ganze war doch eine ziemliche anstrenge Sache mit vielen neuen Erfahrungen für mich.

Was habe ich denn überhaupt gemacht? Meine Arbeit trägt den schönen Titel „Konzeptionierung und Implementierung einer hybriden MAC-Layer-Architektur für Paket-basierte Powerline Kommunikation auf einem FPGA“ 🙂 Powerline-Kommunikation ist dem einen oder anderen vermutlich ein Begriff, auch unter dem Begriff „dLan“: Weiterleitung einer LAN-Verbindung über das bestehende Stromnetz. Der passende Standard dazu heißt „HomePlug“ und sieht eine Aufteilung von Geräten in eine MAC- und eine PHY-Schicht vor, ähnlich wie im OSI-Modell. Ich habe jetzt in meiner Arbeit einen MAC-Layer auf einem FPGA implementiert. Der MAC-Layer macht vor allem so Sachen wie das Erzeugen von Headern und Prüfsummen, Segmentierung von zu langen Frames und Ackknowlegdments. Nicht ganz einfach, aber eine interessante Sache 🙂

Das Herzstück des Systems ist ein Softcore, also ein frei (in C) programmierbarer Prozessor auf dem FPGA. Da der Prozessor auch nur als VHDL-Code vorliegt, kann man auch relativ einfach Änderungen einbauen, oder ein paar Hardware-Erweiterungen dranbauen. Ich muss gestehen, dass ich dem Thema Softcores immer ein bisschen kritisch gegenüberstand, jetzt bin ich aber voll davon überzeugt. Die Möglichkeit, nicht nur Software zu schreiben, sondern auch Hardware-Erweiterungen an den Prozessor bauen zu können, ist eine ziemlich coole Sache. Ich habe übrigens als Softcore den NEO430 verwendet, kann ich größtenteils empfehlen 🙂

Was habe ich gelernt?

Eine Menge. Die Masterarbeit hat mich wirklich an die Grenze meiner Fähigkeiten gebracht, ich denke, ich habe aber auch eine Menge gelernt. Zunächst: Divide-and-Conquer. Das Grundprinzip der Informatik, natürlich jedem Informatiker bekannt; trotzdem muss man es sich immer wieder in Erinnerung rufen. Ich habe etwa den ersten Monat meiner Arbeit damit verbracht, ein Konzept zu suchen, wie man es schaffen kann, die sehr unterschiedlichen Aufgaben des MAC-Layers in einer einzigen Software zu kombinieren. Die Lösung, auf die mich mein Betreuer gestoßen hat, war dann ganz einfach: Man nehme einfach zwei Softcores, einer macht die komplexe Erzeugung von Headern usw., der andere macht den Echtzeit-Teil.

Hardware erfordert sorgfältige Tests. Ich komme ja immer noch so ein bisschen aus der C#-Ecke, und bin es von dort gewohnt, dass der geschriebene Programmcode meistens das tut, was ich beim Schreiben im Kopf hatte (was nicht heißt, das er keine Bugs hat 🙂 ). Die Umsetzung Idee->Code hat dort eigentlich immer relativ fehlerfrei funktioniert. Falls es doch mal Probleme gab, gibt es einen Leistungsfähigen Debugger, mit dem man den Fehler relativ komfortabel finden kann. In der Hardware-Ecke sieht das anders aus: Zumindest ich habe immer noch Probleme damit, mir vorzustellen, ob ein Signal jetzt in diesem oder dem nächsten Takt anliegt (was mich am Ende auch rund vier Tage mit der Suche nach einen winzigen Fehler beschäftigt hat). Wenn dann doch mal etwas nicht funktioniert starrt man auf die Waveforms in seinem Simulator und versucht den Fehler zu erkennen. Das ganze ist also schlecht zu debuggen und dazu noch fehleranfälliger. Die richtige Konsequenz ist als kleinschnittiges und umfassendes  Testen, etwas was neu für mich war. Vor einem riesigen Haufen Code zu stehen, der überhaupt nicht funktioniert und keinen richtigen Ansatz zu haben, den Fehler zu finden kann ziemlich frustrierend sein!

Die Softcore-Prozessoren waren nur wenig besser: Hier war meine C-Code zwar meistens so, wie ich ihn haben wollte (von dämlichen Compilern mal abgesehen), dennoch ist debuggen fast unmöglich: Einen (Hardware-)Debugger gibt es nicht und jedes print-Statement im Code ändern das Timing des Programm komplett und macht damit alles kaputt.

Ich denke, dass ich damit auf meinem Schlingerkurs während des Studiums von High-Level-Softwareentwicklung in C# Richtung Elektrotechnik langsam an einem stabilen Punkt angekommen bin: Gerne eingebettete Systeme und Softcores, aber bitte ausgereifte Systeme für die es einen Debugger gibt und bei denen der Fokus auf der Software liegt. Mal sehen, was die Zukunft bringt!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert