Forum: Mikrocontroller und Digitale Elektronik Bitbreite und Speicher


von Jack S. (jack1505)


Lesenswert?

Hallo Forum,
ich versteh den Zusammenhang zwischen der Bitbreite eines Prozessors und 
der maximalen Größe des adressierbaren Speichers nicht. So wie ich es 
verstanden habe, wird die maximale Größe des Speichers durch die Anzahl 
der Adressleitung von der CPU zum Speicher limitiert. Und die Bitbreite 
gibt die Größe der Register innerhalb der CPU/ALU an. Wie genau hängen 
die beiden zusammen?
VG

von Harald K. (kirnbichler)


Lesenswert?

Jack S. schrieb:
> ich versteh den Zusammenhang zwischen der Bitbreite eines Prozessors und
> der maximalen Größe des adressierbaren Speichers nicht.

Ein direkter Zusammenhang besteht da auch nicht.

Betrachtet man die Datenbusbreite des Prozessors (und nicht die interne 
Datenregisterbreite) und zusätzlich die Adressbusbreite, dann ergibt 
sich allerdings tatsächlich der maximal adressierbare Speicher.

Ein 68000 hat einen 16-Bit-Datenbus und 23 Adressleitungen - damit 
ergibt sich ein adressierbarer Speicher von 16 MByte (2 ^ 23 Worte à 16 
Bit = 2 ^ 24 Byte à 8 Bit).

Der 8088 von Intel hat einen 8-Bit-Datenbus und 20 Adressleitungen, 
damit ergibt sich ein adressierbarer Speicher von 1 MByte (2 ^ 20 Byte à 
8 Bit).

Der 8086 von Intel hat einen 16-Bit-Datenbus und ebenfalls 20 
Adressleitungen, dennoch ist der adressierbare Speicher nicht größer als 
beim 8088 - bei 16-Bit-Zugriffen hat die Adressleitung A0 keine 
Funktion.

Der 68000 hat intern 32 Bit breite Register, 8088 und 8086 haben intern 
16 Bit breite Register -- und, wie Du siehst, nichts davon hat 
irgendeinen Bezug zum nutzbaren Adressraum.

von Εrnst B. (ernst)


Lesenswert?

Wenn ein Adressregister 32 Bit breit ist, kann es 2³² Bytes adressieren.
Bei 64 eben 2⁶⁴.

Unabhängig davon ist, wieviele Adressleitungen die CPU tatsächlich "nach 
draußen" führt, z.B. 36 bis 48 bei den letzten Intel-Generationen.
Das bestimmt dann, wieviel RAM tatsächlich verbaut werden kann.

von Rainer W. (rawi)


Lesenswert?

Jack S. schrieb:
> Und die Bitbreite
> gibt die Größe der Register innerhalb der CPU/ALU an. Wie genau hängen
> die beiden zusammen?

n Bitbreite
y Anzahl adressierbarer Speicherworte
1
y = 2^n
Mit bspw. 16 Adressbits kannst du 65536 Adressen ansprechen.

von Steffen K. (botnico)


Lesenswert?

Das hängt gar nicht zusammen.

Bei einem 8-Bitter ist der Addressraum üblicherweise 2^16 = 64 KByte 
groß.
Beispielsweise bei einem MCS51 mit einer Wortgröße von 8 Bit gibt es 
einen 16 Bit DPTR Register über das der Speicher adressiert werden kann. 
Das 16 Bit Register ist aufgeteilt in ein High und Low Register, damit 
über 8-Bit Zugriffe das Register beschrieben werden kann.

Bei einem 32-Bitter (Wortbreite 32 Bit) wären bei einer Adressierung des 
Speichers mit 32 Bit ein Adressraum von 2^32 = 4 Gigabyte möglich. Als 
der PC-Prozessor 386 mit 32 Bit Wortgröße entwickelt wurde, war Speicher 
noch so dermassen teuer, dass ein PC im besten Fall DRAM  im 
zweistelligen Megabytebereich hatte. Deshalb konnte der 386 physikalisch 
auch gar nicht so viel Speicher verwalten.
Nach der Jahrtausendwende wurde dann DRAM so günstig, dass PCs mit so 
viel DRAM ausgestattet wurden, dass 32 Bit nicht mehr ausgereicht haben 
für die Adressierung, deshalb mussten wieder Kunstgriffe (Murks) 
eingeführt werden, um diese Grenze zu umgehen.
Mit einem 64-Bitter (Wortbreite 64 Bit) wären 2^64 Byte Adressraum 
direkt adressierbar. Aber über so viel Speicher wird ein Computer wohl 
nie verfügen.

Bei einem 8-Bit Embedded-System ist der Programmcode üblicherweise ein 
paar KByte bis ein paar zig KByte groß. Deshalb passen 16 Bit Adressraum 
da ganz gut dazu.
Bei einem 32-Bit Embedded-System kann der Programmcode schon mal ein 
paar huntert Kbyte groß werden. Deshalb ist hier ein Adressraum von 
32-Bit passend.

Du siehst, nicht direkt zusammenhängend, sondern indirekt durch diese 
Gegebenheiten.

von Sherlock 🕵🏽‍♂️ (rubbel-die-katz)


Lesenswert?

Jack S. schrieb:
> Wie genau hängen die beiden zusammen?

Gar nicht.

Das denkt sich jeder Hersteller so aus, wie es ihm gerade passt.

von Gregor J. (Firma: Jasinski) (gregor_jasinski)


Lesenswert?

Jack S. schrieb:
> ich versteh den Zusammenhang zwischen der Bitbreite eines Prozessors und
> der maximalen Größe des adressierbaren Speichers nicht. So wie ich es
> verstanden habe, wird die maximale Größe des Speichers durch die Anzahl
> der Adressleitung von der CPU zum Speicher limitiert. Und die Bitbreite
> gibt die Größe der Register innerhalb der CPU/ALU an. Wie genau hängen
> die beiden zusammen?

Das lässt sich nicht so pauschal verallgemeinern, wie Du es gerne 
hättest, weil es Ausnahmen gibt – adressieren kann man z.B. deutlich 
mehr, obwohl die Anzahl der Adressleitungen es gar nicht hergibt, 
Register können auch mal kleiner gestaltet sein, obwohl die CPU selbst 
deutlich breiter ist. Du hast Dich gedanklich in eine Sackgasse geführt, 
völlig unnötig.

von Harald K. (kirnbichler)


Lesenswert?

Steffen K. schrieb:
> Als der PC-Prozessor 386 mit 32 Bit Wortgröße entwickelt wurde,
> war Speicher noch so dermassen teuer, dass ein PC im besten Fall
> DRAM  im zweistelligen Megabytebereich hatte.

Soweit, so korrekt.

> Deshalb konnte der 386 physikalisch
> auch gar nicht so viel Speicher verwalten.

Nö, der 80386 konnte sehr physikalisch 2 ^ 32 Byte = 4 GiB RAM 
ansteuern, alle dafür nötigen Adressleitungen waren herausgeführt. Das 
waren A2-A31 und vier "byte-enable"-Signale /BE0../BE3.

(Siehe 
https://bitsavers.trailing-edge.com/components/intel/80386/231746-001_Introduction_to_the_80386_Apr86.pdf, 
S. 54 bzw. S. 94)

Das sah beim 80386SX anders aus, der hatte nicht nur nur einen 
16-Bit-Datenbus, sondern auch nur einen 24-Bit-Adressbus. Damit war er 
ein nahezu 1:1-Ersatz für einen 80286; es gab entsprechende 
Adapterplatinen, ja, sogar die c't hatte ein entsprechendes 
Selbstbauprojekt.

Daß es recht sicher nie einen PC mit i386 und Speichervollausbau gab, 
lag nicht nur an den hohen Preisen für Speicher, sondern auch an 
Platzbedarf und den resultierenden Leitungslängen, die schon bei den 
damals üblichen 33 MHz Taktfrequenz nicht unproblematisch waren.

Mit den damals verbreiteten 8-Bit-SIMMs à 1 MByte brauchte man für 16 
MiByte etwa eine halbe Postkarte an Fläche (ca. Din A7), 4 GiB sind 256 
mal so viel ... das wäre ein Fladen von etwa 2 x Din A0-Format, ganz zu 
schweigen von zig Treiberstufen und der nötigen Ansteuerungslogik.


(Ich hatte 1992 einen i386 mit 16 MiB RAM, der war schon exotisch, weil 
fast alle Motherboards damals nur acht Steckplätze für Speichermodule 
hatten - SIMMs mit 4 MByte waren damals noch unbezahlbarer und hätten in 
dem Mainboard auch nicht funktioniert, zumal der Cachecontroller auch 
nicht so viel Speicher unterstützte ...)

von Jack S. (jack1505)


Lesenswert?

Also wenn ich das jetzt richtig verstanden habe ist ausschlaggebend für 
die Speichergröße ausschließlich die Anzahl der Adressleitungen sonst 
nichts.

Andere Frage noch, wie viel Bit/Byte kann pro Adresse gespeichert 
werden? Ich habe immer an 1Byte pro Adresse gedacht. Es geht aber 
bestimmt auch mehr. Ist das Herstellersache oder was reguliert das?

von Sherlock 🕵🏽‍♂️ (rubbel-die-katz)


Lesenswert?

Jack S. schrieb:
> Also wenn ich das jetzt richtig verstanden habe ist ausschlaggebend für
> die Speichergröße ausschließlich die Anzahl der Adressleitungen sonst
> nichts.

Ich kann noch einen drauf setzen.

Viele Prozessoren unterscheiden zwischen Programm- und Arbeitsspeicher. 
Sie können mit 8 Bit Bus-Breite und 16 Adressleitungen z.B. 64 kB 
Arbeitspeicher und 64 kB Programmspeicher ansprechen, als insgesamt 128 
kB.

von (prx) A. K. (prx)


Lesenswert?

Jack S. schrieb:
> die Speichergröße ausschließlich die Anzahl der Adressleitungen sonst
> nichts.

In groben Zügen und fürs einfache Verständnis ja, aber im Detail stecken 
allerlei Teufelchen. Prozessoren haben oft keine externen Busse mit 
einzelnen und getrennten Adressleitungen mehr. Wenn etwa das RAM direkt 
vom Prozessor angesteuert wird und weitere Adressierungen mehr oder 
weniger seriell erfolgen. Es sogar sein, dass das Datasheet aufgrund 
Marketing lügt.

: Bearbeitet durch User
von Jack S. (jack1505)


Lesenswert?

(prx) A. K. schrieb:
> In groben Zügen und fürs einfache Verständnis ja, aber im Detail stecken
> allerlei Teufelchen. Prozessoren haben oft keine externen Busse mit
> einzelnen und getrennten Adressleitungen mehr. Wenn etwa das RAM direkt
> vom Prozessor angesteuert wird und weitere Adressierungen mehr oder
> weniger seriell erfolgen. Es sogar sein, dass das Datasheet aufgrund
> Marketing lügt.

Ok das reicht mir danke. Ich werde mich mit der Zeit mehr einlesen das 
war nur ein Punkt an dem ich nicht weiterkam.

von (prx) A. K. (prx)


Lesenswert?

Jack S. schrieb:
> Ich habe immer an 1Byte pro Adresse gedacht. Es geht aber
> bestimmt auch mehr. Ist das Herstellersache oder was reguliert das?

Es gibt keine Weltbehörde für strikte Durchsetzung von Grundsätzen für 
Rechnerarchitekturen. :)

Heute ist ein 8-Bit Byte pro Adresse üblich, aber es kann auch ein 
Rechnerwort pro Adresse sein. In den ersten Jahrzehnten der Computerei 
gab es Worte von z.B. 12, 16, 18, 36, 48, 60 Bit und es gab überhaupt 
keine Adresse einzelner darin codierter Zeichen. 
Technisch/Wissenschaftliche Aufgabenstellungen benötigen Bytes nicht so 
sehr.

von (prx) A. K. (prx)


Lesenswert?

Wie oben schon skizziert kann es sein, dass am unteren Ende ein oder 
zwei Adressleitungen fehlen, weil sie statt dessen als Byte-Selects 
ausgeführt sind. Das muss man dann geistig umrechnen.

von Rüdiger B. (rbruns)


Lesenswert?

Die PDP-8 hat eine 12 Bit CPU.
https://de.wikipedia.org/wiki/PDP-8

von Klaus F. (klaus27f)


Lesenswert?


von Gregor J. (Firma: Jasinski) (gregor_jasinski)


Lesenswert?

Jack S. schrieb:
> Ok das reicht mir danke. Ich werde mich mit der Zeit mehr einlesen das
> war nur ein Punkt an dem ich nicht weiterkam.

Am besten 40-50 Jahre zurück in die Vergangenheit springen und sich die 
Anfänge mit den 8-bit-Prozessoren (CISC) und dann entsprechend weiter 
mit den 16/32-bittern anschauen, als man diese in den damaligen 
Homecomputern verwendete, was aus heutiger Sicht als Retro bezeichnet 
wird – da kann man zumindest grob eine gewisse Tendenz erkennen, denn 
mit den heutigen µControllern (in der Regel RISC) wird es schnell 
unüberschaubar, denn die beinhalten nicht nur einen Prozessor, sondern 
auch die ganze Peripherie samt Speicherblöcken mit Adress- und 
Steuerleitungen. Ferner lohnt es sich auch, sich die Unterscheidung in 
Harvard- und Von-Neumann-Architektur anzuschauen. Die Anfänge mit den 
4-bittern kann man sich eigentlich komplett sparen und einfach bei den 
8-Bit-CPUs wie 8085, Z80, 6502 mit der Betrachtung beginnen – alle diese 
Prozessoren hatten mindestens einen Data-, Adress- und Steuerbus nach 
außen herausgeführt und es musste gelernt werden, alles an diese Busse 
richtig anzuschließen, was heute in den µControllern für den User 
bereits mit dem Kauf erledigt ist. Auf diese Weise ist gewissermaßen 
eine Art Verdummung auf diesem Gebiet passiert, denn das ganze Wissen 
drumherum braucht man scheinbar nicht, aber auch die Arduino-Euphorie 
und der Erfolg der Arduinojünger kann damit erklärt werden, weil man mit 
ganz wenig Wissen und mit quasi Null TTL-Erfahrung trotzdem scheinbar 
sehr weit kommen kann (solange die Dupontleitungen dafür nur lang genug 
sind). Wenn man die Ursprünge und deren Zusammenhänge versteht, wird man 
auch jeden µController verstehen können, weil man nachvollziehen kann, 
was im Inneren vor sich geht oder ungefähr vor sich gehen könnte, weil 
ja die genauen Schaltpläne oft nicht bekannt sind, aber man kennt ja die 
Konzepte aus der Vergangenheit.

: Bearbeitet durch User
von Norbert (der_norbert)


Lesenswert?

Gregor J. schrieb:
> mit quasi Null TTL-Erfahrung trotzdem scheinbar
> sehr weit kommen kann (solange die Dupontleitungen dafür nur lang genug
> sind).

ROTFL!

von H. H. (hhinz)


Lesenswert?


von Dieter D. (Firma: Hobbytheoretiker) (dieter_1234)


Lesenswert?

Theoretisch wäre es auch möglich gewesen über den Adressbus von 8bit 
immer vier hintereinander geschickte Werte als Adresse beim Chip 
aufzufassen. Dadurch wären über 8bit auch 2^32 Adressen ansprechbar 
gewesen, aber nur mit 1/4 der Geschwindigkeit gegenüber einem echten 
32bit-Adressbus. D.h. eine leistungsmäßige und wirtschaftliche schlechte 
Lösung wäre das gewesen.

von Rainer W. (rawi)


Lesenswert?

Dieter D. schrieb:
> D.h. eine leistungsmäßige und wirtschaftliche schlechte
> Lösung wäre das gewesen.

Das kommt drauf an, was wirtschaftlich besser ist, ein schmalerer Bus 
(Gehäuse mit weniger Pins) oder eine schnellere Adressierung.

von Ob S. (Firma: 1984now) (observer)


Lesenswert?

(prx) A. K. schrieb:

> Technisch/Wissenschaftliche Aufgabenstellungen benötigen Bytes nicht so
> sehr.

Spätestens für HMI-IO dann doch...

von (prx) A. K. (prx)


Angehängte Dateien:

Lesenswert?

Dieter D. schrieb:
> Theoretisch wäre es auch möglich gewesen über den Adressbus von 8bit
> immer vier hintereinander geschickte Werte als Adresse beim Chip
> aufzufassen.

Nicht nur theoretisch.

Ein früher 8 Bit Mikroprozessor, der RCA 1802, multiplexte nicht wie 
sonst oft Adressen und Daten, sondern beide Hälften der 16 Adressbits 
über 8 Adressleitungen. Auch deshalb erwähnte ich oben die Teufelchen im 
Detail. Keine Regel ohne Ausnahmen.

AMDs K7 (Athlon) übernahm den EV6 Bus von DECs Alpha Prozessoren. Der 
arbeitete in Paketen. Eine Bustransaktion bestand also aus mehreren 
nacheinander übertragenen Worten, die Adress- und Steuerbits enthielten:
"The external interface consisted of a bidirectional 64-bit double data 
rate (DDR) data bus and two 15-bit unidirectional time-multiplexed 
address and control buses, one for signals originating from the Alpha 
21264 and one for signals originating from the system."

AMD verwendete nur 13 Bits, was den Adressraum reduzierte. Siehe Bild.

: Bearbeitet durch User
von Harald K. (kirnbichler)


Lesenswert?

Dieter D. schrieb:
> Theoretisch wäre es auch möglich gewesen über den Adressbus von 8bit
> immer vier hintereinander geschickte Werte als Adresse beim Chip
> aufzufassen.

Mit zwei aufeinanderfolgenden Adressteilen ist das bei der Ansteuerung 
von DRAM eine übliche Vorgehensweise.

Ein 4164, ein typisches DRAM mit 64k x 1 Bit Kapazität, kommt im 
16-poligen Gehäuse, aber für 64k braucht es ja schon 16 Adressleitungen 
...
Und genau da wird ein Zeitmultiplexverfahren angewandt, die eine Hälfte 
der Adresse wird als Spaltenadresse (Column Address) und die andere 
Hälfte der Adresse als Zeilenadresse (Row Address) bezeichnet - und die 
beiden Steuerleitungen /RAS und /CAS haben genau deswegen diese Namen.

von Dieter D. (Firma: Hobbytheoretiker) (dieter_1234)


Lesenswert?

Harald K. schrieb:
> Mit zwei aufeinanderfolgenden Adressteilen ...

Darum war mein Beispiel mit vier Adressteilen (oder mehr). Bei der 
Aufteilung in zwei Adressteilen gibt es noch relativ wenig zusätzliche 
Verlangsamung dadurch, weil die ein beachtlicher Teil der 
Maschinenbefehle des Prozessors mehrere Taktzyklen benötigen und somit 
parallel arbeitend häufig ähnlich lange benötigen.

von (prx) A. K. (prx)


Lesenswert?

Das erste NMOS DRAM verwendete noch keine Multiplex-Adressierung:
https://bitsavers.computerhistory.org/magazines/Electronics/Electronics_V46_N09_19730426_Intel_1103.pdf

Allerdings kommen RAM-Chips oft in grosser Zahl zum Einsatz und die 
Grösse der Gehäuse war folglich wichtig. Die grössere Aufwand bei der 
Ansteuerung tritt da in den Hintergrund.

Da die Spaltenadresse erst verzögert benötigt wird, bremst der Multiplex 
den Zugriff auch nicht aus. Erst wird die Zeile ausgelesen, dann wird 
darin das Bit selektiert. Das passt also zusammen.

: Bearbeitet durch User
von Harald K. (kirnbichler)


Lesenswert?

Dieter D. schrieb:
> Darum war mein Beispiel mit vier Adressteilen (oder mehr).

Du starrst etwas zu engstirnig auf ein bestimmtes Prozessordesign und 
schließt daraus auf andere.

Das Verhältnis aus Taktzyklen/Instruktionen kann sehr unterschiedlich 
ausfallen; bei so etwas wie 8080 bzw. Z80 ist es etwa vier mal so groß 
wie bei 68xx/65xx.

Und bei neueren Architekturen kann das wieder ganz anders aussehen; RISC 
wurde nicht nur aus Jux&Dollerei erfunden.

Letztlich hat das, was ein DRAM-Speichercontroller durchführt, auch 
überhaupt nichts mit dem zu tun, was eine CPU an ihrem Adressbus 
durchführt - der Speichercontroller arbeitet mit höherem Takt als die 
CPU, sonst würde er ja die Speicherzugriffe ausbremsen (was er bei den 
meisten Architekturen mit "wait states" könnte, die man aber in besseren 
Designs vermeidet).

von (prx) A. K. (prx)


Lesenswert?

Harald K. schrieb:
> was eine CPU an ihrem Adressbus durchführt

Sofern es überhaupt noch einen gibt.

> der Speichercontroller arbeitet mit höherem Takt als die CPU

Nur bei Oldies und Mikrocontrollern.

von Rüdiger B. (rbruns)


Lesenswert?

Harald K. schrieb:
> Und genau da wird ein Zeitmultiplexverfahren angewandt, die eine Hälfte
> der Adresse wird als Spaltenadresse (Column Address) und die andere
> Hälfte der Adresse als Zeilenadresse (Row Address) bezeichnet - und die
> beiden Steuerleitungen /RAS und /CAS haben genau deswegen diese Namen.

Und noch schöner: einmal ROW Adress und nacheinander die CAS Adresse, 
geht noch schneller.

von Bradward B. (Firma: Starfleet) (ltjg_boimler)


Lesenswert?

Dynamischer Speicher hat gemultiplexten Adressbus (Row/ colum/ address).

da kann man von der Breite nicht auf den addresierbarren speicher 
schliessen, sondern muss das jeweilige Datenblatt durchackern.

https://www.youtube.com/watch?v=-xtWsQvOcjo

von Joachim B. (jar)


Lesenswert?

Bradward B. schrieb:
> Dynamischer Speicher hat gemultiplexten Adressbus (Row/ colum/ address).

ist ja nicht falsch wurde aber wie eine statische 16KB RAM Karte beim 
ECB
https://de.wikipedia.org/wiki/Europe_Card_Bus in MOS6502 Computer 
angeschlossen.

Um das CAS/RAS kümmerte sich die Hardware auf der RAM Karte.
Ich baute so eine ECB Erweiterung mit 5 Steckplätze in meinem PET2001.
Ein Polaroid Bild müßte ich noch digitalisieren!

PS. bei Bank switching ist erst Recht kein Zusammenhang zwischen 
Speicher und Bitbreite z.B. Ramdisk 256KB im apple2.

: Bearbeitet durch User
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.