Gibt es in einem typischen Mikrocontroller unterschiedliche Adressräume für RAM und ROM? [geschlossen]

Wenn ein Mikrocontroller über einen 16-Bit-Adressraum von 0000H bis FFFFH verfügt, teilen sich RAM, E / A-Register, speicherabgebildete E / A und ROM (Flash / EEPROM) linear denselben Adressraum oder gibt es einen separaten Adressraum für ROM allein (wie ein weiteres 0000H bis 1FFFH), oder ist es herstellerabhängig?

Ich schätze, ich habe viele Dokumente gelesen und mich darin verirrt. Bitte helfen Sie.

Wählen Sie am besten ein bestimmtes Gerät aus, lesen Sie dann das Datenblatt und fragen Sie dann hier, wenn es nicht klar ist.
Typischerweise gibt es aufgrund von Adressdecodierungsbeschränkungen und Diskrepanzen bei der Gerätegröße unterschiedliche nicht zusammenhängende Leerzeichen
Das hängt ganz vom Gerät ab. Für PIC ja; Arm, nein. Usw.
Ich würde die Existenz eines typischen Mikrocontrollers in Frage stellen
@ pjc50 Sie können nicht drei Geräte unterschiedlicher Größe kontinuierlich zuordnen, selbst wenn Sie einen ARM haben. Möglicherweise sieht die Anwendung aufgrund der MMU fortlaufende Adressen, aber HW-Adressen können für diff nicht fortlaufend sein. Größen
@ClaudioAviChami Wenn der Adressdecoder eine vollständige Subtraktion durchführt, anstatt nur die höherwertigen Bits der Adresse zu überprüfen, können Sie dies tun. Aber auch ohne können Sie zum Beispiel: 128kByte bei 0x00000, 64k bei 0x20000, 16k bei 0x30000.
@ClaudioAviChami - Für einen gemeinsamen Adressraum ist kein zusammenhängender Adressraum erforderlich. Im Wesentlichen bedeutet dies, dass einige der gleichen Zugriffsmethoden auf Softwareebene (mindestens ein Lesevorgang) verwendet werden können.
Ihre ersten 12 Wörter definieren eine Situation, in der alles in denselben 16-Bit-Adressraum speicherabgebildet werden muss. Wie genau das aufgeteilt ist, ist nur eine Frage, wie viel Logik Sie einbauen möchten. Der Apple II hat seinen Platz trotz seiner bekannt niedrigen Chipanzahl ziemlich fein aufgeteilt, sodass er 48 KB RAM (einschließlich 1-9 KB Display) erhalten konnte Puffer), 2K I/O, 2K bankfähiger Kartenspeicher und 12K ROM.

Antworten (2)

Das ist in der Tat der Hauptunterschied zwischen "von Neumann"- und "Harvard"-Architekturen. Der erste verwendet einen einzigen Adressraum für alles, während der letztere separate Adressräume für Anweisungen (normalerweise ROM) und Daten (normalerweise RAM) hat.

Sie können Mikrocontroller mit beiden Architekturen erhalten. Einige implementieren eine Mischung aus beidem.

Das war ein markanter Punkt! Aber wie genau wäre ein Hybrid aus beidem? Etwas mehr Einblick bitte..?
Einige Architekturen (insbesondere 8080 und Derivate) verwenden separate Adressräume für I/O
Beispielsweise ist der 8051 eine Harvard-Maschine, aber er verfügt über Anweisungen, die es ermöglichen, Daten aus dem Befehlsraum zu verschieben. Wenn Sie externen Speicher daran anschließen, ist es außerdem einfach, die Adressräume entweder teilweise oder vollständig übereinander zu "falten".
ARM Cortex-M-Teile haben einen einzigen Adressraum, aber zur Geschwindigkeitsoptimierung unterschiedliche Implementierungsmechanismen und interne Datenpfade für die verschiedenen Speichertypen. Das Gleiche könnte effektiv für jedes moderne große System mit unterschiedlichen Befehls- und Daten-Caches gelten.
Ein Beispiel für eine „hybride“ Harvard-Architektur ist PIC24. Es verfügt über eine "PSV"-Funktion (Program Space Visibility), die es ermöglicht, den Programmspeicher teilweise auf die obere 32-KB-Region des SRAM abzubilden. Es kann dann als ROM verwendet werden. Der SRAM-Bus ist zwar nur 16 Bit breit, was aber angesichts der typischen RAM-Größe dieser Geräte kein Problem darstellt.
Ich denke, der einfachste Weg, eine hybride Architektur zu beschreiben, wäre zu sagen, dass es einen Bereich des Codespeichers mit einem schnellen Bus gibt, der ihn mit der Befehlsverarbeitungslogik verbindet, und einen anderen Bereich des Datenspeichers mit einem schnellen Bus, der ihn mit den Daten verbindet -Verarbeitungslogik, aber es gibt andere - möglicherweise langsamere - Kommunikationspfade, die es Daten ermöglichen, andere Wege zu gehen (am typischsten zwischen dem Codespeicher und der Datenverarbeitungseinheit oder - in einigen Caching-Szenarien - vom Datenspeicher zu einem Code Speichercache).

Dave hat bereits die Unterschiede zwischen Harvard- und von-Neumann- Architekturen erwähnt.

Ein Beispiel für eine von Neumann-Architektur, bei der es nur einen Adressraum für RAM, Flash, I/O und EEPROM gibt, ist die HCS08-Familie von Freescale. Hier ist die Speicherkarte eines seiner Mikrocontroller mit 128 KB Flash und 4 KB RAM:

Geben Sie hier die Bildbeschreibung ein

Beachten Sie, dass sich in dieser Abbildung die Speicheradresse 0 oben befindet. Es ist auch nicht maßstabsgetreu; die Adresse 0x8000 (32K-Grenze) sollte genau in der Mitte liegen.

Dieser Mikrocontroller hat eine direkte Seite (manchmal Seite 0 genannt), dh 256 Adressen, auf die mit nur einer 8-Bit-Adresse zugegriffen werden kann (was die Größe des Befehls um ein Byte reduziert). Die ersten 128 Stellen, 0x0000 bis 0x007F, werden verwendet, um E/A-Register abzubilden. Darauf folgen die 5 KB RAM, von Adresse 0x0080 bis 0x17FF. Dadurch befinden sich auch die ersten 128 Bytes RAM auf Seite 0. Es folgen 256 zusätzliche Adressen, die für zusätzliche I/O-Register bei 0x1800 bis 0x18FF reserviert sind, dann mehr RAM, dann das erste Segment von Flash, dann 2K EEPROM .

Dann zusätzliche Seiten von Flash. Beachten Sie, dass sie auch Seitenzahlen haben (PPAGE). Erinnern Sie sich, dass ich sagte, dass dieser Mikrocontroller 128K Flash hat? Wie passen Sie das in 64 KB Adressraum ein? Durch die Verwendung von Seitenadressierung. Es gibt ein "Paging-Fenster" bei 0x8000 bis 0xBFFF (16K), in dem eine von acht 16K-Seiten von Flash (insgesamt 128K) abgebildet werden kann. Welches wird durch ein Paging-Register gesteuert. Wenn der Compiler Sprünge oder Subroutinenaufrufe generiert, weiß er, dass er das Paging-Register nach Bedarf aktualisieren muss.

Einige der Pages können auch direkt adressiert werden (PPAGES 0, 1 und 3), ohne das Paging-Register zu verwenden. Dies wird für Dinge wie Interrupt-Handler benötigt, die jederzeit auftreten können. Gängige Subroutinen wie die C-Bibliothek sind ebenfalls gute Kandidaten für diese Seiten.

Nicht gezeigt sind die Reset- und Interrupt-Vektoren, die am Anfang des Speichers (0xFFFF) beginnen und nach unten gehen.

Maschinen mit reiner Harvard-Architektur haben viel einfachere Schemata, es gibt einen Adressraum für Flash, der bei 0x0000 beginnt, einen anderen für RAM, der ebenfalls bei 0x0000 beginnt, und noch einen für I/O-Ports, der bei 0x0000 beginnt (manchmal werden RAM und I/O in der denselben Speicherplatz, bekannt als speicherabgebildete E/A). Wenn E/A-Ports verwendet werden, kann auf sie über spezielle Anweisungen wie IN und OUT zugegriffen werden.

Da es sich um separate Räume handelt, können sie unterschiedliche Breiten haben. Der Mikrocontroller PIC16 von Microchip beispielsweise hat eine Befehlsbreite von 14 Bit und 8 Bit RAM und I/O-Busse.

Was ist der Vorteil von jedem? Nun, mit einer Harvard-Architektur können Sie 64 KB Programmspeicherplatz, 64 KB RAM-Speicherplatz und 64 KB E/A-Speicherplatz haben, die alle 16-Bit-Adressen verwenden. Es ist also gut für 8- und 16-Bit-Mikrocontroller geeignet. Da sich das Programm in Flash befindet, kann es nicht geändert werden.

Mit von Neumann-Architekturen können Sie Programme entweder aus Flash (oder ROM) und RAM ausführen. So funktionieren PCs: Wenn sie zum ersten Mal gestartet werden, booten sie mit einem BIOS-ROM (Basic Input/Output System), das das Betriebssystem von einer Festplatte liest und in den Arbeitsspeicher lädt. Von da an werden Programme außerhalb des Arbeitsspeichers ausgeführt.

Es gibt auch Prozessoren mit " modifizierter Harvard-Architektur ", die es ermöglichen, einen Teil des Befehlsraums so zu betrachten, als wäre er "Nur-Lese"-RAM. Dies geschieht normalerweise mit einem Paging-Fenster ähnlich dem im HCS08-Diagramm zuvor. Im PIC24 heißt diese Funktion Program Space Visibility (PSV).

Obwohl ich es als etwas schwierig empfinde, den im ersten Teil beschriebenen Adressabstand zu verstehen, hat er die meisten meiner Zweifel in Bezug auf dieses Thema beantwortet.