Forum: FPGA, VHDL & Co. DE2 115 SDRAM Anbindung in Verilog


von fritze (Gast)


Lesenswert?

Hallo,

vorne weg: ich bin Anfänger und hangel mich noch durch Alteratutorials.

Hardware: DE2-115 (terasic) -> Altera CycloneIV 128MB SDRAM (2x64MB)

Mittlerweile kann ich ganz nett in Verilog Addierer basteln und die 
Ausgabe auf die 7Seg-Anzeigen ausgeben ... LEDS an und aus machen ... 
Schalter einpflegen ... naja relativ einfachen Verdrahtungskram.
Woran ich mir aber jetzt ein wenig die Zähne ausbeiße ist den SDRAM 
nutzbar zu machen. In meiner ursprünglichsten Vorstellung dachte ich, 
hätte man eine Adresse und könnte da ein Datenwort ablegen. 
Adressleitungen (13) und Datenleitungen (16) sind ja vorhanden. Mein 
Problem ist: der Speicher hat 128MB x 1025 x 1024 x 8Bit = 1.073.741.824 
Bit.
16 x 2^13 x 2^2 x 2 = 1.048.576 Bit (Datenleitungen * 
Adressmöglichkeiten  Bänke  Chips)
Da gibt es eine gewisse Adressierungsdiskrepanz. Offensichtlich gibt es 
eine interne Matritzenstruktur aus Zeilen und Spalten die man irgendwie 
ansprechen kann. Da CAS und RAS Leitungen zu je 1 Bit sind ... stehe ich 
hier irgendwie vor einem Problem.

Ich will eigentlich nur den ganzen Speicher der Reihe nach mit 
32Bit-Wörtern zu schreiben. Die Daten werden aus einem ADwandler 
eingelesen und sollen einfach in einen Ringspeicher übertragen werden.
Was muss ich hierfür tun? Wie teile ich dem SDRAM-Controller mit wie er 
zu arbeiten hat?

Gibt es hierfür sinnvolle Literatur (ohne niosii)/ Tutorials? Meine 
Suche im Internet hat mich letztlich nur mehr verwirrt als geholfen ...

Schöne Grüße

fritze

von Marius W. (mw1987)


Lesenswert?

fritze schrieb:
> Gibt es hierfür sinnvolle Literatur (ohne niosii)/ Tutorials? Meine
> Suche im Internet hat mich letztlich nur mehr verwirrt als geholfen ...

Klar gibt es sinnvolle Literatur: Das Datenblatt des SDRAMs zum 
Beispiel. So ein SDRAM ist nun eben nicht so einfach anzusteuern, wie du 
denkst. Nimm für die ersten Gehversuche mit externem RAM erstmal die 512 
Kilobyte SRAM auf dem Board.

Gruß
Marius

von Josef G. (bome) Benutzerseite


Lesenswert?

Marius Wensing schrieb:
> Das Datenblatt des SDRAMs zum Beispiel.

Als Xilinx-Anwender habe ich versucht, mich über Alteras DE1 und DE2
zu informieren, insbesondere über das verbaute SD-RAM. Es war mir
nicht möglich, in der im Netz zugänglichen Information herauszufinden,
welches SD-RAM (Hersteller/Typ) auf den Boards verbaut ist, so dass
ich mir das Datenblatt hätte besorgen können. Altera/Terasic rückt
diese Informationen offenbar nur auf einer mit den Boards mit-
gelieferten CD heraus, man muss also vorher das Board kaufen. Ich
habe mich furchtbar darüber geärgert und davon Abstand genommen.

Allerdings: den TO betrifft das Problem offenbar nicht,
da er bereits ein Board hat.

von fritze (Gast)


Lesenswert?

Hallo,

das Datenblatt wurde tatsächlich mitgeliefert.
Ist im übrigen auch bei issi direkt herunterladbar:

http://www.issi.com/pdf/42S16320B-86400B.pdf

Was ich eigentlich suche ist so eine Art Übersicht über die Ansteuerung 
und natürlich wie das in verilog passiert.
Ich meine, dass ja die Lese- und Schreibzugriffe recht fix also mit dem 
vollen Takt ablaufen müssten und Cycles die erst dekodiert werden 
müssten einfach an der Zugriffszeit zerren.
Was genau für daten werden über die CAS- oder RAS-Leitung geschickt.
Wenn man wirklich:
"organized as 8.192 rows by 2048 columns by 8 bits"
4 Bänke und 2 Chips würden: 8192*2048*4*8*2 = 1.048.576 Bit (würde 
passen).

Aber wenn ich nextpow2(8192) = 13 (also eine Bitfolge für RAS von 13 
Bit)
-> für CAS 11 Bit.
Das ergibt aber im Grunde keinen Sinn.

So richtig komme ich nicht dahinter, wie der Speicher generell 
angesprochen wird.

Ich hätte wie gesagt gedacht, dass die Speicheradresse angegeben wird, 
writeenable oder readenable mit dem clock geliefert wird und die Daten 
auf die Leitung gehen.

Gibt es eine Art "freien" Decoder (vermutlich ein IP?) der die 
Übersetzung vornimmt?

Schöne Grüße

fritze

von Lattice User (Gast)


Lesenswert?

fritze schrieb:

> Was genau für daten werden über die CAS- oder RAS-Leitung geschickt.
> Wenn man wirklich:
> "organized as 8.192 rows by 2048 columns by 8 bits"
> 4 Bänke und 2 Chips würden: 8192*2048*4*8*2 = 1.048.576 Bit (würde
> passen).
>
> Aber wenn ich nextpow2(8192) = 13 (also eine Bitfolge für RAS von 13
> Bit)
> -> für CAS 11 Bit.
> Das ergibt aber im Grunde keinen Sinn.
>
> So richtig komme ich nicht dahinter, wie der Speicher generell
> angesprochen wird.

1. Takt  RAS + 13bit Zeilenadresse auf A12-A0
2. Takt  CAS + 11bit Spaltenadresse auf A10-A0

Das ist aber noch lange nicht alles, was man beachten muss.
Siehe Datenblatt.

>
> Ich hätte wie gesagt gedacht, dass die Speicheradresse angegeben wird,
> writeenable oder readenable mit dem clock geliefert wird und die Daten
> auf die Leitung gehen.

Das gilt nur für primitive SRAMS
Dynamische RAMS sind um einiges komplexer, siehe Datenblatt.

>
> Gibt es eine Art "freien" Decoder (vermutlich ein IP?) der die
> Übersetzung vornimmt?
>

Auf http://opencores.org/ gibt es einige.

Auf der zum Board gehörigen CD findest du vermutlich auch etwas.

von PittyJ (Gast)


Lesenswert?

Ich habe das SD-Ram lesend und schreiben angesprochen. Das war nicht so 
einfach. Man mußte exakt die Zustände aus dem Datenblatt 
nachprogrammieren.
(Die Graphik mit den vielen Kreisen)
Dann hat es letztendlich auch geklappt. Hat mich aber bestimmt eine 
Woche gekostet.

Das SRam auf dem Board ist einfacher, hat allerdings auch wesentlich 
weniger Platz.

von Robert (Gast)


Lesenswert?


von fritze (Gast)


Lesenswert?

Sehr edel!

Besten Dank! Das nimmt mir denke ich eine Menge Arbeit ab.

Werde ich mir heute Abend mal genau anschauen, aber das Verzeichnis 
SDram_control und die .v-Dateien sehen auf den ersten Blick sehr 
vielversprechend aus.

Schöne Grüße und vielen Dank

fritze

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.