Antworten:
TL, DR; Während ARM-Prozessoren ähnliche Konzepte wie mikrocodierte CPUs verwenden (z. B. gibt es einen Hardwareblock, der Befehle in eine oder mehrere Mikrooperationen decodiert ), sind sie weder im herkömmlichen Sinne mikrocodiert , der ein ROM zum Speichern jedes Mikrobefehls verwendet, noch Können diese Mikrobefehle / Operationen geändert werden, nachdem sie in der tatsächlichen Hardware hergestellt wurden? In der Tat verwenden ARM-Prozessoren eine festverdrahtete Steuerung im Befehlsdecoder, um Mikrooperationen zu erzeugen.
In der Praxis kann das Ändern des Befehlsdecoders jedoch dem Ändern eines mikrocodierten Prozessors ähnlich sein, da ARM den Quellcode der Hardwarebeschreibungssprache ( HDL ) seiner CPU-Architekturen an einzelne Hersteller lizenziert , wodurch Änderungen auf Hardwareebene erheblich einfacher zu implementieren sind. Finden Sie in der Befehlsdecoder Abschnitt im Mikroprozessor - Design Wikibook für mehr Unterschiede zwischen typischen RISC und CISC - Befehlsdecoder.
Während die ARM - Architektur selbst ist nicht im traditionellen Sinne mikrocodiert, einzelne Befehle werden in kleinere Mikrooperationen decodiert . Ein moderner ARM-Prozessor ist alles andere als "einfach" - obwohl die Anweisungen selbst sehr orthogonal sind, gibt es eine Menge moderner Technologie (z. B. Pipelining, superskalare Anweisungen, Ausführung außerhalb der Reihenfolge, Caching, erweiterte komplexe Anweisungen wie Gleitkommaeinheiten) oder NEON-Anweisungen), die ein moderner A9-Kern hat. In der Tat kann jeder Prozessor einfach genug sein, um ohne Übersetzung in Mikrooperationen ausgeführt zu werden, aber dies bedeutet im Wesentlichen, dass "alle Eier in einem Korb liegen" - Sie können keine möglichen Errata im Befehlssatz korrigieren oder nach der Produktion erweitern / ändern.
Wenn wir jedoch nur über die Befehlsdecodierungsphase sprechen , werden tatsächlich viele ARM-Prozessoren nicht so mikrocodiert, dass Änderungen nachträglich möglich sind, obwohl dies möglicherweise darauf zurückzuführen ist, dass die meisten Hersteller, die ARM-Technologie lizenzieren, Zugriff auf die tatsächliche Technologie erhalten Hardware-Quellcode (in einer HDL geschrieben). Dies reduziert den Stromverbrauch, da keine Mikrocodestufe erforderlich ist, die einzelnen Anweisungen jedoch zu tatsächlichen Hardwareblöcken "kompiliert" werden. Dies ermöglicht auch die Korrektur von Errata durch jeden Hersteller.
Selbst in einer CISC-basierten CPU (z. B. x86) ist die Verwendung von Mikrocode nicht erforderlich . In der Praxis macht die Komplexität des Befehlssatzes in Kombination mit verschiedenen Unterschieden bei Lizenzierung, Stromverbrauch und Anwendungen die Wahl des Mikrocodes jedoch ideal für den Fall von x86. Im Fall von ARM ist dies jedoch weniger nützlich, da Änderungen am Befehlssatz (Decoder) in Bezug auf die Hardware selbst viel einfacher zu implementieren und zu steuern sind (da sie vom Hersteller angepasst werden können).
Obwohl ein Mikrocode in einigen Fällen das Design des Prozessors tatsächlich vereinfachen kann (da jeder Befehl als "Mikroprogramm" im Gegensatz zur tatsächlichen Hardware existiert), ist dies effektiv nur ein Befehlsdecoder (z. B. die Thumb-2-Erweiterung , die Variablen- ermöglicht). Längenbefehle müssen vorhanden sein, indem ein separater Befehlsdecoder in Reihe mit dem ARM-Befehlsdecoder hinzugefügt wird . Während diese Einheiten funktional mithilfe von Mikrocode implementiert werden können, wäre dies hinsichtlich des Stromverbrauchs nicht sinnvoll, da Sie den Ausgang für jedes Steuersignal in der CPU selbst definieren müssen, auch wenn dies nicht erforderlich ist. Das geht nicht haben jedoch etwas damit zu tun, wie "komplex" die eigentliche CPU selbst ist, da ARM-Kerne alle modernen Konstrukte haben, die man erwarten würde (Pipelining, Befehls- / Daten-Caches, Mikro-TLB-Puffer, Verzweigungsvorhersage, virtueller Speicher usw.) ).
Im Fall von ARM würde angesichts der Orthogonalität des Befehlssatzes die Komplexität, die mit der Implementierung eines solchen mikrocodierten Ansatzes verbunden ist, die Vorteile eines einfachen Wechsels der relevanten Hardware direkt im Befehlsdecoderblock überwiegen. Dies ist zwar durchaus möglich, führt jedoch dazu, dass das Rad sozusagen "neu erfunden" wird, vorausgesetzt, Sie können die Änderungen an der Hardware direkt ändern (und kompilieren / testen / emulieren).
Sie können sich den ARM-Quellcode selbst in diesem Fall als eine Art Mikrocodierung "vorstellen", obwohl sie, anstatt jede Mikrooperation / jedes Mikroprogramm in einem ROM zu speichern, das nachträglich geändert werden kann, direkt in implementiert werden Hardware im Befehlsdecoder. Da der Befehlsdecoder selbst in VHDL / Verilog geschrieben ist, ist das Vornehmen von Änderungen an vorhandenen Befehlen so einfach wie das Ändern des Quellcodes, das Neukompilieren und Testen der neuen Hardware (z. B. auf einem FPGA oder einem Simulator). Dies steht im Gegensatz zu der Komplexität moderner x86-Hardware, die während der Entwicklung viel schwieriger zu testen / zu simulieren und nach der Produktion noch schwieriger zu modifizieren ist (da die Größe der Transistoren weit über dem liegt, was man selbst in der teuersten Moderne ausführen kann FPGAs, wodurch die Verwendung eines Mikrocode-Speichers einen zusätzlichen Vorteil bietet).physische Hardware mit einem FPGA.