Stolpern und Zaudern: Erste Schritte mit FPGAs
Mit ein wenig Hintergrundwissen ist jedem eigentlich klar, was man unter einem Field Programmable Gate Array verstehen kann. Ein Gitter aus Schaltungen, die man nach Belieben zusammen stecken kann und die dann Signaleingänge logisch verschalten und entsprechende Signale wieder ausgeben. So weit die Theorie hinter FPGAs. In der Praxis stellt sich das für einen durchschnittlichen Programmierer schon um einiges schwieriger dar.
Dschungel aus unbekannten Chips und Boards
Für FPGAs gibt es keinen Standard-PC, alle Systeme sind Embedded Systeme. Jedes verfügbare Board ist anders als die anderen. Schnittstellen, Adressen, Speicher usw. unterscheiden sich, haben unterschiedliche Größen und sogar Spannungen. Sogar die Chips der gleichen Reihe vom gleichen Hersteller sind verschieden. Ein echter Prozessor-Zoo.
Wichtig im Markt sind drei Chiphersteller: Xilinx, Altera und Lattice. Jeder von ihnen bietet eine große Palette an FPGAs. Die Größten kommen derzeit von Xilinx mit 4 Mio logischen Elementen. Diese kosten dann aber auch mehrere tausend Dollar und Entwicklungsboards etwa mit PCIe kommen gerne auf $70.000 pro Stück. Am unteren Ende der Skala finden sich Chips für wenige Cent. Allerdings sind Boards mit preiswerteren FPGAs auch nicht grade billig. Den Zynq 7010 verkauft Xilinx beispielsweise für unter $10 bei Abnahme von größeren Stückzahlen. Allerdings ist die Entwicklung eines Boards so aufwendig und die Zielgruppe so klein, dass ein typisches Board dann doch gerne $200 kostet.
Allerdings bieten solche Chips und Boards dann gerne auch mehr als es ein Arduino oder ARM-Pendent könnte. Die Zynq-Reihe von Xilinx ebenso wie die Cyclone-Reihe von Altera enthalten neben dem unterschiedlich dimensionierten FPGA auch einen ARM-Core (beim Zynq sogar einen Dual-Core). Diese Form des Designs hat sich schon früher mit PowerPC-Cores durchgesetzt und ist für die Entwicklung eine unglaubliche Erleichterung. Man kann dadurch den FPGA-Core dort einsetzen, wo er wirklich sinnvoll ist: Signalanalyse und -verarbeitung. Entsprechend viele Ein- und Ausgänge bieten solche Boards. Einen Sonderfall stellt das Parallella von Adapteva dar. Neben einem Zynq 7020 (Dual ARM und FPGA mit knapp 90k Logic Cells) hat es noch einen Parallelprozessor mit 16 Cores. Für $100 ein absolut faszinierendes Stück für Experimentalprojekte.
Ohne einen separaten ARM-Core kommt der inzwischen sehr weit verbreitete Spartan 6 von Xilinx. Boards mit diesem Chip bekommt man schon für etwas über $50. Das hervorragend designte Mojo wurde erfolgreich über Kickstarter finanziert. Mit dutzenden digitalen und einigen analogen I/Os ist es ausgezeichnet für Frequenzanalyse, Robotik und Steuerung geeignet.
Entwicklungstools: eingeschränkte Auswahl
Mit der Auswahl auf einen Chip hat man sich leider aber auch auf eine Toolchain für die Entwicklung festgelegt. Jeder Chiphersteller bringt seine eigene Entwicklungsplattform mit. Bei Xilinx nennt sich diese ISE (statt IDE). Es handelt sich um ein Monster, das Eclipse wie einen schlanken Editor erscheinen lässt. Alles soll man damit machen und alles kann man damit machen. Aber für jeden Schritt gibt es verschiedene Subtools, unterschiedliche Interfaces und einen riesigen Katalog an eigenen Begriffen. Wer aus der Softwareentwicklung kommt ist hier vollkommen lost. Es empfiehlt sich vor dem Beginn ein Blick auf die vielen Tutorials bei Youtube.
Bevor man sich die Tutorial jedoch ansieht, muss man sich entscheiden, in welcher Sprache man denn programmieren (Es heisst nicht programmieren!) will. Verilog ist eher in den Staaten verbreitet und VHDL in Europa. Zu den Unterschieden und den Grundlagen von VHDL gibt es eine gute Einführung von der Uni Kiel.
Prinzipiell ist es auch möglich, die Programmierung mit Comandline-Tools zu machen. Allerdings wird man Helfer wie make oder ant vermissen. Je nach Projekt muss man sich mit Shell-Scripten behelfen und diese anpassen. Alle notwendigen Anleitungen findet man in dem Tutorial “Using Xilinx Tools in Command-Line Mode“.
Die Entwicklung unter OSX ist nicht ohne einige Klimmzüge möglich. Mit einer VM in der Linux läuft, die die Xilinx-Tools beherbergt kann man sich aber helfen. Die Übertragung der fertigen Binärfiles funktioniert auch unter OSX z.B. mit verfügbaren Python-Scripten.
Es läuft!
Hat man all die Hürden überwunden, wird man aber ein ähnliches Hochgefühl haben, wie bei seinem ersten Assembler-Programm. FPGAs sind definitiv die hohe Kunst der Programmierung und zeigen erst wirklich, wie (klassische) CPUs tatsächlich funktionieren. Sie sind extrem energiesparend, alle Prozesse laufen gleichzeitig und sie sind in ihren Möglichkeiten nahezu unbeschränkt. Nur an den Tools muss noch gearbeitet werden. Aber es gibt ja auch schon einen FPGA-Assembler und eine Forth-Implementierung für FPGAs.