Hallo Ich habe mit dem „IP CORE Generator & Architecture Wizard“, speziell mit dem „Fifo Generator 8.2“ der „ISE 13.2“ von Xilinx, einen FIFO für einen Spartan3 FPGA erzeugt. Der FIFO hat unabhängige lese und schreib Clocks eine eingangsbreite von 32Bit und am Ausgang 16Bit. Und einen Valid Ausgang, ansonsten wurde der Fifo mit Standard Einstellungen generiert. 1) Wie benutze ich den Fifo? Die Dokumentation ist nicht sonderlich hilfreich gewesen. Bis jetzt hab ich die zwei Codeschnipsel aus dem „View HDL Instantiation Templet“ in den Kopf und Body meiner Architecture kopiert und mit Variablen verknüpft. Das Bit-File zum programmieren lässt sich auch fehlerfrei erzeugen und übertragen. Allerdings werden keine Daten in den FIFO übernommen. Der Ausgang FIFO Empty bleibt immer auf '1'; 2) Muss in dem Projekt noch mehr geändert werden um den Fifo zu verwenden? Ich hab mir das Beispiel-Projekt „wave_gen_vhd“, mit dem CharFIFO angeschaut, konnte daraus aber nicht auf meinen Fehler schließen. 3) Muss der im FIFO verwendete Speicher unabhängig über einen „IP CORE Generator & Architecture Wizard“ erzeugt werden? 4) Ist es mit minimalen VHDL Kenntnisse überhaupt möglich oder gibt es einfachere oder bessere Lösungen? 5) Kann jemand ein einfaches Beispielprojekt anbieten? Das nicht so überladen ist wie die Xilinx ISE Beispiele. Danke
Du musst nur den Schreib- und den Lesetakt durchgehend laufen lassen. Bei jeder steigenden Flanke bei aktiviertem Write Enable wird das Wort am Eingang reingeschrieben und erscheint ein paar Takte später am Ausgang. Wenn voll, dann darfst du nicht schreiben, und wenn leer darfst du nicht lesen. Die Flags sind schon auf die jeweilige Taktdomäne synchronisiert. Hast du denn eine Testbench? Welchen Simulator benutzt du? Ist dort das VHDL-File des FIFO korrekt eingebunden? Den Speicher im FIFO musst du nicht extra instanziieren, das macht ja der Core. Wird denn der BlockRAM überhaupt verwendet? Das siehst du ja in der Übersicht nach der Synthese schon. Schau dir die Warnungen an, vielleicht hast du was nicht belegt und der FIFO wurde einfach wegoptimiert. Oder hast du RST dauerhaft auf High?
Hallo, liegt das Problem vielleicht daran ,dass ich nur einen externen Tackt von 30MHz verwende. Dieser wird zum schreiben auf 3MHz herunterteile und das auch nur wenn ein externer Pin High ist. Zum Lesen benutze ich die 30MHz aber auch nur wenn bestimmte Bedingungen erfüllt sind. „Reset“ hab ich natürlich auf LOW, „rw_en“ „rd_en“ auf HIGH. Ich werde mal ein neues Projekt nur mit einen Fifo und einem Zähler zum Testen aufbauen. Wird für FIFOs intern noch ein spezieller systemtackt benötigt? Die Warnungen beziehen sich vorwiegend nicht auf den FIFO, nur die die auf die Verwendung eines BlackBox-Modul hinweist. Die übrigen Warnungen werden dadurch verursacht, dass ich zum Testen einen Zählerwert in FIFO schreib anstelle meiner Messwerte. Kann es sein, dass dadurch teile vom FIFO weg optimiert werden? Momentan benutze ich noch keine Testbench, sondern arbeite nur mit einem Experimentierboard von ZTEX. Das Debuggen läuft bei mir bis jetzt nur übers Oszilloskop. Testbenchs habe ich bis jetzt nicht gebraucht. Gibt es einen gute kostenlose Testbenchs die man empfehlen kann? In der Zusammenfassung vor dem FIFO Generieren steht: “Block RAM resource(s) (18K BRAM): 2 BRAM in 32/36-bit wide configuration prevents the use of the associated dedicated multiplier. For more information, refer to the Multiplier Block RAM Routing Interaction selection in the Spartan-3 user guide.” Danke für die Anregungen, langsam gehen mir doch die Ideen aus.
Hans schrieb: > Gibt es einen gute kostenlose Testbenchs die man empfehlen kann? Die kannst nur du selber definieren, weil nur du selber deine Hardware "drumrum" kennst. Hans schrieb: > Dieser wird zum schreiben auf 3MHz herunterteile und > das auch nur wenn ein externer Pin High ist. Ein Gated Clock ist gern mal die Ursache für Probleme... Wo teilst du den herunter? Im FPGA? Wie synchron ist der externe Takt zum externen Enable? Woher kommen diese Signale?
Das mit dem Clock ist Murks. Ich meine, im Datenblatt des FIFO Cores gelesen zu haben, dass der beide Clocks dauerhaft braucht. Dafür gibts die wr_en und rd_en Signale. Bau das mal um und schreib dir eine einfache Testbench um das ganze zu simulieren.
Hans schrieb: > liegt das Problem vielleicht daran ,dass ich nur einen externen Tackt > von 30MHz verwende. Dieser wird zum schreiben auf 3MHz herunterteile Warum soll das notwendig sein? Einen Takt herunterteilen macht nur Schwierigkeiten. Lass das FIFO auf der Eingangsseite mit 30 MHz laufen, das schafft das schon!
Christian R. schrieb: > Ich meine, im Datenblatt des FIFO Cores > gelesen zu haben, dass der beide Clocks dauerhaft braucht. Das kann ich bestätigen. Eingangs- und Ausgangclocks müssen dauernd laufen!
Hallo der Fehler lag an der „variablen“ Taktung von "rw_ckl" und "rd_clk". Mit fest definirtem Read- and Write-Clock und den Enable-Eingängen zur Steuerung funktioniert der FIFO einwandfrei. Liegt bei genauer Betrachtung auch nahe, dass ein Clock eine definierte Frequenz voraussetzt, und nicht über längere Zeit aussetzen darf. Ich hacke das als Anfängerfehler ab, ich bin halt noch neu auf dem Gebiet. @ all: Danke für die schnelle und gute Hilfestellung. Grüße Hans
Naja, man kann das (spezielle bei den neuen FPGAs) schon machen, um Strom zu sparen. Allerdings sollte man dann ganz genau wissen, was man tut. Direkt nach dem Schreiben beispielsweise braucht ja der FIFO noch ein paar Takte, um die Flags zu aktualisieren und die Daten auf die andere Seite zuschaffen. Da muss der Takt natürlich noch anliegen.
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.