FPGA-Programmierung, wo Sie anfangen sollen

29

Ich bin ein Softwareentwickler (C, C ++, Objective-C, Java ...) und ich interessiere mich für das Erlernen des Programmierens von FPGAs. Jetzt mag die Frage für Sie einfach erscheinen, aber nehmen Sie sich bitte Zeit, um mir bei dieser Frage zu helfen, da ich gerade irgendwie feststecke. Meine Firma hat mich gebeten, mich mit der Technologie vertraut zu machen und an einem Gitterprodukt zu arbeiten. Meine Frage ist, wo ich anfangen soll? Nach einigen Recherchen stellte ich fest, dass ich zwischen VHDL und Verilog wählen konnte. Ich habe noch nie einen von ihnen verwendet. Gibt es einen Spezialisten, der mir vorschlagen könnte, wo ich anfangen soll? Eine Sprache lernen, die Hardwarekomponenten kennenlernen und dann das Gitterprodukt? Oder direkt mit dem Lattice-Produkt beginnen (wenn ich lese, dass die Programmiermethoden bei FPGA-Anbietern sehr unterschiedlich sind)?

Anila
quelle
3
Wenn Sie mit der C / C ++ - Programmierung vertraut sind, sollten Sie Verilog anstelle von VHDL wählen . Die Syntax von Verilog ähnelt der von C.
m.Alin
1
@m.Alin Ich fange gerade erst an und fand heraus, dass es egal ist, ob es wie C aussieht, weil ich fand, dass der schwierigste Teil nicht die Syntax war, sondern der Unterschied in den Konzepten. Die Semantik kommt der von C.
Edgar Klerks vom
Die größte Änderung, die ich von C / C ++ / Java / etc gefunden habe. besteht darin, dass die von Ihnen geschriebenen Module (die vermutlich Übersetzungseinheiten entsprechen) rein ereignisgesteuert sind. In C führt ein kompiliertes Programm, vereinfacht zu einem Grundprinzip, Zeile 1 Ihres Codes, dann Zeile 2, dann 3, dann 4 usw. aus. In Verilog / VHDL gibt es so etwas nicht, es ist ein bisschen wie das Zeichnen eines Bildes : Dieser Eingangspin ist mit Modul1_Eingang verbunden. Modul1_Ausgang schaltet den Status jedes Mal um, wenn Modul1_Eingang hoch geht. Stattdessen ist if(condition)es when(condition). Die meisten FPGA-IDEs verfügen sogar über eine Grafikdesigneingabe, als würden Sie sie auf Papier zeichnen.
CharlieHanson

Antworten:

40

Digitales Design hat nicht viel mit der Softwareentwicklung zu tun (vielleicht mit der Ausnahme, dass die Verilog-Syntax ein bisschen wie die C-Sprache aussieht, aber nur so aussieht). Daher ist es sehr schwierig, diese Art von Frage angemessen zu beantworten. Aber als jemand, der einen Weg von der Softwareentwicklung zum Hardware-Design gegangen ist, werde ich es versuchen. Wenn ich auf mich selbst zurückblicke, hätte ich mich damals wie folgt beraten, wenn ich gewusst hätte, was ich jetzt weiß:

Von vorne beginnen

Vergiss alles über Softwareentwicklung. Besonders Programmiersprachen. Diese Grundsätze gelten nicht für digitales Design. Es wäre wahrscheinlich für jemanden, der eine CPU entworfen hat, einfach, sie in Assembler oder sogar C zu programmieren, aber ein Assembler-Programmierer kann keine CPU entwerfen.

Auf Ihrem Lernweg neigen Sie nicht dazu, das scheinbar einfache Problem mit Ihrem vorhandenen Wissen aus der Software zu lösen. Eines der klassischen Beispiele ist eine "for-Schleife". Auch wenn Sie eine for-Schleife schreiben können, z. B. Verilog, dient dies einem anderen Zweck. Es wird hauptsächlich zur Codegenerierung verwendet. Es kann auch eine for-Schleife sein, wie Software-Entwickler es sehen, aber es ist nur für Simulationen geeignet (dh Sie können FPGA nicht so programmieren).

Also für jede Aufgabe, die Sie angehen möchten, denken Sie nicht, dass Sie wissen, wie es geht, machen Sie stattdessen eine Recherche - prüfen Sie Bücher, Beispiele, fragen Sie erfahrenere Leute usw.

Lernen Sie Hardware und HDL-Sprache

Die beliebtesten HDL-Sprachen sind Verilog und VHDL. Es gibt auch herstellerspezifische wie AHDL (Altera HDL). Da diese Sprachen zur Beschreibung von Hardwarekomponenten verwendet werden, werden sie alle verwendet, um dasselbe auf ähnliche Weise, jedoch mit einer anderen Syntax auszudrücken.

Einige Leute empfehlen, Verilog zu lernen, weil es wie C aussieht. Ja, seine Syntax ist eine Mischung aus C und Ada, aber es macht es einem Softwareentwickler nicht leicht, sich anzulehnen. Tatsächlich denke ich, dass es es sogar noch schlimmer machen kann, weil es die Versuchung geben wird, C in Verilog zu schreiben. Das ist ein gutes Rezept für eine sehr schlechte Zeit.

Vor diesem Hintergrund würde ich empfehlen, von der VHDL aus zu starren. Obwohl Verilog auch in Ordnung ist, solange das oben Gesagte berücksichtigt wird.

Eine wichtige Sache, die Sie beachten sollten, ist, dass Sie verstehen müssen, was Sie mit dieser Sprache ausdrücken. Welche Art von Hardware wird "beschrieben" und wie funktioniert sie?

Aus diesem Grund empfehle ich Ihnen, sich ein Buch über Elektronik im Allgemeinen und ein gutes Buch wie dieses zu besorgen - HDL Chip Design (auch bekannt als blaues Buch).

Holen Sie sich einen Simulator

Besorgen Sie sich einen Simulator, bevor Sie Hardware-Arbeiten ausführen und herstellerspezifische Funktionen usw. verwenden. Ich habe mit einem Verilog begonnen und Icarus Verilog zusammen mit GTK Wave verwendet. Das sind kostenlose Open-Source-Projekte. Führen Sie Beispiele aus, die Sie in Büchern sehen, und üben Sie, indem Sie Ihre eigenen Schaltungen entwerfen, um einen Eindruck davon zu bekommen.

Besorgen Sie sich ein Entwicklungsboard

Besorgen Sie sich ein Entwicklungsboard, wenn Sie Lust haben, weiterzumachen. Wenn Sie wissen, dass Ihr Arbeitgeber mit Lattice gehen möchte, dann holen Sie sich Lattice Board.

Die Programmiermethoden sind sehr ähnlich, aber es gibt Details, die sich unterscheiden. Zum Beispiel verschiedene Tools, verschiedene Optionen, verschiedene Schnittstellen. Wenn Sie Erfahrung mit einem Anbieter haben, ist der Wechsel normalerweise nicht schwierig. Aber Sie möchten wahrscheinlich diese zusätzliche Lernkurve vermeiden.

Ich würde auch sicherstellen, dass das Board mit Komponenten geliefert wird, die Sie verwenden möchten oder die erweiterbar sind. Wenn Sie beispielsweise ein Netzwerkgerät wie einen Router entwerfen möchten, stellen Sie sicher, dass die Karte über Ethernet PHY verfügt oder über einen HSMC-Anschluss usw. erweitert werden kann.

Boards werden normalerweise mit einer guten Referenz, einer Bedienungsanleitung und Designbeispielen geliefert. Studiere sie.

Bücher lesen

Sie müssen Bücher lesen. In meinem Fall hatte ich keine Freunde, die sich mit digitalem Design auskannten, und diese Seite war auch wegen einer einfachen Sache nicht sehr hilfreich - ich wusste nicht einmal, wie ich meine Frage formulieren sollte. Alles, was ich mir einfallen lassen konnte, war: "Ähm, Leute, es gibt eine Sache, dcfifo, und ich habe etwas über die Herausforderungen beim Überqueren von Uhrdomänen gehört, was ist das und warum funktioniert mein Design nicht?".

Ich persönlich habe damit angefangen:

FPGA-Anbieter haben viele Kochbücher mit Best Practices. Studieren Sie sie zusammen mit Referenzdesigns. Hier ist zum Beispiel einer von Altera.

Kommen Sie mit genaueren Fragen zurück

Während Sie Ihre Bücher durchgehen, ein Design simulieren, einige LEDs auf Ihrem Entwicklungsboard blinken, werden Sie höchstwahrscheinlich viele Fragen haben. Stellen Sie sicher, dass Sie keine Antwort auf die Fragen auf der nächsten Seite des Buchs oder online (dh im Lattice-spezifischen Forum) sehen, bevor Sie sie hier stellen.

user8459
quelle
Vielen Dank für diese ausführliche Antwort, sie hat mir wirklich geholfen zu sehen, wie ich vorgehen kann. Leider habe ich auch keine Freunde, die mir helfen könnten. Aber du hast mir gerade viel Ärger erspart und nochmals vielen Dank !!!!
Anila
5
Hervorragende Antwort.
Assad Ebrahim
In der Schule haben wir C ++ gelernt, bevor wir VHDL gelernt haben. Ich hatte große Probleme, es zu verstehen, aber der Punkt, an dem alles angeklickt wurde, war, als ich verstand, dass alles in Echtzeit und parallel abläuft (parallel, nicht asynchron wie nodejs). Die Softwareentwicklung erfolgt nach einem sequentiellen Ablauf, aber in HDL geschieht (meistens) alles auf einmal. Wenn Sie so etwas wie "x = 1; y = 2; y = x; x = y" haben, haben Sie in SW am Ende y gleich 1, in HDL eine Racebedingung, wie es sowohl x als auch y versuchen werden gleichzeitig ineinander wechseln. Denken Sie daran, und das Leben könnte für Sie einfacher sein.
PGT
@PGT Sie müssen davon ausgehen, dass der Wert von y nicht 1 ist, wenn auf 'y' mehrere Prozesse zugreifen können, die auf einem einzelnen oder mehreren Kernen ausgeführt werden, wodurch einem schwächeren Prozess seine Berechtigung auferlegt werden kann.
Adithya
1

Alternativ können Sie auch einige hochentwickelte Synthesetechniken wie Vivado HLS von Xilinx und OpenCL von Altera verwenden. Möglicherweise erleichtert dies das Erlernen von Hardwarebeschreibungssprachen in Anbetracht Ihres Softwarehintergrunds.

troore
quelle
-1

Lerne zuerst die Grundlagen des digitalen Designs. Mealy / Moore-Maschine, kombinatorische Logik, Wahrheitstabelle, Karnaugh-Karte und so weiter. Beginnen Sie mit der Erstellung eines einfachen Designs in Schaltplänen (7-Segment-Zähler) und lernen Sie dann eine HDL. In Europa wird VHDL verwendet, in den USA Verilog. Schließlich ist das Timing wichtig. Beachten Sie, dass die Signale Verzögerungen aufweisen, die von der jeweiligen Komponente und der Temperatur abhängen. Jedes Signal weist eine andere Verzögerung auf.

Buch zum Lesen: http://www.amazon.com/Advanced-FPGA-Design-Architecture-Implementation/dp/0470054379

Perfekte Sprachkenntnisse in der Syntax sollen für später zunächst das digitale Design und die Themen verstehen.

Robin
quelle
In Europa wird VHDL verwendet, in den USA Verilog. Überhaupt nicht wahr ...
Matt Young
In der Tat habe ich Verilog gelernt und komme aus Großbritannien. Es ist auch die Sprache, die in einem der Module unterrichtet wurde, die ich an der Uni (auch in Großbritannien) gemacht habe.
Tom Carpenter