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
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?
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?
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.
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.
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?
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
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.
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
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...
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.
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.
Ja ich entschuldige mich das war ein ganz dummer Tippfehler. Ich meine natürlich AD Wandlung.
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.
Es soll ein ADS1675 zum Einsatz kommen. Der hat allerdings 24 bit und 4MSPS. Der ist dann per LVDS angebunden.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.