Forum: FPGA, VHDL & Co. Anbindung von ARM9 an FPGA


von magic (Gast)


Lesenswert?

Hallo zusammen,

ich überlege mir schon seit einiger zeit welche Anbindung die optimale 
zwischen einem ARM9 mit Linux und einem FPGA wäre? Der FPGA soll als 
Schnittstellen Expander des ARM9 fungieren (x Uart, x SPI Master 
vielleicht auch noch eine weitere Ethernet-Schnittstelle).

Nach meinem Verständiss soll das Interface folgende Eigenschaften haben.

1. Die Anbindung soll ein möglichst einfaches PCB designe erlauben
2. Aber dennoch eine aussreichende hohe Datenrate haben (ca. 40 mbit/s)
3. Eine einfache Treiberimplementierung in Linux ermöglichen, um die
   Daten effektiv in den User-Level zu transportieren
4. Die Anbindung ist idealer weise mit offenen Cores realisierbar

Einen Bus zu realisieren (EBI) ist wohl ein klassiker aber die PCB wird 
viel zu aufwendig (Signalanzahl) ausserdem belegt dies einige PIN`s des 
FPGA.
SPI wird wohl ein Flaschenhals und die einzige Ethernet schnittstelle
soll noch andere Funktionen übernehmen.
Meine Idee wäre die USB High Speed Host-Schnittstelle für die Anbindung 
zu verwenden.

Wie würdet ihr eine solche Anbindung realisieren?

von Omega (Gast)


Lesenswert?

ganz klar EBI
- höchste Bandbreite
- sehr einfach zu implementieren
- kurze Latenz

Wenn man Performance will, dann das und nichts anderes. Es macht einfach 
nur Spaß über EBI in einem FPGA Register zu lesen/schreiben. Evtl. 
könnte man auch darüber noch einen DMA realisieren.

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

Ich würde einen ARM-Prozessor mit integriertem FPGA verwenden, z.B. aus 
der Zynq-7000-Familie von Xilinx. Darin ist aber kein ARM9 enthalten, 
sondern gleich zwei ARM Cortex-A9.

Allerdings ist der Umgang mit BGA-Gehäusen nicht jedermanns Sache, 
insbesondere weil der Zynq auch ordentlich über die Leiterplatte 
entwärmt werden muss. weil er sich sonst leicht überhitzt.

von magic (Gast)


Lesenswert?

Omega schrieb:
> ganz klar EBI
> - höchste Bandbreite
> - sehr einfach zu implementieren
> - kurze Latenz

Das mag ja sein, aber der 32 Bit bus muss zuerst einmal auf die PCB :-/
Obwohl wenn es fertige cores und einen Linux Treiber gibt :)

> Wenn man Performance will, dann das und nichts anderes. Es macht einfach
> nur Spaß über EBI in einem FPGA Register zu lesen/schreiben. Evtl.
> könnte man auch darüber noch einen DMA realisieren.

Ja einen per DMA vom FPGA transportierten Datenstrom direkt in dem ARM9
und anschliessen die Daten in den User-space streamen, so stelle ich mir 
das idealer weise vor.

Andreas Schweigstill schrieb:
> Ich würde einen ARM-Prozessor mit integriertem FPGA verwenden, z.B. aus
> der Zynq-7000-Familie von Xilinx. Darin ist aber kein ARM9 enthalten,
> sondern gleich zwei ARM Cortex-A9.
>
> Allerdings ist der Umgang mit BGA-Gehäusen nicht jedermanns Sache,
> insbesondere weil der Zynq auch ordentlich über die Leiterplatte
> entwärmt werden muss. weil er sich sonst leicht überhitzt.

Linux wird in jedem fall auf einem eigenen SoC modul werkel. Eine 
vollständige SoC FPGA implementierung kommt aus Kosten- und 
Erfahrungsgründen nicht in frage.

@All
Hat den schon jemand mit einer USB Host high speed Anbindung seine 
erfahrungen gesammelt. Eignet sich diese überhaupt für meine Anwendung?
Linux -> FPGA

von STMler (Gast)


Lesenswert?

> Das mag ja sein, aber der 32 Bit bus muss zuerst einmal auf die PCB :-/

Für 40MBit/s reichen ja schon 8 Bit aus.

(8 Bit * 50MHz = 400MBit/s - aber das ist natürlich nur die rein 
elektrische Bandbreite in dem Fall... aber 1/10 dieser Datenrate sollte 
wohl drin sein)

von PittyJ (Gast)


Lesenswert?

USB ist ein recht komplexes Protokoll. Das ist mal nicht so einfach 
implementiert.
Es gibt zwar einiges auf opencores.org, doch da muss man sich wohl erst 
einarbeiten. Wird wohl ein paar Monaten in Anspruch nehmen.

Meiner Meinung ist ein Businterface wohl einfacher zu implementieren. 
Kann ja auf 8 oder 16 Bit reduziert werden.

von Karl (Gast)


Lesenswert?

magic schrieb:
> Linux wird in jedem fall auf einem eigenen SoC modul werkel. Eine
>
> vollständige SoC FPGA implementierung kommt aus Kosten- und
>
> Erfahrungsgründen nicht in frage.

Mal die Frage umdrehen.
Was läuft den auf deinem Linux?
Linux ist auch häufig in Embdded oversized

ginge auch ein Softcore im FPGA?
Dannn brauchste keinen Bus auf der PCB

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Karl schrieb:
> Dannn brauchste keinen Bus auf der PCB
Das hört sich nach einem sehr autistischen und kompakten System an...

von berndl (Gast)


Lesenswert?


von Jo (Gast)


Lesenswert?

>wie waer's denn mit http://www.makestuff.eu/wordpress/software/fpgalink/

Ist das nicht ein bisschen viel Overhead für eine P2P-Verbindung?

von Christian R. (supachris)


Lesenswert?

Hat der ARM eventuell eine SATA Schnittstelle? Das wäre dann auch eine 
Möglichkeit, vorausgesetzt das FPGA hat einen MGT. Welcher ARM genau ist 
das? Wir hatten hier mal einen OMAP, der hatte auch ein interessantes 
Streaming Interface.

von STMler (Gast)


Lesenswert?

Christian R. schrieb:
> Hat der ARM eventuell eine SATA Schnittstelle? Das wäre dann auch eine
> Möglichkeit, vorausgesetzt das FPGA hat einen MGT.

Gibt es Cores für sowas?
Also per SATA Daten vom FPGA streamen...?

von Christian R. (supachris)


Lesenswert?

Wenn du eh Zugriff auf den Linux-Treiber hast, brauchst du dafür 
wahrscheinlich keinen Core. Das sind ja nur Daten schaufeln in beide 
Richtungen. Das bissl "Protokoll" ist schnell gemacht.

von magic (Gast)


Lesenswert?

Karl schrieb:
> Mal die Frage umdrehen.
> Was läuft den auf deinem Linux?
> Linux ist auch häufig in Embdded oversized

Das Linux system wird eine menge code für Kommunikation, HMI, 
webserver... ausführen.

Jo schrieb:
> wie waer's denn mit http://www.makestuff.eu/wordpress/software/fpgalink/
>
> Ist das nicht ein bisschen viel Overhead für eine P2P-Verbindung?

Im grunde keine so schlechte idee einen weiteren uC mit integrierter phy 
zu nehmen. Nur bei diesem Aufwand kann man doch auch einen 16 bit Bus 
direkt anbinden, wenn vorhanden.
Da zeigen sich die Nachteile des PI boards nicht genügend externe 
Schnittstellen zu haben.

Christian R. schrieb:
> Hat der ARM eventuell eine SATA Schnittstelle? Das wäre dann auch eine
> Möglichkeit, vorausgesetzt das FPGA hat einen MGT. Welcher ARM genau ist
> das? Wir hatten hier mal einen OMAP, der hatte auch ein interessantes
> Streaming Interface.

Mein ausgesuchten CPU/SoM boards haben kein SATA Interface und ein 
Schwergewicht ala OMAP 4430 ist schon eine andere Liga.

Ich dachte eine CPU wie ein Atmel ARM9
http://www.atmel.com/devices/sam9g45.aspx?tab=parameters
dieser hat einen high speed USB host Interface.
Als Board Lösung z.B.
http://www.taskit.de/produkte/stamp9g45/tech.htm
oder ein vergleichbare CPU z.B. Freescale i.MX257

Kennt einer von euch ein paar interessante Link zum einlesen?
Open source Projekte; ARM9 Anbindung FPGA per EBI oder USB Host;
Linux Treiber Realisierung für beide varianten;

von Christian R. (supachris)


Lesenswert?

Naja, USB Host ist schon eine aufwendige Sache. Wenn es dafür aber Linux 
Treiber gleich gibt, die du z.B. mit einem LibUSB derivat ansprechen 
kannst, wäre es eventuell OK, auf der FPGA Seite dann einen Cypress FX2 
oder FT2232H reinschalten.
Ansonsten halt parallel anschließen, 16 Datenleitungen, 16 
Adressleitungen und paar Steuerleitungen halt, ist das einfachste. Aber 
nicht besonders effizient, in den meisten Fällen weil für die Transfers 
eine Menge zusätzlicher Zyklen anfallen.

von Michael K. (mab)


Lesenswert?

magic schrieb:
> Ich dachte eine CPU wie ein Atmel ARM9
> http://www.atmel.com/devices/sam9g45.aspx?tab=parameters
> dieser hat einen high speed USB host Interface.

Bei dieser CPU empfehle ich dringend das Errata bzgl. USB2 HiSpeed zu 
studieren. Das gibt sonst böse Überraschungen.

Gruß

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.