Was ist der Unterschied zwischen vollständiger und teilweiser Adressdecodierung?

Könnte jemand bitte den Unterschied zwischen vollständiger Adressdekodierung und teilweiser Adressdekodierung erklären?

Ich lese gerade das Kapitel über digitale Logik in "Structured Computer Organization", 6. Auflage. von Tanenbaum, aber ich glaube nicht, dass die Adressdecodierung sehr gut erklärt wird. Das Buch sagt, dass die Adressdekodierungslogik von Abbildung A eine vollständige Adressdekodierung ist. Und die von Abbildung B ist unvollständig, weil "nicht die vollständigen Adressen verwendet werden". Ich verstehe das nicht. Mir scheint, dass auch in Abbildung A keine vollständigen Adressen verwendet werden?Geben Sie hier die Bildbeschreibung ein Geben Sie hier die Bildbeschreibung ein

Sieht so aus, als ob bei A die beiden unteren Bits der Adresse nicht verwendet werden, es sei denn, Sie geben nicht alle Informationen an. Sie können anderweitig verwendet werden

Antworten (2)

Speicher und periphere ICs haben typischerweise viele Orte, die zum Lesen oder Schreiben ausgewählt werden können; im obigen Beispiel enthalten die 2K-Geräte (EPROM und RAM) 2 11 (2048) Speicherzellen erfordern 11 Adressbits A0 bis A10. Diese werden direkt in den Chip eingespeist und intern dekodiert, um den gewünschten Speicherplatz oder das gewünschte Register auszuwählen. Diese Adressleitungen sind in den Teilschemata oben nicht gezeigt .

Computerplatinen mit externem Speicher und Peripheriegeräten, die mit dem Prozessor verbunden sind, können mehrere Chips haben, die adressiert werden müssen. Es kann immer nur einer an den Datenbus des Computers angeschlossen werden. Welche aktiviert ist, erfolgt über eine Chip-Select-Leitung (CS). Diese Zeilen sind normalerweise invertiert; dh der Chip ist aktiviert, wenn die Leitung niedrig ist (logisch 0), und deaktiviert, wenn die Leitung hoch ist (logisch 1). Sie werden also geschrieben als CS ¯ um dies anzuzeigen.

Bei der vollständigen Adressdecodierung werden alle Bits des Adressbusses, die nicht zum Adressieren der oben erwähnten internen Stellen verwendet werden, decodiert, um einen bestimmten Chip über seine CS-Leitung auszuwählen. Für einen 16-Bit-Adressbus (64K-Speicherabbild) werden also fünf Leitungen (A11 bis A15) für die Chipauswahl-Decodierung verwendet, und die restlichen 11 (A0 bis A10) werden für den in den Chip eingespeisten Adressbus verwendet. Der Chip antwortet nur auf so viele Adressen, wie es interne Speicherstellen innerhalb des Chips gibt. So kann beispielsweise ein 2K-Speicherchip die Adressen 0x0000 bis 0x7FFF (insgesamt 2048) oder einen anderen 2K-Bereich haben; Alle Adressen außerhalb der 2K-Adressen haben keine Auswirkung.

Bei der partiellen Adressdekodierung bleiben einige der Adressleitungen, die normalerweise verwendet würden, um die Chipauswahlleitung freizugeben, unverbunden, soweit die Adressdekodierung geht; diese werden "egal" genannt. Jede als don't care angegebene Zeile verdoppelt die Anzahl der Adressen, die der Chip auswählen kann. Wenn beispielsweise A11 bei der Dekodierung für das EPROM weggelassen würde, würde es immer noch auf die Adressen 0x0000 bis 0x07FF reagieren, aber es würde auch auf die Adressen 0x0800 bis 0x0FFF reagieren. 0x0123 und 0x0923 würden also denselben internen Speicherort adressieren .

Warum partielle Adressdecodierung verwenden? Es spart manchmal einige Logikgatter. Das ist wirklich der einzige Grund. In dem obigen Beispiel (a) erforderte das vollständig adressierte Beispiel (a) ein NOR-Gatter und einen Inverter für das EPROM; im zweiten Beispiel (b) war keine Logik erforderlich. Eine teilweise Adressdecodierung ist jedoch normalerweise eine schlechte Idee, da sie Speicherplatz in Ihrer Speicherkarte verschwendet.

Das oberste Beispiel (a) ist vollständig dekodiert; die Dekodierung sieht so aus:

           A15 14 13 12   11 10  9  8    7  6  5  4    3  2  1  0

 2Kx8 EPROM  0  0  0  0    0  A  A  A    A  A  A  A    A  A  A  A 

 2x8K RAM    1  0  0  0    0  A  A  A    A  A  A  A    A  A  A  A 

 PIO         1  1  1  1    1  1  1  1    1  1  1  1    1  1  A  A

Die A's zeigen eine Decodierung außerhalb der CS-Leitungen an und sind Adressbits im Fall des EPROM und des RAM oder werden im Fall der PIO-Vorrichtung als Registerauswahlen angenommen.

Die 2K-Geräte (EPROM und RAM) benötigen 11 Adressbits A0 bis A10. Die obersten fünf Bits A11 bis A15 werden vollständig decodiert, um die CS-Leitungen freizugeben. Der Adressbereich des EPROMs ist also 0x0000 bis 0x07FF. Der Adressbereich des RAMs ist 0x8000 bis 0x87FF.

Das PIO CS wird ausgewählt, wenn die Bits A2 bis A15 hoch sind. Der Adressbereich ist also nur 0xFFFC bis 0xFFFF.

Betrachtet man die logischen Gleichungen, wo = UND, + = ODER und Überstrich = NICHT:

C S E P R Ö M = A 15 + A 14 + A 13 + A 12 + A 11 ¯ was nach den Gesetzen von De Morgan dasselbe ist wie:

C S E P R Ö M = A 15 ¯ A 14 ¯ A 13 ¯ A 12 ¯ A 11 ¯ (dh CS aktiviert, wenn A 15 durch A 11 sind alle niedrig).

Obwohl die Verwendung eines NOR für eine UND-Funktion seltsam aussieht, sparte dies auf diese Weise vier Inverter (NOR und einen Inverter anstelle von fünf Invertern und einem NAND). Aber sie hätten ein OR anstelle des NOR verwenden und den Inverter loswerden können.

C S R A M = A 15 ¯ + A 14 + A 13 + A 12 + A 11 ¯ was dasselbe ist wie:

C S R A M = A 15 A 14 ¯ A 13 ¯ A 12 ¯ A 11 ¯ (dh CS aktiviert, wenn A 15 ist hoch und A 14 durch A 11 sind alle niedrig).

Auf diese Weise wurden drei Inverter eingespart (NOR und zwei Inverter anstelle von fünf Invertern und einem NAND). Aber sie hätten ein OR anstelle des NOR verwenden und einen der beiden Inverter loswerden können.

C S P ICH Ö = A 15 A 14 A 13 A 12 A 11 A 10 A 9 A 8 ¯ + A 7 A 6 A 5 A 4 A 3 A 2 ¯ ¯ was dasselbe ist wie:

C S P ICH Ö = A 15 A 14 A 13 A 12 A 11 A 10 A 9 A 8 A 7 A 6 A 5 A 4 A 3 A 2 (dh CS aktiviert, wenn A 15 durch A 2 sind alle hoch).

Im letzten Fall weiß ich nicht, warum sie nicht zwei UND-Gatter und ein NAND anstelle der zwei NAND-Gatter und eines ODER verwendet haben; der erste wäre einfacher gewesen.

Das untere Beispiel (b) ist teilweise dekodiert; Die Dekodierung sieht so aus (wobei die xs "egal"-Zeilen anzeigen - beachten Sie, dass das obere Beispiel keine xs hat, deshalb wird es als vollständig dekodiert betrachtet):

           A15 14 13 12   11 10  9  8    7  6  5  4    3  2  1  0

 2Kx8 EPROM  0  x  x  x    x  A  A  A    A  A  A  A    A  A  A  A 

 2x8K RAM    1  0  x  x    x  A  A  A    A  A  A  A    A  A  A  A 

 PIO         1  1  x  x    x  x  x  x    x  x  x  x    x  x  A  A

Noch einmal: Die 2K-Geräte (EPROM und RAM) benötigen 11 Adressbits A0 bis A10. Nur das oberste Bit wird verwendet, um die CS-Leitung des EPROM freizugeben, und die obersten zwei Bits werden verwendet, um die CS-Leitungen des RAM und PIO auszuwählen.

Aufgrund der teilweisen Decodierung kann das EPROM mit den folgenden Bereichen 0x0000 bis 0x7FFF adressiert oder in 2K-Blöcke aufgeteilt werden.

0x0000 thru 0x07FF, 0x0800 thru 0x0FFF, 0x1000 thru 0x17FF, 0x1800 thru 0x1FFF, 0x2000 thru 0x27FF, 0x2800 thru 0x2FFF, 0x3000 thru 0x37FF, 0x3800 thru 0x3FFF, 0x4000 thru 0x47FF, 0x4800 thru 0x4FFF, 0x5000 thru 0x57FF, 0x5800 thru 0x5FFF, 0x6000 thru 0x67FF, 0x6800 bis 0x6FFF, 0x7000 bis 0x77FF, 0x7800 bis 0x7FFF

Das RAM ist fast gleich, außer dass das High-Bit A15 1 und A14 0 ist. (A14 unterscheidet das RAM vom PIO, bei dem auch das High-Bit gesetzt ist.) Es kann mit den folgenden Bereichen 0x8000 bis 0xBFFF oder adressiert werden in 2K-Blöcke zerlegt,

0x8000 bis 0x87FF, 0x8800 bis 0x8FFF, 0x9000 bis 0x97FF, 0x9800 bis 0x9FFF, 0xA000 bis 0xA7FF, 0xA800 bis 0xAFFF, 0xB000 bis 0xB7FF, 0xB800 FFBF

Der PIO-Chip wird mit den oberen zwei Adressbits hoch adressiert. Angenommen, der PIO hat immer noch nur zwei Registeradressierungsbits, A0 und A1, dann werden die Bits A2 bis A13 nicht decodiert, was einen Bereich von 0xC000 bis 0xFFFF zulässt. Ich werde nicht alle Bereiche aufschreiben (es sind 4096), aber sie beginnen mit 0xC000 bis 0xC003, und der letzte Bereich ist 0xFFFC bis 0xFFFF.

Betrachtet man die logischen Gleichungen,

C S E P R Ö M = A 15 ¯ (dh CS aktiviert, wenn A 15 ist niedrig).

C S R A M = A 15 A 14 ¯ (dh CS aktiviert, wenn A 15 ist hoch und A 14 ist niedrig).

C S P ICH Ö = A 15 A 14 (dh CS aktiviert, wenn A 15 Und A 14 sind beide hoch).

Der Unterschied besteht also darin, dass die teilweise Decodierung "egal" -Zeilen enthält und die vollständige Decodierung nicht? Was ich aber immer noch nicht verstehe ist: Wie wird in Bild A eine bestimmte Adresse zB im EPROM ausgewählt, wenn die 11 unteren Leitungen nicht verbunden sind? Ich verstehe, dass EPROM ausgewählt ist, solange A15-A11 00000 sind, aber wie würde ich eine bestimmte Adresse im EPROM auswählen?
@AliMustafa In jedem dieser Teilschemata zeigen sie nur die Dekodierung für die Adressleitungen, die die CS-Eingänge (Chipauswahl) aktivieren. Die verbleibenden Adressleitungen (z. B. A0 bis A10 für EPROM und RAM) würden direkt mit dem nicht gezeigten Chip verbunden. Zugegeben, etwas verwirrend. Die Dekodierung für diese zusätzlichen Zeilen (dh welche der 2048 Stellen ausgewählt wird) erfolgt intern im EPROM oder RAM.
Danke, jetzt ist es mir klarer. Aber eine letzte Frage, bei teilweiser Dekodierung, würden 0111 1000 0000 0000, 0101 0000 0000 0000 und 0000 0000 0000 0000 alle dieselbe Adresse im EPROM auswählen? Da A14-A11 keine Rolle spielen?
@AliMustafa Ja, dein Beispiel ist richtig. Beachten Sie, dass ich diese drei Adressen als Anfang von drei äquivalenten Bereichen in meine Antwort aufgenommen habe (0x0000 bis 0x07FF, 0x5000 bis 0x57FF, 0x7800 bis 0x7FFF). Beachten Sie auch, dass ich am Anfang meiner Antwort fünf weitere Absätze hinzugefügt habe, basierend auf Ihren früheren Fragen.
(+1) Hervorragende Antwort mit echter Anstrengung! Ich habe gerade etwas mehr Zeit gefunden, um meine Antwort zu erweitern, aber ich habe deine gefunden. Du hast mir einiges an Zeit gespart ;-)

In Abbildung (a) ist der Teil des Adressbusses, der die Orte/Register innerhalb der einzelnen Chips adressiert, nicht gezeigt. Beispielsweise haben die ersten beiden Speicherbänke 8K (= 8192 = 2 ^ 11) Speicherplätze, die mit den unteren 11 Bits des Adressbusses adressiert werden müssen (nicht verbunden dargestellt). Sie zeigen nur das Decodiernetzwerk für den Chipauswahlstift (/CS) .

Auch hier wird der PIO /CS-Pin unter Verwendung der höchsten 14 Adressleitungen decodiert, die niedrigsten zwei (nicht gezeigt) werden wahrscheinlich verwendet, um die internen Register des Chips zu adressieren (was 4 = 2 ^ 2 unabhängige Register wären).

Daher wird tatsächlich eine vollständige Adressdecodierung durchgeführt: Der vollständige Adressbus wird verwendet, um eine Stelle/ein Register in dem Peripheriegerät zu adressieren. Die Leitungen, die nicht für die Chipauswahl verwendet werden, werden zur Adressierung innerhalb des Peripheriegeräts verwendet.

In Abbildung (b) werden nur einige Leitungen des höheren Teils des Adressbusses verwendet, um die Chips auszuwählen, sodass die Chips an verschiedenen Stellen des Adressraums zugänglich sind. Beispielsweise ist auf eine einzelne Stelle im EPROM unter Verwendung unterschiedlicher Adressen (jede Adresse, bei der die A15-Leitung niedrig ist) zugreifbar.

Mit anderen Worten, der Unterschied zwischen den beiden Adressierungsstrategien ist folgender: Bei vollständiger Decodierung ist eine einzelne Stelle / ein einzelnes Register im externen Chip nur an einer Adresse im physikalischen Adressraum sichtbar, während sie bei teilweiser Decodierung "aliased" wird. an mehrere Adressen.

Partielle Dekodierung ist einfacher (dh hardwaremäßig, insbesondere für breite Busse), kann aber Verwaltungsprobleme auf höherer Ebene verursachen (z. B. müssen Sie in der Software darauf achten, nicht mehrere Chips auszuwählen, wenn eine bestimmte Adresse auf dem Bus geltend gemacht wird, wenn die Chips dies nicht können Es).

Vielen Dank für die Antwort, aber ich verstehe immer noch zwei Dinge nicht: 1) Wenn Sie den Text unter dem Bild nicht sehen, der sagt, wer die vollständige Adressierung verwendet und welcher nicht, wie können Sie das anhand der Bilder erkennen? 2) warum kann ich zB mit 0111 1111 1111 1111 auf das EPROM zugreifen, wenn es doch nur die Adressen 0 bis 2kB sein sollen?
Ich habe kein Exemplar dieses Buches, also kann ich nicht sagen, wie die Erklärung lautet, aber Sie haben recht, wenn Sie sagen, dass Sie es nicht allein anhand der Zahlen sagen können. Aber in einem realen Design weiß der Systemdesigner Bescheid und der Systembenutzer (auf Baugruppenebene) wird es wissen. Wie gesagt, bei der partiellen Dekodierung werden die internen Adressen des EPROMs auf unterschiedliche Busadressen gealiased. Betrachten Sie es als verschiedene Namen für dieselbe Person.
Sie können dies allein anhand der Zahlen in Abb. 3-61 (b) erkennen. C S ¯ ist aktiv niedrig . Unabhängig von den anderen 15 Zeilen wird immer dann, wenn A15 0 ist, das 2K-Wort-EPROM ausgewählt. die Anzahl der Adressen, die das 2K-Wort-EPROM auswählen, beträgt 32K, aber es gibt nur 2K verschiedene Stellen in dem 2K-Wort-EPROM. Jeder dieser Standorte hat 16 verschiedene Adressen, die dorthin führen. das bedeutet 4 = Protokoll 2 ( 16 ) Adressleitungen (A11 bis A14) werden von nichts im EPROM dekodiert. sie sind "egal" Bits. für die anderen beiden Geräte muss A15 1 sein, und die Auswahl eines dieser beiden Geräte erfolgt nur über A14.