Hi Wir versuchen gerade in einem Schulprojekt unter anderem einen SRAM über FPGA zu steuern. Hierzu benützen wir VHDL. Es ist ein asynchroner SRAM. Über 16 an den FPGA angeschlossene Taster simulieren wir die Eingangsdaten, die in den SRAM reingeschrieben werden sollen. Mit einer weiteren Taste starten wir den Lesevorgang. Dieser kann optional auch mit einem 1sec-Takt-Zähler gestartet werden. Eine weitere Taste soll den Lesezyklus aus dem SRAM starten. Die gespeicherten Daten können wir über einen USB1.1 oder über UART empfangen. Wir haben nicht viel Erfahrung damit, und würden gerne wissen, ob jemand schon mal ein asynchrones RAM benützt hat. Die dabei verwendeten Zustandsautomaten für WRITE und READ würden uns sehr helfen, unser Projekt voranzubringen. Wir würden uns freuen, wenn Ihr euer Wissen und Erfahrung mit uns teilen würdet.
Hallo wieder Kennt einer von euch eine Web-Site, auf der es einen memory controller core für asynchrones RAM zu finden ist? Wir haben das Netz durchsucht, haben aber nichts passendes gefunden. herzlichen Dank
Hi Dennis, schau doch mal unter Hamburg VHDL Archiv, dort gibt's ein SRAM-Modell. Ausserdem jede Menge Links, z.B. RASSP, ... dort findet man manchmal auch ganz brauchbare Informationen. Oder unter OpenCores. http://tams-www.informatik.uni-hamburg.de/vhdl/ http://www.eda.org/rassp/ http://www.opencores.org/ Gruss, Alex
Noch ne Frage: Wenn wir Daten speicheren möchten, die mit 50Mhz anliegen(8 Bit parallel alle 20ns), kann ich da mit einem Clock von 50Mhz ohne Schwierigkeiten arbeiten? Der RAM hat die Bearbeitungsdauer von 10ns für Speicher- und Lesevorgang! Was mache ich, wenn ich keine PLL_Eingang am FPGA habe? Wie schnell sollte ich den neuen Clock wählen?
Wie sieht bei deinem RAM der Timing Waveform für Schreiben und Lesen aus? Dies würde den Leuten sicher helfen deiner Frage eine Antwort zu liefenrn. Mich würden die Antworten auch interessieren, da ich auch demnächst mit externem RAM arbeiten möchte.
Hallo Leute, hier ist das Datenblatt des von uns verwendeten RAM. ich hoffe, dass ich ein paar Tips bekomme, wie wir z.B. einen Schreibzyklus realisieren können, und auf was bei VHDL speziell den Takt betreffend beachtet werden sollte. Auf was sollte geachtet werden, wenn ich 10 mal hintereinander Daten in den Speicher schreibe(Adresszähler wird inkrementiert). Wie sollte der Takt gewählt werden? Vielen Dank im Voraus
Hallo nochmals, kann mir jemand grob verbal beschreiben, wie ich die Signale zu setzen habe, wenn ich in den RAM schreiben möchte?
Hi! Einfach die Waveforms im Datenblatt implementieren ;) Such dir zb auf Seite5 eine Read Waveform aus und auf Seite6 eine Write Waveform. Da steht alles drin was du wann wie setzen musst ;) BYe, Simon
Wenn ich jetz etwas schreiben möchte, und dies 10 mal hintereinander, muss ich in einem Schreib-Process zuerst 1. Adresse anlegen, 2. dann CE auf "0" legen 3. dann WE auf "0" legen 4. OE auf "1" legen??????????? Werden dann so drauffolgend die an DATA-Leitungen anliegenden Daten ins RAM geschrieben? Wie bekomme ich die Timings hin, wenn ich mit 50 MHZ arbeite? ich kann doch keine kürzeren Clocks als 20 ns erhalten.
Hi, http://www.derepas.com/fabrice/hard/#ramtester hier wird auf dem Xilinx Startkit (FPGA) die asynchronen SRAMs von ISSI angesprochen. >Wie bekomme ich die Timings hin, wenn ich mit 50 MHZ arbeite? >ich kann doch keine kürzeren Clocks als 20 ns erhalten. Einige FPGAs besitzen PLL oder DLL Stufen. Mit der PLL/DLL kannst du deinen Eingangsclocksignal z.B. verdoppeln und kommst so an die maximale 10ns.
Wenn Du wirklich alle 20 ns neue Daten in das RAM schreiben willst, dann musst Du deinen Takt auf 100 MHz verdoppeln. Wenn Du dann noch deine Ausgänge an unterschiedlichen Taktflanken änderst, bekommst Du eine saubere Lösung. Das WE Signal bleibt dann für 10 ns low, Du brauchst also mindestens die SRAMs mit der -12 oder -15 Geschwindigkeit. |<-10 ns >| Takt __|----|____|----|____|----|____|-----|____ Addr >< Adresse 1 >< Addresse 2 WE -------|_________|---------|__________|----- Wenn Du nur 1 SRAM am Datenbus hast, dann kannst Du CE fest auf 1 legen, sonst gemeinsam mit der Adresse ändern.
Wenn Du nur 1 SRAM am Datenbus hast, dann kannst Du CE fest auf '0' legen, sonst gemeinsam mit der Adresse ändern.
Mach dir einfach eine kleine Statemachine für den Lese- und den Schreibvorgang. In dieser Statemachine (FSM) kannst du dann bei jedem Zustandswechsel die Ausgangssignale ändern. (Also WE, Data, Address, ...) Die Zustandswechsel erfolgen mit dem Takt, also maximal alle 20 ns ein Wechsel. Du kannst aber auch, wenn nötig einfach einen Wartetakt einfügen und somit den nächsten Signalwechsel erst nach 40 ns ausführen (Waitstate). Versuche also, mit dieser FSM die im Datenblatt des Rams beschriebenen Waveforms nachzubilden, so dass die geforderten Zeiten nicht UNTERschritten werden. Dass das RAM auch schneller kann, das braucht dich nicht zu stören. Bei einem S-RAM funktionieren die Zugriffe auch immer langsamer, nur eben nicht schneller, als die angegebenen Zeiten! Ich hoff, dir geholfen zu haben...
Winni, überprüfe bitte mal das Timing und die state machine deiner Tastatur- Du hast da irgendeinen doppelten Clock drin - gfs mal einen wait state einfügen :-)
@Jürgen Schuhmacher: Das ursprüngliche Posting ist zwei Monate alt. Ich nehme mal an dieses Schulprojekt ist schon vorbei.
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.