Komprimierter Befehlssatz - Compressed instruction set

Ein komprimierter Befehlssatz oder einfach komprimierte Befehle sind eine Variation der Befehlssatzarchitektur (ISA) eines Mikroprozessors , die es ermöglicht, Befehle in einem kompakteren Format darzustellen. In den meisten realen Beispielen sind komprimierte Befehle 16 Bit lang in einem Prozessor, der ansonsten 32-Bit-Befehle verwenden würde. Die 16-Bit-ISA ist eine Teilmenge der vollständigen 32-Bit-ISA, kein separater Befehlssatz. Das kleinere Format erfordert einige Kompromisse, im Allgemeinen sind weniger Befehle verfügbar und es können weniger Prozessorregister verwendet werden.

Das Konzept wurde ursprünglich von eingeführt Hitachi als eine Möglichkeit , die zur Verbesserung der Codedichte ihres SuperH RISC - Prozessor - Designs , wie es von 16-Bit auf 32-Bit - Befehle in der SH-5 - Version verschoben. Das neue Design hatte zwei Befehlssätze, einen für den Zugriff auf die gesamte ISA des neuen Designs und einen kleineren 16-Bit-Satz namens SHcompact, der es Programmen ermöglichte, in kleineren Mengen an Hauptspeicher zu laufen . Da der Speicher selbst der kleinsten Systeme mittlerweile um Größenordnungen größer ist, steht die Größe nicht mehr im Vordergrund; Der Vorteil besteht heute darin, dass die Anzahl der Zugriffe auf den Hauptspeicher und damit der Energieverbrauch mobiler Geräte reduziert wird .

Die Einführung von 64-Bit-Computing hat dazu geführt, dass der Begriff nicht mehr so ​​weit verbreitet ist; diese Prozessoren verwenden im Allgemeinen 32-Bit-Befehle und sind technisch gesehen eine Form komprimierter ISA, da sie jedoch meistens modifizierte Versionen einer älteren ISA aus einer 32-Bit-Version derselben Prozessorfamilie sind; es gibt keine wirkliche kompression. Hitachis Patente wurden von Arm Ltd. für ihre Prozessoren lizenziert , wo es als "Thumb" bekannt war. Ähnliche Systeme finden sich in MIPS16e und PowerPC VLE. Die ursprünglichen Patente sind abgelaufen und das Konzept findet sich in einer Reihe moderner Designs wieder, einschließlich des RISC-V , das von Anfang an darauf ausgelegt war, es zu verwenden.

Konzept

Mikroprozessoren codieren ihre Befehle als eine Reihe von Bits , die normalerweise in eine Anzahl von 8-Bit- Bytes unterteilt sind . Im MOS 6502 führt der ADCBefehl beispielsweise eine binäre Addition zwischen einem Operandenwert und dem bereits im Akkumulator gespeicherten Wert durch . Es gibt eine Vielzahl von Stellen, an denen der Prozessor den Operanden finden kann; sie kann sich im Hauptspeicher oder in der speziellen Nullseite befinden oder eine explizite Konstante wie "10" sein. Jede dieser Variationen verwendete einen anderen 8-Bit-Befehl oder einen anderen Opcode ; Wenn man die Konstante 10 zum Akkumulator addieren wollte, würde die Anweisung im Speicher als codiert sein $69 $0A, mit der hexadezimalen $0A für 10, während wenn sie den im Hauptspeicher an der Stelle $4400 gespeicherten Wert addiert, wäre es $6D $0044, mit ein wenig Endian- Adresse.

Beachten Sie, dass der zweite Befehl drei Byte erfordert, da die Speicheradresse 16 Bit lang ist. Abhängig von der Anweisung kann es ein, zwei oder drei Bytes verwenden. Dies ist heute als Befehlssatz variabler Länge bekannt , obwohl dieser Begriff zu dieser Zeit nicht üblich war, da die meisten Prozessoren, einschließlich Großrechner und Minicomputer , einige Variationen dieses Konzepts verwendeten. Sogar in den späten 1970er Jahren, als Mikroprozessoren begannen, von 8-Bit-Formaten auf 16-Bit-Formate zu wechseln, blieb dieses Konzept weit verbreitet; der Intel 8088 verwendete weiterhin 8-Bit-Opcodes, denen je nach Adressierungsmodus null bis sechs zusätzliche Bytes folgen konnten .

Es war während der Umstellung auf 32-Bit-Systeme, und insbesondere als das RISC- Konzept begann, das Prozessordesign zu übernehmen, begannen Befehle mit variabler Länge zu verschwinden. In der MIPS-Architektur sind zum Beispiel alle Befehle ein einzelner 32-Bit-Wert, mit einem 6-Bit-Opcode in den höchstwertigen Bits und den verbleibenden 26 Bits, die auf verschiedene Weise verwendet werden, um den begrenzten Satz von Adressierungsmodi darzustellen. Die meisten RISC-Designs sind ähnlich. Der Wechsel zu einem Befehlsformat mit fester Länge war eines der Schlüsselkonzepte für die Leistung früher RISC-Designs; In früheren Systemen benötigte das Lesen des Befehls möglicherweise ein bis sechs Speicherzyklen, was eine Verdrahtung zwischen verschiedenen Teilen der Logik erforderte, um sicherzustellen, dass der Prozessor nicht versuchte, den Befehl auszuführen, bevor die Daten bereit waren. In RISC-Designs dauern Operationen normalerweise einen Zyklus, was die Decodierung stark vereinfacht. Die Einsparungen bei diesen Verriegelungsschaltungen werden stattdessen auf zusätzliche Logik oder das Hinzufügen von Prozessorregistern angewendet , die sich direkt auf die Leistung auswirken.

Codedichte

Der Nachteil des RISC-Ansatzes besteht darin, dass viele Befehle einfach keine vier Bytes benötigen. Zum Beispiel verschiebt der Befehl Logical Shift Left die Bits in einem Register nach links und erfordert nur den Befehls-Opcode und eine Registernummer. Beim 6502, der ein einziges arithmetisches Register A hat und somit nicht einmal eine Registernummer benötigt, belegt der ASLBefehl ein Byte. Theoretisch benötigt MIPS nur einen 6-Bit-Opcode und eine 5-Bit-Registernummer für dieselbe Operation und könnte theoretisch den Befehl in einen 16-Bit-Wert einfügen. Aber wie bei den meisten RISC-Designs benötigt der Befehl immer noch volle 32 Bit. Da diese Art von Befehlen relativ verbreitet sind, beanspruchen RISC-Programme im Allgemeinen mehr Speicher als dasselbe Programm auf einem Prozessor variabler Länge.

In den 1980er Jahren, als das RISC-Konzept erstmals auftauchte, war dies ein häufiger Kritikpunkt. Da die Anweisungen mehr Platz beanspruchten, musste das System mehr Zeit damit verbringen, Anweisungen aus dem Speicher zu lesen. Es wurde vorgeschlagen, dass diese zusätzlichen Zugriffe das Programm tatsächlich verlangsamen könnten. Umfangreiches Benchmarking zeigte schließlich, dass RISC in fast allen Fällen schneller war, und dieses Argument verblasste. Es gibt jedoch Fälle, in denen die Speichernutzung unabhängig von der Leistung ein Problem darstellt, und zwar bei kleinen Systemen und eingebetteten Anwendungen. Selbst in den frühen 2000er Jahren war der Preis für DRAM so hoch, dass kostensensible Geräte nur über begrenzten Speicher verfügten. Für diesen Markt hat Hitachi das SuperH- Design entwickelt.

In den früheren SuperH-Designs SH-1 bis SH-4 belegen Befehle immer 16 Bit. Der resultierende Befehlssatz weist Einschränkungen in der realen Welt auf; zum Beispiel kann es nur Zwei-Operanden-Mathematik der Form ausführen A = A + B, während die meisten Prozessoren der Ära A = B + Cdas Drei-Operanden-Format erlaubten . Durch das Entfernen eines Operanden werden vier Bits aus dem Befehl entfernt (es gibt 16 Register, die 4 Bits benötigen), obwohl dies auf Kosten der Komplexität des Schreibens des mathematischen Codes geht. Für die vom SuperH anvisierten Märkte war dies ein einfacher Kompromiss. Ein wesentlicher Vorteil des 16-Bit-Formats besteht darin, dass der Befehlscache jetzt doppelt so viele Befehle für jede gegebene Menge an SRAM enthält . Dadurch kann das System mit höheren Geschwindigkeiten arbeiten, obwohl einiges davon durch die Verwendung zusätzlicher Befehle, die zum Ausführen von Operationen erforderlich sind, die von einem einzelnen 3-Operanden-Befehl ausgeführt werden könnten, abgeschwächt werden könnte.

Für den SH-5 wechselte Hitachi zu einem 32-Bit-Befehlsformat. Um die Abwärtskompatibilität mit ihren früheren Designs zu gewährleisten , wurde ein zweiter Befehlssatz, SHcompact, hinzugefügt. SHcompact bildete die ursprünglichen 16-Bit-Befehle unidirektional auf den internen 32-Bit-Befehl ab; es führte nicht mehrere Befehle aus, wie dies bei früheren mikrocodierten Prozessoren der Fall war , es war einfach ein kleineres Format für denselben Befehl. Dadurch konnten die ursprünglichen kleinformatigen Programme leicht auf die neue SH-5 portiert werden, während die Komplexität der Zugabe von kleinen Befehlsdecoder .

ARM lizensierte eine Reihe von Hitachi-Patenten zu Aspekten des Befehlsdesigns und nutzte sie, um seine Thumb-Befehle zu implementieren. ARM-Prozessoren mit einem "T" im Namen enthielten diesen Befehlssatz zusätzlich zu ihren ursprünglichen 32-Bit-Versionen und konnten mit dem BXBefehl im Handumdrehen vom 32- auf den 16-Bit-Modus umgeschaltet werden . Im Thumb-Modus sind nur die oberen acht Register der normalen sechzehn Register des ARM sichtbar, aber dies sind die gleichen Register wie im 32-Bit-Modus und somit können Daten zwischen Thumb und normalem Code unter Verwendung dieser Register übertragen werden. Jeder Thumb-Befehl war ein Gegenstück zu einer 32-Bit-Version, also war Thumb eine strikte Untermenge der ursprünglichen ISA. Ein wesentlicher Unterschied zwischen dem ARM-Modell und SuperH besteht darin, dass Thumb einige Drei-Operanden-Befehle im 16-Bit-Format beibehält, was durch die Reduzierung der sichtbaren Registerdatei auf acht erreicht wurde, sodass nur 3 Bits erforderlich sind, um ein Register auszuwählen.

Die MIPS-Architektur fügte ihrem MIPS16e auch einen ähnlichen komprimierten Satz hinzu, der Thumb sehr ähnlich ist. Auch er erlaubt nur die Verwendung von acht Registern, obwohl dies nicht einfach die ersten acht sind; das MIPS - Design verwendet Register 0 als Null - Register , Register so 0 und 1 in 16-Bit - Modus werden auf MIPS32 Registern statt kartiert 16 und 17. Die meisten anderen Einzelheiten des Systems sind ähnlich Daumen. Ebenso enthält die neueste Version von Power ISA , ehemals PowerPC , die "VLE"-Anweisungen, die im Wesentlichen identisch sind. Diese wurden auf Geheiß von Freescale Semiconductor hinzugefügt , dessen Interesse an Power hauptsächlich auf den Embedded-Markt gerichtet ist.

Moderne Nutzung

Ab etwa 2015 sind viele Prozessoren auf ein 64-Bit-Format umgestiegen. Diese behielten im Allgemeinen ein 32-Bit-Befehlsformat bei, während die internen Register auf ein 64-Bit-Format erweitert wurden. Nach der ursprünglichen Definition sind dies komprimierte Befehle, da sie kleiner sind als die grundlegende Datenwortgröße. Dieser Begriff wird in diesem Zusammenhang jedoch nicht verwendet, Verweise auf komprimierte Befehle beziehen sich ausnahmslos auf 16-Bit-Versionen.

Verweise

Zitate

Literaturverzeichnis