Hallo, ich verwende den SDR SDRAM Controller von Altera für die Ansteuerung eines SDRAMs. => siehe Anhang, konnte leider den Link hier im Forum nicht mehr finden über den ich auf den Controller gekommen bin. Mit Hilfe einer State Machine will ich Daten in das RAM schreiben und diese nach wenigen Taktperioden wieder auslesen. Das RAM dient nur als Eingangsspeicher. Takt = 50 MHz. Bisher ist mir noch nicht gelungen den RAM zu beschreiben oder auszulesen, da ich nicht weiß, ob ich eine Initialisierungssequenz für den RAM schreiben muss, oder ob diese schon im IP-Core enthalten ist. Für das Signal CMD[2:0] habe ich bisher nur die Werte 000 für NOP, 001 (Read) und 010(write) verwendet. Muss ich eventuell auch noch 011 übermitteln, um den autorefresh zu aktivieren, oder wird dieser innerhalb der Ininitalisierungssequenz (wenn diese vorhanden ist) durchgeführt? Hoffe ihr könnt mir helfen...
jim34 schrieb: > Bisher ist mir noch nicht gelungen den RAM zu beschreiben oder > auszulesen, da ich nicht weiß, ob ich eine Initialisierungssequenz für > den RAM schreiben muss, oder ob diese schon im IP-Core enthalten ist. Ich habe beim kurzen Blick auf den Code keinen Initialisierungsprozess gefunden. Da musst du wohl selbst einen Prozess gemäß Datenblatt schreiben > Für das Signal CMD[2:0] habe ich bisher nur die Werte 000 für NOP, 001 > (Read) und 010(write) verwendet. Muss ich eventuell auch noch 011 > übermitteln, um den autorefresh zu aktivieren, oder wird dieser > innerhalb der Ininitalisierungssequenz (wenn diese vorhanden ist) > durchgeführt? Während des Initialisierungsprozesses übermittelst du dem RAM die Arbeitsweise. Das Precharge solltest du genau nach den Vorgaben des Datenblattes anlegen. Dort stehen genaue Zeitdiagramme. Wenn du nicht weisst, was der Controller genau macht, schau dir unbedingt die Simulation in Modellsim an und vergleiche sie mit den Vorgaben des Herstellers. Zur Beruhigung: Ich habe vier Monate gebraucht, um den SD-RAM eines DE2-70 einigermaßen vernünftig zum laufen zu bringen :-(
Das verblüfft mich jetzt ein bisschen. Ich habe den SDRAM-Controller innerhalb des SOPC-Builders verwendet, und da muss man gar nix tun. Wäre es ein großer Aufwand für dich, deine State-machine Avalon-kompatibel zu machen und die FSM und den SDR Controller im SOPC-Builder zusammenzuhängen? Grüße, Harald
Harald Flügel schrieb: > Ich habe den SDRAM-Controller > innerhalb des SOPC-Builders verwendet, und da muss man gar nix tun. Wäre > es ein großer Aufwand für dich, deine State-machine Avalon-kompatibel zu > machen und die FSM und den SDR Controller im SOPC-Builder > zusammenzuhängen? Hallo, ich habe noch nichts mit dem SOPC Builder gemacht, daher habe ich keine Ahnung wie aufwendig das ist. Was bedeutet es die State Machine Avalon-kompatibel zu machen? Wird der SOPC Builder nicht einen Prozessor erzeugen, der den RAM ansteuert, der unter Umständen viel Ressourcen braucht. Habe noch ein paar andere Komponenten auf dem FPGA (CycloneIII) die ich benötige.
jim34 schrieb:
> Was bedeutet es die State Machine Avalon-kompatibel zu machen?
Ist nicht wirklich viel Arbeit. Avalon ist eine offengelegte
Interface-Definition. Wenn dein Logikmodul solch elementaren Signale
erzeugen kann wie
- Adresse
- Write request
- Write data
- Byte enables
- Read request
und Signale annehmen kann wie
- Read Data
- Ready
und dann noch einen Takt und einen Reset, dass hast Du fast alles
beieinander. Die komplette Beschreibung, wie man aus einem Logikmodul
ein SOPC-Builder-taugliches Modul macht, sprengt jetzt allerdings leider
den Rahmen des Forums.
Grüße,
Harald
Stefan R. schrieb: > Während des Initialisierungsprozesses übermittelst du dem RAM die > Arbeitsweise. > Das Precharge solltest du genau nach den Vorgaben des Datenblattes > anlegen. Dort stehen genaue Zeitdiagramme. Hallo, hbe mich jetzt intensiver mit der Initialisierung beschäftigt und eine Initialisierungssequenz geschrieben (=> siehe Anhang). Mein Problem ist jetzt, dass ich es nicht hinbekomme einen Full page write burst hinzubekommen. Habe schon ettliche Initialisierungseinstellungen ausprobiert, aber der Controller schickt nach spätestens 8 Takten einen cmdack und dann werden meine Daten ja nicht weiter eingelesen. Hoffe jemand findet den Fehler.
In deinem Code überträgst du die Befehle in mehreren Schritten auf der Adressleitung. Mein SD-RAM (ISSI 42S16160B) verlangt die REGISTER DEFINITION (Seite 24 im Handbuch) in einem Wort auf der Adressleitung IF(to_integer(unsigned(counter)) = sd_init_timer + trp + 8*trc) THEN --nach Ablauf trp + 8trc -- PROGRAMM MODE REGISTER command_bus <= load_mode_register; addr_gen(11 downto 0) <= mode_register_definition;
Stefan R. schrieb: > In deinem Code überträgst du die Befehle in mehreren Schritten auf der > Adressleitung. > > Mein SD-RAM (ISSI 42S16160B) verlangt die REGISTER DEFINITION (Seite 24 > im Handbuch) in einem Wort auf der Adressleitung Kann jetzt aus deiner Antwort nicht wirklich viel erkennen, oder deuten. Hab mir das Datenblatt von dir angeguckt und mit meinem verglichen. Die sind beide identisch. Kannst du mir das vielleicht noch mal etwas genauer beschreiben, was du meinst???
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.