Forum: FPGA, VHDL & Co. Linux als embedded System auf einem FPGA


von Andreas S. (andreas911)


Lesenswert?

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 !

von Εrnst B. (ernst)


Lesenswert?

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.

von Mathi (Gast)


Lesenswert?

> 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.

von Andreas S. (andreas911)


Lesenswert?

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.

von high_speed (Gast)


Lesenswert?

> .. 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

von manuel (Gast)


Lesenswert?

Naja, wenn man eine CPU synthetisiert hat dann stellt der FPGA doch im 
weitesten Sinne schon eine CPU dar?!

von Morin (Gast)


Lesenswert?

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

von Morin (Gast)


Lesenswert?

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.

von Uwe B. (Firma: TU Darmstadt) (uwebonnes)


Lesenswert?

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

von Arndt B. (Firma: Helion GmbH) (bussmann)


Lesenswert?

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.

von Reto B. (schnuber)


Lesenswert?

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.

von Günter -. (guenter)


Lesenswert?

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.

von Thomas P. (pototschnig)


Lesenswert?

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

von Rick Dangerus (Gast)


Lesenswert?

@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
Noch kein Account? Hier anmelden.