mikrocontroller.net

Forum: FPGA, VHDL & Co. Signale mit 32Mbit/s extern speichern


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: Burkhard K. (buks)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich erfasse Ultraschallsignale im Feld (nachts+draussen) auf einem 
Nexys4 DDR Board. Die Signale laufen mit 32 MBit/s (2 Kanäle á 16 bit, 1 
MSp/s) ins Board. Um ein passendes Kompressionsverfahren +Denoising zu 
finden/testen, brauch ich mehrere Samples nach dem ADC auf einem 
externen Speichermedium. Der interne Zwischenspeicher (64 MiB DDR2 RAM) 
reicht für 16 Sekunden.

Ausgabemöglichkeiten auf dem Board:
  * UART to USB (PIC24)
  * SDHC Card Interface
  * RMII 100 Mbit/s (SMSC 10/100 Ethernet PHY LAN8720A)
  * 4x4 freie IOBs (verteilt auf 4 Pmods)

(kein USB-OTG).

UART to USB wäre konzeptionell einfach - aber welche Übertragungsraten 
sind damit möglich? Für den vorhandenen Ethernet PHY fehlt mir bisher 
ein Core +Einarbeitungsaufwand. Dito für das SDHC-Interface.

Was ginge noch, um das Signal vom Board (im Feld) mit mögichst wenig 
Aufwand auszulesen und ausserhalb vom FPGA zu speichern!

N.B. 1: Sobald ich ein passendes Kompressionsverfahren gefunden habe, 
brauche ich die "High-Speed"-Ausgabe nicht mehr.
N.B. 2: Das ist ein Hobbyprojekt.

Autor: goo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Versuche die SDHCKarte im SPIModus. Da sparst du dir das lesen des 
SDHC-Standart und den will keiner freiwillig lesen ;) ansonsten 
opencores.org

Autor: FPGA zum Spass (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
SD-Karte kannst du bei der Datenrate im SPI Modus vergessen, das geht 
nur im 4 Pin Modus. Dann aber möglich.

USB wäre möglich, aber nicht das was du drauf hast. Das kommt sicher nur 
auf <1Mbit.

Ethernet, keine Ahnung, habe ich noch nie in Betrieb genommen.

Zusätzliche IOs: du kannst ein FPGA Board mit 480Mbit FTDI mit deinem 
Board verbinden, dann klappt es problemlos.
Wird aber ein ganz schöner Aufbau....


Zur Anwendung:
Ultraschall kann vieles sein. Kannst du wirklich mit nur 1 Mhz samplen?

Wenn du nur Kompression testen möchtest, dann würde ich einfach mal 
etwas aufnehmen, Pause machen und per RS232 rausschleichen, dann wieder 
aufnehmen, usw.

Du verpasst zwar was zwischendurch, ist aber für den Kompressionstest 
völlig egal, weil du auch so genug Beispielmaterial zum Testen bekommst.

Autor: -gb- (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der FTDI UART kann 12 MBaud.

Autor: Burkhard K. (buks)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
FPGA zum Spass schrieb im Beitrag #5890405:
> Zur Anwendung:
> Ultraschall kann vieles sein. Kannst du wirklich mit nur 1 Mhz samplen?

Diverse Tierlaute inclusive Fledermäuse. Das meiste spielt sich 
unterhalb von 100 kHz ab, eventuell noch 2. Harmonische. Oberhalb von 
200kHz fällt der Verstärker dann ab.

-gb- schrieb:
> Der FTDI UART kann 12 MBaud.

Danke für den Hinweis, steht ja auch so im FTDI-Datenblatt. Leider fehlt 
im Nexys4 Schaltplan genau diese eine Seite ("intentionally left 
blank").

Wie kann ich die 12 MBaud auf der Gegenseite entgegen nehmen?. Mit der 
neuesten VCP Treiber Version ist der höchste einstellbare Wert im 
Windows7 Gerätemanger lediglich 921600 Baud.

Autor: egonotto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

vielleicht könntest Du ein billiges Board mit einen CYPRESS FX2 
versuchen. Die werden als Saleae Clones verkauft.

MfG
egonotto

Autor: Niklas Gürtler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
SD-karte ist möglich, sofern man den SD bus und nicht SPI nutzt. Da 
gehen bis 10 MiB/s (80 MBit/s). Man braucht aber viel Pufferspeicher, 
für ca 2 Sekunden ist sinnvoll. Das Schreiben muss man in einer cleveren 
Folge machen.
Vorteil: Billig und hardwaretechnisch simpel, man kann die Karten 
einfach herausnehmen und am PC auslesen, aufzeichnen geht autonom ohne 
PC.
Nachteil: Softwaretechnisch nicht ganz einfach.

Autor: Gustl B. (-gb-)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
Burkhard K. schrieb:
> Wie kann ich die 12 MBaud auf der Gegenseite entgegen nehmen?

Pyserial für Python kann das. Sonst müsste das auch mit dem D2XX gehen.

Autor: c-hater (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Burkhard K. schrieb:

> Wie kann ich die 12 MBaud auf der Gegenseite entgegen nehmen?. Mit der
> neuesten VCP Treiber Version ist der höchste einstellbare Wert im
> Windows7 Gerätemanger lediglich 921600 Baud.

Das besagt nicht viel, der dortige Dialog bietet nur eine Auswahl von 
Standard-Datenraten an, so weit diese vom Treiber unterstützt werden. 
Der Treiber kann aber darüber hinaus viele weitere Datenraten 
unterstützen.

Sprich: entweder findest du eine vollständige Doku zum Treiber oder du 
musst es schlicht ausprobieren, wie weit er mitspielt. Der entsprechende 
Parameter des API ist ein schlichtes DWORD, also keine Enumeration oder 
sowas und wird vom API einfach zum Treiber durchgereicht. Wenn der 
Treiber meint, das könnte er, wird SetCommState true zurückliefern, 
ansonsten halt nicht. Ein Programm, um die Obergrenze auszuklingeln ist 
schnell geschrieben und wenn es halbwegs clever geschrieben ist (binäre 
Suche), dann ist es auch schnell durchgelaufen.

Autor: Martin S. (strubi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Burkhard K. schrieb:
> UART to USB wäre konzeptionell einfach - aber welche Übertragungsraten
> sind damit möglich? Für den vorhandenen Ethernet PHY fehlt mir bisher
> ein Core +Einarbeitungsaufwand. Dito für das SDHC-Interface.

Mit Bulk-Übertragung von Streams ist schon etwas Knarzerei 
vorprogrammiert (insbesondere unter Windows USB), aber du kannst ja 
puffern.
Ansonsten gäbs hier noch einen recht anständig programmierten (und gut 
getesteten) Core:

https://github.com/pkerling/ethernet_mac

Musst ja nicht nen ganzen RTP-Stack anwerfen, p2p geht auch ein roher 
Ethernet-Stream. Die Datenrate ist gut zu schaffen, und mit DPCM und 
Huffman-Coder holst du (lossless) ev. nochmal Kompression 1:4 raus, 
hängt halt stark vom Aussehen deiner Daten ab (und nem cleveren 
Prädiktor).

Ansonsten hätte ich auch eher einen FX2 genommen als mich mit dem FTDI 
rumzuärgern. Unter Windows hickste damals der Treiber andauernd rum, 
wegen irgendwelchem Threading-Murks in der libD2XX, kann sein, dass es 
jetzt besser läuft. Software-Aufwand war grösser, als HW-Tausch...

Autor: Duke Scarring (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Burkhard K. schrieb:
> Für den vorhandenen Ethernet PHY fehlt mir bisher
> ein Core +Einarbeitungsaufwand.

https://www.fpga4fun.com/10BASE-T.html

Das ist zwar in Verilog und recht hemdsärmelig, aber o.k. um in die 
Thematik reinzukommen. 100Base-T läuft dann mit 25 MHz (oder 50 MHz) und 
für Gigabit braucht man einen Takt mit 125 MHz.

Duke

Autor: Ingo S. (logikneuling)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ueber den PIC UART, aber auch ueber die FTDI UART Loesungen mittels VCP 
sind meiner Erfahrung nach solche Datenraten nicht kontinuierlich 
realisierbar.

Fuer unidirektionales Empfangen der Daten am handelsueblichen Windows 
Laptop sind aber 8MByte/sec (64Mbit/sec, also mehr als Du brauchst) 
kontinuierlich moeglich mittels FT232H im asynchronen FT245 Mode (gibts 
als simple Module zu kaufen), D2XX Treiber, und Minimalprogramm in C, 
ohne weitere besonderen Anforderungen.

Benoetigt, je nach Leistungsfaehigkeit der Gegenstelle, ein paar kB FIFO 
Speicher im FPGA (um zur Not 1, 2, 3 oder auch ein paar mehr der 1ms 
Intervalle fuer USB Transfer zu buffern) und 10 GPIO (8-bit Data Out, 
1xWrite-Enable Out, 1xFlowControl In). Die Kommunikation zwischen FIFO 
des FPGA und FIFO des FT232H ist lediglich eine simple state-Machine, 
die in ein paar Minuten zusammengehackt ist!

Autor: Niklas G. (erlkoenig) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hatte irgendwann auch mal zufällig das gefunden, weiß aber nicht 
inwiefern das geeignet ist:
http://xillybus.com/

Autor: Burkhard K. (buks)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für Eure Tips und Hinweise.

Ingo S. schrieb:
> Fuer unidirektionales Empfangen der Daten am handelsueblichen Windows
> Laptop sind aber 8MByte/sec (64Mbit/sec, also mehr als Du brauchst)
> kontinuierlich moeglich mittels FT232H im asynchronen FT245 Mode (gibts
> als simple Module zu kaufen),
Ein FT2232HQ ist auf dem Nexys4-Board, leider legt Digilentic dessen 
Konfiguration nicht offen (die entsprechende Seite im Schaltplan ist 
"intentionally left blank" - eigentlich eine ziemliche Frechheit).

Hab mich erstmal für die USB-UART Bridge mit 12MBaud (VCP) entschieden. 
Damit erreiche nur ca. ein Viertel der angepeilten Datenrate, ist aber 
für den Anfang o.k., da ich nicht kontinuierlich streamen muss. Ein 
kurzes Python-Skript nimmt die Daten mit serial.Serial() (auf dem 
Laptop) entgegen.

Jetzt muss ich mich nur noch nach einem geeigneten schwarzen Kästchen 
aka Einplatinenrechner umschauen, der die Daten anstelle des Laptops 
entgegennimmt und automatisch auf USB-Stick oder SDHC-Karte schreibt. 
Sobald ich den am Start habe, werde ich mir die Lösung per Ethernet 
anschauen.

Autor: Gustl B. (-gb-)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Burkhard K. schrieb:
> Ein FT2232HQ ist auf dem Nexys4-Board, leider legt Digilentic dessen
> Konfiguration nicht offen (die entsprechende Seite im Schaltplan ist
> "intentionally left blank" - eigentlich eine ziemliche Frechheit).

Ja das ist tatsächlich doof, aber es hätte auch nicht viel geholfen. Der 
FT2232HQ ist leider nur über UART und JTAG mit dem FPGA verbunden. Mehr 
als 12 MBd UART ist also nicht drinnen. Wenn du mehr brauchst verwende 
andere Hardware. Das ist wirklich gut machbar mit den fertigen FT2232H 
Modulen von FTDI und einem FPGA Board mit vielen freien IOs. Wenn du 
VHDL für den snchronen FT245 haben willst melde dich, habe ich aber auch 
irgendwo hier im Forum hochgeladen. Damit schafft man knapp 40 MByte/s.

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.