Treiber und Userspace

Das DE1-SoC Board verfügt über einen Cylcone V FPGA mit On-Chip HPS. Auf diesem Cortex A9 läuft ein Embedded Linux welches durch Treiber- und Userspacesoftware auf die vom FPGA zu verfügung gestellten Register zugreifen kann. Die Userspace Software ist in C++ implementiert. Der Programmablauf wird über eine State-Machine gesteuert. Diese wurde als klassisches switch-case in einer Endlosschleife definiert. Die Softwarearchitektur folgt keinem Design-Pattern, ist jedoch modulbasiert aufgebaut. Das Config-Modul beinhaltet alle Informationen die für eine Messung benötigt werden. Source, Sink, Sollspannung und Modus werden vom User mit definierten Kommandos vorgegeben und im Config-Modul abgelegt. Eine Messung besteht aus Source, Sink, gemessenener Spannung und gemessenen Strom. Die Kommandos werden mit einem eigens definierten Protokoll übertragen. Somit ist eine textbasierte Übertragung jedenfalls möglich.

Modi

Die Userspace Software steuert den gesamten Messablauf und kommuniziert sowohl mit dem untergeordneten FPGA als auch mit der übergeordneten Benutzerschnittstelle. Je nach Schnittstellen lässt sich die Userspace-Software in vier verschiedenen Modi starten:

Serial
Kommunikation über seriellen KOM-Port (USB)
Command
Eingabe und Ausgabe über Tastatur und Bildschirm
Network
TCP-Socket empfängt und sendet Daten über Port 8080
File
Kommandos werden von File ausgelesen und Ergebnisse in File geschrieben

Synchronisation

Die Synchronisation mit der Hardware erfolgt über Interrupts, mit der Userspace Applikation via Signals. Die Hardware erzeugt einen Interrupt wenn die Messung abgeschlossen ist. Ab dann können die Messwerte aus den Registern ausgelesen werden.

Hardware

Die Hardware wird mittels eines Kernelmoduls angesteuert. Hierfür wird dem Userspaceprogramm ein Devicefile zur Verfügung gestellt.

Programmablauf

In folgendem Sequenzdiagramm ist ein typischer Programmablauf mit den beteiligten Komponenten und den verwendeten Funktionen visualisiert.

voltage 1.7;
measure 1-2;
Sequenzdiagramm