Comencé a crear un esquema para una computadora basada en 8086 y ahora tengo problemas con el direccionamiento de la memoria. Sé que una línea de direccionamiento de 20 bits de ancho puede direccionar hasta 1024 KB de RAM y que el pin A0, cuando está alto, selecciona todos los bancos de memoria pares y cuando BHE está alto, se seleccionan los bancos de memoria impares (sí, sé que hay un poco más complicado circuito lógico para hacer esto).
Elegí una configuración donde hay 8 chips (6x 128 KB son chips SRAM y los 2x 128 KB restantes son chips EEPROM).
Al leer en línea, sé que al usar un M74HC138B1R (un llamado decodificador 3: 8) necesito usar A17, A18 y A19 para decodificar qué chip seleccione, terminando con las líneas A1-A16 para usar para el direccionamiento del chip. El problema surge cuando, de acuerdo con la hoja de datos IS62C1024AL (chip que deseo usar como SRAM), el chip usa 17 líneas para el 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 descifrar cómo salir de esta extraña situación y no puedo descifrar si el A0 todavía está disponible para direccionar, mi suposición siguiendo la lógica es no. Otra cosa que me parece obvia es buscar un decodificador 2:8 que aparentemente no existe.
Cualquier consejo es muy apreciado, puede ser que actualmente me esté perdiendo algo estúpido que no puedo resolver ahora.
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 las fichas en pares, usando A0
y BHE
como lo describiste. Entonces, en realidad tiene una matriz de chips de RAM de 2x3 y una matriz de EEPROM de 2x1.
No existe un decodificador de "2 a 8" precisamente porque necesita 3 bits para obtener 8 posibilidades, pero necesita un decodificador de 2 a 4:
A19
- A18
para decodificar qué par de chips RAM o EEPROM;A17
- A1
decodificar la dirección en cada par;A0
y BHE
para decodificar qué chip en el par.El 8086 tiene un bus de datos de 16 bits de ancho. Debe combinar 2 chips (8 bits de ancho) cada uno y conectar A1-A17 en 8086 a A0-A16 en los chips.
A18 y A19 deben decodificarse para selecciones de chip. 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 usar líneas de datos/direcciones multiplexadas. Esto significa que necesita usar pestillos, y es posible que deba "intercambiar bytes" de los datos cuando los bits de dirección A0 o BHE se configuran usando algunos chips lógicos adicionales.
Esto simplemente proviene del hecho de que IS62C1024AL tiene un bus de 8 bits. Mientras que el 8086 tiene un bus de 16 bits. Entonces, el chip RAM necesita 17 líneas de dirección, pero una zona de 128k del 8086 se direcciona usando 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 en 8 áreas. Entonces tiene A18 y A19 que van a un decodificador de 2 a 4 que proporcionará las selecciones de chip. Luego tienes A17-A1 que van a las líneas de dirección de cada chip de memoria.
Luego agrupe 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. Entonces tiene cuatro grupos (determinados por la selección de chip) de dos chips de memoria, cada chip conectado a la parte baja o alta del bus de datos. En total tienes tus 8 chips de 128k, aportando un total de 1Meg. Todo muy 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 la selección de chip principal . Luego, debe usar A0 y BHE como selección de chip secundario 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 alimentará CS1 de ambos chips de memoria de cada grupo, alimentará el CS2 de todos los chips de memoria de bajo byte de A0 y el 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 salidas altas activas.
Último consejo : la lógica del pegamento no es tan simple, especialmente porque el 8086 usa 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, tendrás que retransmitirlos, etc. Si yo fuera tú, usaría algo de CPLD para hacer toda la lógica del pegamento . Entonces realmente 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/recablear/soldar/... chips DIP.
Ignacio Vázquez-Abrams
flanqueador
Juan hamburguesa
A0
no está disponible. Los chips que tiene son de 8 bits y el 8086 es un bus de datos de 16 bits. El OP tiene que usarA0
como selector entre fichas altas y bajas, como dijo en el primer párrafo.flanqueador