Diese Seite ist die erste in einer Reihe von fünf Seiten darüber, wie du ein professioneller FPGA-Designer wirst. Ich beginne mit einem Überblick und ein paar Anregungen, wie du am besten anfängst.
Einleitung
Diese Seitenreihe ist für dich gedacht, wenn du FPGA-Design lernen willst – insbesondere, wenn du daraus einen Beruf machen möchtest –, aber im Informationsozean da draußen den Überblick verlierst. So viele Tutorials, Blogbeiträge, Videokurse und Forenthreads. Und inzwischen wird ein großer Teil dieses Materials von KI erzeugt. Es ist schwer zu erkennen, was von jemandem geschrieben wurde, der den Weg kennt, und was nur wertlose Worte sind, die professionell klingen.
Wenn du an dem Punkt bist, an dem du dich von allem, was du angeblich lernen musst, überwältigt fühlst, bist du definitiv nicht allein. Die Liste der Dinge, die man beherrschen soll, ist wirklich lang, und es ist schwer zu sagen, was tatsächlich zählt und was nur Lärm ist.
Ich bin nicht hier, um dir zu sagen, was du tun sollst, oder dir einen Lehrplan zu geben, den du auf Punkt und Komma befolgen musst. Ich möchte den Zweck und die Bedeutung jeder Fähigkeit erklären, damit du selbst entscheiden kannst, was du wann priorisierst. Es ist ohnehin schon herausfordernd. Wenn du dir unnötige Arbeit sparen und dein Ziel erreichen kannst, umso besser.
Aber wenn es dir nur darum geht, ein Bewerbungsgespräch zu bestehen, kann ich dir vermutlich nicht viel helfen. Bewerbungsgespräche sind unberechenbare Tiere. Jeder Interviewer hat seine eigene Art, einen Kandidaten zu beurteilen, und oft suchen sie nach jemandem, der sie an sich selbst erinnert. Schließlich halten wir uns alle für die klügste Person im Raum, oder? Und vielleicht funktioniert der naive Ansatz: Wenn du gut bist, findest du einen Job.
Wofür werden FPGAs eingesetzt?
Bevor wir uns in die Fähigkeiten stürzen, lohnt es sich, einen Moment darauf zu verwenden, worum es in diesem Beruf eigentlich geht. Was bauen Menschen mit FPGAs, wie und warum?
Die Lage ist folgende: Jemand braucht eine Leiterplatte für ein neues Produkt. Die meisten Bauteile auf dieser Platine kann man auf dem Markt kaufen: Speicher, Netzteile, Steckverbinder und so weiter. Aber irgendwo mitten im Geschehen gibt es eine Funktion, die kein Bauteil auf der Welt erfüllt – zumindest nicht genau so, wie das Produkt sie braucht. Also entscheidest du dich, deinen eigenen Chip zu entwerfen. Das ist ein ASIC, und er ist wirklich, wirklich teuer. Der Produktionszyklus kann mehr kosten als ein Haus, und wenn du danach einen Fehler findest, kannst du nur einen Errata-Bericht (errata report) herausgeben. Und nach einer Weile eine neue Version auf den Markt bringen, wenn es dafür eine finanzielle Rechtfertigung gibt.
Die Alternative zu diesem teuren und riskanten Designzyklus ist das FPGA. Ein Chip dieser Art ist wie ein Elektronikbaukasten auf einem Stück Silizium: Er enthält viele kleine Bausteine und Leitungen, die nicht auf eine bestimmte Weise verbunden sind. Stattdessen gibt es einen großen Datenblock, der Informationen darüber enthält, wie sich das FPGA verhalten soll. Dieser Datenblock wird als Bitstrom (bitstream) bezeichnet. Die Informationen im Bitstrom konfigurieren jeden kleinen Baustein im FPGA und legen außerdem fest, wie die Leitungen im Inneren verbunden sind.
Nachdem der Bitstrom in das FPGA geladen wurde, haben wir etwas, das einem ASIC ähnelt: einen Chip, der sich so verhält, als hätten wir das Silizium für unsere eigenen Zwecke gefertigt. Nur dass er langsamer ist, mehr Energie verbraucht und das Bauteil selbst mehr kostet als ein in Massenproduktion gefertigter ASIC.
Der Bitstrom sollte nicht mit Software verwechselt werden. Sie ähneln sich insofern, als dass es oft möglich ist, eine Codezeile zu korrigieren und neu zu kompilieren, wenn etwas schiefgeht. Aber das FPGA ist kein Prozessor. Es lässt nichts „laufen“. Stell dir das FPGA als ein riesiges Feld kleiner Logikmaschinen vor, und der Bitstrom sagt jeder dieser kleinen Maschinen, was sie tun soll.
Um diesen Punkt zusammenzufassen: Das FPGA ist der fehlende Baustein in einem Elektronikprojekt. Es wird dort eingesetzt, wo du gerne einen ASIC hättest, aber lieber mehr für jedes Bauteil bezahlst und geringere Leistung in Kauf nimmst, um die Entwicklungsrisiken und -kosten zu senken. Die allerdings weiterhin hoch bleiben, nur eben weniger hoch.
Die Hauptarbeit eines FPGA-Designers besteht aus den Designaufgaben, die zu einem Bitstrom führen. Das ist vergleichbar damit, dass ein Software-Designer Code schreibt und am Ende eine ausführbare Software-Binärdatei erhält. Doch die Rolle des FPGA-Designers endet definitiv nicht dort, denn das FPGA ist Teil eines Elektronikprojekts. Darauf komme ich später zurück.
Wenn das Projekt einen eingebetteten Prozessor erfordert, ist dieser Teil oft ebenfalls Teil des FPGA. In manchen Projekten entscheidet man sich dafür, den Prozessor als separates Bauteil zu verwenden. Wie auch immer: Der Prozessor kann einfache Aufgaben erledigen oder sich wie ein vollwertiger Computer verhalten, auf dem Linux oder ein anderes Betriebssystem läuft.
Aber – es gab einmal viel Wirbel darum, FPGAs als Coprozessoren und Hardwarebeschleuniger in Rechenzentren einzusetzen. Es war auch von FPGAs für KI die Rede. Und es gibt immer noch Firmen, die diese Trommel rühren. Ich halte das schon immer für Unsinn, und inzwischen ist ziemlich klar, dass GPUs in diesem Bereich überlegen sind, besonders bei allem, was mit KI zu tun hat. Also fall nicht darauf herein. Das FPGA wird als der fehlende, wichtige Baustein in einem Elektronikprojekt eingesetzt, manchmal von sehr anspruchsvoller Art, aber relativ selten für etwas anderes.
Warum ist es schwierig?
Sagen wir es so: Wenn ich fünf Seiten darüber schreibe, was man können muss, um ein guter FPGA-Designer zu sein, dann steckt wahrscheinlich eine Menge dahinter.
FPGA-Designer werden gut bezahlt, weil es ein komplizierter Beruf ist, und der Grund dafür ist, dass er drei Fähigkeiten gleichzeitig vereint.
Die erste Fähigkeit ist Elektronik. Letztendlich entwickelst du etwas, das auf einer Platine sitzt und mit den anderen Bauteilen auf dieser Platine kommunizieren muss. Zum Projekt gehören Pins, Spannungen, Steckverbinder, Taktoszillatoren und noch viel mehr. Die Logik, die du erstellst, spricht mit echten Bauteilen auf einer echten Platine, bei echten Spannungen und echten Temperaturen.
Die zweite Fähigkeit ist „Software“. Was du schreibst und womit du arbeitest, sind Dateien, die sehr nach Software aussehen: Verilog-Dateien, Constraint-Dateien, Kompilierungsskripte (scripts). Aber es ist viel komplizierter, mit dieser Art von „Software“ zu arbeiten, aus Gründen, auf die ich später eingehe. Der Compiler, sozusagen, ist nicht in derselben Weise auf deiner Seite wie ein Software-Compiler, und die Werkzeuge, die du zum Debuggen verwendest, auch nicht.
Die dritte Fähigkeit ist anwendungsbezogenes Wissen. Als FPGA-Designer musst du dir oft fortgeschrittene Themen selbst beibringen, die mit dem Projekt zusammenhängen (oder die du bereits aus früherer Erfahrung oder aus dem Studium kennst). Signalverarbeitung, Netzwerkprotokolle, Schnittstellenprotokolle zu Computern, Standards zur Kodierung von Daten für Computermonitore und eine lange Liste weiterer Disziplinen, die mit dem tatsächlichen Produkt zusammenhängen, das du entwickelst. Es gibt immer ein neues Kommunikationsprotokoll, neue Sicherheitsvorschriften oder ein neues Bauteil mit seltsamen Schnittstellenanforderungen zu lernen.
Doch die eigentliche Herausforderung als FPGA-Designer ist diese: Das fachliche Hauptthema des Projekts hängt oft eng mit dem FPGA-Design selbst zusammen. Das bedeutet, dass du dich möglicherweise zum Experten für die Kerntechnologien entwickeln musst, die dein Unternehmen einsetzt. Typische Beispiele sind digitale Filter wie FIR und IIR, FFT, Dezimation und Interpolation; Audio- und Videoverarbeitung; drahtlose Kommunikation und Software Defined Radio; Radar; medizinische Bildgebung; Netzwerke und Paketverarbeitung; Ethernet; PCIe und USB; Videostandards wie HDMI, DisplayPort, SDI und MIPI mit all ihren Komplikationen bei Video-Timing und Farbraum; und Steuerungssysteme. Und damit ist es definitiv nicht zu Ende.
Du musst nicht all diese Dinge wissen, um FPGA-Designer zu werden. Aber du wirst im Laufe der Zeit ziemlich viele davon lernen. Wenn dir also die Vorstellung, ständig neue Technologien zu lernen, wie ein Albtraum vorkommt, würde ich fragen: Ähm, bist du sicher, dass du in FPGAs einsteigen willst?
Muss ich ein Elektronik-Zauberer sein?
Hier ist vielleicht eine gute Nachricht: Die Logik in einem FPGA-Projekt lässt sich grob in zwei Sorten unterteilen, und eine davon erfordert überhaupt kein Elektronikwissen.
Die erste Sorte ist Schnittstellenlogik. Das ist die Logik, die mit externen Bauteilen oder mit IP-Cores (IP cores) spricht, egal ob Hard- oder Soft-IP. Denke an Chips, die Videosignale oder Funksignale erfassen oder erzeugen, RAM-Chips und so weiter. Diese Art von Logik verbindet sich mit diesen Bauteilen, und an dieser Schnittstelle trifft das FPGA auf die physische Welt. Um Logik dieser Sorte zu implementieren, musst du Dinge wie Spannungspegel, Timing-Budgets und Jitter (jitter) verstehen.
Die zweite Sorte ist Verarbeitungslogik. Hier finden die eigentlichen Berechnungen statt: Verbesserung von Videobildern, digitale Filter, Organisieren oder Parsen von Datenströmen gemäß einem Netzwerkprotokoll und so weiter. Diese Art von Logik arbeitet typischerweise in einem von zwei Modi. Entweder holt sie Daten aus FIFOs oder anderen Speicherelementen und schreibt Daten dorthin, dann können wir von einem „Pure-Logic“-Projekt sprechen. Oder sie ist mit dem Datenfluss synchron, wie ein digitaler Filter, der Samples von einem Funksignal empfängt und für jedes eingehende Sample ein Ausgangssample erzeugt, mit einer Pipeline-Verzögerung (pipeline delay). Diese letzte Art ist oft schwieriger zu implementieren, weil jede Stufe mit dem Strom mithalten muss.
Der Punkt ist, dass die Implementierung von Verarbeitungslogik überhaupt kein Elektronikwissen erfordert. Es spielt keine Rolle, ob es sich um das handelt, was ich „Pure Logic“ genannt habe, oder ob sie mit einem externen Datenfluss synchron ist: Alles geschieht innerhalb des FPGA, und die Außenwelt ist für das Logikdesign irrelevant. Deshalb ist das der einfachste Weg (path) in die FPGA-Welt. Es gibt jedoch einen Haken: Es gibt nicht immer viel von dieser Art Logik in einem Projekt. Außerdem wird in einem kleinen Unternehmen erwartet, dass du ein bisschen von allem machst. Es gibt kein Entkommen.
Es gibt kein „typisches Projekt“
Wenn du nach Beschreibungen suchst, wie ein FPGA-Projekt abläuft, wirst du viele schöne Diagramme finden. Nimm sie mit einer Prise Salz. Die Realität ist chaotischer, und hier ist warum.
Zunächst einmal wird die Platine oft entwickelt, bevor klar ist, was sie genau tun soll. Das klingt verrückt, und manchmal ist es das auch, aber es ist ebenso eine Folge der Schönheit von FPGAs: der Flexibilität. Solange die Hardware diese Flexibilität nicht einsperrt, kannst du später entscheiden, was die Platine tun soll.
Zweitens werden die Funktionen des FPGA-Projekts fast immer schrittweise entwickelt. Zuerst minimale Funktionalität, und dann wird mit der Zeit Funktionalität hinzugefügt. Zum Teil, weil Manager meistens etwas funktionieren sehen wollen, und zum Teil, weil sich die Anforderungen ständig ändern. Es ist nicht ungewöhnlich, dass die Platine zusammen mit dem Projekt geändert wird, um neue Feature-Anforderungen zu unterstützen und Hardwarefehler zu beheben.
Drittens ist es üblicher, ein bestehendes Projekt fortzuführen, als bei null anzufangen. Selbst Projekte, die brandneu aussehen, starten oft von einem bestehenden FPGA-Design und einer bestehenden Platine, die an die neuen Anforderungen angepasst werden. Wenn das jemandem bekannt vorkommt, der in der Softwareentwicklung gearbeitet hat, ist das kein Zufall.
Vielleicht stößt du also auf Reden über den „typischen FPGA-Projektablauf“: Spezifikation, Architektur, RTL, Simulation, Synthese, Implementierung, Timing-Abschluss (timing closure), Bitstrom, Inbetriebnahme, Verifikation. Oder so ähnlich. Ich will nicht sagen, dass das völliger Unsinn ist, deshalb formuliere ich es so: Ich war noch nie in einem Projekt, das so funktioniert hat. Einige dieser Phasen gehen ineinander über, einige werden ganz übersprungen, und normalerweise passieren alle gleichzeitig. Der Punkt beim FPGA-Dasein ist, dass man daran gewöhnt ist, dass alles parallel passiert.
Die Erkenntnis ist diese: In einem Unternehmen besteht eine gute Chance, dass du damit beginnst, einem bestehenden Projekt Funktionen hinzuzufügen. Und wenn dieses Projekt gut strukturiert ist (ähm, ist es selten), musst du nicht vom ersten Tag an alles wissen.
Wie fange ich an?
FPGA-Design zu lernen ist eine Kombination aus dem Erwerb theoretischer Fähigkeiten und praktischer Fertigkeiten. Es liegt an dir, ob du lieber zuerst mit Elektronik herumspielst, zuerst die Theorie lernst oder von Anfang an ein bisschen von beidem machst. Alle drei Ansätze funktionieren.
Eines möchte ich dich jedoch warnen: Hüte dich davor, von FPGA-Hobbyisten zu lernen. Das kann kontraproduktiv sein, im Ernst. Die Hauptschwierigkeit im FPGA-Beruf ist, ein zuverlässiges Design zu bekommen. Hobbyisten kümmern sich normalerweise nicht darum, weil sie kein Produkt bauen, das zehn Jahre lang im Feld funktionieren muss. Deshalb bieten sie oft einen schnellen und kurzen Weg an und überspringen die kleinen und entscheidenden Details, die für ein professionelles FPGA-Design nötig sind. Du wirst dir wirklich schlechte Angewohnheiten aneignen, wenn du von ihnen lernst.
Wie kannst du den Unterschied zwischen einem Hobbyisten und jemandem erkennen, von dem du lernen möchtest? Es ist schwierig zu wissen, was richtig und falsch ist, bevor du selbst das Wissen hast. Aber du kannst ein Gefühl dafür bekommen, ob der Autor die richtige sorgfältige Haltung gegenüber FPGA-Design hat. Ich beschreibe die richtige Art von Persönlichkeit im letzten Teil dieser Reihe.
Nach all dem: Hier ist, wie ich vorschlagen würde, dass du dir die Hände schmutzig machst.
Das Internet ist voll von Beispielprojekten. Normalerweise ist es am einfachsten, mit einem FPGA-Projekt zu beginnen, das auf deine spezifische Platine zugeschnitten ist. Solche Projekte existieren oft als Teil des Pakets, genau um dich dazu zu bringen, dieses oder jenes Hardware-Stück zu kaufen.
Beginne mit einem einfachen Projekt, bei dem eine LED blinkt. Nicht, weil blinkende LEDs interessant sind, sondern weil es dich durch den ersten vollständigen Zyklus aus Implementierung und Bitstrom-Programmierung führt. Du installierst die Tools, siehst, wie ein Bitstrom erzeugt wird, und siehst, dass auf der Platine etwas passiert. Das ist für sich genommen ein Meilenstein.
Dann probiere andere Beispielprojekte aus. Denke daran, dass der Wert eines solchen Projekts darin liegt, was du daraus verstehst, und noch wichtiger, in deiner Fähigkeit, ein paar sinnvolle Änderungen am Projekt vorzunehmen und zu sehen, was passiert. Ein Projekt, das du nicht ändern kannst, ist ein Projekt, aus dem du nichts gelernt hast.
Apropos: Hüte dich vor Hersteller-Demoprojekten, die mit einer langen Liste von Anweisungen kommen: Klicke hier, klicke dort, und am Ende macht die Platine etwas Beeindruckendes. Wenn du unterwegs nichts verstanden hast und das Projekt zu kompliziert ist, um es zu verstehen und zu ändern, ist es für dich völlig wertlos. Es ist eine Demo, kein Designbeispiel.
Die letzte und schwierigste Phase ist, dich selbst mit Projekten herauszufordern, die du dir selbst ausdenkst. Du kannst reichlich Inspiration aus bestehenden Projekten im Internet holen, aber der eigentliche Punkt ist, dass du alles selbst machst. Anders als bei den meisten veröffentlichten Projekten darf die Idee für dein Projekt nutzlos und albern sein. Baue ein albernes Spiel mit LEDs und Tasten, verwandle die Platine in ein Musikinstrument (erzeuge analogähnliche Ausgangssignale mit PWM), lass die LEDs in verschiedenen Mustern dimmen und blinken, was auch immer dir einfällt. Solche Projekte werden normalerweise nicht veröffentlicht, denn wer will schon Zeit mit einer albernen Idee mit sinnlosem Ergebnis verbringen? Nun, es spielt keine Rolle, ob das Ergebnis nutzlos ist, wenn du es machst, um deine Fähigkeiten zu üben. Der Punkt ist, dass es korrekt funktioniert und dass du das mit korrekten Techniken erreicht hast. Von LEDs und Tasten kletterst du zu herausfordernderen Dingen.
Kurze Videos über FPGA können nützlich sein, insbesondere solche, die zeigen, wie man bestimmte Dinge mit der Hardware macht. Längere Videos sind normalerweise eine weniger effiziente Art zu lernen, weil sie dazu neigen, zu wortreich und unkonzentriert zu werden.
Am wichtigsten: Steuere den Lernprozess selbst. Entscheide, welche Fähigkeit du erwerben willst, und finde die Ressourcen, die dir helfen, sie zu erwerben. Lass dich nicht an der Nase durch eine Reihe von Tutorials, Videos oder was auch immer herumführen.
Welche Platine soll ich kaufen?
Das hängt davon ab, mit welchem Weg (path) du anfangen willst: „Verarbeitungslogik“ oder eine eher elektronikorientierte Art von Experimenten. Ich bespreche unten jede Möglichkeit, aber ich beginne mit ein paar Ratschlägen, die in beiden Fällen gelten.
Erstens und vor allem: Wähle eine günstige Platine. Betrachte sie als deine erste und nicht als deine letzte. Die Prinzipien sind für alle Platinen gleich, selbst für die einfachen Boards mit kleinen FPGAs, wenigen Logikzellen und nicht so beeindruckender Leistung. Die ausgefallenen Projekte, die du auf teureren Platinen durchführen kannst, haben meist sehr wenig Bildungswert. Du musst am Anfang die Grundlagen richtig hinbekommen, und dafür reicht praktisch jedes FPGA. Wenn du das Gefühl hast, aus deiner ersten Platine herausgewachsen zu sein, weißt du viel besser, wie du deine nächste auswählst.
Zweitens: Wähle eine Platine mit einem AMD FPGA. Andere Platinen mögen billiger und technisch besser sein, aber AMD dominiert den FPGA-Markt, deshalb wird Erfahrung mit ihren FPGAs und ihrer Entwicklungswerkzeug-Suite (Vivado) dir in der Zukunft am ehesten helfen.
Außerdem tun andere FPGA-Hersteller ihr Bestes, um den Umstieg von AMD auf ihre eigenen FPGAs so reibungslos wie möglich zu machen, insbesondere durch Entwicklungs-Tools, die Vivado ähneln. Selbst wenn du am Ende mit FPGAs von einem anderen Hersteller arbeitest, hast du also trotzdem einen guten Start. Ich sage definitiv nicht, dass AMDs FPGAs für jede Anwendung die beste Wahl sind, aber AMD ist der beste Ausgangspunkt zum Lernen, auch wenn du später zu einem anderen Hersteller wechselst.
Von den verschiedenen FPGA-Familien, die AMD anbietet, empfehle ich definitiv Artix-7 oder Spartan-7. Wenn du mit einem ARM-Prozessor im FPGA experimentieren willst, empfehle ich die Zynq-7000-Familie. Die günstigeren Varianten dieser Bauteile sind tatsächlich Artix-7 FPGAs mit einem zusätzlichen ARM-Prozessor. Wenn du also eines davon nimmst, kannst du es als Artix-7 verwenden, oder du kannst zusätzlich mit dem ARM-Prozessor arbeiten. Ein Zynq-7000 ist zwei in einem.
Artix-7, Spartan-7 und Zynq-7000 sind ziemlich alte FPGA-Familien. Die Unterschiede zwischen ihnen und den absolut neuesten FPGAs auf dem Markt bestehen jedoch nur in der Leistung (insbesondere Taktfrequenzen) und einer Menge spezialisierter Logikblöcke, die für einen FPGA-Anfänger keine Bedeutung haben. Wenn du ein Projekt mit allen Features eines Artix-7 (oder Spartan-7) ordentlich umsetzen kannst, hast du so ziemlich alles abgedeckt. Du musst nicht in Ultrascale, Ultrascale+ und Versal einsteigen.
Ein weiterer Vorteil von Artix-7, Spartan-7 und Zynq-7000: Wenn du diese FPGAs als Zielplattform verwendest, kannst du Vivado (für Windows oder Linux) völlig kostenlos nutzen, um Bitströme aus Verilog zu erzeugen, das FPGA zu programmieren und dein Design zu simulieren. Eine breite Palette von IP-Blöcken ist für diese Bauteile ebenfalls kostenlos verfügbar, und dasselbe gilt für das Software Development Kit. Du kannst also mit Vivado sehr weit kommen, ohne für die Software zu bezahlen. Tatsächlich erlauben praktisch alle FPGA-Hersteller die kostenlose Nutzung der Entwicklungswerkzeuge für ihre einfacheren FPGA-Familien.
Wenn du eine Platine mit einer späteren und „schwereren“ FPGA-Familie wählen willst, prüfe unbedingt, ob du eine kostenpflichtige Lizenz benötigst, um Vivado auf diesem FPGA auszuführen.
Ausrüstung für „echtes“ FPGA-Lernen
Wenn du wirklich in FPGA einsteigen willst, musst du ein kleines Elektroniklabor einrichten. Das ist wirklich keine große Sache, und die meisten Dinge, die du kaufen musst, sind günstig und in jedem Elektronik-Bastelladen erhältlich: kleine Widerstände, Dupont-Kabel (Dupont wires) und so weiter. Du solltest außerdem ein einfaches digitales Multimeter haben. Selbst das einfachste erledigt den Job. Etwas grundlegende Ausrüstung zum Löten kann ebenfalls eine gute Idee sein.
Der teure Teil, den ich empfehle zu kaufen, ist ein einfaches Oszilloskop. Dieses Messinstrument zeigt die Spannung als Funktion der Zeit. Damit kannst du die Signale an den physischen Eingangs- und Ausgangspins des FPGA betrachten. Du kannst auch analoge elektronische Signale betrachten, zum Beispiel die Spannung, die einen Lautsprecher antreibt.
Ein Oszilloskop ist wichtig, denn du solltest lernen, dieses Instrument zu benutzen, um dein Design zu prüfen und zu debuggen. Die bequeme Option ist ein eigenständiges Oszilloskop. Es gibt aber auch „USB-Oszilloskope“, die du an einen Computer anschließt und die Signale mit einem auf dem Computer laufenden Programm anschaust. Das spielt keine Rolle. Beide Optionen funktionieren. Ausgefallene Funktionen braucht es auch nicht.
Achte aber darauf, dass die analoge Bandbreite des Oszilloskops ausreichend ist. Die analoge Bandbreite ist die Grenze dafür, wie schnell sich das Signal, das du beobachtest, ändern kann. Beachte, dass dies nicht die Abtastrate des Oszilloskops ist, die manchmal auch kurz „Bandbreite“ genannt wird, möglicherweise um Käufer zu verwirren. Wenn sich ein digitales Signal mit einer Rate nahe der analogen Bandbreite ändert, wird es mit weichen Flanken auf dem Display dargestellt, selbst wenn der Übergang in Wirklichkeit scharf und schnell ist. Digitale Signale, die schneller sind, lassen sich möglicherweise überhaupt nicht unterscheiden.
Wenn du also günstig anfangen willst, nimm eine analoge Bandbreite von 10 MHz. Das bedeutet, dass dein Logikdesign nicht mit einer Taktfrequenz über 10 MHz laufen sollte, sonst erscheinen die Ausgangssignale möglicherweise nicht richtig auf dem Display des Oszilloskops. Eigentlich wäre es besser, unter 5 MHz zu bleiben. Das sind sehr niedrige Frequenzen für ein FPGA, aber für die ersten Schritte ist das kein Problem. Das einzige Problem ist, dass du mit einem sehr schlecht gemachten Logikdesign durchkommen könntest, das nur bei niedrigen Frequenzen funktioniert. Wenn du diesen Weg gehst, versuche unbedingt, den Takt auf 100–200 MHz zu erhöhen und zu prüfen, dass die Timing-Vorgaben (timing constraints) eingehalten werden, nur um sicherzustellen, dass dein Design nicht auf sehr niedrige Taktfrequenzen beschränkt ist.
Wenn du ein Oszilloskop mit 50–100 MHz analoger Bandbreite ohne großen Preisunterschied finden kannst, würde ich das vorschlagen. Ich würde für meinen eigenen Gebrauch kein Scope mit weniger als 100 MHz analoger Bandbreite kaufen.
Eine weitere Sache, die du sicherstellen solltest, ist, dass das Oszilloskop mindestens zwei Eingangskanäle hat, damit du zwei Wellenformen gleichzeitig sehen kannst. Überraschenderweise reichen zwei Wellenformen in den meisten praktischen Situationen aus. Mein Oszilloskop hat vier Eingangskanäle, und manchmal nutze ich drei davon, selten alle vier.
Und eine letzte Sache zu Oszilloskopen: Kaufe unbedingt auch Tastköpfe, normalerweise zusammen mit dem Oszilloskop. Das ist vielleicht weniger entscheidend, wenn du mit 10 MHz arbeitest, aber je höher die Frequenz, desto wichtiger ist die Verwendung von Tastköpfen.
Also ... was ist mit der FPGA-Platine?
Nachdem die Laborausrüstung vorhanden ist, kannst du nun wählen, welche FPGA-Platine du kaufst. Die Antwort ist ganz einfach: Nimm eine günstige mit einem FPGA von AMD. Das wird höchstwahrscheinlich eine Platine auf Basis von Artix-7 oder Spartan-7 bedeuten. Oder Zynq-7000, wenn du die im nächsten Abschnitt genannten Vorteile haben willst. Ich konzentriere mich jetzt auf die elektronikorientierte FPGA-Umgebung.
Worauf du am meisten achten solltest, ist, ob die Platine eine USB-Schnittstelle zum Programmieren des FPGA hat. Um das zu erklären, sage ich ein paar Worte zu JTAG.
Um den Bitstrom in das FPGA zu schreiben, gibt es mehrere Pins auf dem FPGA, die für Laborzwecke gedacht sind, genannt JTAG. Diese Schnittstelle ist auch für andere Tricks nützlich (insbesondere ILA, den Integrated Logic Analyzer), aber der wichtigste Zweck ist, den Bitstrom vom Computer in das FPGA zu übertragen. Früher gab es eine separate kleine Box (oft „JTAG-Kabel“ oder „JTAG-Programmierer“ genannt), die über USB mit dem Computer verbunden wurde. Die andere Seite dieser Box bestand aus einer Anzahl von Drähten, die an einen Pin-Header auf der FPGA-Platine angeschlossen wurden.
Heutzutage haben viele FPGA-Entwicklungsplatinen diese Funktionalität integriert. Das bedeutet, dass du diesen „JTAG-Programmierer“ nicht brauchst, sondern die FPGA-Platine direkt an den Computer anschließen kannst, auf dem Vivado läuft, und das FPGA mit dem Bitstrom deines Designs konfigurieren kannst. Einfach und bequem.
Einfachere und günstigere FPGA-Platinen haben diese Funktion nicht und erfordern, dass du diesen JTAG-Programmierer separat kaufst. Der offizielle JTAG-Programmierer ist ziemlich teuer, und die inoffiziellen funktionieren möglicherweise zuverlässig oder auch nicht. Für eine erste Platine denke ich daher, dass es sich lohnt, etwas mehr zu bezahlen, um dieses Problem von vornherein zu vermeiden. Zumindest, bis du dich an den Workflow gewöhnt hast. Oder wähle eine Zynq-Platine, die ihren Bitstrom stattdessen von einer microSD-Karte lesen kann.
So viel zu JTAG. Nun zu den eigentlichen Merkmalen der Platine.
Die Platine sollte I/O haben, das mit etwas Sinnvollem verbunden werden kann. Im Lernprozess ist es sehr wertvoll, die Platine mit einem anderen kleinen Elektronikstück zu verbinden, vielleicht einem Entwicklungsboard für eine analoge Komponente oder etwas in der Art. Das beste Lernprojekt ist eines, bei dem du tatsächlich selbst etwas entwickelst. Deshalb bevorzuge ich Platinen mit universellen Pin-Headern, die mit Dupont-Kabeln an alles angeschlossen werden können.
Ich bevorzuge normalerweise Platinen mit vielen LEDs und Tastern für direkte Interaktion. Für erste Projekte ist auch eine 7-Segment-Anzeige (7-segment display) schön.
Platinen haben oft ein paar eigene Peripheriekomponenten. Überlege, ob du damit ein kleines Projekt machen kannst oder ob das zu kompliziert wäre. Zum Beispiel haben viele FPGA-Platinen eine HDMI-Ausgangsbuchse. Damit kannst du ein Ausgangssignal erzeugen, das direkt zu einem normalen Computermonitor geht. Du wirst höchstwahrscheinlich einen fertigen Logikblock verwenden, um die Pixel in das Videosignal umzusetzen, denn das ist wirklich kompliziert. Die HDMI-Ausgabe allein wird dir also nicht viel beim Lernen helfen. Andererseits kannst du eine Menge daraus lernen, Videomuster auf dem Videoausgang zu erzeugen. Vielleicht eine einfache Textanzeige? Videokunst? Fraktale? Stelle ein 100x100-Pixel-Bild in einem 768x768-Pixel-Bereich auf dem Bildschirm dar, mit korrekter linearer Interpolation? Mach das richtig, und du bist auf einem guten Weg.
Welche Platine solltest du also wählen? Versuche darüber nachzudenken, was du mit der Platine machen willst und welche Ausrüstung du hast. Dann wähle eine Platine, die nicht allzu viel kostet. Und betrachte sie noch einmal als deine erste, aber nicht als deine letzte.
Platinen mit einem Zynq-7000
Für diejenigen, die nicht sofort in die Elektronik eintauchen wollen, gibt es trotzdem die Möglichkeit, mit einem FPGA interessante Dinge zu machen. Der Trick besteht darin, die Logik mit einem Prozessor statt mit physischen Signalen interagieren zu lassen, also musst du dich nicht physisch mit der Elektronik beschäftigen. Die Idee ist, mit einem FPGA zu arbeiten, das einen eingebetteten Prozessor hat. Zynq-7000 zum Beispiel.
Aber wie kann der eingebettete Prozessor den Einstieg erleichtern? Er kann es, wenn du nicht sofort in die prozessorbezogenen Themen und seine Interaktion mit dem Logik-Fabric (logic fabric) einsteigst, also dem „FPGA-Teil“, genannt „PL“. Verwende stattdessen für diesen Teil ein fertiges Kit, mit dem du auf einfache Weise mit der Logik interagieren kannst. Wenn du später in die Details des Prozessorteils eintauchen willst, bleibt dafür genug Zeit.
Der einfachste Weg, das zu erreichen, ist, mit Xillinux zu beginnen. Das ist ein Paket, mit dem du leicht eine microSD-Karte so einrichten kannst, dass deine Platine zu einem kleinen Computer wird, auf dem Linux läuft. Du kannst eine Tastatur, eine Maus und einen Computermonitor an die Platine anschließen, und du hast einen einfachen grafischen Desktop mit der Möglichkeit, Terminalfenster sowie grafische Editoren zu öffnen. Du kannst C-Programme direkt auf dem Prozessor der Platine mit gcc und Makefiles kompilieren und auch Skripte (scripts) auf dem Prozessor ausführen.
Der eigentliche Punkt bei Xillinux ist jedoch, dass es auch die Kommunikation mit dem „FPGA-Teil“ (der Logik, die du in Verilog schreibst) über eine einfache Schnittstelle ermöglicht. Auf Basis von Xillybus verwendet die Softwareseite einfache Datei-I/O zum Senden und Empfangen von Daten, und die Logikseite verwendet für denselben Zweck Standard-FIFOs. Das Wichtige an dieser Art des Datenaustauschs ist, dass es kein künstlicher Trick zum Lernen ist: FIFOs sind die übliche Art, in einem FPGA-Projekt Daten auszutauschen.
Wenn du also daran interessiert bist, „Verarbeitungslogik“ zu entwerfen (Logik, die Daten als Eingabe erhält, sie verarbeitet und Ausgabedaten erzeugt), wirst du es von Anfang an richtig machen: In „echten“ FPGA-Projekten erhält Logik dieser Art die Daten zur Verarbeitung normalerweise über ein FIFO und gibt ihre Ergebnisse an ein anderes FIFO aus. In einem „echten“ FPGA-Projekt gibt es auf der anderen Seite dieser FIFOs normalerweise andere Logikkomponenten. Wenn du mit Xillybus arbeitest, läuft stattdessen Software auf dem Prozessor. Oder es ist einfach ein Shell-Befehl, um Daten direkt in die FIFOs des FPGA oder aus ihnen herauszukopieren.
Zusammenfassend gibt dir die Arbeit mit Xillinux und Xillybus einen reibungslosen Start, sodass du dich auf deine ersten eigenen Logikstücke konzentrieren und sie leicht mit einer computerähnlichen Schnittstelle testen kannst. Darüber hinaus lässt sich die Logik in dieser Umgebung leicht direkt vom Prozessor aus mit einfachen Computerprogrammen oder Skripten steuern. Und am wichtigsten: Die ganze Umgebung ist ganz natürlich für ein Projekt, bei dem es keine Schnittstelle zur Außenwelt gibt.
Für die Verwendung von Xillinux sind zwei Entwicklungsplatinen besonders relevant: Smart Zynq und Z-Turn Lite. Das sind kostengünstige Platinen, für die es fertige Kits zum Einrichten von Xillinux gibt. Es gibt außerdem ein paar Seiten auf dieser Website, die zeigen, was man mit der Smart Zynq-Platine machen kann.
Wer nicht daran gewöhnt ist, mit Linux zu arbeiten, findet es möglicherweise schwierig, das auf dem Zynq-7000-Prozessor laufende Linux-System zur Interaktion mit dem „FPGA-Teil“ über Xillybus zu verwenden. Es kann auch abschreckend sein, diese relativ einfache Linux-Distribution zum Entwickeln und Ausführen von Software zu nutzen.
Wenn du einen „echten“ Computer mit Linux oder Windows bevorzugst, kann dasselbe einfache Xillybus-basierte Setup mit einer FPGA-Platine verwendet werden, die eine PCIe-Schnittstelle hat. Diese Platinen sind teurer, aber sie können in einen Computer mit Linux oder Windows gesteckt werden und tauschen Daten mit dem FPGA auf genau dieselbe Weise aus. In diesem Fall ist Artix-7 definitiv gut genug, aber du kannst auf Xillybus' Download-Seite eine Liste der unterstützten FPGA-Familien nachsehen.
Apropos Artix-7: Ich wiederhole, dass die günstigeren Zynq-7000-Bauteile einfach Artix-7 FPGAs mit einem ARM-Prozessor darauf sind. Es ist also möglich, den Prozessor einfach zu ignorieren und eine Zynq-Platine wie eine normale Artix-7-Platine zu verwenden.
Ein Unterschied ist, dass ein Zynq-7000 FPGA auch die Möglichkeit hat, seinen Bitstrom von einer microSD-Karte zu beziehen. Um den Bitstrom zu aktualisieren, brauchst du daher nur einen microSD-Adapter für USB, falls dein Computer oder Laptop diese Funktion nicht ohnehin schon hat. Eigentlich kannst du den Bitstrom auch über das Ethernet-Netzwerk mit TFTP unter U-Boot holen, aber das erfordert das Einrichten eines Servers, ist also nicht der einfachste Weg.
Zynq-7000 FPGAs haben auch eine JTAG-Schnittstelle, genau wie jedes FPGA, aber sie wird selten verwendet und manchmal nicht einmal mit Pins auf der Platine verbunden.
Das war eine Menge Information, also fassen wir zusammen:
- Eine Zynq-7000-Platine ist eine gute Wahl, wenn du dich nicht mit Elektronik die Hände schmutzig machen willst oder wenn du auch einen eingebetteten Prozessor auf dem FPGA ausprobieren möchtest.
- Ziehe eine PCIe-basierte Platine (mit Artix-7) in Betracht, wenn das FPGA mit einem echten Computer und nicht mit dem eingebetteten Prozessor kommunizieren soll.
- Eine einfache Artix-7-/Spartan-7-Platine ist dein Ding, wenn du nur eine bodenständige Elektronikerfahrung willst.
FPGA und KI (LLMs)
Zum Schluss sprechen wir über den Elefanten im Raum. KI.
KI lernt in erster Linie aus offenem Material im Internet, und die große Mehrheit davon wird von Hobbyisten oder von KI selbst geschrieben. Die Qualität der Vorschläge von KI in diesem Bereich ist daher deutlich niedriger als beispielsweise ihre Antworten zu Software. Was auch nicht immer so phänomenal ist, aber das ist eine andere Diskussion.
Wird KI also den FPGA-Beruf auslöschen? Niemand weiß, was die Zukunft bringt. Aber denken wir darüber nach, was wir aus der Einführung von Computern und Robotern in den 80ern gelernt haben. Es gibt ein paar Muster, die es wert sind, beachtet zu werden.
Computer und Roboter ersetzten dumme und repetitive Aufgaben. Viele Menschen verloren tatsächlich ihre Jobs, aber das waren die Menschen, die diese Aufgaben ausführten. Die Menschen, die intelligente Arbeit leisteten, blieben auf ihren Positionen und wurden sogar effektiver und besser bezahlt.
Gleichzeitig ist die Nutzung von Maschinen bei Weitem enger als theoretisch möglich. In Fabriken verrichten Menschen manuelle Arbeit, die von Robotern hätte ersetzt werden können, und das gilt sogar in der Autoherstellung. Aber es gilt auch im Bauwesen, in der Schreinerei, in Bäckereien und so weiter. Meine Vermutung, warum das so ist: Es gibt einen Mangel an Menschen, die klug genug sind, Roboter und Computer zu nutzen, und einen Überfluss an denen, die eine Aufgabe mit ihren eigenen Händen lernen können.
Die Einführung von LLM-basierter KI wird wahrscheinlich denselben Weg nehmen. Repetitive und dumme Aufgaben werden durch KI ersetzt, aber kluge Aufgaben werden von Menschen erledigt, die KI als Werkzeug nutzen.
Die Schlussfolgerung für dich als zukünftigen FPGA-Designer ist also einfach: Lerne den Beruf unbedingt gründlich und in die Tiefe. Nur Verilog zu kennen reicht nicht. FPGA-Designer zu sein ging nie nur um Verilog-Coding. KI kann auch Verilog schreiben, wenn sie sehr spezifische Anweisungen bekommt. Beim FPGA-Design geht es hauptsächlich darum, die klugen Entscheidungen zu treffen, die diese Anweisungen hervorbringen. Das dann in Code umzusetzen, ist der einfachste Teil.
Es ist das tiefere Verständnis und das gute Urteilsvermögen, das KI nicht ersetzen kann, zumindest im Moment. Und selbst wenn es eines Tages möglich werden sollte, menschliches Urteilsvermögen durch eine Maschine zu ersetzen, wird das das Letzte sein, was ersetzt wird. Wenn KI so übernommen wird wie frühere Technologien, wird menschliches Urteilsvermögen weiterhin von Menschen ausgeübt.
Und noch eine Sache: Selbst wenn KI den Verilog-Code und die Timing-Vorgaben (timing constraints) schreibt und alle anderen Aufgaben erledigt, wird immer ein Mensch nötig sein, um zu verifizieren, dass das Gemachte korrekt ist und dass es der vorteilhafte Weg nach vorn ist. LLMs, die eine Art Simulator für Gehirnaktivität sind, haben ebenfalls eine menschenähnliche Neigung, Fehler zu machen. Das erfordert einen Menschen, der kompetent und weise ist, sowohl um die KI zu führen als auch um zu prüfen, dass die Ausgabe der KI angemessen ist. Das bedeutet, dass der zukünftige Designer noch professioneller sein muss als der heutige Ingenieur. Mittelmäßige Ingenieure können durch KI ersetzt werden, aber das funktioniert nur, wenn ein ausgezeichneter Ingenieur sie kontrolliert. Und da solche Ingenieure schwer zu finden sind, könnte es durchaus sein, dass KI in dieser Branche nicht in großem Umfang eingesetzt wird – genau wie es in der traditionellen Industrie noch Menschen gibt, die manuelle Arbeit verrichten.
Fazit: Was auch immer du lernst, mach es gründlich und in die Tiefe, sonst wird dir eines Tages ein LLM den Hintern versohlen. Vielleicht ist dieser Tag schon gekommen.
Dies schließt die erste Seite in dieser Reihe ab. Die nächste Seite behandelt die theoretischen Fähigkeiten, die ich wichtig finde, und erklärt außerdem, warum ich denke, dass sie es wert sind, gelernt zu werden.