Forum: FPGA, VHDL & Co. Daten via NPI Interface ins DDR2 schreiben, über USB2.0 auslesen


von Valko Z. (hydravliska)


Lesenswert?

Hallo an alle,

ich bewege mich langsam durch mein Masterarbeit weiter und stehe gerade 
vor eine Denkblokade.

Zum Entwicklungsumgebung und HW:
ML507, Virtex5 FPGA
EDK 11.4, SDK 11.4
Windows XP SP2

Also die Aufgabe wäre alle Daten die über ein ADU (80 MHZ 
Abtastfrequenz) abgetastet werden durch eine Algorithmus( Direct Down 
Conversion) erstmal zu reduzieren und dann ins DDR2 RAM Baustein des 
ML507 zu speichern. Nachdem die Aufnahme zu Ende ist, sollte die 
Plattine am Rechner angeschlossen werden und die Daten via USB 2.0 
augelesen werden. Für USB 2.0 wird das Xilinx xps_usb2_device IP Core 
verwendet.

Meine Idee sieht so aus:

Ein ADU Interface in VHDL entwerfen, sprich Daten in ein FIFO erstmal 
schreiben. Das Direct Down Conversion Algorithmus würde dann die Daten 
abholen und abarbeiten. Um die Daten ins DDR2 zu schreiben würde ich zur 
Zeit das Native Port Interface(NPI) Interface des 
MultiPortMemoryController(MPMC, EDK IP Core) bevorzügen. Ich habe ein 
Beispiel gefunden und auch im Dattenblatt ist alles beschrieben.

Was ich nicht verstanden habe ist, ob man 16-bit Datenblöcke über NPI 
schreiben könnte, oder sollten mindestens 32-Bit breit sein.

Über das NPI Interface werden dann die Daten geschrieben.

Da am Rechner die Samples nur ausgelesen werden müssen, werden die Daten 
von ein MicroBlaze ausgelesen und über USB 2.0 am Rechner verschickt. 
Dabei kommt auch meine Frage:

Da die Daten direkt über Hardware geschrieben werden, sprich über ein IP 
Core, wird der MicroBlaze nichts davon mitkriegen. Um die Daten im 
Windows Explorer sichtbar zu machen braucht man doch ein Dateisystem, 
oder? Was ich nicht verstehen kann ist wie ich die Daten dann so 
darstellen kann, dass die als ein einziges File aussehen. Am Ende will 
ich nur dass ein File angezeigt wird, der die zuletzt abgetastete 
Samples erhält(nehmen wir an dass das System durch ein Start/Stop Taste 
funktioniert). Ich habe schon gesehen dass man mit einem FAT System 
Funktionen wie "fopen" oder "fclose" aufrufen kann, was aber auch 
heissen soll, dass MicroBlaze das schreiben ausführen sollte, was das 
ganze System deutlich langsam machen will.

Also meine Frage nochmal:

Kann man die Daten über eine IP Core schreiben, und dann die irgendwie 
als ein File darstellen? Das USB 2.0 IP Core funktioniert als ein Mass 
Storage Device. Irgendwas in Richtung Read Only und einfach :)

Vielen Dank im voraus. Ich würde mich auf Vorschläge frohen.


Gruss,
Valentin

von SvenB (Gast)


Lesenswert?

DDR2, USB2.0, Integrierter Prozessor - wow, nicht schlecht der specht.

hast du die einzelnen module schon mal in betrieb nehmen können ?
hast du überhaupt schon erfahrungen im fpga-design?

von Valko Z. (hydravliska)


Lesenswert?

Hi,

also mit dem xps_usb2_device IP Core konnte ich in der letzten zwei 
Wochen einiges ausprobieren. Ich habe das "Mass Storage Beispiel", der 
im EDK erhalten ist, verwendet.

Das DDR2 Speicher und der MicroBlaze kommunizieren via das MPMC IP Core. 
Das habe ich aus einem ML507 Reference Design übernohmen. Dabei würde 
ich dann das NPI Interface benutzen, um eine HW Verbindung zu erstellen.

Mein nächstes Ziel wäre, dass ich erstmal ein File erstellen, 
modifizieren und vie UART z.B. ausgeben kann. Dafürwürde ich das 
"Xilfatfs" Library verwenden. Dann soll das selbe Spiel auch über USB 
ausprobiert werden.

Wenn ich das erreicht habe, dann kommt die Frage wie ich die Verbindung 
zwischen die beiden Sachen machen würde.

Meine Erfahrung basiert sich auf die Praktikas sowie Projekte die wir an 
der Hochschule hatten. Beruflich würde ich mich auch gern damit 
beschäftigen, dafür muss ich aber noch was leisten :) Interesse ist da 
:)

Gruss,
Valentin

von tg (Gast)


Lesenswert?

@Valko:
hat das mass storage Beispiel einwandfrei geklappt? Welche Datenrate 
hast du erreicht?
Wie muss man den code verwenden? Einfach im EDK als Application 
hinzufügen, sind besondere Projekteinstellungen nötig (xilkernel o.ä.)?

Ich möchte demnächst anfangen viele Daten über USB zu senden. Geplant 
hatten wir den xps_usb2 core zu verwenden.

tg

von SchöneWelt (Gast)


Lesenswert?

Hallo,

@TG:
benutz von Cypress den FX2LP. Ist ein Controller mit USB 2.0, der aber 
so konfiguriert werden kann, dass die komplette USB Daten-Übertragung an 
FIFOs endet.
Vom FPGA aus hast du dann einfache FIFOs zum ansteuern wie interne, die 
mit einem FIFO Generator gemacht wurden.

Driver gibt es by Cypress :-)

Übetragungsgeschwindigkeit im Bulk Modus - je nach PC bis zu 35 MByte/s

Beim Controller muss man letztendlich nur noch die Endpoints 
konfigurieren.

Ich kann mit bestem Gewissen diesen Baustein empfehlen!!!!

Gruß

von TG (Gast)


Lesenswert?

Ok, klingt interessant, d.h. du hast das Xilinx MS example als anwendung 
für den Cypress Treiber verwendet.
Ich werde zunächst den xps_usb2 core ausprobieren, der hat direkt ein 
DMA-Controller integriert, was ihn interresant macht. USB ist nicht die 
primäre Aufgabe in unserem System. Mit 20 MB/s im Bulk transfer wäre ich 
schon zufrieden.
Timo

von TG (Gast)


Lesenswert?

Oh, ich sehe gerade, ich habe mich vertan. SchöneWelt benutzt gar keine 
Xilinx software, sondern Cypress-Treiber.

Timo

von Christian R. (supachris)


Lesenswert?

Er benutzt den FX2 Controller-Chip von Cypress. Den nehmen wir auch sehr 
erfolgreich.
DMA auf dem FPGA ist ja ganz interessant, aber auf PC-Seite bringt das 
nix, DMA gibts erst bei USB 3.0, bei 2.0 wird auch alles im Polling 
abgeholt. Je nach Datenmenge und Paketgröße merkt man davon aber nicht 
so viel.

von tg (Gast)


Lesenswert?

Ok, ich weiß was du meinst. Wir wollen aber ein USB-Device 
implementieren. Und wenn der PC (Host) Daten vom FPGA anfordert, müssen 
die ja irgendwie vom Speicher in den USB Controller gelangen. Und da 
sehe ich bei uns einen Vorteil, wenn der USB-Controller das selbst 
machen kann.
Ich stelle mir das so vor:
PC will bestimmte Daten abrufen, ich weiß, dass diese der FPGA schon im 
Ram hat, also kann der Xilinx usb-core diese per DMA auf den USB geben 
und unsere CPU hat Zeit für andere Dinge (Ethernet etc..)

Timo

von Valko Z. (hydravliska)


Lesenswert?

Hallo,

danke für das Info erstmal.

Das IP Core habe ich zum laufen gebracht. Das Problem, der ich hatte 
war, dass mein Entwicklungsrechner irgendwie die USB Kommunikation 
gesperrt hat und dabei Fehlermeldungen entstanden sind. Es wurden 
fehlerhafte SCSI Kommandos Richtung FPGA verschickt. Sobald ich das FPGA 
an einem Laptop angeschlossen habe, konnte ich feststellen, dass alles 
prima läuft. Ursache dafür habe ich noch nicht rausgefunden.

Datenrate habe ich nicht gemessen weil ich noch nicht überlegt habe wie 
das gemacht werden kann. Die Daten werden sich im FPGA befinden und 
werden per USB ausgelesen, also Geschwindigkeit ist erstmal nicht die 
Hauptanforderung.
DMA ist bei mir nicht konfiguriert.

Gruss
Valentin

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.