Eine Planänderung - FPGA Einsatz
Bisher war es angedacht, den Computer nur zu simulieren.
Ich hatte jetzt aber in einem komplett anderen Projekt eine Möglichkeit, mit FPGAs (Erklärung folgt) zu spielen.
Da ich auch zeitich etwas angespannt war, gab es hier leider länger keine Fortschritte.
Aber mit FPGAs lässt sich schön spielen und damit geht es dann hoffentlich auch hier wieder weiter.
Was sind FPGAs?
Die Abkürzung steht für Field Programmable Gate Arrays oder im Einsatz (um)programmierbare Logik-Schaltungen.
Im Prinzip sind das zig tausende von Logikgattern, wie bereits benutzt. Das besondere ist nun, dass sich diese Softwaresgesteuert in Hardware neu verbinden lassen. Als würde man per Software die Leiterbahnen auf der Platine ändern. Gelöst wird das durch aufwende Beschaltung in den FPGA, die diese relativ teuer machten. Allerdings ging auch dort die Zeit voran und inzwischen gibt es die "kleinen" Varianten schon für einen schmalen Taler. Und selbst die kommen schon mit ordentlichen Daten her.
Ich hab hier für ein Kit aus Cyclone IV, Programmiergerät und einer Break-Out-Platine ca. 82€ bezahlt. Teurer als ein Arduino Clone aber ein ganz anderes Ding.
Was sind die Vorteile von FPGA gegenüber einem Mikrocontroller?
Das sind zwei komplett verschiedene Dinge, daher schwer zu vergleichen. Bei einem FPGA werden wirklich die Logikelemente verschaltet, d.h. ich kann die bisherigen Pläne 1 zu 1 auf dem FPGA abbilden, die Dinge passieren dann auch gleichzeitig, als hätte ich´ das mit einzelnen ICs gebaut. Ein Mikrocontroller wird dagegen in einer Programmiersprache programmiert und führt die prinzipiell von vorne nach hinten seriell aus.
Ein typischer Mikrocontroller kommt mit +- 20 IO-Pins daher, FPGAs haben hunderte. Mein Experimentierboard hat 164 und das ist, wie geschrieben, ein kleiner FPGA. Auf einen Mikrocontroller kann ich Software hochladen, die dann ausgeführt wird, der FPGA wird in einer Hardwarebeschreibungssprache konfiguriert. Wenn ein FPGA über genug solcher Logikelemente verfügt, kann aber auch ein kompletter Mikrocontroller oder hier, ein komplette Computer auf dem Chip abgebildet werden. Der sollte sich dann auch korrekt verhalten. Für einige FPGAs gibt es komplette CPU Konfigurationen zum runter laden, teilweise gegen Geld, teilweise Open-Source. Teilweise gibt es auch Hybrid-Boards, die einen festen Mikrocontroller-Kern haben plus frei konfigurierbare FPGAs für Spezialdinge.
Wofür werden FPGAs eingesetzt?
Typischerweise werden die dann eingesetzt, wird hohe Datenmengen mit hohen Parallelität verarbeit werden und wo sich ein eigens dafür hergestellter Chip finanziell nicht lohnt. Oder wenn die Operationen auf den Daten angepasst werden müssen. Beispiel: Foto- und Videobearbeitung in der Kamera. Der Sensor liefert auf zig Kanälen gleichzeitig jeweils die Bildinformationen. Je nach Sensor X Zeilen. Wenn ein "normaler" Prozessor das empfangen soll, muss der so schnell sein, dass er diese Daten Stück für Stück holen kann, mit perfektem Timing. Bei "normalen" Dingen wie Full-HD und 50 Bilder pro Sekunde mag das noch gehen, aber bei 4K, 8K oder High-Speed-Aufnahmen wird das schon problematisch.
Oft kommt dann ein FPGA zum Einsatz, der mit perfektem Timing den Sensor ausliest und das Bild in ein Stück RAM speichert. Von dort holt sich der Prozessor das Bild ab und macht die Bearbeitung. Nur als Rechenbeispiel: Eine Fotokamera mit 24Megapixeln (6000x4000 Pixel) wirft pro Bild 6000 Pixel x 4000 Pixel x 3 Kanäle x 14 Bits Daten raus. 3 Kanäle, jeweils für rot, grün und blau und 14 Bit pro Pixel. Macht grob eine Milliarde Bits. Jetzt wirft die Kamera das aber z.B. 50 mal pro Sekunde raus, macht 50 Milliarden Bits pro Sek oder 6,3GB pro Sekunde. Damit hat auch eine aktuelle 5GHz CPU so Probleme. Oder eine High-Speed Kamera mit "nur" Full-HD, aber dafür mit 1000 Bildern/Sek, da sind es schlappe 10GB/s Rohdaten. Ein FPGA kann nun hingehen und diverse lokale Kompressionen durchführen um dann die Ausgaberate in den RAM zu reduzieren, sowie schon vorab Berechnungen drauf ausführen. Und das Parallel mit vielen Kanälen. Ähnlich wie eine Grafikkarte die einzelnen Pixel auf dem Bildschirm parallel berechnet. Je nach Bedarf muss der richtige FPGA mit entsprechender Leistung, Taktrate und Anzahl Logikelementen ausgewählt werden. Die können dann auch schon mal mehrere Tausend Euro das Stück kosten.
Wofür wird der FPGA hier verwendet
Hier nutze ich den FPGA um die bisher nur simulierten Schaltung auch in Quasi-Hardware zu bauen und zu testen. Es wird aber bei der bisherigen Form bleiben, alles wird weiterhin online im Browser simuliert werden. Aber wer will, für den werde ich dann die Pläne für einen FPGA bereitstellen.
Wie wird ein FPGA konfiguriert
Ich verwende hier ein Breakout Board mit einem Cyclone IV Chip, den ich mit Quartus-Lite bespaße, grundsätzlich gehen auch andere, aber da kann ich nichts zu sagen, ohne praktische Erfahrung. Das ist zwar eine Closed-Source Software, aber die Lernkurve ist schon so steil genug, später kann ich mir andere Entwicklungsumgebungen und andere Tools anschauen. Später.
Die Software übernimmt meine graphischen Pläne (Mit Logik-Elementen analog den bisheriger Simulator-Plänen), nimmt die konfigurierten IO-Pins (basierend auf dem physischen Pins des Breakoutboards) und erstellt einen Plan, wie intern welche Logikelement mit welchen verbunden werden. Der wird dann auf ein EEPROM auf dem Board hochgeladen und steht nach dem Reset innerhalb von Sekunden zur Verfügung.
Quasi wie ein programmiertes Steckbrett aus tausenden Chips, nur ohne Kabelsalat, falschen Pins oder losen Verbindungen.
Die nächsten Schritte
Ich werde nun den letzten Stand umsetzen und in der FPGA-Software nachbauen und schauen, ob es auch so klappt, wie erhofft. Dann kommen die nächsten weiteren Schritte, damit ich mit dem Ding endlich mal "Pong" auf meinem Bildschirm spielen kann ;)