Forum: FPGA, VHDL & Co. Speichern/Versenden von Daten


von Markus B. (elektronik-bastler)


Lesenswert?

Hallo zusammen,

ich hätte hier folgendes Problem.
Ich habe vor Daten die mit sehr hoher Geschwindigkeit(40Msample/s)
ankommen zu einem PC zur Weiterverarbeitung zu senden. Das Problem ist,
dass ich die Daten aufgrund der hohen Geschwindigkeit nicht direkt zu
dem PC senden kann. Ich habe mir überlegt, die Daten
zwischenzuspeichern und dann über eine programmierbaren
Baustein(Serielle Schnittstelle) zum PC zu versenden.
Mein Problem ist, dass ich noch nie etwas ähnliches gebastelt habe. Ich
habe wenig Erfahrung hiermit.
Daher wollte ich wissen, ob einer von euch ähnliches schon mal
gebastelt hat, und mir vielleicht mit einigen Tips weiterhelfen kann.
Was für einen Speicher sollte ich eurer Meinug nach einsetzen? Was für
einen Baustein sollte ich eurer Meinung nach zum Bearbeiten und
Versenden der Daten einsetzen?(was wäre einfacher?)
ich würde mich auf jeden noch so unwichtig erscheinenden Hinweis und
Hilfe freuen und bedanke mich im Voraus für eure Hilfe.

von Ulrich (Gast)


Lesenswert?

In welcher Form kommen die Daten genau an. In welchen Intervallen

von Markus B. (elektronik-bastler)


Lesenswert?

Die Daten kommen kontinuierlich von einem A/D-Wandler an. Ich möchte
aber jedesmal nur einen begrenzten Datenbereich
aufzeichnen(Aufzeichnungs-Start durch ein Triggersignal
festgelegt-->Einlesevorgang)
Nachdem ich den Speicher eine gewisse Zeit lang gefüllt habe möchte ich
diese Daten zu einem PC senden(Auslesevorgang), und erst dann wieder
einen Einlesevorgang in den Speicher beginnen
Das Intervall ist somit nicht so wichtig

von Ulrich (Gast)


Lesenswert?

Kommen die Daten über SPI, UART oder sontigem vom A/D-Wandler?

Prinzipiell müsste es aber relativ einfach sein. In irgendeinen z.B.
AVR in einen Ringpuffer Dateneinlesen und gleichzeitig über UART an den
PC verschicken. Bis der Speicher voll ist und dann Messsung abbrechen.

von Markus B. (elektronik-bastler)


Lesenswert?

Hallo Ulrich,

zuerst möchte ich mich für die schnelle Antwort bedanken.

Ich bekomme aus einem A/D-Wandler Daten von 14-Bit Breite.
Diese will ich für eine vereinfachte Bearbeitung mit zwei Nullen
versehen auf 16-Bit aufwerten und den Datenstrom aufzeichnen.

Mit einem Triggersignal bekomme ich bescheid, dass ein Datenstrom von
endlicher Länge kommt. (Länge unbekannt).
Mit Hilfe des Triggersignals möchte ich den Speichervorgang starten.
Das Speichern soll ca. 400µs dauern. Also kann ich ca. 16.000 Messwerte
aufzeichnen.
Wie das Speichern vor sich gehen soll habe ich noch keine genaue
Vorstellung.
Wichtig ist, dass ich die Daten nachdem die 400µs um sind auslesen und
seriell zum PC weitersenden kann. Danach Speicher leeren, auf neues
Triggersignal warten,...

von Fly (Gast)


Lesenswert?

"Ich habe vor Daten die mit sehr hoher Geschwindigkeit(40Msample/s)
ankommen zu einem PC zur Weiterverarbeitung zu senden."

Das wären 80MByte/s
Das schreit mir förmlich nach einem grossen, schnellen RAM, kein
anderer Speicher ist schnell genug um dem Datenstrom gerecht zu werden!

Wenn dein RAM voll ist oder du die Sampleanzahl erreicht hast, musst du
die Daten zum PC kriegen. Da es sich um eine so grosse Datenmenge/Zeit
handelt, kenn ich nur USB 2.0 / Firewire das passt, ausser du möchtest
nach jeder Messung ca 100 Mal so lange warten bis die Daten beim PC
sind.

von Markus B. (elektronik-bastler)


Lesenswert?

Gibt es aus deiner Erfahrung einen Speicher, den du empfehlen würdest?
Ich habe bis jetzt für Übertragungen nur die serielle Schnittstelle
verwendet.
Gibt es bei Einsatz von USB 2.0/Firewire bekannte Schwierigkeiten, mit
denen ich rechnen müsste?
Was für Bausteine würdest du einsetzen, um Probleme zu vermeiden?
(Speicher, Controller,...)

von Fly (Gast)


Lesenswert?

Ich habe nur deine Rahmenbedingungen analysiert, Erfahrungen habe ich
mit solchen Anforderungen leider keine.

Am einfachsten wäre wohl ein SRAM als Speicher, ob es so schnelle gibt
wie du brauchst weiss ich nicht! Die Übertragung zwischen ADC und SRAM
würde ich mit einem CPLD lösen, da rel. einfach, preiswert und
sauschnell! Die Datenübertragung zum PC mittels USB 2.0 / Firewire
ist komplex und benötigt einen sehr schnellen Controller, nix AVR, nix
zuHauseBastelaufbau. Dein Vorhaben ist kein
samstagnachmittagschlechtwettervorhaben! Ich glaube eine USB2.0 /
Firewire implementation kriegst du nicht hin.
Was hast du eigentlich vor? Evtl. kannst du dir was vom Logikanalyser
Projekt was abkupfern.

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

IDE oder SCSI könnte als PC-Interface interessant sein, das sollte
deutlich einfacher zu implementieren sein als Firewire.

von Markus B. (elektronik-bastler)


Lesenswert?

Klar gehe ich davon aus, dass ich mit meinem Wissensstand länger als ein
paar Monate brauche.
Mein Problem ist, dass ich noch nicht genau weiss, wo und wie ich
anfangen soll, das Problem zu lösen, bzw. mich einzuarbeiten.
Es sieht so aus, dass die Daten aus dem A/D-Wandler gesteuert über
einen CPLD in einen "schnellen Speicher" reingeschrieben werden
müssen. Also CPLD und Speicher aussuchen.
Die Geschwindigkeit für das Senden der Daten vom Speicher zum PC ist
vorerst nicht wichtig. Dafür reicht die serielle Übertragung aus, und
sollte viel Arbeit ersparen und Probleme auch. Aber später möchte ich,
wenn das ganze mal steht und funktioniert auch einen USB2.0 verwenden.
Es ist eine Arbeit, um ein analoges Signal zu analysieren.
Ich sammle gerade meine Erahrungen auf diesem Gebiet, und habe noch
viel dazuzulernen.

von Dirk B. (dirk-)


Lesenswert?

Hi,

Nimm ein PQ208 FPGA (Spartan2 200k) und lege die Daten in ein SRAM
deiner Wahl (Cypress hat schoenen ZBT kompatiblen Speicher). Du
koenntest im FPGA noch eine Datenkompression vornehmen (Timestamp
setzen bei Aenderungen). Die Timestampgeschichte kannst du im internen
Blockram erledigen. Die eigentlichen Nutzdaten kannst du per Burst
Betrieb ins SRAM packen. Die Burst-schreib/lesefunktion erspaert dir
den Adresszaehler. Als USB Schnittstelle zum Anfang wuerde ich dir den
FT245BM Chip empfehlen. Du sparst dir den FLASH Speicher fuer den FPGA,
weil der FTDI Chip den FPGA konfigurieren kann.

Der FTDI Chip ist nur USB1.1 und kann bis zu 1Mbit uebertragen, aber
bei deinem Wissensstand (nicht boese gemeint) sollte man versuchen sich
bis dahin durchzukaempfen.

Bei Xilinx liegen fertige Appnotes zur Ansteuerung von ZBT SRAM.
Der SRAM (4Mbit) lag bei knapp 20 Euro bei RS und der FPGA bei ca 30
Euro bei Digikey.

Ohne PCB bist du dann bei ca 55 Euro.

Gruß,
Dirk

von Markus B. (elektronik-bastler)


Lesenswert?

Hallo Dirk,

danke dir für die Hilfe.
Ich werde mich in den nächsten tagen mal damit beschäftigen.
Kann ich ohne weiteres an diesen FPGA einen Speicher von 128MB
anschliessen?
Ich möchte ohne Datenkompression arbeiten.

von Fly (Gast)


Lesenswert?

rtfm oder lass es, vorkauen werden wir es dir nicht!

von Markus B. (elektronik-bastler)


Lesenswert?

Hallo Fly,

ich möchte hier nichts Vorgekautes. Ich möchte das Projekt selbständig
erarbeiten und dachte dass nichts falsch dabei wäre ein paar Profis
nach einem Ratschlag zu fragen. Man kann sich dadurch besser
orientieren.
Erfahrung gewinnt man mit der Zeit durch Arbeit, und das erwartet
mich.
Danke trotzdem.

von Dirk B. (dirk-)


Lesenswert?

>Kann ich ohne weiteres an diesen FPGA einen Speicher von 128MB
>anschliessen?

Du meinst sicherlich handelsueblichen DDRAM für den PC. Natuerlich
kannst du nen Memory Controller fuer DDRAM /SD Ram programmieren.
Einige Anhaltspunkte findest du in Appnotes bei Xilinx. Ich meine die
haben auch fertige Core's.

Fang aber erstmal mit simplen Sachen an. Ein einfacher SRAM Memory
Controller mit Adresszaehler dauert als Anfaenger schon ein bischen.

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.