Forum: FPGA, VHDL & Co. Altera SDR SDRAM Ansteuerung


von jim34 (Gast)


Angehängte Dateien:

Lesenswert?

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...

von jim34 (Gast)


Angehängte Dateien:

Lesenswert?

Hab die komplette IP Datei noch gefunden...

von Stefan R. (stefripp)


Lesenswert?

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 :-(

von Harald F. (hfl)


Lesenswert?

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

von jim34 (Gast)


Lesenswert?

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.

von Harald F. (hfl)


Lesenswert?

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

von jim34 (Gast)


Angehängte Dateien:

Lesenswert?

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.

von Stefan R. (stefripp)


Lesenswert?

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;

von jim34 (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.