mikrocontroller.net

Forum: FPGA, VHDL & Co. FT600 FIFO Bus Master VHDL


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Mark W. (kram) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Vancouver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Im Xiinx UG901 steht, wie man Fifos in plain VHDL beschreibt, ohne 
Xilinx Cores. Welche Plattform willst du denn verwenden?

Autor: -gb- (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Mark W. (kram) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: M. H. (bambel2)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: -gb- (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Mark W. (kram) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Adam Aufmerksam (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
-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

Autor: Mark W. (kram) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: -gb- (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann habe ich das richtig verstanden. Ich habe das für den ft2232h 
gemacht, da musste ich das timing aus dem Datenblatt einhalten.

Autor: Vancouver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Mark W. (kram) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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. :-)

Autor: Vancouver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Mark W. (kram) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: -gb- (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Mark W. (kram) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
-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.

Autor: -gb- (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: -gb- (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry, bin nur Gast weil im Urlaub und am Handy. Hier der link zum 
thread:
Beitrag "FT2232H Sync FIFO"

Autor: Samuel C. (neoexacun)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: -gb- (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Samuel C. (neoexacun)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: -gb- (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Samuel C. (neoexacun)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das geht aus dem Datenblatt nicht hervor.

Autor: -gb- (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nur an den Bram fifo hat nicht geklappt. Aber probiere das gerne mit 
constraints aus.

Autor: -gb- (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Mark W. (kram) Benutzerseite
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Gustl B. (-gb-)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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
Autor: Mark W. (kram) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Gustl B. (-gb-)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.