Forum: FPGA, VHDL & Co. DDR2 SDRAM Allgemein


von Cihan K. (lazoboy61)


Lesenswert?

Hallo,

ich hätte mal allgemeine Fragen zu einem DDR2 SDRAM. Ich will in einem 
Projekt einen DDR2 SDRAM in Berieb nehmen und Daten rauf schreiben bzw. 
lesen. siehe auch Thread:
Beitrag "DDR2 RAM Ansteuerung mit Virtex-5 ML507"

In dieser Hinsicht habe ich folgenden DDR2 SDRAM:
Firma: Micron
Model: MT4HTF3264HY-667F1
Größe: 256MB

Folgende Daten stehen auf dem Etikett des Speichers:
MT4HTF3264HY-667F1 1010 256MB 1Rx16 PC2-5300S-555-13-C0

Hier noch das Datenblatt dazu:
http://download.micron.com/pdf/datasheets/modules/ddr2/HTF4C16_32_64x64H.pdf

Nun zu meiner Frage:
So wie ich verstehe sind 256MB (256MByte) = 2048 Mbit (32Mx64)
Der Ram ist in 4 Blöcke, 8192 Reihen (Row) und 1024 Zeilen (Colum) 
aufgeteilt. Jede Zeile ist 64bit breit. Im Datenblatt auf S.2 unter 
Tabelle 2 ist eine Angabe "Device Configuration" mit 512Mb (32Mx16) für 
256MB. Und genau diese Angabe verwirrt mich, ob die 1024 Zeilen (Colum) 
nun 64bit oder 16bit breit sind.

Ich könnte auch mit meiner Theorie komplett daneben liegen, wäre also 
nett wenn ihr mich dann aufklären würdet.

Danke schon mal im voraus für die Antworten

Gruß Cihan

von Uwe B. (derexponent)


Lesenswert?

Hi Cihan,

das RAM hat diese Aufteilung

4 Blöcke
8192 Reihen
1024 Zeilen
16 Bit (pro Zelle)

das gibt 4*8192*1024*16 = 512MBit = 64 MByte


du hast also nur 64 Mega Byte und NICHT 256MByte


beim benutzten (lesen und schreiben) werden beim Burst-Length=4
immer 4 Zellen = 4*16bit = 64Bit geschrieben (oder gelesen)



Gruss Uwe

von Cihan K. (lazoboy61)


Lesenswert?

Hallo Uwe,

was sagt mir dann die Größe des RAMs aus (256MB)?

Cihan

von Uwe B. (derexponent)


Lesenswert?

noch ein Nachtrag :

-die Bezeichnung 256MB = 256MByte in der Doku bezieht sich
auf das "komplette" DIMM

-das besteht ja aus 4 einzelnen RAMs mit je 64MByte

-und auf das DIMM gesehen beträgt die Datenbusbreite 64Bit,
weil jedes RAM 16bit DatenBusbreite hat

...ich hoffe das klärt deinen "Denkfehler" auf

Gruss Uwe

von Cihan K. (lazoboy61)


Lesenswert?

D.h. auch, dass ich beispielsweise mir auswählen kann, auf welchen Ram 
ich meine Daten schreibe, oder? Und jeder Ram hat 4 Blöcke, 8k Row, 1k 
Col und jede Col-Zeile 16 bit.

Stimmen meine Vermutungen?

Cihan

von Uwe B. (derexponent)


Lesenswert?

ahhh...ich glaube ich hab das ganze falsch verstanden


ich dachte du benutzt ein einzelnes RAM-IC
welches die Bezeichnung hat wie auf dem angefügten Datenblatt

sorry, mein Fehler

wenn du das komplette DIMM (256 MByte) an deinem FPGA angeschlossen
hast stimmen deine Vermutungen

nur bin ich mir nicht sicher ob du ein einzelnes RAM
zum lesen/schreiben selektieren kannst

die Adressleitungen (BANK,ROW,COL) gehen ja an alle 4 gleichzeitig

da hab ich zuwenig Ahnung davon
(kann sein das es über die einzelnen DQS-Leitungen funktioniert)

vlt. kennt sich hier ja jemand besser damit aus

Gruss Uwe

von Cihan K. (lazoboy61)


Lesenswert?

OK, also kann es auch 64bit pro Zelle sein, so wie ich vermutet habe, 
oder?

kennt sich da jemand noch besser aus?

Cihan

von Klaus F. (kfalser)


Lesenswert?

Cihan Kalayci schrieb:
> D.h. auch, dass ich beispielsweise mir auswählen kann, auf welchen Ram
> ich meine Daten schreibe, oder?

Jein.
Du addressierst immer ein 64 Bit Wort, weil das Modul aus 4 parellel 
geschaltenen Speichern besteht, die jeweils 16 Bit übernehmen.
Alle Module bekommen die selbe Adressierung.
Man kann aber über die DMx (Data Mask) Signale bestimmen, welche der 8 
parallel anliegenden Bytes beim Schreiben auch wirklich in RAM 
übernommen werden.
Das ganze ist aber eine ziemliche Verschwendung, weil man die Datenrate 
damit ziemlich reduziert.
Es ist also viel besser immer 8 Bytes zusammenzufassen und diese dann in 
einem Mal zu schreiben.
Noch besser ist es aber 64 oder 128 Bytes zu sammeln und diese in einem 
Burst mit 4x oder 8x 64-Bit Worten zu schreiben.

Oder habe ich etwas an deiner Frage nicht verstanden. Was meinst Du 
nämlich mit 64 Bit pro Zelle.

von Klaus F. (kfalser)


Lesenswert?

Klaus Falser schrieb:
> Alle Module bekommen die selbe Adressierung.

Korrektur : Alle 4 Speicherbausteine bekommen die selbe Adressierung.

von Cihan K. (lazoboy61)


Lesenswert?

Wenn ich in das Datenblatt meines Speichers reinschaue sehe ich, dass er
- 4 Bänke
- 8192 Row
- 1024 Column
hat.

Die 1024 Column sind 16bit orientiert, also ich kann 16 bit daten 
jeweils speichern. 4*8192*1024*16 = 512MBit = 64 MByte. Bis hierhin 
sollte jetzt alles richtig sein, oder?!

64MByte * 4 Chips? = 256MB, ist das richtig? (Vermutung von mir: nein)

Mir ist die Addressierung noch nicht ganz klar geworden. habe ich nur 
64MByte zur Verfügung in 256 MB(wäre ja quatsch denke ich mal) oder wie 
schreibe ich die Daten in die Restlichen speicherchips. Nächste 
Vermutung von mir: mit ChipSelect?!


Cihan

von Klaus F. (kfalser)


Lesenswert?

Cihan Kalayci schrieb:
> 64MByte * 4 Chips? = 256MB, ist das richtig?

Ja !!

Cihan Kalayci schrieb:
> Mir ist die Addressierung noch nicht ganz klar geworden. habe ich nur
> 64MByte zur Verfügung in 256 MB(wäre ja quatsch denke ich mal) oder wie
> schreibe ich die Daten in die Restlichen speicherchips. Nächste
> Vermutung von mir: mit ChipSelect?!

Das wurde jetzt doch mehrere Male erklärt.
Alle 4 Speicherchip arbeiten parellel und verarbeiten gemeinsam ein 64 
Bit breites Datenwort.
Speicherchip 1 ist zuständig für die Datenleitungen D15..D0,
Speicherchip 2 ist zuständig für die Datenleitungen D31..D16 usw.

von Tokyo D. (tokyodrift)


Lesenswert?

Klaus Falser schrieb:
> Cihan Kalayci schrieb:
>> Mir ist die Addressierung noch nicht ganz klar geworden. habe ich nur
>> 64MByte zur Verfügung in 256 MB(wäre ja quatsch denke ich mal) oder wie
>> schreibe ich die Daten in die Restlichen speicherchips. Nächste
>> Vermutung von mir: mit ChipSelect?!
>
> Das wurde jetzt doch mehrere Male erklärt.
> Alle 4 Speicherchip arbeiten parellel und verarbeiten ein 64 Bit breites
> Datenwort.
> Speicherchip 1 ist zuständig für die Datenleitungen D15..D0,
> Speicherchip 2 ist zuständig für die Datenleitungen D31..D16 usw.

Du hast halt nicht 256Mx8bit oder 128Mx16bit sondern 32Mx64bit. Hinter 
jeder Adresse verbergen sich 64bit bzw 8Byte Daten. Sprich, du kannst 
nur Adressen abrufen, die in Binär mit 4*0 enden, und musst dann das 
Byte, das du willst selber raussortieren.

von Uwe B. (derexponent)


Lesenswert?

@Cihan,

-schau dir mal auf Seite 6 vom Datenblatt
die Datenleitungen der 4 RAMs an

dann siehst du das es pro RAM 16 Datenleitungen gibt
(also 64 insgesamt [DQ0 bis DQ63])

pro Adresse werden also 64 Bit geschrieben/gelesen
(und zwar in alle 4 RAMs gleichzeitig je 16bit)

vlt wird es mit dem Bild klarer

Gruss Uwe

von Cihan K. (lazoboy61)


Lesenswert?

Wenn ich beispielsweise dann eine Adresse von 0 habe (Col, Row, Bank = 
0) und ein 64 Bit wort (X"123456789ABCDEF0"), dann würde ich im Prinzip
Word X"1234" in Ram 1
Word X"5678" in Ram 2
Word X"9ABC" in Ram 3
Word X"DEF0" in Ram 4
schreiben. Richig verstanden, oder?

Danke dass ihr so viel Geduld habt, bin in dieser Sache neu eingestiegen 
und versuche mir es mit euerer Hilfe beizubringen.

Gruß Cihan

von Tokyo D. (tokyodrift)


Lesenswert?

Cihan Kalayci schrieb:
> Wenn ich beispielsweise dann eine Adresse von 0 habe (Col, Row, Bank =
> 0) und ein 64 Bit wort (X"123456789ABCDEF0"), dann würde ich im Prinzip
> Word X"1234" in Ram 1
> Word X"5678" in Ram 2
> Word X"9ABC" in Ram 3
> Word X"DEF0" in Ram 4
> schreiben. Richig verstanden, oder?
>
> Danke dass ihr so viel Geduld habt, bin in dieser Sache neu eingestiegen
> und versuche mir es mit euerer Hilfe beizubringen.
>
> Gruß Cihan

Genau.

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.