Profitieren Sie von (logisch/virtuell) getrenntem E/A- und Speicherbus

In meinem Kurs über eingebettete Systeme wird erklärt, dass Speichereingänge von I/O-Eingängen getrennt werden können, indem ein "Modusbit" für den Adressdecoder verwendet wird. Der offensichtlichste Vorteil davon ist, dass die Menge der zu decodierenden Adresszeilen reduziert werden kann, wenn Sie ein separates Adressierungssystem für Ihren Speicher und Ihre E/A haben. Gibt es zusätzliche Vorteile? Hat diese logische Trennung weitere Vorteile, wie die Möglichkeit, unterschiedliche Taktraten oder Übertragungslogiken zu verwenden?

Relevante Frage von stackoverflow mit langer Antwort: stackoverflow.com/questions/3215878/…

Antworten (3)

Meine Interpretation dessen, was Sie beschreiben, besteht darin, den Adressraum einfach in zwei Hälften zu unterteilen - eine Hälfte für IO und eine Hälfte für den Speicher. Sie erstellen dort nicht zwei separate Busse, sondern nur einen, der für zwei logisch unterschiedliche Aufgaben verwendet wird.

Während dies die Decodierung des Adressbusses vereinfachen kann, verbessert es die Leistung überhaupt nicht.

Viele eingebettete Mikrocontroller verwenden eine Architektur, die als modifizierte Harvard-Architektur bekannt ist. Dabei haben Sie eine Reihe verschiedener physikalischer Busse, jeder mit seinem eigenen Zweck - einer für RAM, einer für ROM, vielleicht einer für IO. Diese haben den großen Vorteil, dass gleichzeitig auf verschiedene Dinge zugegriffen werden kann, was mit einem einzelnen unterteilten Bus nicht möglich ist. Es macht die Programmierung jedoch komplexer.

Ich glaube, er fragt nach den E/A- und Speicherbussen in x86-Prozessoren. Sie sind eigentlich unterschiedliche Adressräume und haben separate Anweisungen für den Zugriff.
Aber immer noch nur ein einziger physischer Bus. Kein wirklicher Unterschied, als nur das höchstwertige Adressbit als Speicher-/IO-Unterscheidungsmerkmal zu benennen.
Sie können dieselben Leitungen verwenden, aber der IO-Bus hat 16 Bit und der Speicherbus 20 Bit, sodass der kombinierte Adressraum nicht zusammenhängend oder gleich groß ist. Außerdem sind die Anweisungen nicht austauschbar, sodass die Trennung durch das Design der CPU erzwungen wird. Vielleicht wäre es sinnvoller gewesen, diesen Pin als 21. Adressbit zu verwenden, aber das ist Geschichte.
@Austin Außerdem sagt er "In meinem Kurs über eingebettete Systeme", also ist es eher 8051 und nicht x86. Ja, sie leben auf diesen Kursen in der Vergangenheit.
Ich frage eigentlich nur allgemein von einem theoretischen Standpunkt aus. Nicht wirklich ein bestimmtes Computersystem studieren.

Dies macht die X86-Architektur mit IN/OUT-Befehlen, die eher Peripheriegeräte als Speicher adressieren.

Eine andere Übertragungslogik kann nützlich sein. Zum Beispiel den Zugriff auf Peripheriegeräte nicht zwischenspeichern. Oder mit unterschiedlichem Verhalten für nicht ausgerichtete Lesevorgänge. Es gibt Ihnen auch ein "freies" 17. Bit in einer 16-Bit-Architektur, als die Technik eingeführt wurde. Die Taktrate muss gleich bleiben, aber möglicherweise können Sie eine andere Anzahl von "Wartezuständen" haben.

Heutzutage wird es jedoch als besser angesehen, die MMU einfach intelligenter zu machen und ihr zu erlauben, mit diesen Effekten umzugehen.

Oder, um andere Worte für dasselbe zu verwenden: Der E/A-Takt kann eine andere Geschwindigkeit haben als der Speichertakt. Der Prozessortakt "muss gleich bleiben".

Laut meinem Ausbilder gibt es viele potenzielle Vorteile, weil die Buskonstruktion auf diese Weise völlig andere Setup-Parameter zulässt. Dies bedeutet, dass Sie unterschiedliche Daten-/Adressbreiten sowie unterschiedliche Taktraten haben können.