3.3 Verarbeitungseinheiten
163
durch Speicher belegt sein. Es gibt verschiedene Techniken, um die Codegröße zu
reduzieren:
• CISC-Maschinen: Standard RISC-Prozessoren wurden für maximale Geschwindigkeit und nicht für effiziente Codegrößen entworfen. Dagegen wurden frühere
Prozessoren mit komplexen Befehlen (engl. Complex Instruction Set Computers (CISC)) auf effiziente Codegrößen hin optimiert, da sie nur über langsame
Speicher verfügen konnten. Caches kamen dabei meist nicht zum Einsatz. Daher werden „altmodische” CISC-Prozessoren gerne in eingebetteten Systemen
eingesetzt. Ein Beispiel dafür sind die ColdFire-Prozessoren [170], die auf der
68000er-Familie von CISC-Prozessoren der Firma Motorola basieren.
• Komprimierungstechniken: Durch das Ablegen von Befehlen in komprimierter
Form im Hauptspeicher lassen sich die Menge an Silizium, die zum Speichern
der Befehle notwendig ist, und auch die Energie, die zum Laden dieser Befehle
benötigt wird, reduzieren. Durch die gesunkene Anforderung an die Bandbreite
kann das Laden von Befehlen auch schneller erfolgen. Ein (hoffentlich schneller
und kleiner) Dekodierer wird zwischen den Prozessor und den Befehlsspeicher
geschaltet, um während des Ladens die ursprünglichen Befehle zu erzeugen (siehe
Abb. 3.18 (rechts))10. Anstelle eines großen Speichers voller unkomprimierter
Befehle speichern wir die Befehle nun in einem komprimierten Format.
ROM
ROM
μP
μP
Befehl
Dekoder
Befehl
Adresse
Adresse
Abb. 3.18 Holen von Befehlen: links: unkomprimiert; rechts: komprimiert
Die durch Komprimierung zu erreichenden Ziele umfassen also:
• Wir möchten ROM- und RAM-Bereiche einsparen, da diese teurer als der eigentliche Prozessor sein können.
• Wir möchten eine Kodierungstechnik für Befehle und möglicherweise auch für
Daten mit folgenden Eigenschaften verwenden:
– Der Aufwand zur Laufzeit soll gering sein.
– Die Dekodierung sollte mit einem begrenzten Kontext möglich sein (es ist
beispielsweise nicht möglich, das gesamte Programm einzulesen, um das Ziel
eines Sprungbefehls zu finden).
10 Wir stellen die Funktion von Multiplexern, arithmetische Einheiten und Speichern weiterhin
anhand ihrer Form (und nicht durch Beschriftung) dar, da diese Darstellung in technischer Dokumentation weit verbreitet ist. Für Speicher führen wir Symbole ein, die einen expliziten AdressDekodierer enthalten (in den Symbolen für ROMs auf der rechten Seite zu sehen). Diese Dekodierer
kennzeichnen den Adresseingang.
163
durch Speicher belegt sein. Es gibt verschiedene Techniken, um die Codegröße zu
reduzieren:
• CISC-Maschinen: Standard RISC-Prozessoren wurden für maximale Geschwindigkeit und nicht für effiziente Codegrößen entworfen. Dagegen wurden frühere
Prozessoren mit komplexen Befehlen (engl. Complex Instruction Set Computers (CISC)) auf effiziente Codegrößen hin optimiert, da sie nur über langsame
Speicher verfügen konnten. Caches kamen dabei meist nicht zum Einsatz. Daher werden „altmodische” CISC-Prozessoren gerne in eingebetteten Systemen
eingesetzt. Ein Beispiel dafür sind die ColdFire-Prozessoren [170], die auf der
68000er-Familie von CISC-Prozessoren der Firma Motorola basieren.
• Komprimierungstechniken: Durch das Ablegen von Befehlen in komprimierter
Form im Hauptspeicher lassen sich die Menge an Silizium, die zum Speichern
der Befehle notwendig ist, und auch die Energie, die zum Laden dieser Befehle
benötigt wird, reduzieren. Durch die gesunkene Anforderung an die Bandbreite
kann das Laden von Befehlen auch schneller erfolgen. Ein (hoffentlich schneller
und kleiner) Dekodierer wird zwischen den Prozessor und den Befehlsspeicher
geschaltet, um während des Ladens die ursprünglichen Befehle zu erzeugen (siehe
Abb. 3.18 (rechts))10. Anstelle eines großen Speichers voller unkomprimierter
Befehle speichern wir die Befehle nun in einem komprimierten Format.
ROM
ROM
μP
μP
Befehl
Dekoder
Befehl
Adresse
Adresse
Abb. 3.18 Holen von Befehlen: links: unkomprimiert; rechts: komprimiert
Die durch Komprimierung zu erreichenden Ziele umfassen also:
• Wir möchten ROM- und RAM-Bereiche einsparen, da diese teurer als der eigentliche Prozessor sein können.
• Wir möchten eine Kodierungstechnik für Befehle und möglicherweise auch für
Daten mit folgenden Eigenschaften verwenden:
– Der Aufwand zur Laufzeit soll gering sein.
– Die Dekodierung sollte mit einem begrenzten Kontext möglich sein (es ist
beispielsweise nicht möglich, das gesamte Programm einzulesen, um das Ziel
eines Sprungbefehls zu finden).
10 Wir stellen die Funktion von Multiplexern, arithmetische Einheiten und Speichern weiterhin
anhand ihrer Form (und nicht durch Beschriftung) dar, da diese Darstellung in technischer Dokumentation weit verbreitet ist. Für Speicher führen wir Symbole ein, die einen expliziten AdressDekodierer enthalten (in den Symbolen für ROMs auf der rechten Seite zu sehen). Diese Dekodierer
kennzeichnen den Adresseingang.
