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?
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.
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.
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
> 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)
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.
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
Karl schrieb: > Dannn brauchste keinen Bus auf der PCB Das hört sich nach einem sehr autistischen und kompakten System an...
>wie waer's denn mit http://www.makestuff.eu/wordpress/software/fpgalink/
Ist das nicht ein bisschen viel Overhead für eine P2P-Verbindung?
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.
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...?
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.
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;
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.