Forum: Mikrocontroller und Digitale Elektronik Vollständige Decodierung


von tom123 (Gast)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

könnte mir jemand bitte helfen das Bild zu verstehen?

Ein Decodierer allgemein ist ja ein Converter, Umsetzer etc.

Ich kenne mich da gerade nicht wirklich aus. Was heißt das A19-A16. Das 
ist warschl. der Adressbus. Aber warum gerade 16-19?

Oder vielleicht keine einer eine Seite, wo ich eventuell auch mal 
einlesen kann.

Danke im voraus!

mfg

tom123

von michael (Gast)


Lesenswert?

Wo ist das denn her? Um was geht es da?

von (prx) A. K. (prx)


Lesenswert?

tom123 schrieb:
> Ich kenne mich da gerade nicht wirklich aus. Was heißt das A19-A16. Das
> ist warschl. der Adressbus. Aber warum gerade 16-19?

Adressbus stimmt. Ist dir klar, was diese Ziffern hinter dem A bedeuten? 
Also wofür die Bezeichnung A16 steht?

: Bearbeitet durch User
von tom123 (Gast)


Lesenswert?

Jo, ich denke das ist bei A19 das 20. bit oder 19.?

Also eine Leitung. Ein Bus kann ja aus vielen "Bitleitungen" bestehen 
oder?

Naja das Thema ist: Anschluss externe Perepherie am 8051 - Vollständige 
Decodierung

von Matthias M. (matthias_m69)


Lesenswert?

Dies ist die Beschreibung mit welcher Logik Speicherbausteine an eine 
CPU angeschlossen werden sollen, damit der Speicher nachher dann auch in 
einem bestimmten Adressbereich der CPU erscheint. Die Formel kann man 
dann z.B. in ein PAL programmieren der durch mehrere Logikgatter 
nachbilden. CS heisst in diesem Fall Chip Selekt und ist das Signal, das 
letztendlich den Speicherbaustein auswählt.

Das ist alles ein recht komplexes Thema und nicht in zwei Sätzen 
abzuhandeln. Was soll's denn werden?

von Matthias M. (matthias_m69)


Lesenswert?

"Vollständige Decodierung" heisst, dass alle Adressleitungen auch zur 
Addressdekodireung beitragen, es also keine gespiegelten Adressbereiche 
gibt. Das macht man aber relativ selten, da das nur unnötig Gatter 
braucht.

von (prx) A. K. (prx)


Lesenswert?

tom123 schrieb:
> Naja das Thema ist: Anschluss externe Perepherie am 8051 - Vollständige
> Decodierung

Ein 8051 mit 20 Adressleitungen und 16 Bit Datenbus? Du bist ganz 
sicher, dass du in der richtigen Veranstaltung sitzt? Die Aufgabe 
jedenfalls passt zu 8086.

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

Das ist doch auf dem Aufgabenzettel sogar sehr gut dargestellt!

Übersetze doch einfach einmal selbst die gewünschten Adressbereiche in 
die entsprechenden Bitmuster des Adressbusses, und plötzlich wird dir 
klar, welche Bits für den Adressdecoder relevant sind.

Üblicherweise erfolgt die Numerierung von byteweisen Adressen ab A0. Bei 
Mehrbyteadressen ist sie aber nicht konsistent gelöst, aber das ist bei 
der gegebenen Aufgabenstellung irrelevant. Nur von man z.B. einen 16Bit- 
oder 32Bit- Prozessor hat, der Byteadressierung beherrscht, kann es 
sein, dass die Zählweise für externe Speicher bei A1 oder A2 beginnt. 
Bei Prozessoren (z.B. einigen Signalprozessoren), deren Bytes nicht aus 
Oktetten bestehen, bezieht sich A0 dann z.B. auf 16Bit- oder 
24Bit-Worte. Da aber die Speicherbausteine selbst immer bei A0 beginnen, 
unabhängig von ihrer individuellen Datenwortbreite, muss man also ggf. 
einen Versatz zwischen Prozessor-Adressbus und Speicher-Adressbus 
einfügen.

Bei dem auf dem Aufgabenzettel dargestellten System (8051) besteht 
jedoch eine 1:1-Zuordnung, und nur ein einfacher Adressdecoder wird 
benötigt. Wobei, wie oben schon gesagt, der 8051 eigentlich nur einen 
16-Bit-Adressbus besitzt.

: Bearbeitet durch User
von Paul Baumann (Gast)


Lesenswert?

Es gibt hier 20 Adreßleitungen (A0 bis A19)
Der Datenbus ist hier 16 Bit breit.
Jetzt wollen die Leute einen 64KByte großen Eprom an die unteren 
Datenleitungen D0-D7 und noch einen 2. an die oberen Datenleitungen
D8-D15 dranhaben, weil diese Dinger nur einen 8 Bit breiten Datenbus
haben, aber der freundliche Prozessor wohl einen 16 Bit breiten.

Diese beiden Eproms sollen nun von der Adresse 0 bis zur Adresse FFFFF
d.h. dezimal 1048575 gehen.

Nun sollen aber auch noch 2 32KByte große RAMs mit dran. Deren Daten-
leitungen werden zu den Leitungen der eben schon ansgeschlossenen
Eproms parallelgeschaltet.

Das Wichtigste ist jetzt, eine Dekoderschaltung zu bauen, damit die
CS-Leitungen (Chip-Selekt) richtig angesprochen werden, um immer den
richtigen Speicherschaltkreis (und nur den) zu treffen.

Dazu kannst Du Dir nach den Formeln oben im Bild aus einzelnen
Gattern den Dekoder bauen und brauchst extra noch 2 Inverter, um die
CS-Signale für die jweils 2. Speicherschaltkreise zu gewinnen.

MfG Paul

von tom123 (Gast)


Lesenswert?

Ahh ok schon langsam wird mir das ganze klarer.

Welchen Adressraum soll nun der Prozessor, oder was auch immer, 
ansprechen, wenn CS=1 wird? DAs ist mir nocht nicht so klar

Etwa 000000 bis 0FFFFF und 200000 bis 27FFFF ?

Und ich verstehe nicht wie die da genau auf die Formel kommen. Was soll 
die Einrahmung da? Soll das etwa ein KV-diagramm darstellen? Und was ist 
da über der Einrahmung geschrieben?

von (prx) A. K. (prx)


Lesenswert?

Es wirkt ein wenig so, als ob du die Veranstaltung, in der das 
besprochen wurde, vollständig verschnarcht hast. Denn dir scheinen die 
entsprechenden Grundlagen nahezu vollständig zu fehlen.

: Bearbeitet durch User
von tom123 (Gast)


Lesenswert?

Ja, ich war zu dieser Zeit nicht anwesend. Ich habe nur das bekommen und 
nun bitte ich hier um Hilfe, ob mir das einer erklären kann. Oder 
vielleicht ist schon irgendwo ein art "Guide" vorhanden, ich finde dazu 
nichts aufjedenfall.

Hat vielleicht doch jemand Zeit, um mir das zu erklären bitte?

von Svenska (Gast)


Lesenswert?

Ich habe einen guten Tipp: Gehe beim nächsten Mal zur Vorlesung.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Trotzdem ist da m.E. ein Fehler in der Aufgabe. Nehmen wir mal das RAM 
von 200000h bis 27FFFFh.
Das bedeutet doch, das die Adresse nicht nur 20bit breit ist, sondern 
24bit. Es wäre also richtig, in der Dekodierung in der Mitte der Tabelle 
statt A19-A16 A23-A20 zu schreiben.

von Paul Baumann (Gast)


Lesenswert?

Matze schrob:
>Das bedeutet doch, das die Adresse nicht nur 20bit breit ist, sondern
>24bit. Es wäre also richtig, in der Dekodierung in der Mitte der Tabelle
>statt A19-A16 A23-A20 zu schreiben.

Denke aber dran, daß das nur 32KByte RAM Bausteine sind. Daher kommt das
"Loch" im Adreßbereich.

MfG Paul

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Paul Baumann schrieb:
> Denke aber dran, daß das nur 32KByte RAM Bausteine sind. Daher kommt das
> "Loch" im Adreßbereich.

Ja, klar, allerdings wird z.B. der EPROM aus 64k words  im Adressraum 
000000h-0FFFFFh 16 mal wiederholt, wenn A19-A16 nicht mit ausdekodiert 
werden. Erst wenn A19-A16 auch auf 0h ausdekodiert werden, tauchts nur 
von 000000h-00FFFFh auf.
Da der RAM nur 32k*16 ist, würde der sogar 32 mal auftauchen, hier muss 
also sogar noch A15 zusätzlich dekodiert werden, wenn Spiegel nicht 
erlaubt sind.

: Bearbeitet durch User
von tom123 (Gast)


Lesenswert?

Danke Leute. Ich studiere nicht einmal. Ich gehe noch zur Schule und da 
ware ich wegen kränklichen Gründen nicht anwesend und hab halt nur ein 
paar Seiten über das bekommen. Das such ich mir doch nicht aus, ob ich 
zur Schule gehe oder nicht.

Ich wolte mir das nun heute ansehen, aber so ganz verstehe ich es halt 
nicht, darum frage ich hier.

Hat denn jemand bitte Zeit mir das zu erklären wie man auf die Formeln 
da kommt?

Muss ja nicht voll komplex seitenweise erklärt werden...

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

So kompliziert isses nicht. Lass uns erstmal den Bereich der unteren 16 
bit Adressen klären. Mit dem Bereich von 0000h bis FFFFh kannst du doch 
65536 einzelne Adressen darstellen (Hexadezimal zu Dezimal kannst du 
hoffentlich).
65536 = 64k Adressraum. Das da immer 2 Chips parallel geschaltet sind, 
um aus 2 Stck. 8 bit EPROMs oder RAMs einmal 16 bit zu machen, 
interessiert uns gar nicht.

Das EPROM belegt also erstmal A15-A0 mit seinen eigenen 
Adressanschlüssen.
Das RAM hat nur einen Adressbereich von 0000h bis 7FFFh, denn es ist nur 
32k lang, hat also Adressanschlüsse für A14-A0.
Die Aufgabe ist nun, die Adressbereiche der Chips durch die 
Adressleitungen A23-A16 (eigentlich A15 auch, wie oben erwähnt) in den 
Adressraum der CPU einzublenden.
Das soll für das EPROM dann passieren, wenn A23-A16 = 00h ist. Für das 
RAM entsprechend soll A23-A16 = 20h sein. Die Dekodierung hat nun die 
Aufgabe, die Freigabe (/CS) Anschlüsse genau dann zu aktivieren, wenn 
diese Zustände auf A23-A16 vorhanden sind.
Das verwirrende an der Aufgabe ist halt die Angabe von 24bit Adressen 
auf der linken Seite, und die nicht dazu passenden Beschriftungen der 
Adressleitungen in der Mitte der beiden Tabellen für EPROM und RAM. Da 
stimmt was nicht.

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


Lesenswert?

Matthias Sch. schrieb:
> Trotzdem ist da m.E. ein Fehler in der Aufgabe. Nehmen wir mal das RAM
> von 200000h bis 27FFFFh.

Lesen lernen! 0x20000 (4 Nullen, nicht 5)


XL

von (prx) A. K. (prx)


Lesenswert?

Matthias Sch. schrieb:
> Das EPROM belegt also erstmal A15-A0 mit seinen eigenen
> Adressanschlüssen.

Obacht - 16 Bit Datenbreite, aber EPROM nur 8 Bit breit. Somit ist A0 
vom  EPROM das A1 vom Prozessor - und A15 vom 64KB EPROM ist A16 vom 
Prozessor. Denn 64K Worte sind nicht 64K Byte. Da passt nichts zusammen.

: Bearbeitet durch User
von Uwe (Gast)


Lesenswert?

EIn 8051 mit 16Bit Datenbus ???? Zeig mal bitte Datenblatt oder sag mal 
die Bezeichnung und Hersteller ...

von (prx) A. K. (prx)


Lesenswert?

Uwe schrieb:
> EIn 8051 mit 16Bit Datenbus ???? Zeig mal bitte Datenblatt oder sag mal
> die Bezeichnung und Hersteller ...

Die 16 Bits stehen in der Aufgabe, der 8051 nicht. Das das nicht 
zusammen passt hatte ich oben auch schon aufgeführt.

: Bearbeitet durch User
von Axel S. (a-za-z0-9)


Lesenswert?

A. K. schrieb:

> Obacht - 16 Bit Datenbreite, aber EPROM nur 8 Bit breit. Somit ist A0
> vom  EPROM das A1 vom Prozessor - und A15 vom 64KB EPROM ist A16 vom
> Prozessor.

Nein, Nein, Nein

Liest denn keiner mehr die Posts auf die er antwortet? Da stand doch 
unmißverständlich, daß zwei 8-bit-breite EPROMs bzw. RAMs parallel zu 
betreiben sind, um den 16-bit Datenbus zu bilden. Damit ist auch 
implizit geklärt, daß die Adressen sich auf Worte beziehen und nicht 
auf Bytes

Die ganze Aufgabenstellung ist soweit wie nur möglich vereinfacht. Um so 
unverständlicher (bzw. erschreckender) daß der TE damit Probleme hat.


XL

von MCUA (Gast)


Lesenswert?

>Nein, Nein, Nein
Es steht nicht drin, dass bei dem 16Bit-Datenbus nicht auch (wie das 
normal üblich ist) einzelne Bytes geschrieben werden können sollen.

von Karl H. (kbuchegg)


Lesenswert?

Es steht aber in der Aufgabenstellung nichts drinnen, ob auf dem 
Adressbus nun Byte-Adressen oder Wortadressen liegen.

In dubio pro reo: Am Adressbus liegen Wortadressen, so dass die 
Adressbits direkt an die Speicherbausteine gelegt werden. Macht auch am 
meisten Sinn, wenn der Datenbus sowieso 16 Bit breit ist. Ob man jetzt 
A0 von der CPU her 'ins nichts laufen lässt' oder ob man die Adressbits 
am Bus neu durchnummeriert, ist Jacke wie Hose.

Aber darum gings ja in Wirklichkeit bei der Fragestellung gar nicht. Der 
TO hatte einfach nur Schwierigkeiten zu verstehen, dass es die 
Hausnummer 23 in einer Stadt viele male gibt und man daher eine weitere 
Angabe, den Strassennamen, braucht um die einzelnen 23-er voneinander zu 
unterscheiden. In der Ebene darüber gibt es dann auch die 'Göthestrasse 
23' in Deutschland viele male, so dass man je nach Stadt wieder eine 
weitere Angabe benötigt, die Postleitzahl, die die Verteilung eines 
Datenpakets triggert und regelt. In Hardware ist das dann eben der Chip 
Select, der dafür sorgt, dass sich bei einer am Adressbus anliegenden 
spezifischen Adresse ein und nur ein bestimmer Speicherbaustein 
angesprochen fühlt und alle anderen ruhig sind.

: Bearbeitet durch User
von Axel S. (a-za-z0-9)


Lesenswert?

MCUA schrieb:
>>Nein, Nein, Nein
> Es steht nicht drin, dass bei dem 16Bit-Datenbus nicht auch (wie das
> normal üblich ist) einzelne Bytes geschrieben werden können sollen.

Da ist explizit das Mapping von Adressbits auf logische Adressen 
gezeigt. Und es ist 1:1. Im .png aus dem Eröffnungspost unter "EPROM".

OK, an dieser Stelle ist da ein F zuviel. Es geht von 0x00000 bis 
0x0FFFF. Nicht bis 0x0FFFFF. Aber da weiter oben von 64K gesprochen 
wird, ist klar daß  eher nicht 1M gemeint ist.


XL

von MCUA (Gast)


Lesenswert?

>In dubio pro reo: Am Adressbus liegen Wortadressen, so dass die
>Adressbits direkt an die Speicherbausteine gelegt werden. Macht auch am
>meisten Sinn, wenn der Datenbus sowieso 16 Bit breit ist.
Am meisten Sinn macht es (weil flexibler) bei nem 16Bit-Datenbus 
zusätzl. zu Wörtern auch einzelne Bytes (inbes für WR (für RD könnte aus 
gelesenem Wort das Byte entnommen werden ) ansprechen zu können (bsp mit 
\BLE \BHE).
(aber was solls, wahrsch. wieder so ne trocken-Theorie-Aufgabe ohne 
realen Hintergrund)

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Axel Schwenke schrieb:
> OK, an dieser Stelle ist da ein F zuviel. Es geht von 0x00000 bis
> 0x0FFFF. Nicht bis 0x0FFFFF.
Das habe ich doch gesagt. Aber erstmal rummeckern

Axel Schwenke schrieb:
> Lesen lernen! 0x20000 (4 Nullen, nicht 5)

Ich habe mir nämlich die gesamte Aufgabe durchgelesen und den Fehler 
bemerkt. Wenn also schon die Frage fehlerhaft gestellt ist, wie soll man 
da auf eine richtige Antwort kommen?

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


Lesenswert?

Wenn ich auch mal Haare spalten darf:

Matthias Sch. schrieb:
> Axel Schwenke schrieb:
>> OK, an dieser Stelle ist da ein F zuviel. Es geht von 0x00000 bis
>> 0x0FFFF. Nicht bis 0x0FFFFF.
> Das habe ich doch gesagt. Aber erstmal rummeckern

Nein. Das hast du nicht gesagt.

> Axel Schwenke schrieb:
>> Lesen lernen! 0x20000 (4 Nullen, nicht 5)
>
> Ich habe mir nämlich die gesamte Aufgabe durchgelesen und den Fehler
> bemerkt. Wenn also schon die Frage fehlerhaft gestellt ist, wie soll man
> da auf eine richtige Antwort kommen?

Da steht aber 2 Mal(!) daß das RAM bei 0x20000 liegt. Und nur einmal 
unten taucht dann auf einmal 200000 auf.

Kann es sein, daß das vom TE gelieferte PNG oben die Aufgabenstellung 
und unten eine (angebliche) Lösung enthält? Denn da ist gleich noch ein 
Fehler. Wenn das RAM 32K Worte lang ist und bei 0x27FFF endet, dann ist 
A15 durchgängig 0. Und nicht 1 wie da falsch steht.


XL

von tom123 (Gast)


Lesenswert?

Danke euch für euere Tipps!

Ich versuche nun die Aufgabe zu lösen:
Wir haben einen 20bit Adressbereich(00000-FFFFF) und 16bit Datenbus.
EPROM(64kx8) --> 00000 - 0FFFF
RAM(32kx8) --> 20000 - 27FFF

Weil wir aber doppelte Datenbreite haben wollen, schalten wir einfach 
jeweils 2 von den Speucherbausteinen parallel.

EPROM:

Start-addr: 0000 0000 0000 0000 0000
End-addr:   0000 1111 1111 1111 1111

Wir man hier sehen kann müssen die ersten 4 Bits 0 ergeben, sodass dei 
EPROMs angesprochen werden.

Also: CS = -(-A19 UND -A18 UND -A17 UND -A16) Die Negierung am Schluss 
wird benötigt da CS low-active ist.


RAM:

Sart-addr: 0010 0000 0000 0000 0000
End-addr:  0010 0111 1111 1111 1111

Hier müssen die ersten 5 Bits so sein wie sie da stehen, um díe RAMs 
anzusprechen.

Also: CS= -(-A19 UND -A18 UND A17 UND -A16 und -A15)

Nun, dass müsste jetzt so stimmen.

Aber eins verstehe ich noch nicht so ganz:

1.
Warum muss man das Bit bei einer 0 negieren, aber bei einer 1 nicht?
Ich meine ich könnte es jetzt einfach so hinnehmen und merken: wenn eine 
0 ist, dann negiere ich das einfach und wenn eine 1 ist dann nicht.

2.
Warum verUNDet man das hier?

Gibt es da eine logische Erklärung, oder so wie: 1+2=3.


Aber ich will gerne logisch nachvollziehen können. Ich kenne auch die 
Truthtable von nem UND-Gatter, aber trotzdem ist es net logisch 
irgendwie.

Kann mir vielleicht jemand da Licht ins Dunkle bringen?^^

Danke!

von Paul Baumann (Gast)


Lesenswert?

>Warum muss man das Bit bei einer 0 negieren, aber bei einer 1 nicht?

Wenn das mit UND-Gattern ausdekodiert werden soll, dann muß man eine
Null zur Eins machen, aber eine 1 ist schon eine 1.

Aus dem UND kommt doch nur dann eine 1 raus, wenn beide Eingänge 1 sind.

Man kann das auch mit lauter ODERN dekodieren, dann muß man sich aber 
die
Gleichung neu machen.

Am Besten sind NAND-Gatter, weil man aus denen alles Andere bauen kann.

MfG Paul

von Karl H. (kbuchegg)


Lesenswert?

tom123 schrieb:

> 1.
> Warum muss man das Bit bei einer 0 negieren, aber bei einer 1 nicht?
> Ich meine ich könnte es jetzt einfach so hinnehmen und merken: wenn eine
> 0 ist, dann negiere ich das einfach und wenn eine 1 ist dann nicht.

Weil ein UND nur dann eine 1 als Ergebnis liefert, wenn die beiden 
Eingänge des UND 1 sind. Die UND Bedingung in der Form, Wenn A UND wenn 
B DANN auch C, funktioniert nun mal eben nur mit einer Belegung von WAHR 
(1).

> 2.
> Warum verUNDet man das hier?

Weil du eine Bedingung brauchst, von der du sagen kannst: das alles muss 
wahr sein.
Es muss A wahr sein UND es muss B wahr sein UND es muss C wahr sein ...
Wenn eine der Teilbedingungen nicht wahr ist, dann soll auch das 
Ergebnis falsch sein.
In deinem Fall mit dem EEPROM

0000 xxxx xxxx xxxx xxxx

Die 4 Bits müssen 0 sein. Und zwar alle! Ein einziges 1 Bit da drinnen, 
egal an welcher Position von den 4-en, führt schon dazu, dass da nicht 
mehr das EEPROM damit gemeint sein kann.
Man kann das natürlich auch alles zb mit den De Morgan Regeln auf ODER 
umbauen.
1
  (nicht A) UND (nicht B)   <==>   nicht ( A oder B )
wurde ja in deinem PDF dann auch so gemacht.

: Bearbeitet durch User
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.