mikrocontroller.net

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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Holger F. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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
Autor: Joe F. (easylife)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Bego (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Stefan E. (stefanosch)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Holger F. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Stefan E. (stefanosch)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Joe F. (easylife)
Datum:

Bewertung
0 lesenswert
nicht 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
Autor: Holger (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

Autor: Joe F. (easylife)
Datum:

Bewertung
0 lesenswert
nicht 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
Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: -gb- (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Achim S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Holger F. (Gast)
Datum:

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

Autor: Achim S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Holger F. (Gast)
Datum:

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

Autor: Achim S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.