1. Einführung
Da zumindest einige hier im Forum anscheinend wenig Erfahrung mit FPGAs haben und deshalb wohl einige Vorurteile bzgl dieser Technik haben, wollte ich hier mal eine kurze Einführung geben.
Was sind die prinzipiellen Unterschiede zwischen Mikroprozessor und FPGA Programmierung? In einem FPGA werden im allgemeinen keine Instruktionen seriell nacheinander ausgeführt, sondern es wird anhand einer Beschreibung eine Schaltung erzeugt, in welcher die Einzelnen Komponenten (falls nicht anders verlangt) unabhängig voneinander arbeiten. D.h. eine einfache Folge von nicht-blockierenden Zuweisungen wie
a <= 1; // Setze a auf den Wert 1
b <= 3;
c <= 5;
wird _nicht_ nacheinander ausgeführt! Diese 3 Anweisungen können alle in einem Takt gemeinsam ausgeführt werden. Dadurch kann man mit FPGAs trotz niedrigerer Taktfrequenzen als bei CPUs im Endeffekt wesentlich höhere Ausführungsgeschwindigkeiten erreichen. Der Nachteil (ein Fehler, den alle CPU-Coder früher oder später machen) ist, dass Abhängigkeiten nicht wie erwartet funktionieren:
a <= 1;
b <= a+1; // b muss hier nicht 2 werden, da die Zuweisung an a evtl. noch gar nicht ausgeführt wurde!
Zu diesem Tutorial: es soll keines der Tutorials und Lernseiten im Internet ersetzen, sondern nur anhand eines konkreten Beispiels etwas 'Appetit' auf das Spielen mit FPGAs machen.
Man kann das Tutorial auch komplett ohne Hardware durchspielen und alle Programme im Simulator laufen lassen und die Ergebnisse betrachten. Auf die Einstellungen des Simulators werde ich jedoch zunächst nicht eingehen.
Da echte Hardware mehr Spass macht, habe ich ein sehr günstiges Einsteigerboard herausgesucht, mit dem man für sehr wenig Geld FPGA Programmierung lernen und üben kann. Meine Wahl fiel auf das
ALTERA cyclone ll EP2C5T144 Minimum Development Board
, welches man bei ebay.com zusammen mit dem USB Blaster (zur Programmierung des Boards) für etwa 15-17 Euro bekommen kann.
Das Board hat 4608 Logik Elemente (LEs) und 119808 Bit Block ram, also 14976 Byte. Viele werden jetzt zwar mit der Speichergrösse etwas anfangen können, aber keine Einschätzung haben, wie weit die ca 4600 LE reichen.
Als Hausnummer kann man etwa abschätzen, dass gängige 8-Bit CPU's ca. 2000 LE brauchen, so dass etwa eine 6502 Implementierung auf dem Board durchaus möglich ist. Dies wurde z.B. hier gezeigt:
http://searle.hostei.com/grant/uk101FPGA/index.html
Hierbei bietet das Board noch genug Reserven um eine Videoausgabe und ein Tastatur-Interface zu integrieren.
Für diese Zwecke sind 89 I/O Pins auf der Platine nach aussen geführt.
Das Board hat einen 50 MHz Quarz an Board, der maximale Takt beträgt 300 MHz (höhere Frequenzen können als 50 MHz mit PLLs aus den 50 MHz erzeugt werden).
Ausserdem hat das Board 3 frei verwendbare LEDs (plus eine Power-LED) an Board, sowie auch ein Taster (z.B. verwendbar als Reset-Taster o.ä.).
Die Programmiersoftware Altera Quartus 2 kann man kostenlos aus dem Internet herunterladen (Achtung: der Download ist über 4GB gross!), so dass dafür keine weiteren Kosten anfallen.