Diseñar una instrucción usando Thumb-2

1

Estoy estudiando el Cortex-M3 de ARM. La declaración del problema dice:

  

Vamos a utilizar una arquitectura de Harvard con las siguientes capacidades de direccionamiento: palabras de código de 32M y palabras de datos de 16 bits. La arquitectura solo puede direccionar palabras completas. La CPU tiene 16 registros internos de propósito general y un Load & Estructura de la tienda. Con esta información:

     

Diseñe la codificación de cada grupo de instrucciones, minimizando al máximo el tamaño de la instrucción. El tamaño de la instrucción será un múltiplo del tamaño de la palabra. Los diferentes grupos son:

     
  • 7 instrucciones de transferencia de datos, transferencia de datos entre la memoria y los registros internos, con modo de direccionamiento directo.

  •   
  • 5 instrucciones de transferencia de datos, transferencia de datos entre la memoria y los registros internos, mediante el modo de direccionamiento indexado.

  •   
  • Se deben ejecutar 14 instrucciones aritméticas / lógicas entre registros, siendo el registro de destino el mismo que uno de los operandos de entrada.

  •   
  • 14 instrucciones aritméticas / lógicas que se ejecutarán entre registros, siendo uno de los operandos proporcionados por direccionamiento inmediato y proporcionando los resultados en el otro operando de origen.

  •   
  • 6 instrucciones de control con modo de direccionamiento inherente.

  •   
  • 7 ramas condicionales con direccionamiento relacionado con PC, siendo el direccionamiento relativo de más / menos 1M palabra

  •   

Esta es la solución propuesta que no comprendo:

Direccionamiento directo: Modo de direccionamiento directo.

Desplazamiento: cambiando.

Lo que sí sé es que el bus de direcciones de la memoria del programa debe ser de 25 bits, el bus de direcciones de la memoria de datos tiene que ser de 23 bits y el bus de datos de la memoria de datos tiene que ser de 16 bits . Se afirma que el bus de datos de la memoria del programa debe ser de 31 bits, pero no sé por qué, ya que el Thumb-2 es de 32 bits, ¿o tal vez estoy mezclando cosas?

    
pregunta Martín

2 respuestas

1

No hay una sola solución para tal asignación. La idea general es

  • para cada grupo de instrucciones, determine cuántos bits se necesitan para la información dentro del grupo. Por ejemplo, 14 instrucciones aritméticas de 2 registros necesitan un código de 4 bits y dos especificaciones de registro de 4 bits, para un total de 12 bits.

  • los bits restantes se utilizan para distinguir entre los grupos. Use codificaciones cortas para grupos que necesitan la mayoría de los bits.

  • coloca el mismo tipo de campos de bits en los mismos lugares, esto facilita la decodificación.

respondido por el Wouter van Ooijen
0

Todas sus inferencias sobre el tamaño de los autobuses son erróneas, el Cortex-M3 lo demuestra. Sin embargo, las arquitecturas mucho más antiguas muestran que usar un tamaño de bus más pequeño es posible .

Para las ramas directas de PC, el tamaño del salto es limitado. Para datos indirectos u operaciones de instrucciones, el tamaño de la dirección es de 32 bits (el tamaño del registro). Sin embargo, dado que la cantidad de instrucción más pequeña es de 2 bytes, solo necesita 31 bits de dirección de instrucción (y el acceso a bytes de la instrucción no es útil, ya que siempre debe hacer 2 al menos).

El tamaño inmediato de los datos es limitado (por codificación IV), pero puede calcular valores de datos más grandes (y almacenarlos en registros), por lo que necesita un bus de valores de datos de 32 bits.

En su diseño de código de operación, la limitación menos flexible es el tamaño de los campos Rx (y, por supuesto, los códigos de operación). Los campos 'directos' pueden reducirse para recuperar más espacio (solo se requieren más instrucciones para generar constantes arbitrarias). También puede jugar trucos como restringir los registros que ciertas operaciones (poco comunes) pueden seleccionar. Esto le permite sobrecargar los otros valores de registro para instrucciones especiales.

    
respondido por el Sean Houlihane

Lea otras preguntas en las etiquetas