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?
:
Bearbeitet durch User
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.
:
Bearbeitet durch User
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.
:
Bearbeitet durch User
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.
:
Bearbeitet durch User
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.
:
Bearbeitet durch User
EIn 8051 mit 16Bit Datenbus ???? Zeig mal bitte Datenblatt oder sag mal die Bezeichnung und Hersteller ...
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
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.
:
Bearbeitet durch User
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.