¿Cómo manejó el Motorola 68000 las instrucciones en datos de 32 bits?

2

El Motorola 68k, a pesar de su bus externo de 16 bits, tenía datos de 32 bits y registros de direcciones, con soporte para instrucciones .L -width sobre cuatro bytes, que es de 32 bits en este caso.

Me imagino que esto se haría en el espacio de dos ciclos, pero me gustaría saber algunos detalles sobre cómo se ejecuta esto; específicamente, cosas como:

  • Orden de carga de datos

  • Si los datos cargados externamente se almacenan en algún almacenamiento intermedio antes de que se ejecute la instrucción que lo solicitó

  • Si hay incluso un modelo de ejecución general para datos de 32 bits en el 68k, o si el modelo de ejecución difiere entre las instrucciones

pregunta Jules

2 respuestas

3

El procesador 68000 tiene un conjunto de instrucciones bastante ortogonales y potentes con instrucciones básicas que admiten diferentes modos de direccionamiento (directo a / desde registro, indirecto con registro de dirección con y sin índice, etc.) y funciona en 8, 16 o 32 bits de datos. Los cálculos de dirección de los modos de direccionamiento son siempre de 32 bits.

El bus de datos de 16 bits solo es relevante cuando se lee o escribe en la memoria externa. La hoja de datos contiene mucha información sobre la cantidad de lecturas y escrituras que se producen dada una instrucción y su modo de dirección.

Una vista simplificada es:

  • Las lecturas y escrituras de 16 bits son fáciles ya que coinciden directamente con el ancho del bus de datos.
  • Las lecturas y escrituras de 32 bits requieren dos lecturas / dos escrituras en el bus. La hoja de datos no dice en qué orden ocurren.
  • Para lecturas y escrituras de 8 bits, el procesador indica en un pin si se debe leer el byte superior o inferior.

Cuando se requieren varias lecturas, la instrucción no se ejecuta hasta que todas las lecturas se hayan completado. Por lo tanto, desde la vista de un programador, nunca se ve que el bus solo tiene 16 bits (o 8 bits para el 68008). El modelo de programación es simple y consistente. Lo mismo ocurre con las operaciones de escritura y de 8 bits.

    
respondido por el Codo
3

Solo una respuesta parcial porque no tengo todas.

Primero un comentario sobre esta declaración: "Me imagino que esto se haría en el espacio de dos ciclos" .

En realidad, cada acceso de bus consta de 8 "estados", y cada estado es la parte positiva o negativa del reloj principal. Por lo tanto, un ciclo de bus único es siempre 4 ciclos de reloj. (Esto me molesta más de lo que debería, pero esa es otra historia). Probablemente sepa esto si está haciendo estas preguntas, pero no está de más decirlo.

Orden de carga de datos

El orden de carga de datos está realmente documentado en M68000UM / AD:

  

Cada tipo de datos se almacena en la memoria como se muestra en la Figura 2-6. Los números indican el orden de acceso a los datos del procesador.

... o es? Ahora, esa cifra me resulta un poco confusa, pero en la medida en que puedo interpretarla, los enteros siempre se leen desde la memoria comenzando en la dirección inferior.

Almacenamiento intermedio

No pude encontrar ninguna documentación sobre esto, pero arriesgaré y haré una conjetura: No lo creo .

Tomemos, por ejemplo, la instrucción más simple, AND.W (A0),D0 vs. AND.L (A0),D0 . La versión de 16 bits toma 4 ciclos para leer la única palabra de instrucción y 4 ciclos más para la dirección efectiva (A0) , que es simplemente otra lectura de 16 bits, para un total de 8 ciclos.

La versión de 32 bits especifica 6 ciclos: 4 para leer la instrucción, 2 ciclos "desconocidos" adicionales y 4 ciclos para leer los datos de 16 bits, un total de 10 ciclos.

No sé por qué, pero para mí esto indica que la ALU está procesando los 16 bits de datos uno tras otro, con el tiempo necesario para barajar todo. Esta barajadura invisible no sería necesaria si tuviera un búfer. Tal vez esto no tenga sentido cuando lo leo de nuevo.

Modelo de ejecución

El modelo de ejecución no parece estar documentado. Para operandos de tamaño palabra, la ejecución está "oculta" en el ciclo de lectura del operando. La única pista que puedo encontrar en la documentación es la sección 5.1.3 Ciclo de lectura-modificación-escritura. La información del estado muestra:

  

ESTADOS 8-11
  Las señales del bus no se modifican durante el S8-S11, durante el cual la unidad de lógica aritmética realiza modificaciones apropiadas a los datos.

Cuatro estados equivalen a 2 ciclos de reloj.

    
respondido por el pipe

Lea otras preguntas en las etiquetas