Speicheradressregister (MAR)
Übersicht
- Zweck: Das Speicheradressregister (MAR, Memory Address Register) ist ein 8-Bit-Register, das die Speicheradresse für Lese-/Schreiboperationen hält. Es fungiert als Puffer zwischen den internen Adressquellen der CPU (Befehlszähler, Befehlsregister) und dem externen Speicheradressbus und ermöglicht so ein korrektes Timing und die Isolation der Adresssignale.
- Symbol: Das MAR wird durch einen rechteckigen Block mit einem 8-Bit-Dateneingangsbus, einem Takteingang (CLK), einem Ladefreigabe-Steuersignal (LD) und einem 8-Bit-Adressausgangsbus dargestellt.
- DigiSim.io-Rolle: Wesentliche Komponente in CPU-Designs, die die Adressgenerierung vom Speicherzugriff trennt, wodurch ein korrektes Bus-Timing ermöglicht und komplexe Adressierungsmodi in der 8-Bit-Computerarchitektur unterstützt werden.

Funktionsbeschreibung
Logikverhalten
Das Speicheradressregister speichert einen 8-Bit-Adresswert an der steigenden Flanke des CLK-Signals, wenn die Ladefreigabe (LD) HIGH ist. Dieser Entwurf entspricht den anderen synchronen Registern in der DigiSim-8-Bit-Computerarchitektur. Nach dem Speichern wird die Adresse kontinuierlich an den Ausgangspins ausgegeben, bis eine neue Adresse geladen wird. Im Gegensatz zu Tri-State-Komponenten treibt das MAR seine Ausgänge stets aktiv.
Funktionstabelle:
| CLK-Flanke | LD | Operation | A0-A7-Ausgang |
|---|---|---|---|
| ↑ | 1 | Neue Adresse übernehmen | D0-D7-Eingangsdaten |
| ↑ | 0 | Halten | Vorherige Adresse |
| - | X | Halten | Vorherige Adresse |
Hinweis: ↑ steht für eine steigende Flanke des CLK-Signals LD muss an der steigenden Taktflanke HIGH sein, um neue Daten zu übernehmen Die Ausgänge sind stets aktiv getrieben (kein Tri-State), um einen stabilen Adressbus zu gewährleisten
Eingänge und Ausgänge
Eingänge (10 insgesamt):
- D0-D7[7:0]: 8-Bit-Dateneingänge (Bus-Eingänge) zum Laden einer neuen Adresse. Diese sind als Bus-Eingänge konfiguriert, sodass mehrere Quellen sie über Tri-State-Puffer ansteuern können.
- CLK: Takteingang (steigende Flanke). Daten werden an der steigenden CLK-Flanke übernommen, wenn LD HIGH ist.
- LD: 1-Bit-Ladefreigabe-Eingang (pegelempfindlich). Muss an der steigenden CLK-Flanke HIGH sein, um neue Daten zu übernehmen.
Ausgänge (8 insgesamt):
- A0-A7[7:0]: 8-Bit-Adressausgänge, die mit Speicherkomponenten (RAM/ROM) verbunden werden. Diese Ausgänge sind stets aktiv getrieben (kein Tri-State).
Pin-Belegung
Eingangs-Pins (linke Seite):
- Pins 0-7: D0-D7 (Daten-/Adresseingänge – Bus-Eingänge)
- Pin 8: CLK (Takt – steigende Flanke)
- Pin 9: LD (Ladefreigabe – pegelempfindlich)
Ausgangs-Pins (rechte Seite):
- Pins 0-7: A0-A7 (Adressausgänge zum Speicher)
Konfigurierbare Parameter
- Anfangswert: Der Adresswert beim Einschalten (typischerweise 0x00).
- Flankenempfindlichkeit: An der steigenden Flanke des CLK-Signals getriggert (wenn LD HIGH ist).
- Signallaufzeit: Die Zeit von der steigenden CLK-Flanke bis zu stabilen Ausgängen.
Visuelle Darstellung in DigiSim.io
Das Speicheradressregister wird als rechteckiger Block (128×192 Pixel, 8×12 Raster) dargestellt mit:
- 8 Dateneingangs-Pins auf der linken Seite (D0-D7) bei relativeY: 0.16667 bis 0.75
- 1 Takteingangs-Pin (CLK) bei relativeY: 0.83333
- 1 Ladefreigabe-Pin (LD) bei relativeY: 0.91667
- 8 Adressausgangs-Pins auf der rechten Seite (A0-A7) bei relativeY: 0.25 bis 0.83333
Die Komponentenbeschriftung „MAR" wird in der Mitte angezeigt, mit „ADDR" als Hinweis auf seine Rolle als Adressregister. Eingangs-Pins sind als Bus-Eingänge gekennzeichnet, erkennbar an dickeren Anschlusspunkten, die mehrere Tri-State-Treiber aufnehmen können.
Pädagogischer Wert
Schlüsselkonzepte
- Adresspufferung: Zeigt, wie Adressen für ein korrektes Bus-Timing von ihren Quellen isoliert werden.
- Flankengetriggertes Latching: Zeigt, wie Daten an Takt-/Steuersignalflanken erfasst werden.
- Busarchitektur: Veranschaulicht die Trennung von Adress- und Datenbus im CPU-Design.
- Speicheradressierung: Grundlegendes Konzept der Computerarchitektur.
- Pipeline-Stufen: Das MAR repräsentiert eine Stufe in der Hol-Decodier-Ausführungs-Pipeline.
Lernziele
- Die Rolle von Adressregistern bei Speicheroperationen verstehen.
- Lernen, wie Adresspufferung komplexe Speicherzugriffsmuster ermöglicht.
- Die Timing-Anforderungen für Setup- und Hold-Zeiten von Speicheradressen erkennen.
- MAR-Konzepte beim Entwurf von CPU-Speicherschnittstellen anwenden.
- Verstehen, wie mehrere Adressquellen (PC, IR, ALU) sich einen einzigen Speicheradressbus teilen können.
Anwendungsbeispiele/Szenarien
- Befehl holen: Der PC-Wert wird vor dem Holen des Befehls aus dem ROM/RAM in das MAR geladen.
- Daten laden/speichern: Operandenadressen aus dem IR werden in das MAR für Datenspeicherzugriffe geladen.
- Indirekte Adressierung: Aus der ALU berechnete Adressen werden für zeigerbasierte Zugriffe geladen.
- Stack-Operationen: Der Stackpointer-Wert wird für Push-/Pop-Operationen geladen.
- DMA-Operationen: Externe Adressquellen können Werte für direkten Speicherzugriff laden.
Integration in den 8-Bit-Computer
In der DigiSim-8-Bit-Computerarchitektur dient das MAR als zentraler Adresspuffer:
┌─────────────────────────────────────────────────────────────┐
│ ADRESSQUELLEN │
│ ┌────────┐ ┌─────────────────┐ ┌──────────────┐ │
│ │ PC │ │ IR │ │ ALU │ │
│ │ (8-Bit)│ │ (4-Bit-Adresse) │ │ (berechnet) │ │
│ └───┬────┘ └───────┬─────────┘ └──────┬───────┘ │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ ┌───────────────────────────────────────────────┐ │
│ │ TRI-STATE-PUFFER │ │
│ │ (vom Steuerwerk gesteuert) │ │
│ └───────────────────────┬───────────────────────┘ │
│ │ │
│ ▼ │
│ ┌───────────┐ │
│ │ MAR │◄──── LD (vom Steuerwerk) │
│ │ (8-Bit) │ │
│ └─────┬─────┘ │
│ │ │
│ ▼ │
│ ┌──────────────┐ │
│ │ RAM / ROM │ │
│ └──────────────┘ │
└─────────────────────────────────────────────────────────────┘
Steuersignale
Das Steuerwerk erzeugt das MAR_LD-Signal in bestimmten Mikrocode-Schritten:
- FETCH-Zustand: PC-Wert laden, um den nächsten Befehl zu lesen (MAR_LD=1 an der steigenden CLK-Flanke)
- EXECUTE-Zustand: Operandenadresse für Speicheroperationen laden (MAR_LD=1 an der steigenden CLK-Flanke)
Das CLK-Signal ist der mit allen synchronen Komponenten geteilte Systemtakt.
Technische Hinweise
- Das MAR ermöglicht eine vollständige 8-Bit-Adressierung (256 Byte) im Vergleich zum 4-Bit-Adressausgang des Befehlsregisters.
- Bus-Eingänge erlauben es mehreren Tri-State-Quellen, sich ohne explizites Multiplexing zu verbinden.
- Die Triggerung an der steigenden Taktflanke gewährleistet saubere Adressübergänge ohne Glitches.
- Die Ausgänge sind stets aktiv getrieben, um einen stabilen Adressbus während des Speicherzugriffs zu gewährleisten.
- Das MAR sollte geladen werden, bevor Speicher-Lese-/Schreibsignale aktiviert werden.
- Die Signallaufzeit sollte in zeitkritischen Designs berücksichtigt werden.
- Der Takteingang (CLK) synchronisiert das MAR mit anderen CPU-Komponenten.
Verwandte Komponenten
- Befehlszähler (PC): Primäre Adressquelle während des Befehlsholens.
- Befehlsregister (IR): Liefert Operandenadressen für Speicheroperationen.
- RAM: Direktzugriffsspeicher, der durch die MAR-Ausgänge adressiert wird.
- ROM: Festwertspeicher, der durch die MAR-Ausgänge adressiert wird.
- Steuerwerk: Erzeugt das LD-Signal zu den passenden Zeitpunkten.
- Datenbus: Separater Bus für den Datentransfer zum/vom Speicher.
- Tri-State-Puffer: Wird verwendet, um verschiedene Adressquellen auf die MAR-Eingänge zu schalten.