Forum: FPGA, VHDL & Co. [F] schnelle Verbindung ARM9<->FPGA


von asd (Gast)


Lesenswert?

Hallo,

was wären Vorschläge wie man eine schnelle Verbindung zwischen einem 
ARM9 Chip und einem FPGA herstellen kann? Nur prinzipiell, denn weder 
der FPGA noch der ARM Chip stehen endgültig fest (vermutlich Virtex-6 
und ein AT91SAM9G20). Das schnellste was ich an dem ARM9 entdeckt hab 
ist eine SPI die per DMA angesteuert werden kann (max Taktfreq. muß ich 
noch aus dem Datenblättern extrahieren, so 3-5MByte/s sollten drin 
sein).
Sollte das nicht reichen, gibts andere Ideen? Möglichst was 
straight-forward, keine Hacks. Das wird mein erstes Board mit schneller 
Digitallogik.
Bei einem Board in unserer 4ma gibts eine CPU an der ein DDR-Ram hängt, 
parallel dazu ein 32Bit Bustreiber der die Leitungen an den FPGA führt. 
Ich hab nur den Schaltplan gesehen, aber da hat doch nicht jemand den 
FPGA memory-mapped an das SD-RAM Interface gehängt??!? (Designer nicht 
mehr erreichbar) Funktionieren tut's offensichtlich aber selber traue 
ich mich nicht so einen Stunt auf die Platine zu bringen...
Was gibts sonst für Möglichkeiten? Gibts ARM9 CPUs die ein schnelles 
(auch paralleles) Interface mit 10MByte/s oder schneller zu einem FPGA 
anbieten? Oder muß ich mich irgendwie an den SDRAM oder 
Flash-Speicherbus hängen? Es gibt CPUs mit schnellen SPIs, ich will nur 
mal im voraus fragen falls sich heraus stellt dass das nicht reicht.

Andere Frage: Oft sieht man ARM9 Boards die (viel) NAND und (ein wenig) 
XOR Flash haben. Keine Eval-Borad sondern kleine CPU-Module für die 
Serie. Zu was ist das gut? Zum booten? Geht das nicht oder nur 
umständlich aus dem NAND-Flash? Beispiel dafür ist:
http://microcontrollershop.com/product_info.php?products_id=3774

Viele Grüße,

von BF (Gast)


Lesenswert?

Hi,

Zuerst ist natürlich immer die Frage interessant: Welche Bandbreite 
brauchst du überhaupt?

Dein favourisierter ARM9 besitzt ein externes Speicherinterface:

"External Bus Interface: 1" (hab ich von der atmel homepage)

Das ist ein paralleler Speicherbus. Wenn du den komplett am FPGA 
anschließt und du im FPGA einen Speicher beschreibst, dann kannst du auf 
einfachste Weise auf Register im FPGA schreiben und davon auch lesen. 
Hier sollten je nach Taktrate, Latency, etc. eine sehr hohe Bandbreite 
möglich sein.

Der Zugriff in C/C++ sieht dann exemplarisch so aus:
1
int *int_reg;
2
3
int_reg = address;      // das ist die zu schreibende Adresse
4
*int_reg = write_value; // das ist ein Schreibzugriff
5
read_value = *int_reg;  // das ist ein Lesezugriff

Ich empfehle dir im Datenblatt alles über das Externe Bus Interface zu 
lesen, damit du eine Vorstellung davon bekommst.

Vg
BF

von Christian R. (supachris)


Lesenswert?

Die Frage ist auch, ob du viele Daten am Stück übertragen willst, oder 
eher immer kurze (einzelne Worte) von verschiedenen Speicherstellen. Für 
ersteres wäre ein Straming-Interface sinnvoll, die TI OMAP haben 
beispielsweise eine Streaming-Port dran. Sehr einfaches FIFO-Interface, 
schnell und full-duplex. Für zweiteres ist ein paralleles Interface am 
Speicherbus sinnvoll, du kannst den FPGA dann als Speicher einblenden 
und wie oben schon beschrieben zugreifen. Lange Datensätze auf einmal 
gehen dann meist aber eingeschränkt, und direkter Transfer in den RAM 
geht dann auc nur über die CPU, weil ja beide am gleichen Bus hängen. 
Was hast du gegen den memory mapped FPGA? Das ist normale Design-Praxis, 
millionenfach bewährt. Es gibt sogar (DDR)SDRAM Interfaces wo der FPGA 
einen SDRAM Slave darstellt.

von asd (Gast)


Lesenswert?

> Was hast du gegen den memory mapped FPGA? Das ist normale Design-Praxis,
> millionenfach bewährt. Es gibt sogar (DDR)SDRAM Interfaces wo der FPGA
> einen SDRAM Slave darstellt.

Mir ist (war) die Vorstellung unheimlich an ein 133MHz-SDRAM-Interface 
noch was anderes dran zu friemeln und nicht eine Punkt-zu-Punkt 
Verbindung zum Speicherbautein zu machen. Aber so wie ich das Datenblatt 
lese teilen sich bei dem ARM9 Chip sämtliche Speicherchips (SDRAM, 
Flash, SRAM) zumindest die Datenleitungen, so dass das eh keine 
Punkt-zu-Punkt Verbindung wird. Wie macht man dann die Verteilung und 
die Terminierung? Serielle Terminierung beim Sender geht ja nur in dem 
Fall gut dass der einzige Empfänger am Ende der Leitung sitzt, wegen der 
zurücklaufenden Welle.
Macht man dann einen Bus an dem der Reihe nach alle Speicherbausteine 
(und der FPGA) sitzen? Wie terminiert man dann am Ende? 
Shunt-Terminierung mit einem R-C? Ein Bus mit allen Bausteinen sicher 
von der Raumaufteilung schwierig. Kann man kurze T-Stücke machen? 
(133MHz wären 7ns Periodendauer. Die Lauflänge von 0,7ns auf der Platine 
sind ca. 11cm bei angenommen c/2)
Ich wette da gibts auch Designbeschreibungen als pdfs... ich glaub ich 
muß noch viel lesen...

von asd (Gast)


Lesenswert?

Noch eine Frage zu Layout für schnelle Digitallogik:
Man sieht auf solchen Boards immer Serpentinen in Datenleitungen, zum 
Längenausgleich. Ich frage mich wie kritisch das ist. Oben hab ich noch 
ausgerechnet dass 10cm immerhin die Laufänge von nur 1/10 Periode bei 
133MHz sind, da sollte doch +/- 1 cm ggü. der Taktleitung an 
Längenunterschied gar nicht so kritisch sein?!?
http://danstrother.com/2011/01/16/spartan-6-bga-test-board/
(Da sieht man das zischen dem FPGA in der Mitte und dem SDRAM links)

Der Aufbau der Serpentinen wundert mich auch. Dadurch dass sie so Eng 
sind dass der Abstand der benachbarten Leitungen nicht größer ist als 
die Leiterbreite selber muß das doch koppeln wie verrückt. Komme aus der 
HF-Ecke und hab so eine Serpentine (noch) nicht selber simuliert, aber 
das sieht mir eher wie ein Hochdrequenz-Filter aus als wie ein Bauteil 
das einen glatten Frequenzgang hat.

Vielen Dank für eure Tipps, BTW.

von Christian R. (supachris)


Lesenswert?

Bei 133MHz ist das noch relativ unkritisch. Aber die aktuellen FPGAs 
haben DDR2 oder DDR3 RAM Interfaces, da wird allein beim Spartan 6 schon 
mit 400MHz DDR gefahren. Ein Bit hat dann noch eine Länge von 1,25ns, 
realistisch unter 1ns da du ja endliche Anstiegstzeiten hast. Da müssen 
die Längen schon angeglichen sein. Sowas nimmt dir aber eigentlich ein 
gescheites Design-Tool( zumindest teilweise) ab. Schau doch wegen der 
Terminierung mal in Demoboard Designs. Stubs sind immer schlecht und 
tunlichst zu vermeiden.

von Abdul K. (ehydra) Benutzerseite


Lesenswert?

Serpentinen und Terminierung auf die harte Tour via Dioden findest du 
bei PCI. Da gibts sicherlich genug zu lesen.

Die Serpentine ist in erster Linie eine Verzögerungsleitung. In zweiter 
Linie auf höherer Frequenz ein Tiefpaß.

von Μαtthias W. (matthias) Benutzerseite


Lesenswert?

asd schrieb:
> Andere Frage: Oft sieht man ARM9 Boards die (viel) NAND und (ein wenig)
> XOR Flash haben. Keine Eval-Borad sondern kleine CPU-Module für die
> Serie. Zu was ist das gut? Zum booten? Geht das nicht oder nur
> umständlich aus dem NAND-Flash?

Das hast du korrekt erkannt. Booten von NAND ist komplexer als von NOR. 
Wenn ein Prozessor von NAND booten kann ist immer ein kleines Programm 
im ROM des  Prozessors aktiv welches ein paar wenige k (2k/4k) des NAND 
in ein internes SRAM kopiert und dann dort hin hüpft. Diese 4k müssen 
dann Software enthalten die das RAM initialisiert, weitere Daten aus dem 
NAND kopiert und so das System Stück für Stück startet. Beim Booten von 
NOR steht da ab Adresse 0 Software die sofort ausgeführt werden kann.

NOR ist etwas konservativer da weniger Software mitspielt die man nicht 
selbst im Griff hat (ROM im Prozessor).

Das ist aber alles auch noch 100% SoC abhängig. Ein Atmel mag das wieder 
völlig anders machen als ein Freescale oder ein TI. Die heutigen SoCs 
können auch oftmals von weiteren Medien wie etwas I2C/SPI EEPROMs, 
SD-Karten oder über USB/UART booten. Alles eine Frage des ROMs im 
Prozessor und der Beschaltung der Configpins.

Matthias

von Andreas U. (Gast)


Lesenswert?

Lege das RAM über den FPGA an den Controller. Dann hast du dual mode 
DMA.

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.