1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
\Aufgabe{CPU - Adressbus des Systems vergrößern}
Eine CPU ist über einen Adress-, Daten- und Steuerbus an ein Speichersystem angeschlossen. Die Breite des physikalischen Adressbusses wird jetzt von 32 auf 48 Bit verändert. Beschreiben sie die Konsequenzen für das Gesamtsystem. Nehmen sie an, dass die CPU auch den Adressbus mit der geänderten Breite unterstützt und nicht verändert wird. Erläutern sie die Konsequenzen mit einem plausiblen Zahlenbeispiel.
\loesungsbox{17cm}{
Die Breite des Adressbusses begrenzt die Größe des Speichers (RAM, ROM, Peripherie) im System. Wenn das aktuelle System eine Adressbusbreite von 32 Bit hat, dann kann man damit $2^{32} = 4294967296$ Byte adressieren. Das entspricht einer Speichergröße von 4 GiByte. Wenn die Breite des Adressbusses von 32 auf 48 Bit erhöht wird, dann können $2^{48}$ Byte adressiert werden. Das entspricht einer Größe von etwa 256 Terabyte. Es kann also mehr Speicher adressiert und im Rechnersystem eingebaut und genutzt werden. Aktuelle CPUs für Rechner haben eine 64 Bit Architektur und können damit auch $2^{64}$ Byte adressieren. Der physikalische Adressbus ist allerdings auf 48 bis 52 Bit begrenzt, da es heute keine Systeme gibt, die mehr als 256 Terabyte an physikalischem Speicher nutzen.
Der Großteil des Speicherbereichs wird für RAM eingesetzt. Aktuell (2025) werden Rechner für Privatanwender üblicherweise mit RAM mit einer Größe von maximal ca. 128 GB verkauft. Server können auch mit größerem RAM Speicher bis in den Terabytebereich ausgestattet werden. Auf dem RP2040 Chip, der auf dem Raspberry Pi Pico Board benutzt wird und ein Beispiel für einen kleinen Mikrocontroller ist, ist eine ARM Cortex M0+ CPU mit 32 Bit Adressbus. Von dem 4 GiByte großen addressierbaren Speicherbereich werden jedoch nur kleine Bereiche genutzt. In der folgenden Tabelle ist die Memory Map des RP2040 dargestellt:
\vspace{5mm}
\begin{tabular}{lllp{7cm}}
\textbf{Startadresse} & \textbf{Endadresse} & \textbf{Größe} & \textbf{Beschreibung} \\
\hline
0x0000\,0000 & 0x0000\,3FFF & 16 KiB & \textbf{Boot ROM} (Fest, Nur-Lesen) \\
0x1000\,0000 & 0x10FF\,FFFF & 16 MiB (max) & \textbf{QSPI Flash} (Externer Code/Daten, Execute-in-Place) \\
0x2000\,0000 & 0x2004\,1FFF & 264 KiB & \textbf{SRAM} (Internes RAM für Daten/Stack/Heap) \\
0x4000\,0000 & 0x4006\,C003 & ca. 432 KiB & \textbf{Peripherie-Register} (UART, SPI, I2C, PWM, Timer e.t.c.) \\
0x5000\,0000 & 0x5030\,0143 & ca. 3 MiB & \textbf{Peripherie-Register} (USB, DMA, e.t.c.) \\
0xD000\,0000 & 0xD000\,017F & 384 Byte & \textbf{Single-Cycle IO (SIO)} (Schneller GPIO-Zugriff) \\
0xE000\,E010 & 0xE000\,EDA3 & 3476 Byte & \textbf{Cortex M0 intern} (Interrupt, Debug)\\
\end{tabular}
\vspace{5mm}
Innerhalb der Adressbereiche für die Peripherieregister sind auch große Adressbereiche nicht genutzt. Insgesamt werden von dem 4096 MiB großen addressierbaren Adressbereich auf dem RP2040 also nur ca. 17 MiB tatsächlich genutzt. Auf der Pi Pico Platine sind tatsächlich auch nur 2 MiB Flash, d.h. dort werden also tatsächlich weniger als 3 MiB genutzt.
}
|