8086-Speicherdecoderlogik

Ich habe angefangen, ein Schema für 8086-basierte Computer zu erstellen, jetzt habe ich Probleme mit der Speicheradressierung. Ich weiß, dass eine 20 Bit breite Adressierungsleitung bis zu 1024 KB RAM adressieren kann und dass Pin A0, wenn er hoch ist, alle geraden Speicherbänke auswählt, und wenn BHE hoch ist, werden die ungeraden Speicherbänke ausgewählt (ja, ich weiß, es gibt ein bisschen mehr komplizierte Logikschaltung, um dies zu tun).

Ich habe mich für ein Setup mit 8 Chips entschieden (6x 128 KB sind SRAM-Chips und die restlichen 2x 128 KB sind EEPROM-Chips).

Wenn ich online lese, weiß ich, dass ich mit einem M74HC138B1R (einem sogenannten 3: 8-Decoder) A17, A18 und A19 verwenden muss, um zu decodieren, welche Chipauswahl ausgewählt wird, und am Ende die Leitungen A1-A16 für die Chipadressierung zu verwenden. Das Problem tritt auf, wenn laut IS62C1024AL-Datenblatt (Chip, den ich als SRAM verwenden möchte) der Chip 17 Zeilen für die Adressierung verwendet (A1 bis A17), was 17 Bit = 128 KB bedeutet. Aber dabei habe ich am Ende 1 Adresszeile in Konflikt (A17).

Ich kann nicht herausfinden, wie ich diese seltsame Situation verlassen kann, und ich kann nicht herausfinden, ob das A0 noch für die Adressierung verfügbar ist. Meine Annahme, die der Logik folgt, ist nein. Eine andere Sache, die mir offensichtlich erscheint, war die Suche nach einem 2:8-Decoder, den es anscheinend nicht gibt.

Jeder Tipp ist sehr willkommen, vielleicht übersehe ich gerade etwas Dummes, das ich jetzt nicht herausfinden kann.

„Bedürfnis“ ist so ein starkes Wort. Vcc und GND sind immer als 1 bzw. 0 verfügbar.
A17-A19 -> 74HC138 mit 8 Ausgängen - 6 für SRAM, 2 für EEPROM; A0-A16 wird ein Bus sein
@Flanker A0Steht leider nicht zur Verfügung. Die Chips, die er hat, sind 8-Bit, und der 8086 ist ein 16-Bit-Datenbus. Das OP muss A0als Wahlschalter zwischen High- und Low-Chips verwenden, wie er im ersten Absatz sagte.
Meine Güte, jetzt sehe ich, warum BHE# wichtig ist. Eine schnelle Suche zeigt, dass A0 immer noch verwendet wird: Die Kombination von BHE # und A0, beide LOW, soll 16-Bit-Daten adressieren (ansonsten 8-Bit-Daten, für 8080-Kompatibilität, denke ich). Es scheint, dass Sie den gesamten Speicher in 2 logische Bänke organisieren sollten; obige Adressdekodierung ist immer noch gültig; Es muss nur zusätzliche Logik implementiert werden, um die untere Bank (8-Bit-Daten), die obere Bank (8-Bit-Daten) oder beide Bänke (16-Bit-Daten) auszuwählen.

Antworten (3)

Ihr Problem ist, dass Sie in Ihrem ersten Absatz über die Verwendung von RAM-Banken gesprochen haben - dann aber davon ausgegangen sind, dass Sie die Chips seriell verwenden würden.

Sie sollten die Chips paarweise verwenden, indem Sie A0und BHEwie beschrieben verwenden. Sie haben also tatsächlich ein 2x3-Array von RAM-Chips und ein 2x1-Array von EEPROM.

Es gibt keinen "2-zu-8"-Decoder, gerade weil Sie 3 Bits benötigen, um 8 Möglichkeiten zu erhalten - aber Sie brauchen einen 2-zu-4-Decoder:

  • A19- A18zu entschlüsseln, welches Paar von RAM- oder EEPROM-Chips;
  • A17- A1die Adresse in jedem Paar zu decodieren;
  • A0und BHEum zu decodieren, welcher Chip in dem Paar ist.
Ich bin ein bisschen verlegen. Als ich an 3:8 und 2:8 dachte, dachte ich nicht an 3 Bits, die 8 Möglichkeiten erzeugen, und so ist klar, dass ich 2:4 brauche, um 4 Möglichkeiten zu erzeugen, 4 Blöcke, von denen 3 RAM und 1 ROM sind. Danke, dass Sie den Staub aus dem Neuron entfernt haben, das diese Informationen enthält.
kleine Klarstellung: "A0 und BHE, um zu dekodieren, welcher Chip im Paar".. oder beide Chips im Paar

Der 8086 hat einen 16 Bit breiten Datenbus. Sie müssen jeweils 2 (8 Bit breite) Chips kombinieren und A1-A17 auf 8086 mit A0-A16 auf den Chips verbinden.

A18 und A19 sind für Chip-Selects zu decodieren. Sie können hier einen 3-zu-8-Decoder verwenden, verbinden Sie einfach einen Eingangspin mit GND oder VCC.

Wenn man sich die Pinbelegung des 8086 ansieht, scheint es gemultiplexte Daten-/Adressleitungen zu verwenden. Dies bedeutet, dass Sie Latches verwenden müssen, und Sie müssen möglicherweise die Daten "Byte-tauschen", wenn die Adressbits A0 oder BHE mit einigen zusätzlichen Logikchips gesetzt werden.

Danke für eure Antworten, für mich sind alle Antworten Gold wert. Sagte, dass ich weiß, dass A0 / BHE mehr Logik erfordern, als sie einfach an den Speicherchip anzuschließen.

Dies kommt einfach daher, dass IS62C1024AL einen 8-Bit-Bus hat. Während der 8086 einen 16-Bit-Bus hat. Der RAM-Chip benötigt also 17 Adressleitungen, aber eine 128k-Zone des 8086 wird mit nur 16 Adressleitungen adressiert (plus A0 und BHE, um zwischen High- und Low-Bytes zu wählen).

Hier ist, was Sie tun müssen: Teilen Sie Ihr Gedächtnis in 4 große Bereiche (bestimmt durch A18 und A19), nicht 8 Bereiche. Sie haben also A18 und A19, die zu einem 2-zu-4-Decoder gehen, der die Chipauswahl bereitstellt. Dann haben Sie A17-A1, die zu den Adressleitungen jedes Speicherchips gehen.

Gruppieren Sie dann die Speicherchips paarweise. Für jedes Paar wird der erste Speicherchip mit den Datenbits 0-7 der CPU und der andere mit den Datenbits 8-15 verdrahtet. Sie haben also vier Gruppen (bestimmt durch Chipauswahl) von zwei Speicherchips, wobei jeder Chip entweder mit dem niedrigen oder dem hohen Teil des Datenbusses verbunden ist. Insgesamt haben Sie Ihre 8 Chips von 128.000, was insgesamt 1 Megabyte ergibt. Alles gut.

Dies bedeutet, dass die Chipauswahl (vom Decoder) jeder der vier Gruppen beiden Speicherchips der Gruppe bereitgestellt wird. Nennen wir es die primäre Chipauswahl. Dann müssen Sie A0 und BHE als sekundäre Chipauswahl verwenden, um jeden der beiden Speicherchips der Gruppe zu aktivieren/deaktivieren. Und rate was? Zufällig hat der IS62C1024AL zwei Chip-Select-Pins.

Zusammenfassend : Verwenden Sie einen 2-zu-4-Decoder, der CS1 beider Speicherchips jeder Gruppe speist, speisen Sie CS2 aller Low-Byte-Speicherchips von A0 und CS2 aller High-Byte-Speicherchips von BHE. Wenn Sie sich jetzt die Details ansehen, werden Sie feststellen, dass Sie wahrscheinlich einige zusätzliche Wechselrichter benötigen, es sei denn, Sie finden einen Decoder mit aktiven High-Ausgängen.

Letzter Hinweis : Die Glue-Logik ist nicht so einfach, zumal der 8086 einen Multiplex-Bus verwendet. Ein Fehler ist immer möglich (ich behaupte nicht einmal, die richtige Antwort gegeben zu haben). Und die 74 Logikchips sind nicht alle leicht zu finden, sind sperrig, und wenn Sie einige Fehler gemacht haben, müssen Sie sie weiterleiten usw. An Ihrer Stelle würde ich etwas CPLD verwenden, um die gesamte Glue-Logik zu erstellen . Dann können Sie im Falle eines Fehlers oder wenn Sie plötzlich die Hardwarekonfiguration ändern möchten, wirklich einfach nachkonfigurieren. Sie könnten sogar ein paar einfache Peripheriegeräte (GPIO, Tastatur, ...) innerhalb des CPLD selbst bauen. Es macht viel mehr Spaß als Löten / Entlöten / Umverdrahten / Löten / ... DIP-Chips.

Ich weiß, dass ich das RAM / ROM möglicherweise mit 2 in 4 Gruppen koppeln muss, in denen 1 Chip gerade und der andere ungerade ist, und sie dann mit A0 / BHE auswählen, aber mir fehlte, wie gesagt, eine dumme Sache. die 2:4-Logik, die ich bei der Suche im Internet fälschlicherweise 2:8 genannt habe. Über Multiplexing wusste ich bereits, und ich habe Latches und Transceiver, um Demultiplexing durchzuführen. Das Letzte, was Sie gesagt haben, ist mein letzter Ausweg, da ich viele der erforderlichen Komponenten habe und der örtliche Refurbisher die logischen 74-Chips hat.