FPGA - Und was daran so toll ist
WARUM FPGA DIE BESTE EMULATION IST, OHNE EINE EMULATION ZU SEIN!⌗
Sodele, das letzte Mal habe ich ein Video gepostet, bei dem ich gezeigt habe, wie man auf einem Analogue Pocket (https://www.analogue.co/pocket) jetzt SNES-Spiele spielen kann und war da mehr als hyped und einige User haben - ZURECHT - gefragt, was daran jetzt so besonders sei, da man doch schon sehr lange SNES auf etlichen Geräten emulieren könne. Dabei gab’ es auch einige User, die mehr als interessiert waren, die Besonderheit dieses Gerätes zu verstehen und überhaupt Teil der FPGA-Faszination zu werden. Für eben diese und vielleicht auch anderen Interessierten hier ein paar Erklärungen.
WAS IST FPGA?⌗
Grundsätzlich ist es mal so, dass FPGA (https://de.wikipedia.org/wiki/Field_Programmable_Gate_Array) eigentlich ein alter Hut ist und in der Industrie schon sehr viel länger als in Consumer-Geräten verwendet wird. Stellt euch vor, ihr hätte einen Chip, bei dem ihr jederzeit festlegen könnt, wie sich die Transistoren (oder besser die “Logik-Gatter” innerhalb des Chips verhalten sollen. Also eigentlich so eine Art T-1000 auf Chip-Ebene. So ein FPGA-Chip hat also die Möglichkeit, dass ein Entwickler ihm zum Zeitpunkt X eine Art Schaltbild mitteilt und ihm dann sagt “Wenn Strom bei dir anliegt an deinen verschiedenen Eingängen, dann hast du gefälligst am Ende das folgende Ergebnis auszuspucken”. Mal sehr simplifiziert. Das wird mit der sogenannten HDL gemacht (siehe Wikipedia https://de.wikipedia.org/wiki/Hardwarebeschreibungssprache). Ich kann mich also zB Daheim hinsetzen, kann mir so einen FPGA holen mit zB drei Eingängen, kann hinter den Chip ein paar LEDs packen und kann jetzt vorm Start mittels HDL den Chip so einstellen, dass er für verschiedene Konfigurationen die LEDs an oder ausschaltet. “Häh? Für was brauch ich da so einen Chip? Das kann ich doch mit normalen Schaltungen auch selbst löten!” Richtig. Aber jetzt kommt eben die Krux. Wenn ich Lust habe, dass die LEDs nach einem Tag jetzt anders geschaltet werden sollen, dann muss ich das nur in meiner HDL ändern, schnell auf den FPGA bringen und schwups habe ich da eine Art, die LEDs blinken zu lassen. “Boah ey, toll, das kann ich mit einem Microcontroller auch.” RICHTIG. Aber jetzt kommen wir zu den feinen Unterschieden. Der Microcontroller bekommt dieses Verhalten nicht auf der “Stromebene” sondern auf der “Software-Ebene”. D.h. in einem Micro-Controller wird - natürlich da dann oft auf Maschinencode-Ebene - das Verhalten implementiert und wenn nun Strom an den Eingängen anliegt, dann wird der Code ausgeführt und das erwartete Ergebnis dann an den Ausgang gepackt. Ihr seht schon, dass wir in einem Microcontroller nun eigentlich schon eine Ebene mehr haben: • 1. Strom liegt an • 2. Dieser Strom wird interpretiert • 3. Strom wird passenden an den Ausgängen ausgegeben. Bei einem FPGA-Chip passiert alles auf Strom-Ebene. Der Strom fließt also durch die “Gatter” und kommt dann passend am Ende wieder raus (Auch hier wieder mega simplifiziert zur Veranschaulichung).
SUPER? UND FÜR WAS BRAUCHT MAN JETZT DIESES FPGA?⌗
FPGAs werden seit Jahrzehnten in der Herstellung von Schaltungen und CPUs benötigt, um geplante Weiter- und Neuentwicklungen zu testen. Stellt euch vor, ihr seid ein super, dufter Intel-Ingenieur und würdet jetzt gerne die Funktionsweise eures neuen Super-Chips testen, ohne dass dieser hergestellt werden muss. Genau DAFÜR kann man FPGAs verwenden. FPGAs haben natürlich den Nachteil, dass diese Aufgrund ihrer Flexibilität deutlich größer (komplizierter) herzustellen sind, als der Chip selbst am Ende und man hat es dann oft mit FPGA-ANLAGEN zu tun, die mehrere Räume/Racks umfassen. So wird dann der Schaltplan einer neuen CPU mit HDL beschrieben und dann werden die Millionen an FPGA-Logik-Gatter passend konfiguriert und der Plan des Chips (also der Entwurf) kann auf seine Funktionalität getestet werden. Das war so einer der ERSTEN Anwendungsfälle, für die die Teile eigentlich gebraucht wurden. Durch die Weiterentwicklung und dadurch, dass auch FPGAs leistungsfähiger und kleiner wurden, werden FPGAs mittlerweile genutzt, um “Alt”-Systeme in Produktionen oder Geräten los zu werden. Aber auch in Autos werden FPGAs gerne genutzt, da es für viele Anwendungsfälle einfach keine optimalen Chips gibt. In diesem Falle kann jemand einfach das FPGA so einstellen, dass es für gewisse Situationen optimal funktioniert (zB autonomes Fahren) etc. Da es in vielen Situationen in der Industrie oftmals keine Standards gibt, ist es für Hersteller einfach zu teuer, Chips herstellen zu lassen, die exakt den Anwendungsfall abdecken. Also stellt man sich die Chips dann einfach selbst mithilfe von FPGAs her. Das ist flexibler. Und zusätzlich ist man nicht auf mehrere Chip-Hersteller angewiesen und kann stattdessen in Großen Margen von FPGA-Herstellern kaufen. Aber auch in anderen Industriezweigen werden FPGAs gerne verwendet. Im Endeffekt immer dann, wenn auf Hardware-Ebene möglichst ohne Latenz, mit maximaler Flexibilität und für dedizierte Fälle Chips gebraucht werden (zB DACs).
OK. UND WAS HAT DAS JETZT MIT KONSOLEN ZU TUN?⌗
Naja. Genauso, wie FPGAs IRGENDWELCHE Chips darstellen können, können die ja genauso auch Konsolen-Chips “emulieren”. Emulieren ist hierbei nicht ganz richtig. Man muss eigentlich von simulieren sprechen, da sie in ihrer Funktion eben ein fast perfektes Ebenbild sind und den “Strom” perfekt nachbilden. Eben diese Fähigkeit macht sich Analogue mit ihren Geräten zu nutze. Gerade von GB(A)/NES/SNES gibt es mittlerweile durch die Jahrzehnte SEHR exaktes Reverse Engineering, was im Endeffekt die Chips einer jeder Konsolen auf “Schaltungsebene” beschreibt. Somit nimmt Analogue eben dieses Wissen und konfiguriert ihre FPGAs so, dass sich diese wie ihre Ebenbilder verhalten. Man HAT ALSO in den Analogue-Geräten auf der Hardware-Ebene ein perfektes Ebenbild der Konsolen-Architektur, wie man sie auch in den Originalen wieder findet. Und der Witz ist, dass sich bei Konsolen nicht nur Chips in den Konsolen sondern auch in den Modulen wieder finden!
JO. SUPER. UND WAS IST DARAN JETZT BESSER ALS MIT SOFTWARE-EMULATION?⌗
Auch Heute gibt es immer noch Probleme mit Software-Emulation. Viele dieser Probleme haben mit Performance und mit Timings zu tun. Das meiste rührt daher, dass Software-Emulation eben NICHT auf der untersten Ebene des “Stromes” passiert, sondern es noch viele weitere Schichten gibt, die parallel zu einem Spiel ausgeführt und durchlaufen werden müssen. Arbeitsspeicher - Programm - Betriebssystem - Maschinencode - Bus - CPU - (vielleicht wieder zurück) - GPU - Anzeige. Dazu kommt noch, dass in einer Konsole viele Komponenten parallel ihre Arbeit verrichten und die CPU der Konsole als zentrale Koordinationseinheit verwendet werden kann. Somit arbeiten pro “Tick”, die eine CPU und die Komponenten machen können, eben Audio und GPU und auch der Chip im Modul parallel und liefern eben diese Ergebnisse dann auch parallel der CPU, dass diese damit was anfangen kann. In der Software-Emulation ist diese Orchestrierung VIEL schwieriger, da das Schedulung zuallererst beim Betriebssystem liegt und - obwohl man heutzutage auch viele Cores hat - man dennoch maximal an der Spielelogik dran bleiben muss, die 50/60hz auf die verwendete HZ-Zahl der CPU mapped. DIESES Gedöns hat man mit FPGA nicht 🙂 Innerhalb eines FPGAs können mehrere Konsolen-Chips gleichzeitig simuliert werden. Und das tolle ist, dass man einem FPGA sagen kann, dass es zB nur mit 1,7Mhz agieren solle. Auch die Skalierung und die Ausgabe auf HDMI ist bei FPGA kein Problem - oder zumindest bei FPGA-Konsolen - da man eigentlich nur hinter den FPGA-Chip einen weiteren Chip klemmt, der das Bild passend dann ausgibt. Bei der Software-Emulation muss auch DAS zusätzlich von der Software innerhalb der Orchestrierung mit dem passenden Clock der Konsole getan werden. Erbsenzählerei natürlich. Aber für Enthusiasten macht das eben durchaus den Unterschied.
OK. KAPIERT. UND WAS WAR JETZT BEIM ANALOGUE POCKET SO GEIL, DASS DA EIN VIDEO POSTEST?⌗
Also. Der Analogue Pocket ist zuallererstmal ein GBC/GBA, der auf dem FPGA zur Laufzeit konfiguriert werden kann. Der Pocket sieht also aus wie ein umgebauter IPS v5 Gameboy verhält sich aber EXAKT wie ein GBC oder eben ein GBA. DAS WAR ER AM ANFANG! Das Tolle am Analogue ist aber, dass der Analogue mit ZWEI FPGA-Chips auf den Markt kam und Analogue vor paar Wochen gesagt hat: “Ey, wisst ihr was? Wir öffnen der Community den zweiten Chip und ihr könnt damit machen, was ihr wollt”. Und die Community hat nun sehr viele Konsolen schon auf eben diesen Chip geportet (https://www.reddit.com/.../analogue_pocket_openfpga.../). Und nochmal: Das Gerät verhält sich also EXAKT so (zu 99% je nach Maturity des Cores - eine Konfiguration eines anderen Chips nennt man so) wie das Konsolen-Pendant. Ohne Lags. Ohne Performance-Hiccups. Ohne lästige Workaround. Und DAS ist eben das Geile hier. Mit den Cores kam natürlich - da es keine 100 Adapter gibt - auch die Möglichkeit, direkt die Spiele per Rom zu starten. Auch DAS ist kein Problem, da auf dem FPGA für die meisten Spiele noch platz für den zugehörigen Zusatzchip ist. Übrigens verwendet Krikkz für seine Everdrive-Cardridges auch FPGA, um die ganzen Specialchips zu simulieren, da man ja mit dem Rom nicht mit liefern kann. Somit bekommt man durch FPGA die Spiele-Logik und das Verhalten der Original-Konsolen, kann aber eben dann einfach HDMI nutzen, ohne da Murks mit Modding oder Retrotrink etc machen zu müssen, die oftmals noch einen zusätzlichen Lag einbauen.
WOW. UND WIE KANN ICH JETZT MIT FPGA STARTEN?⌗
Leider ist in der Retro-Szene ein regelrechter Hype um FPGAs und deren Simulation entstanden und Analogue (https://www.analogue.co/) kann schlicht kaum nach liefern. Da hat sicherlich auch die derzeitige Chipsituation einen großen Anteil dran und Analogue kalkuliert auch immer sehr dünn. Analogue war aber da eigentlich auch nicht der “Vorreiter” sondern hat das Thema für den Mainstream tauglich und verkäuflich gemacht. Es gibt eine sehr große Szene um den MisterFPGA. Im Endeffekt eine selbstgebaute Konsole auf Basis von FPGA und einer krassen Community, die eben sehr viele Addons und auch die Software liefert. Die meisten Cores, die derzeit auf den Analogue-Pocket geportet werden, haben als Basis die Mister-Cores. Wenn ihr also UNBEDINGT in das FPGA-Business einsteigen wollt, dann kann ich euch raten, den Analogue Pocket auf der Page vor zu bestellen oder euch mit dem Thema “MisterFPGA” zu beschäftigen. Es gibt in Deutschland einen super Vertrieb: https://www.mister-fpga.de/sonstiges/mister-fpga-emu-2-0/ Aber auch https://ultimatemister.com/ ist super. Mit dem Mister FPGA könnt ihr auch eure Original-Controller nutzen. SCHLUSSWORT Ich hoffe, ich konnte euch jetzt ein wenig Klarheit verschaffen und die Konfusion ist etwas weg. Sicherlich ist FPGA mit einem hohen Preis verbunden, aber gerade für Enthusiasten und Puristen, die das alte mit dem neuen verbinden möchten, die beste Lösung. Ich bin mir zu 100% sicher, dass FPGA auch bei den großen Herstellern in paar Jahren Einzug erhalten wird, um die Abwährtskompatibilität zu älteren Konsolen zu gewährleisten, so wenn Software-Emulation nicht ausreicht. Wünsch’ Euch einen schönen Abend!