Forum: Mikrocontroller und Digitale Elektronik Warum haben Register im uC Adressen?


von puff (Gast)


Lesenswert?

Hi,

soweit ich weiß, Register bestehen aus FlipFlops und Speicher bestehen
aus Flash oder SRAM, also physikalisch verschieden, aber viele Register
im uC haben Adressen, warum?

Viele Grüße
Puff

von Alex (Gast)


Lesenswert?

Wie würdest du an Stelle des Mikrocontrollers zwischen deinen Registern
unterscheiden wollen wenn nicht über Adressen?

Ein SRAM besteht typischerweise aus Flip-Flops!

von Harry (Gast)


Lesenswert?

na da bin ich mal auf die Antworten gespannt.

Gegenfrage:
Was ist für Dich der Unterschied, ob ich nun 3 Register
RegX, RegY, RegZ nenne
oder
0x00, 0x01, 0x02 ?

von hebel23 (Gast)


Lesenswert?

... und wie willst Du z.B. mit einem 8-Bit BUS die Worte RegX, RegY oder
RegZ codieren?
Da ist nunmal eine Adresse in Form einer 8-Bit-Zahl die einzig
sinnvolle Lösung!

Andreas

von tom-muc (Gast)


Lesenswert?

Hi,

> ... und wie willst Du z.B. mit einem 8-Bit BUS die Worte RegX, RegY
> oder RegZ codieren?
> Da ist nunmal eine Adresse in Form einer 8-Bit-Zahl die einzig
> sinnvolle Lösung!

Ganz einfach: bei diesen Register-Namen (!), die Du idR. in
Assemblerbefehlen nutzt, wird die Adresszuweisung im Microcode der CPU
vorgenommen. Abhängig von der CPU-Architektur haben die Register idR.
jedoch direkten Zugang zum internen Datenbus. Was liegt also näher, als
den Registern (die durchaus auch mal mehr als nur eine Handvoll sein
können - dann gehen Dir die Namen aus!) gleich auch(!) Adressen
zuzuordnen. Das hat sogar den Vorteil, ev. einen schnellen
Speicher-Speicher-Transfer nutzen zu können. (z.B. DMA) Die
Registernamen für bei speziellen Operationen (ACU etc.) genutzten
Registern hast Du trotzdem.

cu Tom

von Rolf Magnus (Gast)


Lesenswert?

Es ist praktisch, die Register auf die gleiche Weise wie Speicher
ansprechen zu können, da die Controller oft nur sehr wenig Speicher
haben. Manche haben sogar überhaupt keinen. Da hätte man schon das
Problem, daß man auf den Stack verzichten müßte, wenn die Register
nicht wie Speicher adressierbar wären.

von A.K. (Gast)


Lesenswert?

Mag auch für's Debugging nützlich sein, wenn alle Register per Adresse
erreichbar sind ist JTAG/DebugWire einfacher zu realisieren.

von Peter Dannegger (Gast)


Lesenswert?

"Register bestehen aus FlipFlops und Speicher bestehen
aus Flash oder SRAM, also physikalisch verschieden"


Wer sagt denn sowas, alles drei sind FFs, also funktional gleich.
SRAM und Register sind auch physikalisch gleich.

Ein Unterschied ist, Register haben die meisten Adressierungsarten,
Flash die wenigsten.

Und nicht alle Architekturen mappen die Register mit in den SRAM, z.B.
die ARM machen das nicht. Will dort ein Interrupt die Register des
Hauptprogramms auslesen, geht das nur extrem umständlich.


Peter

von Marcel (Gast)


Lesenswert?

@Peter
"Wer sagt denn sowas, alles drei sind FFs, also funktional gleich"

Also das versteh ich nicht, bitte korrigiere mich, wenn ich da
falsch liege:

FLASH besteht aus MOSFET-Transistoren mit isoliertem Gate,
speichert prinzipiell 1 bit pro Transistor per Gate-Ladung

SRAM: über Kreuz gekoppelte MOSFET-Transistoren, (z.B.
4 Stück für 1 bit), sog Flip-Flops

Wo ist beim FLASH das Flip-Flop ???

von Peter Dannegger (Gast)


Lesenswert?

Ein FF ist ein Gebilde, welches 2 unterschiedliche Zustände annehmen und
speichern kann.

Ob das nun mit Transistoren, Röhren, Relais oder Kondensatoren
aufgebaut ist, spielt funktional gesehen keine Rolle.


Z.B. im original 8051 wurden einige Register als DRAM (= Kondensator)
aufgebaut. Deshalb durfte die minimale Taktfrequenz nicht unter 3,5MHz
liegen, sonst wurden die DRAM-Zellen vergeßlich.


Peter

von A.K. (Gast)


Lesenswert?

"Ein FF ist ein Gebilde, welches 2 unterschiedliche Zustände annehmen
und speichern kann."

Wie nennst Du Flash-Memory, in dem pro Floating-Gate-Transistor mehrere
Bits gespeichert werden? Und Ringkernspeicher besteht auch aus
Flipflops?

Nein, so kann man das nicht definieren.

von puff (Gast)


Lesenswert?

Lass uns zurück zum Thema. Werden die Inhalte der Register auf RAM
kopiert oder sind solche Register selber adressierbar?

Gruss
Puff

von Martin S. (Gast)


Lesenswert?

@puff

Die Unterscheidung ist weniger wichtig, ob Bits in Ringkernen,
Magnetblasendomänen, in optischen Beugungsgittern oder in Form von
irgendwelchen Halbleiterzellen beliebigster Bauart aufbewahrt werden.
Wichtig ist die Zugriffsgeschwindigkeit, die Adressierbarkeit und die
Frage, ob oder wie die Daten veränderbar sind oder sein sollen.

wenn du es nicht nur auf uC beziehst:

Viele (alle?) CPU, uC etc. haben Sprungvektor-Tabellen an definierter
Adresse im Hauptspeicher abgelegt. In die gleiche Richtung gehen
Stapelzeiger (Stackpointer), welche "intern" im Prozessor benötigt
werden, aber "extern" (im Hauptspeicher) zumindest als Duplikat
abgelegt werden, möglicherweise auch nur die einzige Stelel im
Rechnergefüge sind, wo diese Informationen gespeichert sind.

die ST20 Prozessor-Serie hat ihren (internen) Register- und Portbereich
auf den "normalen" Hauptspeicher-Adressbereich gemappt.

(Bestimmte? Alle?) Sparc-Prozessoren haben eine
"Ring-Register-Struktur", welche im Hauptspeicher abgelegt wird:
Beispiel: x interne Register, y Registersets. Ein Ringpufferzeiger
verweist auf den aktuellen Registersatz. Ein Lade-Automatismus
verdrängt dan zum Kontext-Wechsel-Zeitpunkt die momentan im Prozessor
befindlichen Register des Registersets n in den Hauptspeicher, und holt
sich aus dem Hauptspeicher die Register des Registersets n+1

von Kurt (Gast)


Lesenswert?

Adressen sind ja doch nur die Hausnummern.
Ohne Bezeichnung (egal welcher Art) würde man sie ja nicht finden
(benutzen) können.

Dabei ist es doch gleich, welcher Art (die Speicher) sie sind.
Die Art ist ja nur für die Verwendung wichtig (Ram Rom ...)

Oder seh ich das falsch?

Kurt

von Martin S. (Gast)


Lesenswert?

Ich glaube euer (puff, Kurt) grundsätzliches Problem besteht darin, daß
ihr "einen zu großen" Zusammenhang seht zwischen Verwendungszweck
einer digitalen Speicherzelle und der Architektur, wo und wie deise
Spricherstelle angesprochen wird.

Wie ich schon sagte: Grundsätzlich ist es erstmal schnurz, welche
Technologie welche Speicherzelle benutzt ("Speicherzelle" als
Platzhalter für ein Objekt zur Speicherung digitaler Informationen wo
auch immer plaziert). Wichtig ist, wie schnell diese Technologie ist,
und ob die Speicherzelle nur-lesbar, manchmal beschreibbar oder
"immer" beschreibbar sein soll.

Fakt ist, daß Dinge "sehr nah im Prozessor" schneller verarbeitet
werden, und Zeugs im Hauptspeicher halt langsamer, und Zeugs auf einem
"externen" Speichermodul wei eienr Festplatte halt noch langsamer
(1:10:100). Und das was am häufgsten benutzt wird, ist halt mehr drin
im Prozessor.

Architekturen wie die vom Sparc-Prozessor erlauben einen schnellen
Context- (=Prozessor-Task) -Wechsel, und deshalb hat sich deise
Design-Idee halt gut bewährt bei Aufgaben, die des verlangen (z.B. bei
einem Multitasking-Betriebssystem wie Unix)

von A.K. (Gast)


Lesenswert?

Letzthin hatte im Forum mal jemand einen Weg gesucht, ein Array/String
oder sowas in der Art in Register zu kopieren. Explizit mit einzelnen
Moves/Loads fand er bei zig Registers etwas zu blöd und suchte einen
anderen Weg. Sind die Register als Speicher adressierbar, dann wird's
einfach.

Seinen Ursprung mag das in jenen Rechnern früherer Zeitalter haben (bis
in die 70er zu finden), die man in der Einfachheit halber mit
Einzelbitschaltern urgeladen hat, und mit selbigen Schaltern und
Anzeigelämpchen auch Fehler suchen durfte. An Speicherworte kam man so
problemlos ran, an Registerinhalte nicht.

von meyer (Gast)


Lesenswert?

@ Peter
-- Und nicht alle Architekturen mappen die Register mit in den SRAM,
-- z.B. die ARM machen das nicht.

Register mit der ARM-Architektur haben doch Adressen, zuminstest bei
meinem LPC2114.
z.B. PINSEL0 = 0xE002C000

Gruss
Puff

von Matthias (Gast)


Lesenswert?

Hi

die Frage bezog sich auf CPU-Register. Das was beim ARM im Speicher
liegt sind irgendwelche Memory-Mapped Peripheriregister.

Matthias

von Unbekannter (Gast)


Lesenswert?

Der interne SRAM und die Register sind wohl bei praktisch fast allen
Mikrocontrollern physikalisch exakt gleich gebaut.

Der einzige Unterschied sind die Adressierungsarten. Wenn Dein Opcode
nur 16 Bits hat, und einen Move implementieren willst, verbrauchst Du
bei 16 Registern schon 8 Bit dafür. D.h. Opcode selbst und
Adressierungsart etc. müssen in den verbleibenden 8 Bits codiert
werden.

Der Ablaufsteuerung und der ALU ist's egal, ob sie für bestimmte
Funktionen nur die unteren Adressen des SRAMs verwenden kann, die der
Programmierer als Register sieht.

Die Grenzen zwischen Register und RAM sind nicht mehr so scharf, wie
bei den Prozessoren wie vor 20 Jahren.

Man denke nur mal an die ganzen Caches bei größeren Prozessoren, und
die Pipelines etc.

Die Unterscheidung "Register" und "RAM" ist mehr ein
konzeptionelles Kriterium, nicht so sehr ein physikalisches.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.