Forum: FPGA, VHDL & Co. Arbeiten mit einem FPGA (XC3S1000) über USB (z.B.CY7C68013A


von Martin Dreher (Gast)


Lesenswert?

Guten Morgen,

ich versuche mich gerade daran eine Schaltung zu entwickeln, mit
welcher ich über die USB-Schnittstelle eines PC einen FPGA ansteuern
kann. Als FPGA möchte ich den XC3S1000 benutzen, was aber in erster
Linie zweitrangig ist.

Die USB-Umsetzung habe ich mir mit einem CY7C68013A vorgestellt. Ich
weiß schnell ist ein relativer Begriff aber die Schaltung sollte
"recht schnell" arbeiten können, welche genauen Anforderung
schlußendlich benötigt werden kann ich noch nicht abschätzen.
Gibt es hierfür ein paar Schaltungsbeispiele?

Das größere Problem für mich wird die SW-Seite sein. Hab mir zwar schon
viele USB-Beschreibungen angesehen und auch das Grobe davon verstanden.
Jedoch fehlt mir noch das Verständnis für die Umsetzung, also mit
welchem Programm schaue ich was auf dem USB-Port läuft?
Wie lese/beschreibe ich meinen CY7C68013A und anschließend den FPGA?
Die Programmierung des FPGAs mit VHDL ist wiederrum kein Problem.

Wäre auch über kleine Hilfestellungen dankbar, den Rest kann ich mir
dann weiter erarbeiten und gegebenfalls nochmal nachfragen.

Vielen Dank

Gruß
Martin

von Kest (Gast)


Lesenswert?

So richtig kann ich Dir leider nicht helfen...

Ich habe vor kurzem auch was damit zu tun gahabt. Über genau denselben
USB_Baustein wurden Videodaten vom FPGA zum Rechner übertragen.

Hab' leider "nur" die Hardwareseite gemacht und nicht die Software.
Weis aber, es ist nicht ganz einfach, wenn man die volle Bandbreite
haben möchte. Wir haben ca. 40 MB/sec erreicht und das stabil.

Wahrscheinlich muss man wirklich ganz genau die Beispiele studieren,
damit man was richtig macht, aber das wirst Du wohl selber rausfinden
müssen (ich würde ja gerne helfen, aber ich habe weder Sourcen noch
Ahnung von der Programmierung)

Das mit "Programmierung des FPGAs mit VHDL ist kein Problem" würde
ich Vorsichtig umgehen ;-) Damit alles einwandfrei läuft, muss jedes
des FIFOs gut funktionieren (im FPGA, im 8051, USB-Buffer im Cypress
und so weiter)

Am besten, du implementierst ein Paar Register im FPGA und versuchst
sie auszulesen, zu beschreiben (also erstmal ganz langsam). wenn das
dann funktioniert (bis dahin hast Du dann hoffentlich Ahnung, wie die
Treiber funktionieren ;-)), dann fängst Du mit dem CPLD im Cypress
(oder keine Ahnung, wo man kleine Statemachines bauen kann) und so
weiter und so fort.

Ich wünsche Dir viel Erfolg mit der Sache und Du kannst uns gerne auf
dem Laufenem halten :-)

Gruß

Kest

von Martin D. (martindreher)


Lesenswert?

Trotzdem vielen Dank Kest, vielleicht kommen mir aber auch noch
Hardware-Fragen :-) ...ganz bestimmt...

Werd nun mal zuerst mit der Hardware anfangen, vielleicht kann mir dann
doch noch einer mit Tipps bei der Software helfen.

Hätte doch noch eine Frage an dich, für was für einen EEPROM hast du
dich entschieden? Da ich den Umfang der Software nicht kenne, weiß ich
nicht wie groß der EEPROM sein soll bzw. was für Daten da überhaupt
draufzustehen haben. In meiner näherer Auswahl ist der 24LC641 von
Microchip.

von Kest (Gast)


Lesenswert?

Sorry, vielleicht ist es doof, aber wozu EEPROM? Hat Cypress nicht alles
"on Board"?

Ich weis es echt nicht. In unserer Schaltung ist auch ein EEPROM
vorhanden (ich dachte eigentlich für irgendein Schnick-Schnack, nicht
fürs Programm). Und der ist Microchip 24LC64. Ich kann aber nicht
sagen, ob da ein Programm drauf ist - eher nicht - möchte mich aber
nicht festlegen
(man sieht, ich bin kein Softwerker ;-))

Gruß
Kest

von lehmi (Gast)


Lesenswert?

Im Eeprom kann man seine eigenen Identifier speichern, oder auch
Programm-Code, der dann beim Reset ausgeführt wird. Muss man aber nicht
haben, wenn der Cypress bei jedem Start neu programmiert werden soll.
(siehe auch Handbuch)

Zu Hard- und Software kann ich dir

usrp
http://comsec.com/wiki?UniversalSoftwareRadioPeripheral

und ssrp
http://oscar.dcarr.org/ssrp/

empfehlen, da wurde der Cypress schon erfolgreich eingesetzt. Beim usrp
sogar zum Programmieren einen Altera FPGA, aber das sollte sich ja
leicht anpassen lassen. Hab mich auch schon eine Weile damit
beschäftigt aber immer wieder mangels Zeit zur Seite gelegt.

Gruß
Marco

von Martin D. (martindreher)


Lesenswert?

Danke Marco, jedoch funktioniert der Link von comsec.com nicht, werd da
nochmals zu einem späteren Zeitpunkt vorbei schauen.


Hab da noch eine Frage zur Hardware-Schaltung.
Da die Schaltung mehr als 100mA benötigen wird muss eine separate
Spannungsversorgung von 3,3V dem Board zur Verfügung gestellt werden.
Ab welcher Stelle der Schaltung versorge ich die Bauteile mit den
separaten 3,3V? Oder nehme ich (so kommt es mir am logischten vor) nur
den gemeinsamen GND der USB-Schnittstelle und laß die VCC vom
USB-Stecker offen und versorge alle Bauteile auf dem Board mit den
separaten 3,3V?
Wäre es leicht den GND galvanisch zu trennen?

von Kest (Gast)


Lesenswert?

USB-GND ist einfach mit dem Ground verbunden (da musst Du nichts
galvanisch trennen)

VCC vom USB-Stecker kannst Du offen lassen oder z.B. für die
Reset-Schaltung verwenden.

Und, richtig, alle Bauteile versorgst Du mit auf dem Board vorhandenen
(also was Du selber gemacht hast) 3.3V

Kest

von Uwe Bonnes (Gast)


Lesenswert?

Hallo,
schon mehrere Tage versuche ich comsec.com zu erreichen, bekomme aber
immer einen Timeout. Habe andere aktuell die USRP Webseite erreicht?

von Michael (Gast)


Lesenswert?

Was zufällig jemand wo man den Treiber herbekommt. Dies ist bei Cypress 
leider nicht zu finden. Habe versucht mich in die Beispiele enzulesen. 
Jedoch verwenden diese keine DLL, so das ein einfacher Funktionsaufruf 
nicht möglich ist. Im Bsp. wird sehr stark auf das Windwossystem 
zugegriffen, jedoch ist dies zu kompliziert um eine schnelle und vor 
allem sichere Lösung zu entwickeln.

Hat jemand vielleicht bessere Beispiele? Oder andere Treiber?

Grüsse Michael

von Francesco N. (franceso-)


Lesenswert?

Ich hätte einen link zu einem Treiber für 40Mbytes stabilen Troughput,
16bit port, einen LA mit 20MHZ und 16 Kanälen.
Leider brauchst du Visual C, um da was zu ändern, aber dann bist du
genau an den Beispielsw. Fazit, wenn du was über 8Mbyte brauchst, dann
mußt du da schon selbst an die SW hand anlegen.

von Michael (Gast)


Lesenswert?

Was meinst Du denn wenn ich mehr als 8Mbyte Bandbreite haben möchte muss 
ich selber die Software verändern.

Das ich die Software in Visual C schreiben muss ist mir schon klarr. 
Jedoch will ich nicht den Treiber modifieren müssen. Der sollte schon 
40MByte pro Sekunde schaffen.

Könntest Du dann mal den Link posten.

Grüsse
Michael

von Francesco N. (franceso-)


Lesenswert?

Das, an das ich dachte, da sind kernel device treiber dabei, also nichts
für Anfänger.

Mit libusb-win32 bekommst du so um die 20mbyte hin, ist einfacher als
die Cypress SDK.

http://libusb-win32.sourceforge.net/
http://volodya-project.sourceforge.net/fx2_programmer.php

von Bustle (Gast)


Lesenswert?

@Michael, was meinst du mit Treiber? Suchst du einen Treiber für den 
CY7C68013A?

Schau mal auf Cypress unter CY4604 (siehe Link vorbei)

http://www.cypress.com/portal/server.pt/gateway/PTARGS_0_2_60425_0_0_18/cy4604___usb_developer_s_ustudio.html

von Michael (Gast)


Lesenswert?

Ich suche einen USB-Treiber für den CY7C68013A (von Cypress). Cypress 
selber liefert ja eine inf und sys-Datei mit. Jedoch ist es schwer diese 
einzubinden. Viel besser ist eine DLL-Datei.

Momentan arbeite ich mit Labview. Dort kann man sehr leicht auf DLLs 
zugreifen und die Funktionen des Treibers nutzen. Genau so etwas suche 
ich.


Den Link zu Cypress ist ja für einen CY4604. Ich denke mal nicht das er 
für den CY7C68013A geeignet ist, oder habe ich das etwas überlesen?

Grüsse

Michael

von Michael (Gast)


Lesenswert?

@  Francesco Na

20 MByte ist aber nicht sonderlich viel. Warum schaffen die Treiber denn 
nicht mehr? Es sollte doch eigentlich nicht am Treiber liegen, sondern 
am PC. Denn wenn der schnell genug ist, dann sollten doch auch 40MByte 
machbar sein

Ich habe schon mal die Bsp. von Cypress (sind auf der CD vom Starter 
Kit) angeschaut. Die sind jedoch sehr schlecht beschrieben und nicht 
besonders einfach zu verstehen. Sicherlich kann ich mich jetzt Wochen 
hinsetzten, aber ich bekomme nicht die Zeit dafür. Es sollte eine 
schnelle Lösung sein. Dies ist bei DLLs gegeben. Dort wird zuerst eine 
Init aufgerufen, anschließend will ich nur noch etwas aus den USB-Buffer 
lesen oder in den Buffer schreiben.

Momentan benutze ich von FTDI USB Module. Diese schaffen nur 8MBit (USB 
2.0 Basic) aber dafür war alles in 2 Wochen fertig (FPGA-Sender und 
Software-Empfang)

So etwas möchte ich jetzt für USB 2.0 Highspeed haben. Ich hätte nie 
gedacht das es so wenige Lösungen gibt, denn die Schnittstelle ist weit 
verbreitet.

Grüsse

Michael

von Bustle (Gast)


Lesenswert?

@Michael,

CY4604 ist meines wissens kein Baustein sonder ein Testboard mit einem 
CY7C68013A... Wieso hast du Probleme mit der inf und sys? Den Treiber 
kannst du ja leicht installieren. Und Ansprechen kannst du dann dein 
Board über das im CY4604 (siehe Link) mitgelieferte Programm 
(CyConsole). Wenn du dir dann was eigenes schreiben willst, gibt es 
dafür auch Hilfe pdfs. Aber es funktioniert und ist kostenlos.

Gruß
Bustle

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.