Forum: Mikrocontroller und Digitale Elektronik Wert in DRAM speichern


von Thorsten (Gast)


Lesenswert?

Wenn ein DRAM eine 16Bit Datenbreite besitzt, wie kann man in diesem ein 
32Bit Wert speichern?
Man könnte doch einfach z.B. die Reihen, Spalten-Adresse erhöhen, oder? 
Oder ist es grundsätzlich sinnvoller die Bankadresse zu erhöhen?

von Dennis H. (c-logic) Benutzerseite


Lesenswert?

Thorsten schrieb:
> Wenn ein DRAM eine 16Bit Datenbreite besitzt, wie kann man in diesem ein
> 32Bit Wert speichern?
> Man könnte doch einfach z.B. die Reihen, Spalten-Adresse erhöhen, oder?
> Oder ist es grundsätzlich sinnvoller die Bankadresse zu erhöhen?

Hängt vom Speicherbus-Design ab.

Für den Microcontroller/-prozessor wird es wohl optimaler sein wenn die 
zwei 16-Bit Werte hintereinander im Speicher liegen.

von Achim S. (Gast)


Lesenswert?

bei den meisten heute erhältlichen DRAM-Architekturen schreibt man 
ohnehin in Bursts. D.h. in einem Schreibzugriff schreibt man nicht nur 
eine Column-Adresse sondern mehrere aufeinanderfolgende Column-Adressen. 
(Will man nur eine Adresse schreiben, dann muss man die anderen 
Adressen, die zum Burst gehören, ausmaskieren.)

Deshalb ist die sinnvolle Herangehensweise für dein Problem, die 
Column-Adresse zu erhöhen.

von Thorsten (Gast)


Lesenswert?

DRAM ist doch wie in diesem Bild aufgebaut, oder?
Was bedeutet dann hier "hintereinander im Speicher liegen"?
Sollte also besser die Reihen oder die Spaltenadresse unverändert 
bleiben(die andere müsste dann ja quasi inkrementiert werden und die 
Bankadresse müsste gleich bleiben, oder)?

von Dennis H. (c-logic) Benutzerseite


Lesenswert?

Welches Bild ?

Bank/CS gleichbleibend.
Reihenadresse/RAS gleichbleibend.
Spaltenadresse/CAS inkrementieren.

von Thorsten (Gast)


Lesenswert?

Angenommen man geht nun in die andere Richtung und will mit einen 8Bit 
Schreibzugriff auf auf das DRAM zugreifen. Kann man dann einfach den 
8Bit-Wert senden und die führenden Postionen mit Nullen auffüllen?
Danke

von Dennis H. (c-logic) Benutzerseite


Lesenswert?

Thorsten schrieb:
> Angenommen man geht nun in die andere Richtung und will mit einen 8Bit
> Schreibzugriff auf auf das DRAM zugreifen. Kann man dann einfach den
> 8Bit-Wert senden und die führenden Postionen mit Nullen auffüllen?
> Danke

Worin unterscheidest du den 8-Bit-Wert 0 von "mit Nullen auffüllen" ?

Hast du ne genaue Vorstellung welcher DRAM-Baustein / -modul es ist ?

Für unter-16-bit-Zugriffe gibt es manchmal die Maskierungsmöglichkeit 
über zusätzliche Bits (bei SRAM zumindest (~LB & ~UB)).
Bei DRAM kann es dann, wenns diese Möglichkeit nicht gibt, nur ein 
READ-MODIFY-WRITE werden.

von 6A66 (Gast)


Lesenswert?

Dennis Heynlein schrieb:
> Worin unterscheidest du den 8-Bit-Wert 0 von "mit Nullen auffüllen" ?
>
> Hast du ne genaue Vorstellung welcher DRAM-Baustein / -modul es ist ?
>
> Für unter-16-bit-Zugriffe gibt es manchmal die Maskierungsmöglichkeit
> über zusätzliche Bits (bei SRAM zumindest (~LB & ~UB)).
> Bei DRAM kann es dann, wenns diese Möglichkeit nicht gibt, nur ein
> READ-MODIFY-WRITE werden.

Normalerweise macht das Dein uC/Deine CPU selbständig. Sie wird einen 
entsprecheden Datenbus haben (16/32bit) und beim Schreiben anzeigen 
welche Daten auf welchen Busteilen gültig sind. Dieses Signal musst Du 
dann in die Ansteuerung Deiner DRAMs mit integrieren. Wenn Du einen 
Intregrierten DRAMcontroller hast macht auch dieser das automatisch. 
Wenn Du DRAMs mit Deinem uC OHNE Controller anschließen willst musst Du 
einen DRAM controller bauen der aus den Businformationen herausbekommt 
welche Bytes am Bus gültig sind und die DRAMs entsprechend ansteuern.

Dennis Heynlein schrieb:
> Bei DRAM kann es dann, wenns diese Möglichkeit nicht gibt, nur ein
> READ-MODIFY-WRITE werden.

Das wird schwierig denn die CPU/der uC müssen das wissen. 
Überlicherweise könnte man das über den Cache managen (eben: 
Read-Modify-Write). Schwierig wird es nur wenn ein Byte am Chache vorbei 
geht (wird nicht gecached) und trotzdem ins DRAM soll. Deswegen 
schreiben meines Wissens ALLE CPUs immer mit Byte-Validity Signalen.

rgds

von Dennis H. (c-logic) Benutzerseite


Lesenswert?

@6A66

ich hab dem Fragesteller nur erklären wollen, daß wenn es keine 
Byte-Maskierungssignale für Schreibzugriffe gibt oder die 
Speichersteuerung es nicht er Read/Modify/Write selbstständig macht, es 
auch keinen Bytezugriff gibt bei Multibyte-organisierten 
DRAM-Bausteinen/-modulen.
32-Bit-SIMM-Module haben dafür z.B. mehrere ~CAS-Signale.

von Axel S. (a-za-z0-9)


Lesenswert?

Thorsten schrieb:
> Wenn ein DRAM eine 16Bit Datenbreite besitzt, wie kann man in diesem ein
> 32Bit Wert speichern?

Gegenfage: wenn man nur einen Mund hat, wie kann man dann an einem Abend 
zwei Bier trinken?

<seufz>


XL

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.