Entonces, a partir de la hoja de datos / libros que estoy leyendo, el bus de datos / direcciones tiene 16 bits de ancho (2 bytes). Y el tamaño de una palabra es de 16 bits (2 bytes) (aunque todavía no estoy seguro de qué significa la palabra en este contexto).
Un address
es conceptualmente un puntero a una ubicación en la memoria, esta ubicación en la memoria generalmente se define para contener una arquitectura word
.
Para la mayoría de los propósitos, el word size
representa la unidad direccionable más pequeña. Y el address size
dicta el número máximo de unidades direccionables. El tamaño de la dirección también se puede definir como el tamaño del registro que contiene un puntero para direccionar algo de memoria.
Instrucciones vs Datos:
En muchas CPU modernas hay un instruction bus
y data bus
separados y distintos con sus propios instruction bus width
y data bus width
(instrucción y datos word size
) así como instruction address width
y data address width
. También pueden existir buses de memoria adicionales (con su propio esquema de direccionamiento)
Por conveniencia, estos tamaños se pueden elegir para que coincidan de modo que se mezclen datos e instrucciones ( Arquitectura de Harvard modificada ) en el mismo Se simplifica el hardware de la memoria física. En el caso de la serie MSP430, utilizan una arquitectura de von Neumann donde las palabras y las instrucciones se cargan y ejecutan desde el mismo espacio de direcciones.
Sin embargo, las direcciones de memoria solo tienen un tamaño de 8 bits (1 byte). ¿Entonces cada vez que enviamos una palabra? o Opcode, ¿lo estamos almacenando en 2 direcciones de memoria? (Leí que el MSP430 solo mira el BYTE significativo más bajo y que tiene que ser par)
En este cpu, el word size
es de hecho 16 bits . Sin embargo, hay múltiples modos de direccionamiento disponibles según el código de operación. En la mayoría de los modos de direccionamiento, la dirección apunta a un word
de memoria o un desplazamiento. Ciertas instrucciones pueden permitir subdireccionar en la palabra (y usted puede extender implícitamente el address width
de la arquitectura en este modo), a menudo con fines de optimización (empaquetado de instrucciones e instrucciones vectorizadas).
Geometría de memoria física
El diseño de la memoria física no necesariamente coincide con el ancho de la arquitectura. Por lo tanto, la transacción entre la memoria física y el caché de instrucciones de la CPU puede ocurrir de varias maneras y no es necesariamente importante si carga una palabra a la vez o no.
Entonces, si estuviéramos almacenando una palabra o instrucción (no estoy seguro de si significan lo mismo en este contexto). Estábamos almacenando el LSB en la ubicación de memoria inferior (como 0x0200) y el MSB (byte) en 0x0201, por ejemplo. ¿Pero la CPU solo está leyendo el LSB? ¿Esto es correcto?
Conceptualmente, la instrucción ocupa un word
de memoria y se lee de la memoria de instrucciones en una sola pieza, la instrucción ocupa una sola dirección 0x0200
apunta a un 16% word
, debido a que el byte se dirige a la siguiente palabra comienza dirección 0x2002, si simplemente enmascara el último bit, se trata de una dirección de 15 bits que se incrementa en uno. El bit de índice de bytes adicional se enmascara para todas las operaciones de dirección de palabra.
También es posible que la SDRAM física o la Memoria Flash estén organizadas por bytes individuales o incluso por varios cientos de bytes y que el controlador ram (un dispositivo de hardware) traduzca la dirección de la arquitectura a una dirección que tenga sentido para la memoria física, pero este es un detalle de implementación y no un detalle de arquitectura y no dicta la Dirección y el Ancho de datos
Direccionamiento de memoria en opcodes
Algunas instrucciones requerirán que haga referencia a una dirección en la memoria como parte de la instrucción (agregar, etc.). Si tiene direcciones de 16 bits e instrucciones de 16 bits, ahora hay una manera de almacenar la información de operación y una dirección completa en un solo código de operación / instrucción.
En este caso, se utiliza un esquema de enmascaramiento o desplazamiento.
Es muy común que la interacción con direcciones de instrucciones (bifurcaciones y saltos) se definan como compensaciones del puntero de instrucción dado o enmascarándolas con el. Esto le permite almacenar un desplazamiento como 4/8/12 bits y le permite usar códigos de operación de 16 bits con memoria dentro del código de operación.
Una alternativa es un código de operación que utiliza un registro o una dirección de memoria de datos que almacena una dirección de memoria completa.
En este caso, la arquitectura de la CPU está diseñada para funcionar en modos de bytes o direccionados por palabra.