Was ist eine Registermap bei Mikroelektronik Bauteilen?

1 Antwort

Ein Bauteil habe mehrere interne Register, die ihm die Arbeit erleichtern. Beispiel: Konfiguration von Samplerate und Bittiefe eines ADC/DAC.

Ich könnte jetzt natürlich hingehen und alle Register mit Leitungen nach außen legen, was aber natürlich unnötig viele Pins bedeutet.

Von daher gehe ich hin und lege Pisn nach außen, mit denen ich angeben kann: Lesen/schreiben+Registernummer, bei 16 Registern reichen mir dann also 5 Pins inklusive read/write.

Dazu kommen die Datenleitungen, für den Registerinhalt.

Menschen sind nur so mittelprächtig was Zahlen betrifft, also gibt es einen Plan, der dokumentiert, welche Registernummer wofür ist.

Die Informationen kann ich dann je nachdem auch nutzen, um mir beim Programmieren symbolische Konstanten zu definieren, wenn ich die Registernummern dort brauche.

verreisterNutzer  22.07.2023, 23:13

Vielen Dank für deine klare und verständliche Antwort! Das Grundprinzip habe ich damit verstanden. Das ist ja Wahnsinn, dass alles in der registermap dokumentiert ist, was das Bauteil so 'kann'. Ich hatte vorher nur Sketche zusammenkopiert und diese nur rudimentär verstanden. Wenn ich in die Registermaß schaue, verstehe ich, wie die Programmierer auf die Befehle kommen.

Zwei Absätze habe ich leider noch nicht verstanden, vermutlich weil man dafür besser verstehen muss, was die Adresse im Hexadezimalcode genau bedeutet. Es sind folgende Absätze:

"Von daher gehe ich hin und lege Pins nach außen, mit denen ich angeben kann: Lesen/schreiben+Registernummer, bei 16 Registern reichen mir dann also 5 Pins inklusive read/write.

Dazu kommen die Datenleitungen, für den Registerinhalt."

In der Registermap, die ich momentan durchforste steht z. B.

REGISTERNAME: SELF_TEST_X
ADR HEX: 0D
ADR DEZ: 13
Dann stehen dort noch in einer Reihe: Bit7, Bit6, Bit5, Bit4, Bit3, Bit2, Bit1, Bit0. Unter Bit7, Bit6 und Bit5 steht gemeinsam XA_TEST[4-2]. Unter Bit4,Bit3,Bit2,Bit1 und Bit0 steht gemeinsam XG_TEST[4-0].

Kannst du mir sagen, was 0D bedeutet und an welche Pins dieser Befehl gesendet wird bzw. wie man das näher ergründen kann? Weiterhin ist mir nicht ganz klar, wieso verschiedene Bits in der registermap zusammengefasst werden. Wo befinden sich diese Bits? Sind das die Pins des Boards? (Das Board hat 6 analoge Ein/Ausgänge und 13 digitale Ein-/Ausgänge, von daher ergibt das vermutlich keinen Sinn).

Es würde mich freuen, wenn du mir noch etwas Licht ins Dunkel bringen könntest. Dass man die in der registermap angegebenen Hex Adresse zum Programmieren verwenden kann, konnte ich auch anhand des codes nachvollziehen. Allerdings stand dann im Code nicht nur 0D (aus dem obigen Beispiel), sondern z. B. 0x0D, also immer ein "Null mal" vor der Hex Adresse. Was soll dieses "0x"?

Ich hoffe, die Fragen sind nicht zu viel. Wenn jemand einen Link hat, wo man das gezielt nachlesen kann, würde ich mich auch freuen.

0
KarlRanseierIII  23.07.2023, 00:10
@verreisterNutzer

Ich arbeite mal aus der Mitte heraus:

0D ist eine Hexzahl, in dezimal entspricht das der 13, das steht freundlicherweise mit dabei, aber zur Erinnerung A=10, ... F=15.

Du kannst also entnehmen, daß Register 13 (aka 0D hex) den Name SELF_TEST_X entspricht. Genauere Informationen wofür das Register zuständig ist, wirst Du dann in den vollständigen Doku finden.

Ein Register ist im Prinzip ein Speicher, das kann 8 Bit sein, aber auch 16 Bit, oder ....

Es gibt typische 'Flagregister', wo also jedes Bit einzeln einen von 2 Zuständen beschreibt, Das könnte bei einer ADC zum Beispiel zwischen 8 Bit und 16 Bit umschalten. Dann wieder kodieren Bitgruppen bestimmte Dinge, wieder am Beispiel, ich kann mit 3 Bits 8 verschiedene Zustände kodieren, das könnten z.B. 8 verschiedene Sampleraten sein. In dem Fall würde man dann den Bitblock in der Map markieren, und darunter eine Tabelle für die Sampleraten packen.

Ich spreche hier hypothetisch, da ich gerade nichts zur Hand habe, um das an einem konkreteren Beispiel zu machen.

0x ist ein gängiger Prefix, der eine Hexadezimalzahl einleitet, das hat sich so eingebürgert und ist Notwendig, damit z.B. Compiler leicht erkennen, welches Zahlensystem bei der Angabe der Konstante genutzt wurde.

12 (dezimal), 012 (12 im Oktalsystem), 0x12 (12 hexadezimal)

Die Verbreitung von hexadezimal rührt daher, daß ich 8 Bits mit 2 Hexstellen darstellen kann, wobei jede Hexstelle 4 Bits entspricht. Hier solltest Du Dich einlesen, wenn Du hardwarenah arbeiten willst.

------

Nochmal zurück zum anderen - Wenn mein Chip viele Register hat, sagen wir mal 512 Stück, dann wäre es ja blöd, wenn ich für jedes einzelne Register die Datenleitungen nach außen lege - das sollte einleuchten, weil das dann 8*512=4096 Leitungen wären. Was mache ich also:

Ich könnte mir überlegen eine Schnittstelle zu machen, bei der man dem Chip sagt: Ich möchte aus Register 207 lesen. Würde ich das genau so als eine Art Protokoll implementieren, dann bräuchte ich dafür ne Menge Logik innerhalb des Chips.

Also was mache ich stattdessen?

Naja, ich nummeriere die Register und habe eine Art (elektronischen) Wahlschalter, dem ich die Registernummer gebe und der mir dann die Ausgänge mit dem Register verbindet. Ich brauche also für die 8 Bits des Registers Verbindung nach außen, ich brauche Verbindungen nach außen, mit denen ich den Wählschalter steuere, also die Registernummer angeben kann. Bei 512 Registern brauche ich dafür 9 Bits, denn die können 512 Kombinationen darstellen.

Und siehe da, ich kann auf jedes Register zugreifen, indem ich nur noch einmal Datenleitungen nach außen brauche und dazu 9 Leitungen um das Register über die Nummer (und den Schalter) auszuwählen.

Das war nur exemplarisch, es gibt da auch diverse Ansätze, ich wollte es allerdings tendenziell einfach halten.

1