Forum: FPGA, VHDL & Co. XDMA und Windows 10 - Code 10


von Gustl B. (-gb-)



Lesenswert?

Hallo,

ich hab hier eine FPGA Platine mit PCIe Gen2x4.
Im Design habe ich den XDMA eingebaut und einen 1 MByte BRAM daran 
angeschlossen. Ich möchte da erstmal nur Daten hinschreiben und wieder 
lesen. Aber unter Windows. Klar, Linux könnte ich testen, aber es gibt 
ja auch Windowstreiber von Xilinx.

Windows ist im Testmodus und ich konnte den Treiber installieren. Der 
XDMA wird auch erkannt wenn ich das Board mit dem Rechner verbinde. Aber 
im Gerätemanager ist ein gelbes Ausrufezeichen und es steht Code 10 da. 
Die Testprogramme von Xilinx wie z. B. xdma_info.exe finden den XDMA 
nicht.

Was ist denn die Ursache für den Code 10 und wie muss ich den XDMA 
konfigurieren, dass der nicht nur im Gerätemanager auftaucht, sondern 
auch korrekt funktioniert?

Im Anhang sind Bildchen der aktuellen Konfiguration.

Vielen Dank!

von Tobias B. (Firma: www.elpra.de) (ttobsen) Benutzerseite


Lesenswert?

https://www.xilinx.com/support/answers/65444.html

Ist vll was dabei zur Loesung des Problems?

Evtl. wird dir auch hier geholfen:

https://www.xilinx.com/member/xdma_windows_driver.html

von Gustl B. (-gb-)


Lesenswert?

Danke!

Den Treiber aus dem 1. Link habe ich installiert, also den aktuellsten 
vom 5.12.2020.
Ich https://www.xilinx.com/Attachment/Xilinx_Answer_65444_Windows.pdf 
steht etwas zum Treiberdebugging mittels Windows Driver Development Kit 
(WDK), das werde ich mal probieren.

Den zweiten Link kann ich nicht öffnen, weil ich keine Design Lizenz 
habe. Die braucht man für den XDMA auch nicht.

Ich frage hier im Forum, weil es die Frage schon bei Xilinx gibt, 
https://forums.xilinx.com/t5/PCIe-and-CPM/Latest-XDMA-driver-update-issues-with-Windows-10/td-p/1184174 
aber dort keine Antwort kommt.

von Tobias B. (Firma: www.elpra.de) (ttobsen) Benutzerseite


Lesenswert?

Hmmm, ok. Das sieht mal wieder nach schwachem Xilinx Support aus.

Leider bin ich da auch raus, Windows ist einfach nicht meine Welt. Im 
Zweifel vll. eine VM aufsetzen und das erstmal mit den Linux Treibern 
zum laufen bekommen?

Ich hab mich gerade mal fuer die XDMA Windows Driver Lounge registriert. 
Falls ich da rein komme, schaue ich mal ob es da irgendwelche Infos gibt 
die weiterhelfen.

von Gustl B. (gustl_b)


Lesenswert?

Vielen Dank! Ich werde das mit dem Treiberdebugging mal versuchen und 
dann mal mit Linux testen, da reicht ja ein USB Stick. Ob ich PCIe in 
eine VM hereingereicht bekomme weiß ich nicht.

Ich dachte nur, dass ich da in den IP Einstellungen vielleicht einfach 
irgendwas falsch gemacht habe.

von Dergute W. (derguteweka)


Lesenswert?

Moin,

Wuerde mich nicht wundern, wenn Fehler 10 irgendsowas sinnvolles waere 
wie: "Oh, es ist leider ein Problem aufgetreten, vielleicht arbeitet ja 
schon jemand dran; fragen sie doch mal ihren Administrator. Falls das 
Problem bestehen bleibt, rebooten sie bitte. Hilft ihnen das weiter 
J/N/Vielleicht/LMAA"

Iirc hab ich auch schon mal Fehler 10 kassiert, als ich mit 
(schwindeligem) USB-OTG an einem USB-Port unter Windows hing...

Gruss
WK

von Gustl B. (-gb-)


Angehängte Dateien:

Lesenswert?

Was mich halt wundert ist, dass das von Windows korrekt erkannt wird. Da 
muss PCIe ja quasi laufen. Aber ich habe gerade Visual Studio und das 
Windows Driver Development Kit installiert. Traceview sagt mir das was 
im Bildchen steht.

PCIe kann ich unter Windows weder in die VirtualBox noch in den 
VMwarePlayer hineinreichen.

von Gustl B. (-gb-)


Lesenswert?

Und ich habe noch ein paar sehr einfache Fragen zum Block Design 
generell:

Im Address Editor:
Ist der eingestellte Wert immer in Bytes oder ist das in der verwendeten 
Busbreite?

Ich habe im Design einen AXI BRAM Controller und einen Block Memory 
Generator. Bei beiden kann ich nur die Busbreite, aber nicht die Tiefe 
einstellen. Meine Vermutung ist also, dass wenn ich im Address Editor 
einen Wert einstelle, sich automatisch die Tiefen in den anderen 
Komponenten ändern damit das passt.

Jetzt habe ich im Address Editor mal 128K eingestellt und vermute das 
große K bedeutet kByte.

Der angeschlossene AXI BRAM Controller hat 64 Bit Data Width, und die 
Memory Depth ist mit 16384 angegeben.

Was bedeutet das?
Ist da Platz für 16384 * 64 Bits = 128 kByte? Dann passt das.

Daran, an den AXI BRAM Controller, ist noch der Block Memory Generator. 
Und da steht drinnen, alles ausgegraut, Read Width 32, Write Width 32 
und Write Depth 262144.

Was bedeutet das?
262144 * 32 Bits = 1 MByte.
Und das passt natürlich nicht.

Und in der Tat, ich hatte mal im Address Editor 1M eingestellt. Aber 
warum wird die neue Einstelung, 128K nicht übernommen? Ich kann machen 
was ich will, speichern, aufmachen, schließen, nix, der Wert bleibt 
stehen.

Zum Testen habe ich die Blöcke gelöscht und neu eingefügt. Dann standen 
überall die korrekten Zahlen drinnen - aber die AXI Breite passte nicht.
Aber kaum stelle ich die AXI Breite um, passt sich die Tiefe nicht 
automatisch an.

Ich bin ja neu beim Blockdesign, aber ist so ein krudes Verhalten 
normal? Gibt es einen Befehl oder so mit dem man die Berechnung von 
Parametern neu anstoßen kann?

Ich lade gerade Vivado 2020.2.1 runter, vielleicht ist das da gefixt.

: Bearbeitet durch User
von Gustl B. (-gb-)


Lesenswert?

So, scheint tatsächlich gefixt zu sein. Habe jetzt Vivado 2020.2.1. Wenn 
ich jetzt im Address Editor einnen Wert ändere, dann wird der zwar auch 
nicht übernommen in den Komponenten, aber wenn ich dann das Blockdesign 
validieren lasse, dann gibt es nicht wie in Vivado 2020.1 einen Fehler 
dass die Größen nicht passen, sondern das sagt jetzt einfach OK und 
danach sind in den Komponenten die richtigen Größen eingestellt. Also 
dieses Design validieren aktualisiert jetzt irgendwie die Werte in den 
Komponenten.

von Klakx -. (klakx)


Lesenswert?

Gustl B. schrieb:
> Ich habe im Design einen AXI BRAM Controller und einen Block Memory
> Generator. Bei beiden kann ich nur die Busbreite, aber nicht die Tiefe
> einstellen. Meine Vermutung ist also, dass wenn ich im Address Editor
> einen Wert einstelle, sich automatisch die Tiefen in den anderen
> Komponenten ändern damit das passt.

Ja, die Tiefe stellst du immer im Address Editor ein.

Die Tiefe ist immer in Byte. 128K sind 128kByte. Das müsste auch logisch 
am Adressraum zu sehen sein. Es ist unabhängig von der Busbreite.

von -gb- (Gast)


Lesenswert?

So, Linux (Ubuntu 20.04) aufgesetzt, Treiber geladen, Testskripte 
gestartet, funktioniert. Man man man ...

Dann gucke ich mir den Windowstreiber mal genauer an wenn offensichtlich 
der das Problem ist.

von Tobias B. (Firma: www.elpra.de) (ttobsen) Benutzerseite


Lesenswert?

Tobias B. schrieb:
> Ich hab mich gerade mal fuer die XDMA Windows Driver Lounge registriert.
> Falls ich da rein komme, schaue ich mal ob es da irgendwelche Infos gibt
> die weiterhelfen.

Also, ich hab jetzt Zugang zu der XDMA Windows Driver Lounge. Da steht 
im Software Guide drinnen:

"The following operating system is supported:
- Windows 7 Enterprise 64-bit"

Die Treiber Version ist 2018.2. Scheint als waere Windows 10 evtl. nicht 
wirklich supported. Hab mich jetzt aber auch nicht tiefer eingelesen. 
Das Dokument bezieht sich auf den Answer Record 65444:

https://www.xilinx.com/support/answers/65444.html

: Bearbeitet durch User
von Tobias B. (Firma: www.elpra.de) (ttobsen) Benutzerseite


Lesenswert?

Kleines Update: Im Readme zum Source Code steht:

"### Dependencies

* Target machine running Windows 7 or Windows 10
* Development machine running Windows 7 (or later)"

"This driver project configurations support 32bit/64bit, 
Windows7/Windows10 OS. In order to target a different Windows OS, go to 
the driver project *Properties->Driver Settings->General* and change 
Target OS Version to the desired OS."

Scheint also doch dass Windows 10 irgendwie supported wird. Ist dann 
halt die Frage wie sauber, vll wurde beim letzten Win 10 Build auch 
geschlampt. :-/

von Gustl B. (-gb-)


Lesenswert?

Vielen Dank! Ja das ist alles eher seltsam. Der Treiber vom 5.12.2020 ( 
https://www.xilinx.com/support/answers/65444.html Datei 
https://www.xilinx.com/Attachment/xdma_driver_win_bin_x64_12052020.zip ) 
ist definitiv für Windows 10. Aber funktioniert zumindest bei mir nicht 
während der Linuxtreiber läuft.

Ich werde mir den Treiber mal genauer angucken und sonst abwarten, ist 
sowieso nur ein Bastelprojekt weil es aktuell sehr günstig PCIe Hardware 
mit FPGA drauf gibt.

: Bearbeitet durch User
von Christoph Z. (christophz)


Lesenswert?

Gustl B. schrieb:
> PCIe kann ich unter Windows weder in die VirtualBox noch in den
> VMwarePlayer hineinreichen.

KVM kann das. Welche VMware Variante so etwas kann weiss ich nicht (Die 
können auch so Spass wie eine dicke GPU virtualisiert an mehrere Gäste 
weiterzureichen).

Willst du aber nicht um Hardware und Treiber zu entwickeln/debuggen, 
weil es einfach viele zusätzliche Fehlerquellen hinzufügt. Habe in einem 
anderen Thread mal aufgeführt, was gegeben sein muss um eine PCIe Karte 
im Gast zu haben: Beitrag "Re: Virtuelle Maschine"

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.