Forum: FPGA, VHDL & Co. DDR2 Adressierung


von Klaus (Gast)


Lesenswert?

Hallo,

ich möchte auf meinem Board mit Virtex5 gerne den DDR2 ausprobieren und 
habe dazu mit MIG (ISE 13.4) einen DDR-Controller generiert.

Ich versteh bis jetzt noch nicht genau wie das mit dem Adressieren des 
DDR2 funktioniert.
Laut ug086 besteht die Adresse aus folgenden Teilen:

Column address = app_af_addr[COL_WIDTH-1: 0]
Row address = app_af_addr[ROW_WIDTH+COL_WIDTH–1: COL_WIDTH]
Bank address = app_af_addr[BANK_WIDTH+ROW_WIDTH+COL_WIDTH–1: 
ROW_WIDTH+COL_WIDTH]
Chip select(3)= app_af_addr[BANK_WIDTH+ROW_WIDTH+COL_WIDTH]

Bei meinem DDR gilt dabei:

COL_WIDTH  = 10
ROW_WIDTH = 13
Bank_Width = 2

Insgesamt hat bei mir einer Adresse ein Breite von 31 bits.

Wenn ich nun zum Beispiel in die ersten 3 Adressen nach einander 
schreiben möchte.  Diese würde einer burst length = 4 entsprechen. Wie 
würden dann die Adressen genau ausschauen?



Einfach so:

A1 = 0000000000000000000000000000001
A2 = 0000000000000000000000000000010
A3 = 0000000000000000000000000000011

und so weiter...
A4 = 0000000000000000000000000000100
A5 = 0000000000000000000000000000101

Leider finde ich in der Doku nichts genaueres darüber.
Danke

von Cihan K. (lazoboy61)


Lesenswert?

Du müsstest die Addresse jedesmal um 4 erhöhen. Ich hab das immer so 
gemacht, dass meine erste Addresse 0, die nächste 4, dann 8, usw.

Klaus schrieb:
> Column address = app_af_addr[COL_WIDTH-1: 0]
> Row address = app_af_addr[ROW_WIDTH+COL_WIDTH–1: COL_WIDTH]
> Bank address = app_af_addr[BANK_WIDTH+ROW_WIDTH+COL_WIDTH–1:
> ROW_WIDTH+COL_WIDTH]
> Chip select(3)= app_af_addr[BANK_WIDTH+ROW_WIDTH+COL_WIDTH]

Der Addressvektor ist so ausgelegt, dass du dank dem Burst 4 nur eine 
"Zahl" zuweisen musst, so wie du es hier geschrieben hast:

Klaus schrieb:
> A1 = 0000000000000000000000000000001
aber mit 0 starten.

Wenn du hintereinander Daten schreiben willst, nimmst du am besten eine 
UNSIGNED Variable, die pro Schreibvorgang um 4 erhöht wird und weisst es 
dem A1 (cast nicht vergessen!) zu.

Cihan

von Klaus (Gast)


Lesenswert?

Hallo,

Vielen dank für die schnelle Antwort.
Mir ist allerdings deine Erklärung für diese Adressierung nicht ganz 
klar.

Liegt es daran dass man (laut ug086, Seite 384) pro Adresse jeweils 2 
Daten Pakete Schicken soll, wobei jedes Paket Daten für die steigende 
und fallende clk Flanke enthält . Das macht also insgesamt 4 
Speicheradressen.
Mit der burst Länge von 4 hat das doch zunächst nichts zu tun oder?

Wenn ich eine burst Länge von 8 hätte dann wäre die Adressierung wie 
oben beschrieben genau gleich, oder nicht?

Viele Grüße

von Cihan K. (lazoboy61)


Lesenswert?

Soweit ich das verstanden habe, habe ich einen DDR2 Ram mit einem 
Datenbus von 64 Bits. Wenn ich nun mit Burst 4 ihn beschreibe, gebe ich 
ihm Bsp. die Addresse 0, sodass die DDR2 Core 64 Bit in Addresse 0, die 
nächsten 64 in Addresse 1, dann die nächsten in Addresse 2 und die 
letzten 64 in Addresse 3. Dann kann im nächsten Schreibzyklus die 
Addresse 4 verwendet werden. Es dauert ja auch 2 Clockzyklen, um die 
Daten in den DDR2 zu schreiben (DDR, also steig. und fall. Flanke => 4 
Schreibzyklen in 2 Clockzyklen).

Beim Burst 8 würde es 4 Clockzyklen dauern und es würden 8x64 Bit von 
Addresse 0 bis 7 geschrieben werden. Das ist meine Kenntnis. Vllt. kann 
der eine oder andere mich bestätigen oder korrigieren.

Der Burst sagt dir ja wieviele Addressen du beschreibst, bei 4 ebend 4 
Addressen also 2 Datenpakete(128 Bit) und bei Burst 8 ebend 8 Addressen, 
also 4 Datenpakete.

Cihan

von Cihan K. (lazoboy61)


Lesenswert?

Cihan Kalayci schrieb:
> Der Burst sagt dir ja wieviele Addressen du beschreibst, bei 4 ebend 4
> Addressen also 2 Datenpakete(128 Bit) und bei Burst 8 ebend 8 Addressen,
> also 4 Datenpakete.

Burst 4 bedeutet nicht gleich, dass 4 Addressen beschrieben werden. Der 
Burst gibt ja die Anzahl der Datenworte an. Da nun 1 Datenpaket(128Bit)= 
2 Datenworte(64Bit) sind, werden bedingt durch Burst 4 und 8 ebend 4 
oder 8 Addressen beschrieben.

Cihan

von Klaus (Gast)


Lesenswert?

Hallo Cihan,

Also zumindest für mich klingt deine Erklärung richtig.

Danke noch mal!

Gruß
klaus

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.