Forum: Mikrocontroller und Digitale Elektronik Verständnis Adressdecoder


von Malvia R. (dax25)



Lesenswert?

Hallo alle zusammen .
Ich verstehe gerade nur eine Sache bei der Musterlösung nicht was ich 
gerade nicht verstehe.

Warum geht Ram 1 bis 07FF h ?

Ich hoffe jemand kennt sich mit so schwierigen Aufgaben hier aus

von DümmsteNussAmBaum (Gast)


Lesenswert?

Malvia R. schrieb:

> Warum geht Ram 1 bis 07FF h ?

weil sein Addressbus 11 bit breit ist.

von Reiner Gast (Gast)


Lesenswert?

Guck mal welche Voraussetzung gegeben ist, und was in der anderen 
Tabelle dazu steht....

Dann mal drüber nachdenken, wo der Unterschied zwischen Größe und Index 
einer Speicherzelle ist....

... Und schon wird es klarer

von Theor (Gast)


Lesenswert?

Malvia R. schrieb:
> Hallo alle zusammen .
> Ich verstehe gerade nur eine Sache bei der Musterlösung nicht was ich
> gerade nicht verstehe.
>
> Warum geht Ram 1 bis 07FF h ?
>
> Ich hoffe jemand kennt sich mit so schwierigen Aufgaben hier aus

Ja. Sieht schwierig aus. Ist aber zu meistern.

Versuche einfach mal die Hexdezimalzahl 07FF in eine Dezimalzahl 
umzurechnen. Ich vermute stark, dass Dir dazu was auffällt.

von Joachim B. (jar)


Lesenswert?

Theor schrieb:
> Versuche einfach mal die Hexdezimalzahl 07FF in eine Dezimalzahl
> umzurechnen.

nicht eher 0800? Das Ram geht schliesslich ab 0 also ist die Weite 7FF 
+1

und ist dezimal wieviel Byte und wieviel 2^n wäre das?

von Wolfgang (Gast)


Lesenswert?

Joachim B. schrieb:
> Das Ram geht schliesslich ab 0 also ist die Weite 7FF +1

Was auch immer die Weite in diesem Zusammenhang ist - gefragt war, warum 
bei 11 Adressbits die höchste Adresse 0x07FF ist

von H.Joachim S. (crazyhorse)


Lesenswert?

Hm, naja - das entscheidende hier ist nicht die Anzahl der 
Adressleitungen des RAM  (das könnten auch mehr sein, dann würde nur ein 
Teil nutzbar sein oder auch weniger, dann wäre der verfügbare 
Adressbereich 2 bis x-mal gespiegelt), sondern die Dekodierung A11-A15, 
im Bildchen rot. Nur, wenn alle diese Adressleitungen 0 sind, wird RAM1 
angesprochen. Und das sind in dem Fall eben alle Adressen von 0..0x7FF.

von Malvia R. (dax25)


Lesenswert?

07FF = 2047

800h = 2048

Aber ich verstehe es ehrlich gesagt trotzdem nicht warum Ram1 bis 07FF
und das zweite ram dann bei 800 beginnen soll?
Warum läuft den das zweite Ram eine kürzere Zeit lang ?
Wie soll ich darauf kommen ?

von DümmsteNussAmBaum (Gast)


Lesenswert?

Malvia R. schrieb:
> 07FF = 2047
>
> 800h = 2048
>
> Aber ich verstehe es ehrlich gesagt trotzdem nicht warum Ram1 bis 07FF
weil 11bits addresse und 2**11 - 1 = 0x7FF
> und das zweite ram dann bei 800 beginnen soll?
> Warum läuft den das zweite Ram eine kürzere Zeit lang ?

Nein der RAM2 läuft nicht kürzer.
Genaugenommen beginnt es auch bei 0x000 (hat den selben Adressbus) nur 
eben das CS wird aus A12 generiert.

von DümmsteNussAmBaum (Gast)


Lesenswert?

DümmsteNussAmBaum schrieb:

> eben das CS wird aus A12 generiert.

Korrektur:
das CS wird aus dem 12. Addressbit, also A11 generiert.

von zitter_ned_aso (Gast)


Lesenswert?

Malvia R. schrieb:
> Warum läuft den das zweite Ram eine kürzere Zeit lang ?

Wie meinst du das?

2048 bis 4095 (0xFFF).

4095-2048= 2047 Adressen

beim ersten Ram:

von 0 bis 2047 (0x7FF).

2047 und 2047. Bei beiden Rams.

von zitter_ned_aso (Gast)


Lesenswert?

Mal eine andere Frage:

Warum steht in der Tabelle z.B.:

512 bytes -> 9 Bits werden benötigt für die Adressierung. (gleich die 
erste Zeile in der Tabelle).

Wollen die jedes Bit einzeln adressieren? Und nicht die Bytes?

Ich dachte so:

512/8=64 Speicherblöcke. Und 2^6=64. Also 6 Bits.

von Theor (Gast)


Lesenswert?

Malvia R. schrieb:
> 07FF = 2047
>
> 800h = 2048
>
> Aber ich verstehe es ehrlich gesagt trotzdem nicht warum Ram1 bis 07FF

Naja. Findest Du es nicht auffällig, dass das RAM 2kByte Speicherstellen 
hat, also 2048 Bytes enthält und seine Adressen von 0 bix 2047 gehen? 
Gibt es da nicht vielleicht einen Zusammenhang? Was meinst Du?

> und das zweite ram dann bei 800 beginnen soll?
> Warum läuft den das zweite Ram eine kürzere Zeit lang ?
Vielleicht hat sich diese Frage nun erledigt. Aber falls nicht, wäre 
vielleicht besser, Du versuchst die Frage anders zu formulieren. Und 
zwar ohne das Wort "Zeit". Zeit spielt hier überhaupt keine Rolle. Nimm 
ein Wort dafür, dass Dir besser geeignet erscheint. Mal zu erklären.

Vielleicht hilft es Dir weiter, wenn Du erstmal nur die 
Hexadezimalzahlen in Dezimal umrechnest und in eine Kopie der Tabelle 
einträgst.


Vielleicht versuche ich hier auch etwas, was Dir nicht hilft. Dann muss 
ich es sein lassen oder was ganz Anderes probieren. Oder die Antworten 
der Anderen helfen.
Aber aus meiner Sicht, ist das viel einfacher, als man zuerst denkt.

von Wolfgang (Gast)


Lesenswert?

Theor schrieb:
> Vielleicht hilft es Dir weiter, wenn Du erstmal nur die Hexadezimalzahlen in 
Dezimal umrechnest und in eine Kopie der Tabelle einträgst.

Grundlegendes Verständnis für des Hexadezimalsystem bekommt man wohl 
kaum, indem man runde Hexzahlen in irgendwelche krummen Dezimalwerte 
umwandelt - eher andersrum, wenn der Autor der Tabelle die Dezimalwerte 
hin geschrieben hätte.

von DümmsteNussAmBaum (Gast)


Lesenswert?

Wolfgang schrieb:

> Grundlegendes Verständnis für des Hexadezimalsystem bekommt man wohl
> kaum, indem man runde Hexzahlen in irgendwelche krummen Dezimalwerte
> umwandelt - eher andersrum, wenn der Autor der Tabelle die Dezimalwerte
> hin geschrieben hätte.

Spiel doch einfach mal mit nem Taschenrechner rum, der Dezimal, Binär 
und Hex kann. So wie der Windows Inklusive Rechner "calculator"
https://de.l3xa.com/calculator-windows-7-windows-8-tool

Alternativ kannst ja mal den Addressdecoder an einem alten Homecomputer 
wie dem Apple II anschauen:
https://mirrors.apple2.org.za/Apple%20II%20Documentation%20Project/Books/W.%20Gayler%20-%20The%20Apple%20II%20Circuit%20Description.pdf

von Wolfgang (Gast)


Lesenswert?

DümmsteNussAmBaum schrieb:
> Spiel doch einfach mal mit nem Taschenrechner rum …

Und dann?
Welchen Erkenntnisgewinn versprichst du dir davon?
Diese runden Werte lassen sich doch nun wirklich im Kopf rechnen. Früher 
(tm) hat man noch gelernt, damit ohne eine spezielle App umzugehen.

Ansonsten empfehle ich dir RealCalc

von Joachim B. (jar)


Lesenswert?

Wolfgang schrieb:
> DümmsteNussAmBaum schrieb:
>> Spiel doch einfach mal mit nem Taschenrechner rum …
>
> Und dann?
> Welchen Erkenntnisgewinn versprichst du dir davon?

man würde eventuell die verschiedenen Zahlensysteme begreifen?

Wer selber nie Adressdecoder handverdrahtet hat hats eben schwer.
Die Generation Smartphone tut sich ja auch schwer mit geschlossene 
Stromkreise, die Alten(TM) die noch elektrische Eisenbahnen oder Carrera 
verkabelt haben wissen das es mindestens 2 Drähte braucht.

von Sem52 (Gast)


Lesenswert?

Bin ich der einzige der nicht versteht wie das Ende der adresstabelle 
funktioniert?

Flash high und Low beides 1?


Herr Lehrer, ihre Aufgabenstellung ist falsch..

von Sem52 (Gast)


Lesenswert?

Sem52 schrieb:
> Bin ich der einzige der nicht versteht wie das Ende der
> adresstabelle funktioniert?
>
> Flash high und Low beides 1?
>
> Herr Lehrer, ihre Aufgabenstellung ist falsch..

Namentlich bei a15. Oder ist das rote die Lösung?

von Mathias (Gast)


Lesenswert?

zitter_ned_aso schrieb:
> Mal eine andere Frage:
>
> Warum steht in der Tabelle z.B.:
>
> 512 bytes -> 9 Bits werden benötigt für die Adressierung. (gleich die
> erste Zeile in der Tabelle).
>
> Wollen die jedes Bit einzeln adressieren? Und nicht die Bytes?
>
> Ich dachte so:
>
> 512/8=64 Speicherblöcke. Und 2^6=64. Also 6 Bits.

512 bytes wollen einzeln addressiert werden. 2^9=512. Also braucht man 
9 Bits.

@Malvia
Ist schon nicht klar, warum man zwei Ram Blöcke braucht? Die 
Adressierung läuft doch normal fort. Rechne mal 0xFFF-0x800. Beide 
Blöcke sind gleich lang.

von Yalu X. (yalu) (Moderator)


Lesenswert?

Sem52 schrieb:
> Bin ich der einzige der nicht versteht wie das Ende der adresstabelle
> funktioniert?

Möglicherweise.

> Flash high und Low beides 1?

Ja, warum nicht? Die Flash-ICs sind nur 4 Bit breit und werden deswegen
immer gleichzeitig aktiviert, um auf die geforderte Breite von 8 Bit zu
kommen.

PS: Anzumerken wäre noch, dass von den Flashs nur jeweils die Hälfte der
32kB genutzt wird, es sei denn, das B in 32kB steht hier ausnahmsweise
für ein 4-Bit-Byte.

: Bearbeitet durch Moderator
von HildeK (Gast)


Lesenswert?

DümmsteNussAmBaum schrieb:
> Korrektur:
> das CS wird aus dem 12. Addressbit, also A11 generiert.

Nein, es muss dann aktiv sein, wenn A15...A11 = 0b00001 ist. Sonst wird 
das RAM auch angesprochen, wenn ROM oder Flash in einem bestimmten 
Adressbereich genutzt wird.
So ist es auch bei allen anderen Bereichen: alle rot gekennzeichneten 
Bits müssen verknüpft werden (= Adressdecoder), um das jeweilige CS zu 
generieren.

von Axel S. (a-za-z0-9)


Lesenswert?

Yalu X. schrieb:

> Anzumerken wäre noch, dass von den Flashs nur jeweils die Hälfte der
> 32kB genutzt wird, es sei denn, das B in 32kB steht hier ausnahmsweise
> für ein 4-Bit-Byte.

Das "KB" in der Aufgabenstellung ist offensichtlich falsch. Korrekt wäre 
"K-Worte" - die Wortbreite ist ja zusätzlich angegeben.

Auch in der Tabelle steht falsch "L-Byte" bzw. "H-Byte". Korrekt wäre 
"L-Nibble" und "H-Nibble" [1]. Oder neutraler "L-Wort" und "H-Wort".


[1] für die Hardware-Leute ist ein Byte immer 8 Bit breit. Und ein 
Nibble bezeichnet ein Wort mit 4 Bit Breite. Mittlerweile muß man 
zumindest den Begriff "Nibble" wohl als historisch einstufen.

von Joachim B. (jar)


Lesenswert?

HildeK schrieb:
> DümmsteNussAmBaum schrieb:
>> Korrektur:
>> das CS wird aus dem 12. Addressbit, also A11 generiert.
>
> Nein, es muss dann aktiv sein, wenn A15...A11 = 0b00001 ist. Sonst wird
> das RAM auch angesprochen, wenn ROM oder Flash in einem bestimmten
> Adressbereich genutzt wird.
> So ist es auch bei allen anderen Bereichen: alle rot gekennzeichneten
> Bits müssen verknüpft werden (= Adressdecoder), um das jeweilige CS zu
> generieren.

stimmt, früher nahm man 139er und 138er Dekoder zusammen.
erst den 139er 74139 bis 74HC139 für die oberen Adressen, mit dem 
Ergebnis ging man aufs !Enable der 138er optimal so das alle 2K SRAM ein 
Enable !CS bekamen.

passt wunderbar:
64K Adressraum mit dem 139er (4 Ausgänge) in 4 Blöcke a 16K aufgeteilt,
der oder die 138er (8 Ausgänge) wiederum die 16K Blöcke in 8x 2K 
aufgeteilt.

ist das lange her, so wurde es eigentlich seit den ersten CBM/PET über 
apple bis PC1500 gemacht.

von HildeK (Gast)


Lesenswert?

Joachim B. schrieb:
> ist das lange her,

Ja :-).
Deshalb weiß es auch kaum noch einer in Zeiten von MMUs.

Letztlich reichen ODER-Verknüpfungen mit Invertern an den 
Adressleitungen, die '1' sein müssen, um das passende 'CS' zu erzeugen.

von fop (Gast)


Lesenswert?

Stumpfes Adressleitungen zählen stößt ja schon an Grenzen, wenn Signale 
wie ALE, RAS oder CAS auf dem Bus rumwuseln.
Nibble sind nocht nicht in Rente, sondern dank SENT-Protokoll immer noch 
im Rennen.

Und dann war da noch der Witz vom Informatiker am Bahnsteig, der vor 
sich hin murmelt und schimpft : "Null, eins, zwei... Mist ! Wo ist mein 
vierter Koffer ?"

Also Speicherbausteine mit n adressierbaren Plätzen haben meist Adressen 
von 0 bis n-1.
Oder anders ausgedrückt, wenn ich was durchnummeriere, komme ich auf die 
Anzahl der numerierten Teile, in dem ich letzte Nummer +1 - erste Nummer 
rechne.

Und in Hexadezimal ist 800 die Hälfte von 1000.

von Dietrich L. (dietrichl)


Lesenswert?

zitter_ned_aso schrieb:
> 2048 bis 4095 (0xFFF).
>
> 4095-2048= 2047 Adressen
>
> beim ersten Ram:
>
> von 0 bis 2047 (0x7FF).
>
> 2047 und 2047. Bei beiden Rams.

Naja, da musst du die erste Adresse aber noch hinzuzählen. Dann kommen 
für beide RAMs 2048 Adressen heraus.

von Sem52 (Gast)


Lesenswert?

Yalu X. schrieb:
> Sem52 schrieb:
> Bin ich der einzige der nicht versteht wie das Ende der adresstabelle
> funktioniert?
>
> Möglicherweise.
>
> Flash high und Low beides 1?
>
> Ja, warum nicht? Die Flash-ICs sind nur 4 Bit breit und werden deswegen
> immer gleichzeitig aktiviert, um auf die geforderte Breite von 8 Bit zu
> kommen.
>
> PS: Anzumerken wäre noch, dass von den Flashs nur jeweils die Hälfte der
> 32kB genutzt wird, es sei denn, das B in 32kB steht hier ausnahmsweise
> für ein 4-Bit-Byte.

Ach, natürlich. Wie naheliegend.

Danke dafür, ymmd.
(Yalu made my day)

von Malvia R. (dax25)


Lesenswert?

Gibt es einen Weg rechnerisch auf das 0x7ff zu kommen ?

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Malvia R. schrieb:
> Gibt es einen Weg rechnerisch auf das 0x7ff zu kommen ?
1
$ python
2
Python 3.5.2 (default, Nov 12 2018, 13:43:14) 
3
[GCC 5.4.0 20160609] on linux
4
Type "help", "copyright", "credits" or "license" for more information.
5
>>> "{0:x}".format(2048-1)
6
'7ff'

von zitter_ned_aso (Gast)


Lesenswert?

1 Kilobyte = 1024 Bytes
2 Kilobytes = 1024+1024 = 2048 Bytes


die Ram-Größe von 2 Kilobytes ist vorgegeben (lau Aufgabenstellung)

du hast also 2048 Bytes, die du durchnummerieren musst. Das ist quasi 
wie mit Regalen in einem Schrank: 2048 Regalen sind vornanden.

Das erste Regal bekommt die Nummer 0, das Zweite - 1, das Dritte - 2, 
usw..

Also brauchts du 2048 Ziffern. (von 0 bis 2047)

Und 2047 dezimal ist 0x7FF hexadezimal.

von GEKU (Gast)


Lesenswert?

Malvia R. schrieb:
> Gibt es einen Weg rechnerisch auf das 0x7ff zu kommen ?

Umgekehrt:

Da es nur ganze Adressleitungen gibt muss von 10,999 auf 11 
aufgerundet werden!

von GEKU (Gast)


Lesenswert?

GEKU schrieb:
> ld(11)

ist der Logarithmus mit der Basis 2 von 11 !

Wird auch manchmal
 geschrieben.

von zitter_ned_aso (Gast)


Lesenswert?

GEKU schrieb:
> ist der Logarithmus mit der Basis 2 von 11 !



von 2048. du hast dich vertippt.


log2(2048)=11


11 bits werden benötigt um 2048 Zahlen (Adressen) binär zu kodieren.

von Malvia R. (dax25)


Lesenswert?

hoch 11 weil der Speicherraum von A0 -A10 geht ?
Kann man sich das auch so erklären ?
Aber bin jetzt ein wenig schlauer geworden durch eure Erklärungen :)

von Wolfgang (Gast)


Lesenswert?

Sem52 schrieb:
> Flash high und Low beides 1?
>
> Herr Lehrer, ihre Aufgabenstellung ist falsch..

Herr Sem52,
sie sollten die Aufgabenstellung auch lesen und sich nicht durch die 
falsche Bezeichnung verunsichern lassen.
Der Flash-Speicher hat eine Breite von 4 Bit.

Das Einzige, was falsch ist, sind die Bezeichnungen "L-Byte" und 
"H-Byte". Richtig muss es wohl heißen "L-Nibble" und "H-Nibble".

von Wolfgang (Gast)


Lesenswert?

Malvia R. schrieb:
> Gibt es einen Weg rechnerisch auf das 0x7ff zu kommen ?

Ja, z.B.
1
2^11 - 1 = 0x800 - 1 = 0x7ff

von Wolfgang (Gast)


Lesenswert?

GEKU schrieb:
> Da es nur ganze Adressleitungen gibt muss von 10,999 auf 11
> aufgerundet werden!

Du hast vergessen, dass die Speicherstelle mit der Adressse 0 auch mit 
zählt. Damit sind es 0x7FF+1 Speicherstellen für die genau eine 11-Bit 
Adressierung erforderlich ist.

von GEKU (Gast)


Lesenswert?

zitter_ned_aso schrieb:
> von 2048. du hast dich vertippt.
Danke, so ist es.

von GEKU (Gast)


Lesenswert?

Wolfgang schrieb:
> Du hast vergessen, dass die Speicherstelle mit der Adressse 0 auch mit
> zählt. Damit sind es 0x7FF+1 Speicherstellen für die genau eine 11-Bit
> Adressierung erforderlich ist.

Genau so ist es!

Man muss von 0x800 und nicht von 0x7ff ausgehen.

von Axel S. (a-za-z0-9)


Lesenswert?

Malvia R. schrieb:
> hoch 11 weil der Speicherraum von A0 -A10 geht ?
> Kann man sich das auch so erklären ?

Wirklich? Dafür brauchst du eine Erklärung?

Wenn du K Leitungen hast, die jeweils 2 verschiedene Zustände haben 
können, dann kannst du damit insgesamt 2^K Kombinationen darstellen. Das 
ist einfach durch Induktion zu sehen: mit einer solchen Leitung sind es 
definitionsgemäß zwei Zustände. Mit jeder weiteren Leitung verdoppelt 
sich die Anzahl der Zustände. Es kommt ein Faktor von 2 dazu. Respektive 
der Exponent der 2 erhöht sich um 1 für die neue Leitung. Mit K 
Leitungen ist der Exponent gerade gleich K.

Wenn du N Dinge hast und die beginnend mit 0 durchnumerierst, dann 
brauchst du dazu die Nummern von 0 bis N-1. Das ist einfach eine 
Verschiebung der "natürlichen" Numerierung von 1 .. N um eine Position 
nach links.

Jetzt setzt du ein: N = 2^K. Folge: mit K Adressbits kannst du Adressen 
von 0 bis 2^K-1 darstellen.

K=11 → N=2^11=2048=0x800 → Intervall [0..2047]=[0x000..0x7FF]

Dazu brauchtest du Hilfe? Ehrlich?

: Bearbeitet durch User
von Malvia R. (dax25)


Lesenswert?

Danke

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.