Forum: FPGA, VHDL & Co. NIOSII+SDRAM. Frage zur Speicherorganisation


von GS (chromosoma)


Lesenswert?

Hi.
Ich arbeite im Moment mit  NIOSII + SDRAM  auf DE1 Board, und habe eine 
frage bezüglich der Speicherorganisation.

Ich habe bemerkt, dass mein SDRAM Chip zwar in 4194804 Adressen je 16 
bit
geteilt ist(so steht es  auch in Qsys), aber für NIOSII wird er in 8 bit
Partitionen dargestellt. Deswegen beläuft die Adresse in Qsys von 
0x800000 bis
0xFFFFFF (das doppelte von 4194804).

Schreibe ich jetzt  ein 16 bit langer Wert an die Adresse 0 mit
IOWR_16DIRECT Befehl rein, so gehen die ersten 8 bit  des Werts in die
Adresse 0, und die zweite Hälfte in  Adresse 1.

Außerdem kann ich komischerweise nicht direkt in die Adresse 1 
Schreiben, nur lesen.
Erst in die Adresse 2 kann ein neuer Wert gespeichert werden.

Nehme ich IOWR_8DIRECT und ein 8-bit Wert, so kann ich ohne Probleme 
jede Adresse lesen/schreiben.
Sieht so aus, als wird der ganze Speicher in 8-bit Einheiten unterteilt, 
was eigentlich auch kein Problem ist, nur frage ich mich, wieso ich nur 
jede zweite Adresse mit 16 bit überschreiben darf?

von Klaus F. (kfalser)


Lesenswert?

Die "externe" Adressierung des Speichers (in diesem Fall 16 Bit Worte) 
hat mit der internen Zählweise des Prozessors meist nichts zu tun.

Die meisten Prozessoren zählen die internen Addressen in Byte, auch wenn 
sie 16 oder 32 Bit Prozessoren sind.
In diesem Fall werden 16 Bit Worte an geraden, 32 Bit Worte an jedem 4. 
Byte abgelegt. Dies nennt man aligned access.
Das Gegenteil ist ein unaligned access, bei dem ein 16 Bit Wort an einer 
ungeraden Adresse abgelegt wird, oder ein 32 Bit Wort an einer Adresse, 
die  nicht durch 4 teilbar ist.

Unabhängig davon ist das Speicher-Interface zum externen Speicher dafür 
verantwortlich, diese Speicherzugriffe korrekt auszuführen.
Ist der externe Speicher z.B. 16 Bit breit, dann darf ein 8 Bit 
Schreibzugriff z.B. nur die Hälfte des Wortes ändern, der andere Teil 
darf nicht geändert werden. Die Hardware muss so gebaut werden, dass 
dies möglich ist.
Bei einem 32 Bit Schreibzugriff muss der externe Speicher in diesem Fall 
2 16 Bit Zugriffe ausführen.
Dies geschieht immer transparent für den Prozessor, dieser sollte (außer 
an der Geschwindigkeit) keinen Unterschied sehen, ob der externe 
Speicher nun mit 8 Bit Zugriffen, 16 oder 32 Bit Zugriffen arbeitet.

Manche Prozessoren erlauben das Schreiben oder Lesen von "unaligned" 
Daten, manche nicht.
In jedem Fall geht das aber auf Kosten von Geschwindigkeit, da z.B. ein 
unaligned Schreibzugriff von 16 Bit Daten auf Speicheradresse 35 
erfordert, dass einmal die Speicheradresse 34 und dann die 36 
geschrieben wird.

von GS (chromosoma)


Lesenswert?

ahsooo. Jetzt ist alles klar und logisch:)

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.