Forum: FPGA, VHDL & Co. Zynq - Daten an Peripherie streamen


von Man S. (flecko)


Lesenswert?

Hallo,
ich bin aktuell an der Portierung eines Projekts auf einen Zynq 
UltraScale.
Im FPGA gibt es 4 voneinander unabhängige Module, welche jeweils 
kontinuierlich mit 32bit Daten bei 500kSPS (max. 1MSPS) gefüttert werden 
müssen. Es dürfen keine Samples doppelt vorkommen oder übersprungen 
werden. Vom Anwendungsfall kommt das einem DAC sehr gleich. Der 500kHz 
Takt wird in den jeweiligen Modulen erzeugt, bzw. mit einer PLL jeweils 
leicht variiert. Er ist also nicht synchron mit dem AXI Takt des PS.

Die Datenrate liegt also bei ca. 2MByte/s pro Modul.
Die Daten werden in Linux selbst erzeugt, oder per TCP empfangen.

Da ich absoluter neuling in Sachen Zynq und AXI bin frage ich mich, wie 
ich die Schnittstelle am besten gestalte. Die Module könnten ja direkt 
über einen AXI Stream versorgt werden?

Frage 1:
Wie synchronisiere ich die Module mit dem AXI Stream Master. Es gibt 
einen AXI Stream Clock rate Converter und einen AXI Stream Data FIFO, 
worin liegen hier die Unterschiede/Vorteile?

Frage 2:
Wie erzeuge ich am besten den AXI Stream? Als Möglichkeit habe ich den 
AXI Stream FIFO oder den AXI DMA Controller gefunden.
Der DMA Controller entlastet sicherlich die CPU, jedoch ist die 
Implementierung unter Linux komplexer. Welche Vorteile bietet der FIFO?

viele Grüße
Manuel

von Timmo H. (masterfx)


Lesenswert?

Also ich habe das mit nem AXI Fifo gelöst. Habe 3 ADCs mit 192 KHz, 
welche die Daten in nen AXI-Fifo werfen Diese lese ich aus und feuere 
sie über nen UDP-Stream einfach raus. Funzt wunderbar mit minimaler 
CPU-Last.

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.