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" ".