Gibt es eine VHDL Beschreibung fuer den FT600 von FTDI? Hat dort jemand was oder kennt entsprechende Seiten im Internet? FTDI hat nur zwei in Verilog und die Laufen bei mir nicht, weil da Altera bzw. Xilinx spezifische Sachen verwendet werden. Jetzt versuche ich es gerade anhand der AN-421 und dem Datenblatt, waere nur schoen wenn man nicht bei Null anfaengt.
Im Xiinx UG901 steht, wie man Fifos in plain VHDL beschreibt, ohne Xilinx Cores. Welche Plattform willst du denn verwenden?
Das hilft ihm wenig. Klar er muss mit dem Ft600 in einen Fifo schreiben oder daraus lesen, aber er muss vor allem das Timing einhalten und das steht im Datenblatt.
Vancouver schrieb: > Im Xiinx UG901 steht, wie man Fifos in plain VHDL beschreibt, ohne > Xilinx Cores. Welche Plattform willst du denn verwenden? Ist fuer ein ECP3 von Lattice, Umgebung ist Diamond.
Ich sehe das Problem gerade nicht. Für ein FIFO kann man sich daran orientieren: http://www.deathbylogic.com/2013/07/vhdl-standard-fifo/ Und wenn man den Read getaktet richtig implementiert, sprich erst read anfrage, dann Daten raus, sollten die Synthesen bzw. die Mapper der Hersteller das alle richtig erkennen und auf BRAM legen.
Hier geht es aber nicht um einen fifo sondern die Anbindung des ft600. Der hat einen fifo eingebaut den man richtig bespaßen muss. Timing ist im Datenblatt. Ein fifo im fpga ist dazu natürlich auch sinnvoll aber noch nicht die komplettlösung.
Ich habe jetzt auch die AN165 gefunden, da sind VHDL Beispiele drin, allerdings fuer den FT2223H, der hat nur 8 Datenleitungen und etwas andere Kontrollsignale. Aber ein Anfang immerhin. Ich brauche ja auch nicht alles zu implementieren, wenn ich den sync fifo 245 mode erstmal mache, bin ich schon froh.
-gb- schrieb: > Hier geht es aber nicht um einen fifo sondern die Anbindung des ft600. Njein, so wie ich verstehe geht es nicht um die Anbindung sondern um ein VHDL-Model. Da kann man sich schon bei der Verhaltensbeschreibung an der von FPGA innerein orientieren. Wahrscheinlich scheitert der TO daran, das er im Unterricht geschlafen hat, als erklärt wurde, wie man mit VHDL das timing von Chip-IO's modelliert und überwacht (asserts auf timing violation) http://users.wpi.edu/~rjduck/VHDL%20module10%20rev%20g.pdf
Adam Aufmerksam schrieb: > -gb- schrieb: >> Hier geht es aber nicht um einen fifo sondern die Anbindung des ft600. > > Njein, so wie ich verstehe geht es nicht um die Anbindung sondern um ein > VHDL-Model. Da kann man sich schon bei der Verhaltensbeschreibung an der > von FPGA innerein orientieren. Was meinst Du jetzt genau mit "Model" in dem Zusammenhang? Also ich will Daten vom FPGA zum PC und umgekehrt schreiben. Mehr nicht. > Wahrscheinlich scheitert der TO daran, das er im Unterricht geschlafen > hat, als erklärt wurde, wie man mit VHDL das timing von Chip-IO's > modelliert und überwacht (asserts auf timing violation) > http://users.wpi.edu/~rjduck/VHDL%20module10%20rev%20g.pdf Der TO hatte gar kein VHDL in der Schule. Hab ich mir selbst beigebracht, bzw. bin noch dabei. Sowas gibt's auch. :-) Aber wir hatten Digitaltechnik, also Grundlagen sind da. Danke fuer die Literatur, schaue mal rein.
Dann habe ich das richtig verstanden. Ich habe das für den ft2232h gemacht, da musste ich das timing aus dem Datenblatt einhalten.
Mark W. schrieb: > Also ich will Daten vom FPGA zum PC und umgekehrt schreiben. Mehr nicht. Möchtest du dazu einen FT an den FPGA anbinden und dazu im FPGA ein passendes FIFO-Interface implementieren? Oder möchtest Du den FT selbst im FPGA emulieren? Da du nach einem VHDL-Code für die FT-FIFO fragst, vermute ich eher letzteres?
Vancouver schrieb: > Mark W. schrieb: >> Also ich will Daten vom FPGA zum PC und umgekehrt schreiben. Mehr nicht. > > Möchtest du dazu einen FT an den FPGA anbinden und dazu im FPGA ein > passendes FIFO-Interface implementieren? > Oder möchtest Du den FT selbst im FPGA emulieren? Da du nach einem > VHDL-Code für die FT-FIFO fragst, vermute ich eher letzteres? Ersteres. Im FT600 ist ein FIFO Slave, ich brauche auf dem FPGA einen FIFO Master, damit die beiden kommunizieren koennen. Den ganzen Chip moechte ich nicht designen. :-)
Ok, verstanden. Was genau verstehst Du unter einem "FIFO slave" ? Bezieht sich da auf die Datenrichtung? Die müsste ja eigentlich in beide Richtungen gehen. Ich frage deswegen, um zu verstehen, warum du im FPGA noch eine FIFO bauen willst, wenn im FT schon eine drin ist. Eigentlich brauchst du nur einen Fifo-Controller, der die passenden Steuersignale erzeugt, also vermutlcih eine Statemachine. Außer du kannst die Empfangsdaten im FPGA nicht schnell genug wegschaffen.
Vancouver schrieb: > Ok, verstanden. Was genau verstehst Du unter einem "FIFO slave" ? > Bezieht sich da auf die Datenrichtung? Die müsste ja eigentlich in beide > Richtungen gehen. Im angehaegten PDF auf Seite 4 ist ein Diagram. Da ist die Rede von Master/Slave. Ich denke, weil der Master Read/Write ausfuhrt. Slave sagt nur, dass Daten da sind. Aber Du hast recht, am Ende soll es in beiden Richtungen gleichermassen funktionieren. > Ich frage deswegen, um zu verstehen, warum du im FPGA noch eine FIFO > bauen willst, wenn im FT schon eine drin ist. Eigentlich brauchst du nur > einen Fifo-Controller, der die passenden Steuersignale erzeugt, also > vermutlcih eine Statemachine. Außer du kannst die Empfangsdaten im FPGA > nicht schnell genug wegschaffen. Ich denke es ist bequemer, wenn auf FPGA Seite auch einer ist. Dann ist es leichter Daten bereitzustellen und abzuholen. Aber ich werde mir das nochmal bedenken, dass ich da jetzt noch einen Takt von aussen habe, kommt ja ach noch dazu.
Der fifo im ftdi ist zwar OK, kann man verwenden, aber der braucht zumindest beim ft232h einen festen Takt. Wenn man im fpga also einen anderen Takt verwendet bietet sich ein dual clock fifo im fpga an. Außerdem hat man im fpga meist mehr Speicher.
-gb- schrieb: > Der fifo im ftdi ist zwar OK, kann man verwenden, aber der braucht > zumindest beim ft232h einen festen Takt. Wenn man im fpga also einen > anderen Takt verwendet bietet sich ein dual clock fifo im fpga an. > Außerdem hat man im fpga meist mehr Speicher. Ich mach es ja fuer den FT600, der kann nur 66 oder 100 MHz rausgeben. Habe mir das beim FT232H nur mal angesehen, so als Einstieg quasi. Genug BRAM habe ich eigentlich.
Genau im fpga hast du einen dual clock fifo. Auf einer Seite dein fpga
zeug, auf der anderen liest der ftdi. Aber der liest nicht direkt,
sondern du baust eine logik die mit dem Takt aus dem ftdi läuft und eine
statemachine hat die aus dem fifo im fpga liest und den ftdi bedient. Am
besten als Pipeline. Aber da ist das Problem, dass der ftdi plötzlich
sagen kann, dass er voll ist. Also musst du die Pipeline anhalten und
danach zuerst rückwärts wieder starten. Ich habe das nicht mit maximaler
performance gemacht für den ft2232h, aber gut genug. Das müsste hier im
forum als vhdl sein. Da siehst du vom Prinzip her wie man das machen
kann. Ich habe das sehr einfach gehalten, komme aber auch auf
>30MBytes/s. Und ich habe nur die Richtung Fpga>PC gebaut.
Sorry, bin nur Gast weil im Urlaub und am Handy. Hier der link zum thread: Beitrag "FT2232H Sync FIFO"
Wenn ich mir das Datenblatt so anschaue, scheint der FT600 ein stinknormales FIFO-Interface zu haben. Das kannst vermutlich ohne weitere Logik direkt an einen FIFO_DC hängen oder auch einfach selbst bedienen. So ein FIFO ist kein Hexenwerk. Oder wo ist das Problem?
Naja das ding kann ja dem fifo sagen dass es liest und erst danach kann es sagen dass es voll ist, also die gerade gelesenen Daten nicht angenommen hat. Das bedeutet dass wenn der ftdi das nächste mal wieder ready ist nochmal die zuletzt gelesenen Daten angelegt werden müssen bevor wieder aus dem Bram fifo gelesen wird. Ob das so stimmt weiß ich nicht aber ist meine Erfahrung. Also direkt an den Bram fifo anschließen hat nicht fehlerfrei funktioniert.
Das klingt nach einem fehlerhaft implementierten FIFO. Ein FIFO muss natürlich sagen, dass er voll ist, sobald er es ist, nicht beim nächsten Schreibzugriff.
Ja sollte er, aber dann guck dir den ftdi mal an. Es geht hier nicht um einen fifo im fpga sondern um den ftdi. Der verhält sich in diesem modus nämlich wie ein fifo allerdings eben mit ein paar Eigenheiten.
Nur an den Bram fifo hat nicht geklappt. Aber probiere das gerne mit constraints aus.
Vielleicht ist es auch was anderes in und zwar erscheinen die Daten am fifo Ausgang ja mit einem Takt Latenz. Wenn der ftdi also sagt er sei voll, dann erscheinen nochmal neue Daten. Man darf also nicht sofort wieder lesen wenn der bereit ist sondern muss erst diese Daten weitergeben. Aber ich kann das jetzt nicht genau nachgucken. Mich würde aber eine einfache funktionierende Lösung interessieren.
Ich bin jetzt mal ein Stueckchen weiter gekommen. Zumindest in der Simulation kann ich jetzt Daten senden. Die werden auch unterbrochen, wenn der FIFO im FT600 voll ist. War erstmal mein Minimalziel. Ein Zaehler generiert mir die Daten, FIFO hatte ich drin, ist aber zu langsam. Hatte mir einen mit den Diamondeigenen Tools generiert, schaffte nur 80 MHz oder so, das ganze laeuft jetzt bis 280 MHz. Sind bestimmt noch Fehler drin. Jetzt will ich erstmal sehen, wie ich das ganze Timing mit den Clocks hin bekomme.
Mark W. schrieb: > das ganze laeuft jetzt bis 280 > MHz. Wozu? Der FT600 liefert doch nur maximal 100 MHz und ist auch mit den 66 MHz schon schnell. Eine schnellere eigene Clock die man im FPGA Design verwendet braucht man nicht auf dieser Seite sondern mit der schreibt/liest man nur in einen dual-clock-FIFO.
:
Bearbeitet durch User
Gustl B. schrieb: > Mark W. schrieb: >> das ganze laeuft jetzt bis 280 >> MHz. > > Wozu? Der FT600 liefert doch nur maximal 100 MHz und ist auch mit den 66 > MHz schon schnell. Eine schnellere eigene Clock die man im FPGA Design > verwendet braucht man nicht auf dieser Seite sondern mit der > schreibt/liest man nur in einen dual-clock-FIFO. Ja, hab ich nur erwaehnt. Ich muss jetzt erstmal sehen, wie ich die Daten vorbereite. DC FIFO ist wohl das Passendste hier, um zwei unabhaengige clock domains zu haben.
Was du auch machen kannst ist jedes Wort einzeln zu schicken. Also nachgucken ob der FTDI frei ist, ein Datenwort anlegen, wieder gucken ob der FTDI bereit ist. Das kostet natürlich Takte und man bekommt nurnoch ich glaube 1/3 der maximalen Datenrate durch bei FT2232H, dafür ist das sehr einfach zu bauen und beim FT2232H gar nicht so schlimm, denn dem kann man die Daten zwar mit 60 MByte/s geben, aber der kann die nur mit 480 MBit/s weiterreichen. 1/3 von den 60 MByte/s ist da schon mehr als 1/3 der USB Rate. Aber vielleicht bekommst du das ja auch irgendwie elegant an einen DC-FIFO angeschlossen in funktionierend.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.