MSP430 8 vs 16 bit memory / bus?

2

Quiero asegurarme de que estoy entendiendo algo correctamente. Estoy aprendiendo el MSP430G2 (específicamente G2553 es el chip real que estoy usando).

Soy def. una nueva arquitectura de la computadora, así que ten eso en cuenta.

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

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)

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?

    
pregunta msmith1114

3 respuestas

3
  

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.

    
respondido por el crasic
2

En el MSP430, una palabra tiene 16 bits. ¿Por qué? Porque TI lo definió de esta manera.

Las direcciones de memoria tienen un tamaño de una palabra (16 bits, 2 bytes).

La CPU tiene un bus de datos de 16 bits; cuando lee una palabra, lee los dos bytes a la vez.

    
respondido por el CL.
1

"Palabra" es la cantidad de bytes que la CPU puede procesar a la vez. En otras palabras, la ALU de MSP430 tiene un ancho de 16 bits y puede procesar dos "palabras" de 16 bits a la vez.

El registro del contador de programas (PC) es de 16 bits, pero el LSB (bit menos significativo) de PC siempre se lee como 0; por lo tanto, solo puede acceder a direcciones de memoria, y la memoria debe estar alineada (la alineación de la memoria tendrá más sentido después de leer los párrafos siguientes). En una nota al margen, cada línea de ensamblador puede usar más de 1 palabra de memoria, dependiendo de dónde se encuentren la fuente y el destino.

Las direcciones de memoria también tienen 16 bits, pero cada dirección individual solo puede contener 1 byte (8 bits), por lo que para almacenar una sola instrucción se deben leer dos celdas de memoria a la vez.

Se puede acceder a cada dirección de memoria par como una palabra; esto significa que 0x200, 0x202, 0x204, etc. pueden leerse como "palabra". Sin embargo, esto no es cierto para las direcciones de memoria impares. A estos solo se puede acceder como byte. Incluso las direcciones de memoria también se pueden acceder como byte. Entonces, 0x200, 0x201 (solo byte), 0x202, 0x203 (solo byte), etc.

La forma en que se almacenan los datos en la memoria se relaciona con la endianess. MSP430 es little endian, por lo que el "final" (LSB) se almacena en la dirección "little". Por lo tanto, si almacena un valor de 32 bits en la dirección 0x300, MSB estará en 0x303 y LSB estará en 0x300.

Algunos MSP430 tienen una CPUx en lugar de un "núcleo" de la CPU, y son capaces de abordar un bus de direcciones de 20 bits de ancho. Sin embargo, MSP430G2553 no tiene CPUx.

    
respondido por el Luis Emilio López López

Lea otras preguntas en las etiquetas