Forum: FPGA, VHDL & Co. Anbindung von DA Wandlern an einen FPGA und FIFO


von Holger F. (Gast)


Lesenswert?

ich habe mehrere Karten mit einem 16Bit breiten DA BUS, welche alle an 
einen FPGA gehen sollen um dann in einem CPU Modul ausgelesen zu werden. 
Also DA -> FPGA -> FIFO -> CPU.

Die DA Wandler sind jeweils getriggert und können maximal 10MSPS. Es 
gibt 6 solcher DA Module.

Wie würdet ihr sowas an einen FPGA anbinden und gibt es eventuell schon 
fertige Chips für sowas? Bisher bin ich mit den FTDI FIFOs immer ganz 
gut gefahren aber das waren Anwendungen für nur einen DA Wandler.

: Verschoben durch Moderator
von Joe F. (easylife)


Lesenswert?

Warum externe FIFOs? FIFOs direkt im FPGA zu implementieren sollte doch 
kein Problem sein.
Oder hast du zwischen FPGA und "CPU" noch eine Schnittstelle à la USB zu 
überwinden?

von Bego (Gast)


Lesenswert?

Diese Forderung:

Holger F. schrieb:
> welche alle an einen FPGA gehen sollen

widerspricht deiner späteren Schlussfolgerung, einen IC einsetzen zu 
wollen. Was sollte der denn leisten?

von Stefan E. (stefanosch)


Lesenswert?

Holger F. schrieb:
> Also DA -> FPGA -> FIFO -> CPU.

Wenn DA = Digital Analog, dann sind Deine Pfeile falsch herum, es sei 
denn Du meintest einen AD-Wandler.

von Holger F. (Gast)


Lesenswert?

Joe F. schrieb:
> Warum externe FIFOs? FIFOs direkt im FPGA zu implementieren sollte
> doch
> kein Problem sein.
> Oder hast du zwischen FPGA und "CPU" noch eine Schnittstelle à la USB zu
> überwinden?

Ja das ist der Plan. Alternativ könnte ich auch geteilten Speicher vom 
ultraScale+ nehmen. Generell geht es mir eher um etwas allgemeineres. 
Nämlich wie man den Bus am besten an den FPGA anbindet. Also mir strebt 
sowas wie ein Multiplexer vor, bei dem die 16 Datenleitungen selektiert 
werden und das eben für jeden DA wandler. Das heißt die Gesamtfrequenz 
ist dann 10MSPS * N.

von Stefan E. (stefanosch)


Lesenswert?

wenn Du die Wandler getriggert hintereinander ansteuerst, dann konntest 
Du eventuell ja eine Art Interleave auf dem Interface implementieren.

Was sind das denn für Wandler-IC?

von Joe F. (easylife)


Lesenswert?

Holger F. schrieb:
> Nämlich wie man den Bus am besten an den FPGA anbindet. Also mir strebt
> sowas wie ein Multiplexer vor, bei dem die 16 Datenleitungen selektiert
> werden und das eben für jeden DA wandler.

Also am einfachsten wäre es wohl, alle 6 Wandler direkt an den FPGA 
anzuschließen.
Dann kann man auch alle zeitgleich auslesen.
16x6 sind in Summe 96 IOs, für viele FPGAs eher die untere Liga.

Externe tri-state Latches oder eine MUX bei 60 MHz würde ich mir nicht 
antun.

: Bearbeitet durch User
von Holger (Gast)


Angehängte Dateien:

Lesenswert?

Multi-channel Data Acquisition System (DAQ) is widely used in Signal 
process-ing, different fields of Engineering and Communications 
applications This paper describes Field Programmable Gate Array (FPGA) 
based hardware design and implementation of the multi-channel DAQ system 
on soft-core embedded pro-cessor. A complete six channel data 
acquisition system utilizing FPGA as a main processing element has been 
designed and realized. Each analog channel oversampled to reduce the 
analog filter orders and decimated and filters in dig-ital domain. A 
soft-core processor (Microblaze) used to control the sampling rates, 
serial programming of ADC and data acquisition from each channel [4]. An 
embedded soft-core processor is to be customized for a given application 
and synthesized for an FPGA target. At final, a RS232 based debug module 
is implemented on FPGA to debug application software and uploading data 
from NAND flash. Required and relevant hardware have been realized using 
Spartan-3 FPGA device.

Das habe ich getestet mit einer UHR. In jedem der 6 Module lese ich die
Uhrzeit gleichzeitig aus .. und baue die zu einem String zusammen.

Gruss Holger.

von Joe F. (easylife)


Lesenswert?

Ich gehe mal davon aus, dass du "Holger F. (Gast)" bist.
Was willst du mit deinem Post mitteilen?
Wie im Diagramm ersichtlich sind alle 6 Module direkt und parallel am 
FPGA angeschlossen.
Problem also gelöst, system up and running?

: Bearbeitet durch User
von Andi (Gast)


Lesenswert?

Holger schrieb:
> Das habe ich getestet mit einer UHR. In jedem der 6 Module lese ich die
> Uhrzeit gleichzeitig aus .. und baue die zu einem String zusammen.

Das müssen dann wohl Analoguhren gewesen sein, wenn du die über 6 
AD-Wandler ausgelesen hast...

von -gb- (Gast)


Lesenswert?

Nun, man könnte doch FIFOs verwenden. So dual Clock Teile. Die hängen 
alle an einem Bus und haben je einen WR für das FPGA. Dann kann man die 
zyklisch vom FPGA aus befüllen reihum während vom DA Wandler langsam 
daraus wieder gelesen wird. Ich vermute mit 100 MHz sollte das noch gut 
machbar sein.
Statt FIFO müsste aber auch ein getaktetes Register funktionieren. Also 
für jeden DAC eines. Die kann man auch reihum nacheinender schreiben vom 
FPGA aus und dann sieht der DA die Ausgänge. Schick wären dann noch 
verschobene Takte für die DACs damit die die Daten lange genug stabil 
sehen. Oder eine zweite schnelle Registerstufe.

von Achim S. (Gast)


Lesenswert?

Joe F. schrieb:
> Was willst du mit deinem Post mitteilen?

Vielleicht wollte er auf dem Weg Stefans Rückfrage beantworten, dass es 
tatsächlich um ADCs geht (und nicht um DACs, wie von ihm durchgehend 
geschrieben).

Jetzt müsste nur noch eine Idee her, worin dabei das eigentliche Problem 
liegen soll. Dann könnte man ggf. helfen, das Problem zu lösen.

von Holger F. (Gast)


Lesenswert?

Ja ich entschuldige mich das war ein ganz dummer Tippfehler. Ich meine 
natürlich AD Wandlung.

von Achim S. (Gast)


Lesenswert?

Holger F. schrieb:
> Ich meine
> natürlich AD Wandlung.

Gut, das ist ein Schritt zur Klärung der Randbedingungen.

Wenn du jetzt noch verrätst, welcher ADC eingesetzt werden soll, lässt 
sich ggf. auch eine sinnvolle Antwort auf deine Ursprungsfrage geben 
(mit welchem "Bussystem" der ADCs am besten ans FPGA angebunden wird).

Die nächste zu klärende Randbedinung für die Verbindung FPGA-CPU wird 
dann sein, ob deren Bandbreite dauerhaft für die 10MS/s*6S*2Byte/S 
ausreichen muss, oder es reicht, wenn im FPGA zwischengespeicherte 
Ergebnisse übertragen werden.

von Holger F. (Gast)


Lesenswert?

Es soll ein ADS1675 zum Einsatz kommen. Der hat allerdings 24 bit und 
4MSPS. Der ist dann per LVDS angebunden.

von Achim S. (Gast)


Lesenswert?

Holger F. schrieb:
> Es soll ein ADS1675 zum Einsatz kommen.

Also ein serielles Interface mit LVDS-Pegeln (und nichts mit "16 
Datenleitungen"). Damit dürfte die Frage nach einem externen 
Multiplexer-IC hinfällig geworden sein.

Holger F. schrieb:
> Also mir strebt
> sowas wie ein Multiplexer vor, bei dem die 16 Datenleitungen selektiert
> werden und das eben für jeden DA wandler.

Schließ einfach die 6 seriellen Interfaces deiner 6 ADCs direkt ans FPGA 
an und betreibe sie parallel, alles andere wäre komplizierter und 
schlechter. Wenn dein FPGA keine LVDS-IOs frei haben sollte, dann setze 
einfach LVDS-Transceiver vor das FPGA.

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.