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)?
quelle
if(condition)
eswhen(condition)
. Die meisten FPGA-IDEs verfügen sogar über eine Grafikdesigneingabe, als würden Sie sie auf Papier zeichnen.Antworten:
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.
quelle
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.
quelle
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.
quelle