Forum: FPGA, VHDL & Co. FPGA mit Cyclone 4 und Nios II mit USB austatten


von Andreas M. (chillymu)


Lesenswert?

Hallo Leute,

ich habe mal eine grundsätzliche Frage.

Ich habe eine Leiterplatte mit einem Cyclone 4. Darauf läuft ein Nios 
II.

Nun möchte ich gern die Leiterplatte erweitern und USB 2.0 als 
Schnittstelle anbieten.

Wie würdet Ihr das realisieren? Externer Controller? USB-IP-Core?

Mich würde eure Meinung brennend interessieren, da ich mir sehr unsicher 
bin und etwas stabiles und sicheres haben möchte.

Danke schon mal für eure Antworten.

Gruß Andreas

von Thomas W. (diddl)


Lesenswert?

Du meinst einen USB Host?

Möglichst mit Unterstützung aller gängigen USB Geräte??
Boah, da hast du dir was aufgeladen ...


Was läuft auf dem NIOS für Software?
Emulatoren?
Ein Betriebssystem?
Linux?
Mit anständiger Treiber Unterstützung?



Dir ist klar dass du im NIOS einen USB STack implementieren musst samt 
aller möglichen USB Varianten?


Ganz ehrlich, ich würde einen Controller mit ordentlicher USB 
Unterstützung vorschalten.
Einen USB AVR oder einen STM32.
Die sollen sich um den USB kümmern und die relevanten Daten über SPI 
rein schieben.

Für die AVR gibt es eine sehr gute USB lib, die schon erprobt ist und 
alle gängigen Anwendungsfälle abdeckt.

von Andreas M. (chillymu)


Lesenswert?

Hallo Thomas,

ja ich bin mir bewusst das dies nicht trivial ist.

Die LP kommt in ein Gerät und soll im Prinzip eine USB 2.0-Device 
darstellen.

In einem anderen Projekt wird ein Cycpress CY7C68013A verwendet in den 
ein 8051 Code geschrieben wird und dann im NiosII angeschrochen wird. 
Dafür gibt es einen Windowstreiber. Da gibt es aber immer wieder 
Probleme und ich frage mich ob es da nicht eine stabilere und einfachere 
Lösung gibt.

Gruß Andreas

von Gustl B. (-gb-)


Lesenswert?

Ich denke man sollte da anders rangehen. Was brauchst Du?

Daten in Richtung FPGA -> PC mit welcher Datenrate?
Daten Richtung PC -> FPGA mit welcher Datenrate?

Sind das viele Daten am Stück und dann lange Pause, gleichmäßig viele 
Daten je Zeit, also ein Datenstrom, ...?

Mit einem FT232H kommt man recht weit. UART bis 12MBit/s und auch mit 
FIFO Interface dann bis so 35MBytes/s. Treiber gibt es auch und man kann 
da einfach Software für schreiben. IM FPGA ist das auch einigermaßen 
entspannt. Man braucht etwas Pufferspeicher, ein dual clock FIFO mit so 
64kBytes ist gut geeignet.

von Christian R. (supachris)


Lesenswert?

Andreas M. schrieb:
> In einem anderen Projekt wird ein Cycpress CY7C68013A verwendet in den
> ein 8051 Code geschrieben wird und dann im NiosII angeschrochen wird.
> Dafür gibt es einen Windowstreiber. Da gibt es aber immer wieder
> Probleme und ich frage mich ob es da nicht eine stabilere und einfachere
> Lösung gibt.

Welche Probleme habt ihr denn? Man muss ja nicht den ollen Cypress 
Treiber nehmen.
Der Cypress FX2 ist quasi DER USB 2.0 device controller, der selber 
läuft super stabil und ist simpel und trotzdem flexibel. Wir setzen den 
auch in unseren Geräten ein, benutzen aber den WinUSB Treiber. Das läuft 
stabil und ist so transparent, dass wir ohne jegliche Änderungen der 
Host Software auch den FX3 ansprechen können.
Speed ist so ca. 40MB/s im BULK Modus.

von Gustl B. (-gb-)


Lesenswert?

Ich hatte mir den Cypress auch angeguckt, aber der sah mir komplizierter 
aus als der FT232H. Sowohl auf PC als auch auf FPGA Seite. Wie 
kompliziert der wirklich ist weiß ich aber nicht, alleine das mit diesen 
Endpunkten die man irgendwie ansprechen muss und der Software die dann 
auf dem Cypress Stein läuft hat mich abgeschreckt.

von Andreas M. (chillymu)


Lesenswert?

Der Cypress an sich scheint nicht schlecht zu sein. Es ist nur leider 
so, dass alle die sich irgendwann mal damit auskannten und die Anbindung 
gemacht haben, nicht mehr da sind. Derzeit habe ich Probleme das bei 
Zeichenketten über 3000 hin und wieder Zeichen verloren gehen. Ob dies 
am Cypress liegt kann ich nicht genau sagen. Ich weiß nur das die 
Zeichen richtig aus dem SoftCore raus gehen.
Ich muss mir diesen Controller sowieso mal anschauen.

Die Frage war nur ob es gute und vielleicht auch einfachere alternativen 
gibt.

von Gustl B. (-gb-)


Lesenswert?

Ja, gibt es. Interessant wäre eben der Anwendungsfall oder die 
Anforderungen an Datenrate und so, siehe meine Fragen weiter oben.

von Andreas M. (chillymu)


Lesenswert?

Allen erstmal ein gesundes neues Jahr.

Mein Anwendungsfall ist folgender:

Ich habe eine Leiterplatte mit einem Cyclone II (darauf der SoftCor 
NiosII)und dem USB-Controller CY7C68013A. Diese Leiterplatte wird über 
USB an einen PC angeschlossen und gesteuert.
Die Anbindung des USB habe ich nicht gemacht und der Kollege ist nicht 
mehr da. Somit habe ich das ganze jetzt an der Backe. Bis jetzt war das 
ganze für mich eine Blackbox. Nun muss ich diese Box 
höchstwahrscheinlich öffnen.

Bis dato hat alles gut funktioniert und ich hatte mit der Kommunikation 
keine größeren Probleme.

Die Datenrate ist auch nicht so wichtig ich schaffe bei einem USB-Test 
ungefähr 2700 kB/s

Aktuell tritt verhäuft das Problem auf, dass bei Größeren 
Datenpaketen(größer 3072) die ich aus dem FPGA in den USB_Controller 
schicke und nur bei manchen Laptops/PC plötzlich Zeichen fehlen. Ich 
habe einen Rechner bei dem fehlt immer das Byte 3073 und das auch nicht 
immer.

Ich kann mir das einfach nicht erklären und vermute ein Timing-Problem 
oder ähnliches.

Vielleicht kann sich das jemand von euch erklären.


Gruß Andreas

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.