www.mikrocontroller.net

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


Autor: jim34 (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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...

Autor: jim34 (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hab die komplette IP Datei noch gefunden...

Autor: Stefan R. (stefripp)
Datum:

Bewertung
0 lesenswert
nicht 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 :-(

Autor: Harald Flügel (hfl)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: jim34 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Harald Flügel (hfl)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: jim34 (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

Autor: Stefan R. (stefripp)
Datum:

Bewertung
0 lesenswert
nicht 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;

Autor: jim34 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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???

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.