Hallo, ich bin seit heute neues Mitglied hier im Forum und ein absoluter Einsteiger im Bereich der FPGA's. Ich habe mal eine kleine Frage zum Thema FPGA in Verbindung mit einem embedded Linux. Ich habe jetzt schon mehrfach gehört, dass es möglich ist Linux als embedded System auf einem FPGA zu betreiben. Jetzt mal meine Frage, ab wann ist dies eigentlich notwendig ? Um mal ein Beispiel zu nennen, angenommen ich möchte eine Standard Logikgatterschaltung auf einem FPGA implementieren, dann kann ich dies doch mit einer gängigen Sprache wie z.B. VHDL tun, richtig ? Für den Fall das ich z.B. einen etwas aufwendigeren Algorithmus implementieren möchte, sollte doch eingentlich auch VHDL reichen, oder ? Könnt Ihr mir vielleicht mal irgendein Beispiel für eine notwendige Implementierung eines embedded Linux nennen ? Ich bin mir sicher, dass diese Frage(n) auch mit einer etwas aufwendigeren Recherche zu beantworten wären, aber der o.g. Punkt brennt mit sprichwörtlich unter den Nägeln ;-). Versteht dies bitte nicht als Bequemlichkeit, aber ich habe momentan noch meine Schwierigkeiten mich in der Masse der gebotenen Informationen nicht zu verlieren, was mir eine ziegerichtete Recherche zum derzeitigen Zeitpunkt noch sehr erschwert. Vielen Dank im Voraus !
Linux läuft nicht direkt auf einem FPGA. Du kannst aber den FPGA eine CPU Simulieren lassen, auf der Linux läuft. Wenn der FPGA einen Hard-Core dabei hat (z.B. PowerPC Core), dann kannst du darauf auch Linux laufen lassen.
> Du kannst aber den FPGA eine CPU Simulieren lassen, auf der Linux läuft. Ein FPGA simuliert keine CPU. Man kann mit ihm eine CPU realisieren. Einen Überblick über die verschiedenen Cores findest Du hier: http://www.mikrocontroller.net/articles/FPGA_Soft_Core Allerdings würde ich Dir nicht zu einem solchen Core und Linux am Anfang raten. Beschäftige Dich erstmal mit grundlegenderen Sachen. Dann wähle Dir einen Core und bastel Dir ein System.
Danke für die schnellen Antworten. Ich glaube jetzt hat es "Klick" gesagt. Im weitesten Sinne verhält es sich so, als wenn ich Linux ganz normal auf meinem PC laufen lasse, nur das jetzt halt alles in wesentlich abgespeckter Form auf dem FPGA läuft, der für das Linux System eine CPU darstellt. Wie gesagt, war nur mal eine dringende Verständnisfrage. Ich werde mich dann mal in die Grundlagen eingraben.
> .. auf dem FPGA läuft, der für das Linux System eine CPU > darstellt. Der FPGA stellt keine CPU dar! In ihm werden aus den Logikressourcen eine CPU generiert. Das nennt sich dann eine Softcore CPU im Gegensatz zu einer Hardcore CPU. Auf dieser CPU lauft dann ein GNU/Linux Betriebsystem. MfG Holger
Naja, wenn man eine CPU synthetisiert hat dann stellt der FPGA doch im weitesten Sinne schon eine CPU dar?!
Der FPGA simuliert eine CPU. Nein er simuliert keine. Der FPGA stellt eine CPU dar. Nein er stellt keine dar. Das sind doch alles Diskussionen um Begriffe deren Bedeutung nicht einheitlich festgelegt ist. Für Andreas, der nach eigener Aussage ein Anfänger ist, bringt so eine Diskussion doch nix. Da ist viel wichtiger: --- Softcore laden = Logikressourcen werden nach CPU-Muster verschaltet = CPU ist da Softcore nicht laden = Logikressourcen werden anders verschaltet = keine CPU da Softcore zweimal instanziieren = Mehr Logikressourcen werden zweimal nach dem CPU-Muster verschaltet = zwei CPUs da. Softcore N-mal instanziieren -> N CPUs da Softcore zu oft instanziieren -> Logikressourcen reichen nicht aus -> synthetisiert nicht
Und zum eben Gesagten sei hinzugefügt, dass man bei N>1 CPUs den Zugriff auf gemeinsame Ressourcen wie z.B. externen RAM zeitlich multiplexen muss. Dafür muss man wieder etwas von den Logikressourcen hernehmen und eine Vermittlerschaltung daraus bauen. Die Logikressourcen sind also der Grundstoff, aus dem man CPUs, Speichercontroller, Display-Controller und was auch immer nach eigenem Ermessen bauen kann. Ob diese dann wiederum programmierbar sind (so dass z.B. Linux darauf läuft) hängt davon ab ob man sie programmierbar gebaut hat.
Schnelle, zeitkritische Algorithmen implementiert man guenstigerweise im FPGA, komplizierte, relativ langsame Kontrollvorgaenge dagegen einfacher in C . Fuer viele Anwendungen heisst das, dass man FPGA und uC und meist noch Pegelangpassung usw braucht. Wenn man den uC im FPGA absorbieren kann, umso besser. Das geht auch schon fuer ambitioniert Bastler, schau Dir mal http://www.das-labor.org/wiki/Farb_Borg_3d an
Ich kann den letzten beiden Usern nur zustimmen. Falls man den Einsatz eines Linuxsystems plant, dann sollte man beachten, dass die jeweilige CPU möglichst von der gcc Toolchain unterstützt wird. Das macht manches einfacher. Es gibt FPGAs mit CPUs als echtem Hardcore (PowerPC bei einigen Xilinx Bausteinen) und sehr viele Softcores. Bei Altera wird häufig der NIOS und bei Actel ein ARM benutzt. Lattice bietet eigene (aber freie und quellcodeoffene) 8 (Mico8) und 32 Bit CPUs (Mico32) an. Die gcc Toolchain unterstützt auf jeden Fall den PowerPC, den ARM und den Mico32. Bei einigen Softcores lässt sich die CPU noch wunschweise zusammenstellen (z.B. DMA Kanäle, GPIOs, etc.). Die Mico32 Umgebung lässt sich sogar kostenfrei nutzen. Wir benutzen Softcores ganz gerne für einfache und langsame Regelvorgänge (dann reicht auch eine 8Bit CPU mit Assembler Code). Für alle zeitkritischen Sachen programmieren wir das FPGA direkt in Verilog. Benötigt man wirklich eine große CPU, so ist diese oft günstiger, wenn man diese als eigenes Bauteil extra einkauft, eine CPU in einem FPGA ist dagegen meistens überteuert.
Andreas S. wrote: > Ich habe jetzt schon mehrfach gehört, dass es möglich > ist Linux als embedded System auf einem FPGA zu betreiben. Jetzt mal > meine Frage, ab wann ist dies eigentlich notwendig ? > Für den Fall das ich z.B. einen > etwas aufwendigeren Algorithmus implementieren möchte, sollte doch > eingentlich auch VHDL reichen, oder ? Könnt Ihr mir vielleicht mal > irgendein Beispiel für eine notwendige Implementierung eines embedded > Linux nennen ? Ist euch eigentlich aufgefallen, dass kein Einziger von euch auf die eigentlichen Fragen von Andreas eingegangen ist? Stattdessen wird fachgesimpelt, ob ein FPGA ein CPU simuliert, oder nicht. Mich würden die Antworten auch interessieren.
Das mit dem aufwendigen Algorithmus ist so eine Sache. Wenn die Funktion in Linux schon implementiert ist und die Rechenleistung von dem implementierten Prozessor samt Linux auf dem FPGA ausreicht, sollte der Weg einfacher sein, als die Funktion noch mal direkt in HDL zu implementieren. Als Beispiel, wenn bei der Anwendung Daten auf einer Festplatte gespeichert werden und das ganze auch noch am Netzwerk angebunden ist. All diese Funktionen direkt in HDL zu implementieren dürfte den Rahmen sprengen. Schon alleine der TCP/IP-Stack wird recht umfangreich. Soll das ganze aber z.B. MP2 oder MP4 Videostreams versenden, dann wird Linux vielleicht zu langsam und es macht Sinn den Encoder als IP Core an den Prozessor anzuschließen. Der Vorteil ist nun das alles auf einem Chip ist. Die komplexen, nicht so zeitkritischen Algorithmen laufen über Linux auf dem Prozessor. Und der zeitkritische Encoder ist extra in Hardware implementiert.
Also das mit dem Lattice Mico32 sieht ja echt interessant aus ... Zwar nicht der Funktionsumfang wie Nios II oder Microblaze, dafür kostet er nichts ... Aber ich hab nicht rausgefunden, wieviel Logikresourcen das Ding braucht und wie schnell er ist ... Muss ich wohl einfachmal irgendwo synthetisieren ... Hat da jemand Erfahrungswerte für Altera (LE) und Xilinx (Gates)? Zum Originalposting: Man kann es machen, man muss es aber nicht. Es hat halt Vorteile, wenn man sich damit einen kompletten Microcontroller sparen kann, der dann Platz und Geld kosten würde. Aber zwingend notwendig ist das nie ... MfG Thomas Pototschnig
@Thomas: Zu Geschwindigkeit/Ressourcenverbrauch lm32 siehe: http://www.mikrocontroller.net/articles/FPGA_Soft_Core#Lattice_Mico32_und_soc-lm32 Interressant wären mal ein paar Hausnummern zum MicroBlaze. Rick
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.