8086 lógica del decodificador de memoria

2

Comencé a crear un esquema para una computadora basada en 8086 y ahora tengo problemas con el direccionamiento de memoria. Sé que una línea de direccionamiento de 20 bits de ancho puede direccionar hasta 1024 KB de RAM y ese pin A0, cuando está alto, selecciona todos los bancos de memoria pares y cuando BHE es alto se seleccionan los bancos de memoria impares (sí, sé que hay un poco más) circuito lógico complicado para hacer esto).

Elegí una configuración donde hay 8 chips (6x 128 KB son chips SRAM y los 2x 128KB restantes son chips EEPROM).

Lectura en línea Sé que utilizando un M74HC138B1R (un llamado decodificador 3: 8) necesito usar A17, A18 y A19 para decodificar qué chip selecciono, terminando con las líneas A1-A16 para usar para el direccionamiento de chips. El problema surge cuando, según la hoja de datos IS62C1024AL (chip que deseo usar como SRAM), el chip usa 17 líneas para direccionamiento (A1 hasta A17), lo que significa 17 bits = 128 KB. Pero al hacer esto, termino con 1 línea de dirección en conflicto (A17).

No puedo entender cómo salir de esta situación extraña y no puedo entender si el A0 todavía está disponible para el direccionamiento, mi suposición es que la lógica es no. Otra cosa que me parece obvia fue la búsqueda de un decodificador 2: 8 que aparentemente no existe.

Cualquier consejo es muy apreciado, puede que me esté perdiendo algo estúpido que no puedo entender ahora.

    
pregunta Gioele Frapolli

3 respuestas

1

Su problema es que habló sobre el uso de Bancos de RAM en su primer párrafo, pero luego asumió que usaría los chips en serie.

Debes usar los chips en pares, usando A0 y BHE como lo describiste. Así que, en realidad, tiene una matriz 2x3 de chips RAM y una matriz 2x1 de EEPROM.

No existe tal cosa como un decodificador "2 a 8" precisamente porque necesita 3 bits para obtener 8 posibilidades, pero necesita un decodificador 2 a 4:

  • A19 - A18 para decodificar qué par de RAM o chips EEPROM;
  • A17 - A1 para decodificar la dirección en cada par;
  • A0 y BHE para decodificar qué chip en el par.
respondido por el John Burger
0

El 8086 tiene un 16 Bus de datos de ancho de bits. Debe combinar 2 chips (de 8 bits de ancho) cada uno, y conectar A1-A17 en 8086 a A0-A16 en los chips.

A18 y A19 se descodificarán para la selección de chips. Puede usar un decodificador de 3 a 8 aquí, solo conecte un pin de entrada a GND o VCC.

Mirando el pinout del 8086 parece que usa líneas de datos / direcciones multiplexadas. Esto significa que necesita usar pestillos, y es posible que deba "intercambiar bytes" los datos cuando los bits de dirección A0 o BHE se configuran utilizando algunos chips lógicos adicionales.

    
respondido por el Turbo J
0

Esto simplemente se debe al hecho de que IS62C1024AL tiene un bus de 8 bits. Mientras que el 8086 tiene un bus de 16 bits. Por lo tanto, el chip de RAM necesita 17 líneas de dirección, pero una zona de 128k desde el 8086 se dirige utilizando solo 16 líneas de dirección (más A0 y BHE para seleccionar entre bytes altos y bajos).

Esto es lo que debe hacer: divida su memoria en 4 áreas grandes (determinadas por A18 y A19), no 8 áreas. Así que tienes A18 y A19 que van a un decodificador de 2 a 4 que proporcionará la selección de chips. Luego tienes A17-A1 que va a las líneas de dirección de cada chip de memoria.

Luego agrupa los chips de memoria en pares. Para cada par, el primer chip de memoria se conectará a los bits de datos 0-7 de la CPU y el otro a los bits de datos 8-15. Así que tiene cuatro grupos (determinados por la selección de chip) de dos chips de memoria, cada uno de ellos conectado a la parte alta o baja del bus de datos. En total, tienes tus 8 fichas de 128k, lo que proporciona un total de 1Meg. Todo bien.

Esto significa que la selección de chip (del decodificador) de cada uno de los cuatro grupos se proporcionará a ambos chips de memoria del grupo. Llamémoslo el primario selección de chip. Luego debe usar A0 y BHE como una selección de chip secundaria para habilitar / deshabilitar cada uno de los dos chips de memoria del grupo. ¿Y adivina qué? Por casualidad, el IS62C1024AL tiene dos pines de selección de chip.

Para resumir : use un decodificador de 2 a 4 que alimente a CS1 de ambos chips de memoria de cada grupo, alimente a CS2 de todos los chips de memoria de bajo byte de A0, y CS2 de todos los chips de memoria de alto byte de BHE. Ahora, si observa los detalles, verá que probablemente necesite algunos inversores adicionales, a menos que encuentre un decodificador con altas salidas activas.

Último consejo : la lógica del pegamento no es tan simple, especialmente porque el 8086 utiliza un bus multiplexado. Un error siempre es posible (ni siquiera pretendo haber dado la respuesta correcta). Y los 74 chips lógicos no son fáciles de encontrar, son voluminosos, y si cometiste algunos errores, necesitarás una retransmisión, etc ... Si yo fuera tú, usaría algunos CPLD para hacer el toda la lógica del pegamento . Entonces puede reconfigurar las cosas fácilmente en caso de error, o si de repente desea cambiar la configuración del hardware. Incluso podría construir algunos periféricos simples (GPIO, teclado, ...) dentro del propio CPLD. Es mucho más divertido que soldar / desoldar / volver a cablear / soldar / ... chips DIP.

    
respondido por el dim

Lea otras preguntas en las etiquetas