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
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?
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
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?
"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.
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.
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.
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
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?
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.
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?
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.
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
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.
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...
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.
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
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.
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.
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
>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.
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.
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
>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)
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?
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
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!
>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
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.