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