Werden ARM-Befehle direkt an den Decoder gesendet oder zuerst in einem Register gespeichert?

Soweit ich verstanden habe, werden die abgerufenen "Daten" (keine Anweisung) zuerst in eines der CPU-Register geladen.

Aber im Falle einer einzelnen "Anweisung" (keine Daten), die aus dem Speicher abgerufen wird, wird diese Anweisung zuerst an eines der CPU-Register gesendet oder wird sie sofort zur Dekodierung an die Steuereinheit gesendet?

(Ich spreche hauptsächlich von Cortex M3 und M4, wenn es darauf ankommt)

Die Anweisung muss eindeutig irgendwo sein, während sie dekodiert wird. Wo könnte es anders sein als in einem Register? Das ist mit ziemlicher Sicherheit ein dediziertes Befehlsregister und nicht eines der allgemeinen Datenregister, die dem Programmierer zur Verfügung stehen.
Wird der Befehl zuerst an das Befehlsregister und dann zur Dekodierung an die Steuereinheit gesendet? Oder wird der Befehl gleichzeitig an das Befehlsregister und die Steuereinheit gesendet?
Das hängt von der CPU-Architektur ab
Ich würde sagen, dass das Befehlsregister Teil der Steuereinheit ist - oder dass die beiden Dinge so eng miteinander verbunden sind, dass sie als eine Einheit betrachtet werden können.

Antworten (1)

Die Anweisung wird nicht an ein Register im Sinne der Assembler-Programmierung gesendet, dh an ein Register, das einen Namen hat und für den Programmierer zugänglich ist (z. B. r2, lr, sp, pc usw.).

Es ist jedoch sehr wahrscheinlich, dass es in einem Register im Sinne des Begriffs digitales Logikdesign gespeichert wird, dh ein Array von Flip-Flops oder anderen Speicherelementen mit einem gemeinsamen Takt und einer gemeinsamen Freigabe. Dies wird als Befehlsregister bezeichnet .

Im Cortex-M3 speichert das IR die abgerufene Anweisung, bevor sie von der nächsten Stufe decodiert wird. Eine fortschrittlichere Architektur mit Out-of-Order-Ausführung kann mehrere IRs haben, die mehrere Decoder speisen. Zum Beispiel hat Intel Sandy Bridge eine ganze Befehlswarteschlange statt einer einzelnen IR, die vier Decoder speist, die Uops an die Post-Decodierungs-/Zuweisungswarteschlange, den architektonischen Registerumbenenner und den Scheduler liefern. In diesen Phasen werden Anweisungen in Registern aller unterschiedlichen Typen in allen unterschiedlichen Formaten gespeichert.

Wird die Anweisung also zuerst an das Anweisungsregister und dann zur Decodierung an die Steuereinheit gesendet? Oder wird der Befehl gleichzeitig an das Befehlsregister und die Steuereinheit gesendet?
Darauf gibt es möglicherweise keine einzige Antwort: Die Steuereinheit hat wahrscheinlich ein Register als Teil ihrer Eingabe. Es kann auch von der spezifischen ARM-Revision abhängen; schnellere können eine tiefere Pipeline haben und mehr Register haben, die für die ISA nicht sichtbar sind.
@ user1999 Das IR ist Teil der Steuereinheit und nicht ganz so einfach, wie Sie annehmen. Hier ist ein Dokument für den Cortex M3 - die Anweisung wird abgerufen und in einem Register gespeichert, um im nächsten Taktzyklus decodiert zu werden. Anschließend werden die decodierten Steuersignale wahrscheinlich selbst registriert, bevor sie zu den Ausführungsstufen gesendet werden.
@ user_1818839 Das Senden an die Steuereinheit und das Senden an das Befehlsregister bedeutet dasselbe. Normalerweise würden Sie als CPU-Designer das Befehlsregister als Teil der Steuereinheit betrachten. Das Befehlsregister ist im Grunde der Speicher des Decoders
@ user_1818839 Beachten Sie, dass es für echte CPUs komplexer ist, da der Befehlsdecodierer die Befehle nicht direkt aus dem RAM abruft. Stattdessen werden Anweisungen aus dem Cache abgerufen. Dies kann ein allgemeiner Cache oder in einigen Fällen ein dedizierter Befehls-Cache sein (was den CPU-Kern zu einer Mini-Harvard-Architektur macht). In manchen Fällen bedeutet ein Dual-Port-Befehls-Cache, dass Sie kein separates Befehlsregister benötigen, damit der Decoder funktioniert, da Sie den Decoder direkt an den Cache-Ausgang anschließen können
@slebetman Ich habe meine ARM-1-Dokumentation (maschinengeschrieben!) Verloren, aber damals war es nicht komplexer. Interessanterweise zeigt das VL86C010-Datenhandbuch (ARM-II, hergestellt von VLSI Technology unter Lizenz) ein "Speicherdatenregister (Lesen)" zwischen dem externen Datenbus und der "Befehlsdecodierungs- und Ausführungspipeline". So wurde alles, was aus dem Speicher gelesen wurde, registriert, bevor es übergeben wurde auf die internen Register, und "Pipeline" impliziert weitere interne Register. Und 1987 natürlich kein Cache.
@user_1818839 Cool. Tut mir leid, dass ich dieses Dokument verloren habe. Ich wollte eigentlich das OP markieren, habe dich aber versehentlich markiert :P Arbeitete an einem ARM-2 an der Uni, als sie uns die Unterschiede zwischen RISC (na ja, laden/speichern) und CISC beibrachten. Für den CISC-Teil musste ich 68k-Assembler lernen. Das waren lustige Zeiten..