Beiträge von mikemcbike

    jessybr: nein, ich bin definitiv nicht neu hier und immer noch der gleiche MMB... ;)


    Es geht weiter. Ziel der Bemühungen ist die Umsetzung eines der bekanntesten Spiele meiner Generation in einem FPGA: Pong.
    Zugegeben: es ist nicht sehr komplex, aber es ist ein gutes Beispiel dafür, was möglich ist und wie man es macht.
    Wir beginnen mit dem Originalschaltplan - hier mal der erste Teil "Takterzeugung"
    [ATTACH=CONFIG]34564[/ATTACH]


    Da geht's schon los... 14,31818 MHz. Das Altera Board hat drei verfügbare Quarze: 24, 27 und 50 MHz... na toll.


    Aber hey, die Entwickler haben sich was dabei gedacht und PLLs (Phase Locked Loop) mit eingebaut. Das sind Frequenzvervielfacher, die aus einem Eingangstakt einen neuen Takt mit mehrfacher Frequenz machen können. Mit ein wenig Rumprobieren kommt man auf einen Ausgangstakt von 144 MHz, wenn man 27MHz mit 16 multipliziert und dann durch 3 teilt. Dann noch durch 10 geteilt und schon hat man 14,40000 MHz, das ist an 14,31818 nahe genug dran.


    Der Quarz-Takt:
    [ATTACH=CONFIG]34558[/ATTACH]


    Der Maximaltakt nach dem PLL (keine Ahnung, warum der so Kacke aussieht):
    [ATTACH=CONFIG]34559[/ATTACH]


    Und sauber geteilt:
    [ATTACH=CONFIG]34560[/ATTACH]


    Sodele. Wenn man jetzt an diesem wundervollen Arbeitsplatz
    [ATTACH=CONFIG]34561[/ATTACH]


    noch ein paar Zähler und Vergleicher in den Code reinpfriemelt, dann bekommt man ganz schnell die passenden Synchronsignale:
    [ATTACH=CONFIG]34562[/ATTACH]


    Da stimmt jetzt die Frequenz noch nicht und auch die Anzahl der Zeilen, aber für 10 Minuten VHDL Code läuft das schon mal ganz gut.
    [ATTACH=CONFIG]34563[/ATTACH]


    [ATTACH=CONFIG]34565[/ATTACH]

    Es gibt verschiedene Level der Emulation:


    MAME - Nachbildung der Hardware eines Spielautomaten über eine Programmierung in C.


    Der PC versucht, möglichst akkurat die Vorgänge der Hardware als Simulation nachzubilden. Das funktioniert in der Regel ganz gut, ist nicht 100% zeitgenau und auch die Nachbildung analoger Vorgänge ist halt mit Software nur angenähert simulierbar. Oft werden komplizierte Hardware-Konstrukte vereinfacht emuliert, damit überhaupt noch ein flüssiges Spiel möglich ist. Der Unterschied zwischen MAME und der Realität ist spür- und messbar. Ein Windows PC ist halt nun mal keine Echtzeit-Umgebung.


    Multiplatinen - MAME auf ARM


    Die vielen Multiplatinen auf dem Markt machen genau das, was MAME macht, nur schlechter. Um sich Entwicklungsaufwand zu sparen, haben in der Regel findige Asiaten den nicht kommerziellen MAME-Source-Code in einen ARM-Prozessor gedengelt, der hart an der Leistungsgrenze oder darüber fährt. Wo es gar nicht mehr ging, hat man einfach auf Details verzichtet. Eine der schlechtesten Alternativen zu richtigen Platinen, wie ich meine - und aus dem Blickwinkel der freien Software einfach eine Frechheit!


    FPGA - Simulation in Hardware


    FPGAs (Field Programmable Gate Arrays) bieten Logikbausteine. Viele. Sehr viele. 500.000 sind keine Seltenheit. Und aus diesen kann man mittels einer Beschreibungssprache (VHDL) digitale Hardware nachbauen. Diese verhält sich dann auch nicht anders, als ein ganzer Sack voller 74LSXX-TTL-Bausteine, wie er auf echten PCBs zu finden ist.
    FPGAs bieten also eigentlich keine Emulation, sondern einen 1:1 Ersatz der digitalen Hardware. Ein akkurat nachgebildetes Arcade-Spiel in einem FPGA ist messtechnisch nicht vom Original zu unterscheiden. Timing und Verhalten ist absolut identisch, wenn man es richtig programmiert hat! Außerdem ist ein FPGA in der Lage, Zeiten im Bereich von 10ns genau einzuhalten, ohne dass ihm irgend ein Betriebssystem hineinpfuscht.


    Ein solches "Spielbrett" (Evaluation Board) habe ich mir von Altera besorgt. In loser Folge werde ich mal aufzeigen, was man arcadiges daraus machen kann.


    [ATTACH=CONFIG]34553[/ATTACH]


    Und zwei Stunden und 50 Zeilen VHDL-Code später blinkt die erste LED! :D


    [ATTACH=CONFIG]34554[/ATTACH]


    Fortsetzung folgt!