Decodificación de direcciones en 8085

0

RAM (8KB, requiere 13 bits A0-A12)
Inicio: 0110 0000 0101 0000 (6050h)
Fin: 1000 0000 0100 1111 (804Fh)

ROM1 (8KB, requiere 13 bits A0-A12)
Inicio: 1000 0000 0101 0000 (8050h)
Fin: 1010 0000 0100 1111 (A04Fh)

ROM2 (8KB, requiere 13 bits A0-A12)
Inicio: 1010 0000 0101 0000 (A050h)
Fin: 1100 0000 0101 0000 (C04Fh)

Arriba están los mapas de direcciones. Ahora, ¿cómo diseñar un decodificador de direcciones cuando todos los 16 bits están cambiando?

    
pregunta Sushil Shakya

1 respuesta

1

La forma completamente general de decodificar un mapa de direcciones es usar un grupo de comparadores, uno para cada límite en el mapa de direcciones. Estos comparadores deben tener el ancho completo del bus de direcciones. La entrada "A" está vinculada al bus de direcciones y la entrada "B" está configurada en una constante que representa el inicio de una de las regiones de memoria. La salida es alta cuando A < B.

En su caso, el primer comparador tendría el valor 0x6050, y su resultado C1 será alto para todas las direcciones antes del inicio de la RAM.

El segundo comparador tendría el valor 0x8050, y su salida C2 será alta para todas las direcciones antes del inicio de ROM1. La selección de chip para la RAM es, por lo tanto, !C1 && C2 .

El tercer comparador tendría el valor 0xA050, y su salida C3 será alta para todas las direcciones antes del inicio de ROM2. La selección de chip para ROM1 es, por lo tanto, !C2 && C3 .

Y así sucesivamente y así sucesivamente.

La razón por la que normalmente seleccionamos los límites "naturales" para los segmentos de memoria según su tamaño es que este esquema de decodificación general se reduce a un número muy pequeño de puertas, una vez que se tienen en cuenta todos los valores constantes y "no importa" ".

    
respondido por el Dave Tweed

Lea otras preguntas en las etiquetas