Lesedauer
3 Minuten
Datum
Einsatz von FPGA am Beispiel des parallelen Datensamplings
Insight in Brief
Obwohl Mikrocontroller immer leistungsfähiger werden, sind sie für viele Anwendungen nicht optimal geeignet. Insbesondere bei der parallelen Erfassung von zeitkritischen Sensordaten oder der deterministischen Verarbeitung grosser Datenmengen sind FPGA die ideale Lösung.
Unsere Erfahrungen mit FPGAs haben wir in den letzten Jahren kontinuierlich erweitert und erfolgreich in verschiedenen medizinischen Medizin- und Messgeräten eingesetzt - sei es als Standalone Controller, als Coprozessor eines Mikrocontrollers oder mit einem Softcore-Prozessor.
In diesem Artikel soll der praktische Einsatz am Beispiel der Erfassung von zeitkritischen Sensordaten erläutert werden.
Einleitung
Für Messgeräte und aber auch für Regelungen oder Steuerungen sind oft eine Vielzahl an Sensoren nötig. Früher hatten diese Sensoren oft einen analogen Ausgang. Immer mehr werden die Sensoren aber über eine digitale Schnittstelle wie SPI oder I2C angebunden. Durch die digitale Übertragung ist das Signal viel weniger anfällig auf Störungen von aussen. Allerdings haben klassische Prozessoren nur eine beschränkte Anzahl dieser Schnittstellen. Zusätzliche Schnittstellen erhält man, wenn überhaupt, nur durch einen Wechsel auf die nächstgrössere Device Familie. Sollen die Sensoren dann noch parallel gesampelt werden stösst man definitiv an die Grenzen. In diesem Fall kommt das FPGA zum Einsatz.
Ein FPGA bietet die mögliche Flexibilität mit den Schnittstellen und ist dafür ausgelegt verschiedene Operationen parallel auszuführen. In dem kommenden Beispiel aus einem unserer Projekte möchten wir aufzeigen, wie ein FPGA ideal für diesen Zweck eingesetzt werden kann.
Der klassische Ansatz
Für ein Messgerät zur Flussmessung müssen verschiedene Sensorwerte laufend erfasst und ausgewertet werden. Abbildung 1 zeigt eine Übersicht, der gemessenen Werte. Neben diesen Sensoren benötigt das System noch weitere, um andere Messparameter zu ermitteln. Da jeder Wert eine Momentaufnahme darstellt ist es Sinnvoll alle Sensoren, welche in die Flussberechnung einfliessen gleichzeitig zu Sampeln. Zusätzlich hat jeder Sensor eine andere Schnittstelle und das Sampling-Intervall soll fest definiert sein.
Wenn mehrere Sensoren an einem SPI oder I2C Bus angeschlossen sind, dann kann pro Bus Schnittstelle jeweils nur ein Sensor gleichzeitig ausgelesen werden. Damit ein gleichzeitiges Auslesen möglich ist, muss jedem Sensor eine separate Schnittstelle zugewiesen werden. Wenn man nur die Anzahl Sensoren betrachtet, wäre das in diesem Fall bei einem Mikrokontroller noch möglich. Meist sind neben den Sensoren aber noch andere Schnittstellen nötig. (USB, Ethernet zu einem PC. I2C Für einen Battery Manager, SPI für Flash, etc.) Zudem ist es nur sehr schwierig möglich, dass alle Sensoren parallel ausgelesen werden können. Dafür besitzt der Microkontroller meist zu wenige DMA-Kanäle, welche gleichzeitig aktiv sein können. Hier kommt nun das FPGA zum Einsatz.
Lösung mit FPGA
Das FPGA besitzt vereinfacht gesagt nur GPIOs. Diese können je nach Anwendung spezifisch belegt werden. – Natürlich gibt es auch bei den FPGAs Pins mit speziellen Funktionen. Meist sind das aber spezielle Eigenschaften für schnelle Busssysteme oder Speicheranbindungen (PCIe, DDR-Memory). Für diese Anwendung sind aber höchstens die teilweise verbauten ADC-Eingänge von Relevanz. – Das ermöglicht die Definition von beliebig vielen Datenschnittstellen. Zudem können diese auch jederzeit durch andere ersetzt werden. Bei einfachen und langsamen Schnittstellen wie SPI oder I2C ist man auch nur durch die Anzahl Logikblöcke und Pins eingeschränkt.
Aufbau der Schnittstellen
Die Einzelnen Schnittstellen werden dazu am besten in drei Layern implementiert:
- PHY: Die Implementierung der physikalischen Schnittstelle (SPI, I2C, …)
- MAC: Übersetzung der einzelnen Pakete in ein einziges Datenpaket. Sowohl in Sende wie auch Empfangsrichtung.
- DATA: Hier werden die eigentlichen Sensordaten entpackt. Oder Kommandos verpackt.
Diese Aufteilung ermöglicht es, dass unterschiedliche Aufgaben in den einzelnen Entities gekapselt sind und der jeweilige Code kleiner und damit auch weniger Fehleranfällig wird. Falls mehrere Sensoren vom gleichen Hersteller verwendet werden, ist es zudem wahrscheinlich, dass sie ein identisches Protokoll verwenden. In diesem Fall kann neben der Entity für den PHY auch der MAC Layer identisch mehrfach instanziiert werden. Das senkt den Entwicklungsaufwand drastisch.
Sampling Kontrolle
Wie kann sichergestellt werden, dass alle Sensoren zur selben Zeit ausgelesen werden? Dazu gibt es im FPGA einen Block, der ein regelmässiges Trigger Signal erzeugt. Es kann entweder sein, dass dieses immer aktiv ist, oder über eine Konfigurationsschnittstelle kontrolliert werden kann. In diesem Fall erzeugt es jede 1ms einen Puls (\( T_p \)). Jede der Kommunikationsschnittstellen besitzt nach innen ein interface wie im folgenden Beispiel gezeigt:
Sobald die Schnittstelle an dem Eingang «enable» eine Flanke sieht, startet die Komponente unabhängig die Datenerfassung. Sobald diese abgeschlossen ist, signalisiert die Komponente mit einer Flanke auf «dataValid» dass gültige Daten verfügbar sind. Jede Sensor-Komponente besitzt eine Samplingzeit Ts. Dies ist die Zeit zwischen der Flanke auf «enable» bis zur Flanke auf «dataValid». Es kann nun jeder beliebige Sensor integriert werden. Dabei ist lediglich zu beachten, dass die Maximale Samplingzeit jeder Komponente (\( T_{s,max} \)) kleiner ist als die Zeit zwischen den Pulsen (\( T_p \)).
\( T_{s,max} < T_p \)
Sammeln der Daten und Kommunikation mit Firmware
Am Ende müssen die Daten dann an eine Firmware übergeben werden. Sei es zur weitern Verarbeitung, zur Visualisierung oder Speicherung. Dazu gibt es wieder Zahlreiche Möglichkeiten:
- Die Daten können direkt an einen PC übermittelt werden.
- Die Daten können an einen Softcore weitergegeben werden. Z.B. NIOS II oder ein RISC-V.
- Die Daten können an einen Mikroprozessor übergeben werden.
Beim Messgerät wurde die dritte Variante gewählt. Dazu wurde eine SPI-Schnittstelle mit einem speziellen Protokoll definiert.
Das Trigger Signal löst ein Interrupt aus welcher den DMA startet und sämtlich Daten vom FPGA in den Speicher des Prozessors kopiert. Zusätzlich wurde im FPGA noch ein Ringpuffer implementiert. Damit ist es möglich Daten zwischenzuspeichern und dadurch ein Datenverlust zu verhindern, wenn der Prozessor für eine gewisse Zeit ausgelastet ist.
Zusammenfassung
Anstelle von mehreren Schnittstellen benötigt der Prozessor nur noch eine Schnittstelle, um verschiedenste Sensoren auszulesen. Eine Kapslung des Sensor Samplings verbessert zudem die Testbarkeit, da diese Komponente völlig losgelöst von der Business Logik geprüft werden kann. Falls später einmal ein Sensor ersetzt werden muss, ist nur ein erneuter Test des FPGA nötig. die Firmware mit der Business Logik muss nicht angetastet werden. Zudem ist das Echtzeitverhalten des Sampling absolut deterministisch.
Weitere Expert Blog Beiträge
Lassen Sie sich inspirieren von unseren erfolgreich realisierten Kundenprojekten im Bereich der Medizintechnik.