Decodificación de direcciones desde el mapa de memoria

0

Estoy luchando para encontrar los bits que no importan cuando tengo un sistema de memoria mapeada con varios dispositivos conectados.

El mapa de memoria está dado por

Necesitoaveriguarquébitsdebopasaraldecodificadordedireccionesyquébitsson"No importa".

Sé que la respuesta a esta pregunta es: A15 - A4 son los bits que importan y A3-A0 no importa.

¿Puede alguien publicar un método paso a paso sobre cómo encontrarlos?

¡Gracias!

P.S. No estaba seguro de dónde debería publicar esta pregunta. Siéntase libre de moverla a otro sitio de la pila como mejor le parezca.

    
pregunta stackErr

1 respuesta

5

Si quiere descubrirlo, el primer paso que haría es diseñar los rangos en bits

         1111 11
         5432 1098 7654 3210
         -------------------
0x1000 = 0001 0000 0000 0000 serial
0x100F = 0001 0000 0000 1111

0x1010 = 0001 0000 0001 0000 parallel
0x101F = 0001 0000 0001 1111

0x8000 = 1000 0000 0000 0000 memory
0xFFFF = 1111 1111 1111 1111

Ahora, basado en el comentario que hiciste " A15 - A4 son los bits que importan y A3-A0 no importa. " Me hace pensar que solo necesitas seleccionar si va a la memoria , serie o paralelo. No nos importa decir la diferencia entre el mínimo o el máximo de un rango, solo que estamos dentro del rango. Entonces, lo que debemos hacer es detectar si los bits son únicos para todo el rango.

Si observa el gráfico anterior, podemos ver que podemos ver la diferencia entre un Serial y un paralelo al verificar si el bit 4 está configurado. Ahora para saber si estamos usando uno de los IO o si estamos usando la memoria, necesitamos ver si el bit 15 está establecido.

Podemos ver esto más fácilmente si ocultamos los bits que no nos afectan

         1111 11
         5432 1098 7654 3210
         -------------------
0x1000 = 0XXX XXXX XXX0 XXXX serial
0x100F = 0XXX XXXX XXX0 XXXX

0x1010 = 0XXX XXXX XXX1 XXXX parallel
0x101F = 0XXX XXXX XXX1 XXXX

0x8000 = 1XXX XXXX XXXX XXXX memory
0xFFFF = 1XXX XXXX XXXX XXXX

Así que solo necesitamos 2 bits para poder elegir el dispositivo que queremos, su multiplexor se verá así

         MUX
      -----------
 A4 --| 0    00 |--- Serial
      |         |
      |      01 |--- Parallel
      |         |    ___
A15 --| 1    10 |---\   \
      |         |    |   >--- Memory
      |      11 |---/___/  
      -----------   (^--- That is a OR gate)

Acceder a algo que no se encuentra en uno de los 3 rangos definidos dará " comportamiento indefinido ". Si no quieres un comportamiento indefinido, entonces debes definirlo . ¿Qué sucederá cuando intente acceder a una dirección en el rango de 0x0020 a 0x7FFF ?

Aquí hay un esquema completo de la configuración original, no pude hacer líneas más gruesas para los autobuses. Simplemente asuma que A0 en un lado coincide con A0 en el otro. CS es Chip Select.

    
respondido por el Scott Chamberlain

Lea otras preguntas en las etiquetas