Sí, es perfectamente posible mezclar dispositivos de diferentes tamaños en el mismo espacio de direcciones. De hecho, se realiza todo el tiempo en microcontroladores en los que el tamaño de la ROM, la RAM y varios dispositivos de E / S asignados en la memoria son a menudo muy diferentes. Simplemente tiene que decidir dónde se ubicará cada dispositivo dentro de su espacio de direcciones, asigne a cada dispositivo tantas líneas de direcciones como sea necesario para seleccionar entre las diferentes ubicaciones que posee e implemente la decodificación de direcciones adecuada con las líneas de direcciones restantes. / p>
Este es un ejemplo simple de cómo puede tener cuatro tipos de dispositivos que ocupan la totalidad de un espacio de direcciones de 64K. El primer decodificador activa el dispositivo 32K cuando A15 está bajo; cuando A15 es alta, activa el segundo decodificador. Esto a su vez activa el dispositivo 16K cuando A14 está bajo; cuando está alto, activa el decodificador final, que utiliza A13 para determinar cuál de los dispositivos de 8K debe activar.
Obviamente, puede extender esto a cualquier número de dispositivos de memoria y decodificadores. Puede terminar usando de 1 a 4 o de 1 a 8 decodificadores, dependiendo del tamaño del dispositivo, pero hay varias cosas que debe tener en cuenta. A medida que encadena más decodificadores de este tipo, los retrasos de propagación aumentarán, por lo que deberá asegurarse de que la decodificación se produzca con la rapidez suficiente para permitir que la memoria se ejecute a la velocidad que desee. Puede ser más práctico usar algún tipo de lógica programable para crear las señales de habilitación desde las líneas de dirección; Esto también puede darte más flexibilidad de diseño.
La otra cosa que debe tener en cuenta al agregar más dispositivos es la carga en la dirección y las líneas de datos. El almacenamiento en búfer de las líneas de dirección es bastante simple, pero el bus de datos necesitará un almacenamiento en búfer bidireccional y eso requerirá más lógica para controlar.
Finalmente, puede que no sea necesario descodificar completamente el espacio de direcciones. Si es lo suficientemente grande en comparación con el tamaño de sus dispositivos, y no los necesita para sentarse en un rango de direcciones contiguas, puede dividirlos en bloques del mismo tamaño que el dispositivo más grande (o incluso más grande) y usar una sola Decodificador con suficientes salidas. Esto suele ser más práctico cuando se combina una gran cantidad de dispositivos de E / S que tienen solo una pequeña cantidad de ubicaciones; las direcciones simplemente se repiten una o más veces dentro de cada división. O puede decodificar completamente algunas partes del espacio de direcciones, pero solo usar decisiones parciales para otras; todo depende de tu aplicación.
La otra forma de evitar tener que descodificar completamente el espacio de direcciones es usar una Unidad de administración de memoria de alguna forma que pueda asignar las direcciones físicas a un rango contiguo de direcciones lógicas.