Ich bin Softwareentwickler (C, C++, Objective-C, Java ...) und interessiere mich dafür, das Programmieren von FPGAs zu lernen. Nun, die Frage mag Ihnen einfach erscheinen, aber bitte nehmen Sie sich die Zeit, mir bei dieser Frage zu helfen, da ich gerade irgendwie feststecke. Mein Unternehmen hat mich gebeten, mich mit der Technologie vertraut zu machen und an einem Gitterprodukt zu arbeiten. Meine Frage ist, wo soll ich anfangen? Nach einiger Recherche stellte ich fest, dass ich zwischen VHDL und Verilog wählen konnte, ich habe noch nie eines davon verwendet. Gibt es einen Spezialisten, der mir empfehlen könnte, wo ich anfangen soll? Eine Sprache lernen, sich über die Hardwarekomponenten informieren und dann das Gitterprodukt? Oder direkt mit dem Lattice-Produkt beginnen (wie ich gelesen habe, dass die Programmiermethoden zwischen den FPGA-Anbietern sehr unterschiedlich sind)?
Digitales Design hat nicht viel mit Softwareentwicklung gemeinsam (vielleicht abgesehen davon, dass die Verilog-Syntax ein bisschen wie C-Sprache aussieht, aber es sieht einfach so aus). Daher ist es sehr schwierig, diese Art von Frage angemessen zu beantworten. Aber als jemand, der einen Weg von der Softwareentwicklung zum Hardwaredesign gegangen ist, werde ich es versuchen. Wenn ich auf mich selbst zurückblicke, so hätte ich mir damals geraten, wenn ich gewusst hätte, was ich heute weiß:
Vergessen Sie alles über Softwareentwicklung. Vor allem Programmiersprachen. Diese Prinzipien gelten nicht für digitales Design. Es wäre wahrscheinlich einfach für jemanden, der eine CPU entwickelt hat, sie in Assembler oder sogar C zu programmieren, aber ein Assembler-Programmierer wird nicht in der Lage sein, eine CPU zu entwerfen.
Neigen Sie auf Ihrem Lernpfad nicht dazu, ein scheinbar einfaches Problem mit Ihrem vorhandenen Softwarewissen zu lösen. Eines der klassischen Beispiele ist eine "for-Schleife". Auch wenn Sie eine for-Schleife beispielsweise in verilog schreiben können, dient sie anderen Zwecken. Es wird hauptsächlich zur Codegenerierung verwendet. Es kann auch eine For-Schleife sein, wie Softwareentwickler es sehen, aber es wird für nichts anderes als Simulation gut sein (dh Sie werden nicht in der Lage sein, FPGA so zu programmieren).
Denken Sie also bei jeder Aufgabe, die Sie angehen möchten, nicht, dass Sie wissen, wie es geht, sondern recherchieren Sie stattdessen – prüfen Sie Bücher, Beispiele, fragen Sie erfahrenere Personen usw.
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 so ziemlich verwendet, um dasselbe auf ähnliche Weise, aber 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 daran zu gewöhnen. Tatsächlich denke ich, dass es es sogar noch schlimmer machen kann, weil es eine Versuchung geben wird, C in Verilog zu schreiben. Das ist ein gutes Rezept für eine sehr schlechte Zeit.
In Anbetracht dessen würde ich empfehlen, von der VHDL aus zu starren. Obwohl Verilog auch in Ordnung ist, solange das oben Genannte berücksichtigt wird.
Eine wichtige Sache, die Sie im Auge behalten 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 würde ich Ihnen empfehlen, sich ein Buch über Elektronik im Allgemeinen und ein gutes Buch wie dieses zu besorgen – HDL Chip Design (auch bekannt als Blue Book).
Bevor Sie anfangen, irgendetwas in der Hardware zu tun und herstellerspezifische Funktionen usw. zu verwenden, besorgen Sie sich einen Simulator. Ich begann mit einem Verilog und verwendete Icarus Verilog zusammen mit GTK Wave. Das sind kostenlose Open-Source-Projekte. Führen Sie Beispiele aus, die Sie in Büchern sehen, üben Sie, indem Sie Ihre eigenen Schaltungen entwerfen, um einen Eindruck davon zu bekommen.
Wenn Sie Lust haben, voranzukommen, besorgen Sie sich ein Entwicklungsboard. Wenn Sie wissen, dass Ihr Arbeitgeber sich für Lattice entscheiden möchte, dann holen Sie sich Lattice Board.
Die Programmiermethoden sind sehr ähnlich, aber es gibt Unterschiede, die sich unterscheiden. Zum Beispiel unterschiedliche Tools, unterschiedliche Optionen, unterschiedliche Schnittstellen. Wenn Sie Erfahrung mit einem Anbieter haben, ist es normalerweise nicht schwierig, zu wechseln. Aber Sie möchten diese zusätzliche Lernkurve wahrscheinlich vermeiden.
Ich würde auch sicherstellen, dass das Board mit Komponenten geliefert wird, die Sie verwenden möchten, oder erweiterbar ist. Wenn Sie beispielsweise ein Netzwerkgerät wie einen Router entwerfen möchten, stellen Sie sicher, dass das Board über Ethernet-PHY verfügt oder dass es beispielsweise über einen HSMC-Anschluss usw. erweitert werden kann.
Boards werden normalerweise mit einer guten Referenz, einem Benutzerhandbuch und Designbeispielen geliefert. Studiere sie.
Sie müssen Bücher lesen. In meinem Fall hatte ich keine Freunde, die sich mit digitalem Design auskannten, und diese Seite war aus einem einfachen Grund auch nicht sehr hilfreich – ich wusste nicht einmal, wie ich meine Frage formulieren sollte. Alles, was mir einfiel, war: "Ähm, Leute, da ist etwas dcfifo und ich habe etwas über Clock-Domain-Crossing-Herausforderungen 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.
Während Sie Ihre Bücher durchgehen, ein Design simulieren, einige LEDs auf Ihrer Entwicklungsplatine blinken lassen, haben Sie höchstwahrscheinlich viele Fragen. Stellen Sie sicher, dass Sie keine Antworten auf diese Fragen auf der nächsten Seite des Buches oder online (dh im Lattice-spezifischen Forum) sehen, bevor Sie sie hier stellen.
Als Alternative könnten Sie einige High-Level-Synthesetechniken wie Vivado HLS von Xilinx und die OpenCL-Lösung von Altera verwenden. Vielleicht erleichtert dies Ihre Kurve zum Erlernen von Hardwarebeschreibungssprachen, wenn Sie Ihren Softwarehintergrund berücksichtigen.
Lernen Sie zunächst 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 ein HDL. In Europa wird VHDL verwendet, in den USA Verilog. Schließlich ist das Timing wichtig, beachten Sie, dass Signale Verzögerungen haben, die komponenten- und temperaturabhängig sind, und jedes Signal hat eine andere Verzögerung.
Buch zum Lesen: http://www.amazon.com/Advanced-FPGA-Design-Architecture-Implementation/dp/0470054379
Perfekte Sprachsyntaxkenntnisse sind für später, zunächst digitales Design und die Probleme verstehen.
m.Alin
Edgar Klerks
CharlieHanson
if(condition)
dessen istwhen(condition)
. Die meisten FPGA-IDEs haben sogar einen Grafikdesign-Input, als ob Sie es auf Papier zeichnen würden.