ECK-DATEN

FPGAs haben Entwicklern im Hinblick auf die rohe Rechenleistung, die Flexibilität beim Design und der Leistung pro Watt eine Menge zu bieten. Es ist bekannt, dass zunächst recht viel zu lernen ist, ehe ein Entwickler komplexe neuronale Netzwerke schaffen kann. Dennoch sind die ersten Schritte dank der in diesem Artikel beschriebenen verfügbaren Entwicklungstools inzwischen um einiges leichter geworden.

In dem Maße, wie die Einführung von Anwendungen für das Internet der Dinge (IoT, Internet of Things) an Fahrt aufnimmt, steigt auch der Druck auf die Entwickler eingebetteter Anwendungen, für das jeweilige Design die verfügbare Rechenleistung, Latenzzeit, Kosten und die Größe geschickt auszutarieren. Auch die Konzentration auf die Cloud-Konnektivität wird bei einigen Entwicklungen aufgrund der Echtzeit-Komponente zunehmend als Herausforderung gesehen, ein Umstand, der den sogenannten hybriden „Fog Computing“-Ansatz hervorgebracht hat. Eine Bereitstellung lokaler Gateways, um den Fog-Ansatz um einen Cloud-Aspekt vor Ort zu ergänzen, könnte derweil eine ziemliche hohe Rechenleistung und Algorithmenverarbeitung erforderlich machen. Die Herausforderung für viele Entwickler, die mit der Entwicklung einer Gateway-Anwendung betraut werden, lautet dabei, die diversen entsprechenden Rechenanforderungen zu verstehen. So bringen einige Anwendungen – vor allem im industriellen IoT-Einsatz – recht komplexe Aufgaben im Bereich Motorsteuerung oder Bildverarbeitung mit sich. Hierbei ist nicht nur ein hohes Maß an Rechenleistung gefordert, sondern auch ein deterministisches Verhalten in Echtzeit. High-End-CPUs sind typischerweise die Bauelemente der Wahl; darüber hinaus gibt es jedoch eine Reihe von anderen Bauteilen, die gegenwärtig in das Blickfeld von Entwicklern geraten. Dazu gehört das FPGA (Field Programmable Gate Array), das aufgrund seiner festen deterministischen Eigenschaften zunehmend an Bedeutung gewinnt.

FPGAs machen genau das, was von ihnen verlangt wird

FPGAs

Bild 1: Funktionsblockdiagramm eines FPGAs. Digi-Key

Entwickler, die mit der Anwendung von FPGAs nicht weiter vertraut sind, werden viele Mythen im Hinblick auf Komplexität, Kosten und Stromverbrauch dieser Bauteile vor Augen haben. So glauben viele Entwickler, dass FPGAs nur für hochspezialisierte und kostenintensive Militärsysteme geeignet sind, aber die aktuelle Situation hat mit diesem Szenario nichts zu tun. In der heutigen cloudvernetzten Welt werden FPGAs vor allem in Anwendungen für Rechenzentren eingesetzt, wo sie für die Bilderkennung unter Verwendung von Deep-Learning-Techniken mit neuronalen Netzen verwendet werden und zudem die Suchfunktionen beschleunigen.

Ohne Frage wird es Entwicklern von eingebetteten Anwendungen, die sich mit dem Aufbau von Systemen auf Mikrocontroller- oder Mikroprozessorbasis gut auskennen, angesichts der vor ihnen liegenden Lernkurve bei einer möglichen Verwendung von FPGAs ziemlich grauen. Für die meisten wird der spürbare Unterschied darin liegen, von einem softwarebasierten Prozess zu einem hardwarebasierten „Gate“-Konzept wechseln zu müssen. FPGAs gelten als Bauteile, die der Vorstellung von individuellen Schaltkreisen, die genau das tun, was von ihnen verlangt wird, am nächsten kommen – eine leere Leinwand aus allgemeinen Gates und Zellen, die mithilfe einer Hardwarebeschreibungssprache programmiert oder miteinander verbunden werden (Bild 1). Elektronikingenieure, die sich mit digitaler Logik befasst haben, werden sehr schnell mit den grundlegenden Konzepten der FPGAs vertraut sein, wohingegen andere möglicherweise einen Online-Auffrischungskurs zu dem Thema nützlich finden. An dieser Stelle sei erwähnt, dass das Buch Programming FPGAs von Simon Monk eine gute Einführung zur Nutzung von FPGAs darstellt.

FPGA-SoC mit Mikrocontroller

FPGAs

Bild 2: Startkit Smart Fusion 2. Digi-Key

Mit der zunehmenden Verwendung von FPGAs in einer Vielzahl von Anwendungen steigt auch die Verfügbarkeit von Informationen über diese Bauteile. Dies ist hauptsächlich auf die führenden FPGA-Anbieter zurückzuführen, die massiv in die Bereitstellung kostenloser Open-Source-Softwaretools investiert haben, um so dabei zu helfen, die Entwicklungsabläufe zu definieren und zu beschleunigen. Auch die Integration eines Mikrocontrollers innerhalb der FPGA-Konfiguration zur Schaffung eines FPGA-SoC-Bauteils (SoC, System-on-Chip) hat dazu beigetragen, FPGAs in Endanwendungen zu steuern und zu integrieren. Daneben hat die deutliche Vereinfachung des Lern- und Entwicklungsprozesses dazu beigetragen, dass FPGAs in einer breiteren Palette von Anwendungen eingesetzt werden und dass die Open-Community-Foren wachsen. Durch die Annahme von FPGAs in der Maker-Community ist außerdem das Interesse an den Funktionen dieser Bauelemente gestiegen; gleichzeitig trug dies zu einer Reihe von per Crowdfunding finanzierten Projekten bei, in deren Rahmen Evaluierungsboards mit FPGAs entwickelt wurden, wie Mojo und Papilio. Zudem haben sich die Hersteller von FPGAs alle Mühe gegeben, um die Designs durch die Entwicklung von Entwicklungskits und Evaluierungsboards, die in der breiteren Open-Source-Community gut unterstützt werden, zugänglicher zu machen. Zusammen haben alle diese Initiativen zu einer umfangreichen Sammlung von Fachinformationen und Supportressourcen geführt, dank denen Entwickler nun eher dazu bereit sind, ihr erstes FPGA-Design in Betracht zu ziehen.

FPGAs

Bild 3: Funktionsblockdiagramm des Smart Fusion 2 System-on-Module. Digi-Key

Evaluierungsboard für Smart-Fusion-2-FPGAs

Ein Beispiel für ein solches Evaluierungsboard ist das Startkit Smart Fusion 2 von Microsemi, zu sehen in Bild 2. Das Startkit besteht aus einem System-on-Module (SOM), das das FPGA-SoC-Bauelement Smart Fusion 2 mit dem dazugehörigen Speicher und den entsprechenden Taktgebern enthält, sowie aus einer Smart-Fusion-2-Basiskarte mit einem Prototyping-Bereich, Leistungswandlern und Leistungsmanagement-ICs. Damit bietet das Startkit eine vollständige Plattform, mit deren Hilfe Entwickler ihre erste FPGA-Entwicklung angehen können.

Die FPGA-SoC-Komponente weist einen 32-Bit-ARM-Cortex-M3-Mikrocontrollerkern auf, der in der FPGA-Konfiguration als Mikrocontroller-Subsystem (MSS) implementiert wird. Dieses wird von einem 64-MByte-DDR-Speicher und einem 16-MByte-Flash-Speicher unterstützt und kann mit bis zu 142 MHz laufen. Bild 3 zeigt das Funktionsblockdiagramm des Smart- Fusion-2-SOMs.

FPGAs

Bild 4: Funktionsblockdiagramm der Basiskarte Smart Fusion 2. Digi-Key

Das SOM enthält zudem eine JTAG-Schnittstelle, einen Watchdog-Timer, eine Ethernet-Schnittstelle und eine Reihe von GPIO- und seriellen (I2C, CAN, SPI und UART) Schnittstellen. In Bild 4 sind der vollständige Umfang der Konnektivität der Basiskarte sowie die Benutzer-E/A-Funktionen zu sehen. Die Größe der FPGA-Konfiguration hängt vom jeweiligen Modell ab und reicht von 6060 bis 56520 Logikelementen. Der SoC-Code führt einen uClinux-Kernel aus, was den Entwicklungsprozess weiter unterstützt, da dadurch Zugriff auf das gesamte Spektrum an Linux-Tools besteht, darunter Netzwerk-Tools wie SSH, FTP und Telnet.

Programmierung des FPGA-SoCs

Wenn es an die Programmierung des FPGA-SoC geht, steht das Entwicklungstool Libero auf der Website von Microsemi kostenlos zum Download zur Verfügung. Weiterhin sind in dem Kit die vollständige Einrichtung des FPGA-SoC und der Karte als Libero-Projekt enthalten. Dabei integriert Libero den Entwicklungsablauf beim FPGA-Design mit der Entwicklung der eingebetteten Anwendung, wie in Bild 5 dargestellt ist.

FPGAs

Bild 5: Libero kombiniert den traditionellen FPGA-Entwicklungsablauf mit der Entwicklung von Mikrocontroller-Firmware. Digi-Key

Die Libero-Kurzanleitung gibt eine gute Einführung in die Verwendung von Libero und in den gesamten Entwicklungsprozess. Ein wesentlicher Bestandteil von Libero ist der System-Builder-Assistent (Bild 6), der Entwicklern bei der Entwicklung der Architektur behilflich ist, indem er eine Reihe von Fragen stellt, die bei der Gestaltung der grundlegenden Systemanforderungen und den Konfigurationsoptionen helfen sowie gegebenenfalls zusätzliche Peripheriegeräte zu der Konfiguration hinzufügen.

Gemäß der traditionellen Entwicklungspraxis wird eine moderne Interpretation eines ersten „Hallo-Welt“-Programms mit einem Entwicklungsprojekt mit einer blinkenden LED umgesetzt. Diese Anleitung enthält die vollständige Dokumentation hierzu und führt den Entwickler durch den Entwicklungsprozess bis hin zu der beschriebenen Basisfunktion. Bild 7, ein Screenshot aus der Anleitung, zeigt die Zuordnung des Ausgangssignals zu dem benannten GPIO-Pin, an dem eine LED auf der Basiskarte angebracht ist.

FPGAs

Bild 7: Beispiel für die Zuordnung eines GPIO-Pins mit blinkender LED. Digi-Key

FPGAs

Bild 6: System-Builder-Assistent von Libero – beispielhafte Einstellung der Taktgeberfunktionen innerhalb des MSS. Digi-Key