¿Es el código escrito en ARM7 compatible con ARM9?

3

Estoy estudiando familias ARM,

En la imagen anterior, está escrito que el código de ARM7 compatible se puede migrar a ARM9 y otros.

ARM7 utiliza la arquitectura de Von-Neumann (un solo bus para datos e instrucciones) y la canalización de 3 etapas (es decir, buscar, decodificar y ejecutar). ARM9 y otros utilizan la arquitectura de Harvard (bus separado para datos e instrucciones) y 5 etapas (captura, decodificación, ejecución, memoria y escritura (para ARM9)). Además, ARM7 no admite una unidad de administración de memoria, pero otros sí lo hacen.

¿Cómo puede ser compatible el código si los procesadores utilizan arquitecturas y tuberías diferentes? ¿No habrá ningún efecto de las arquitecturas en los códigos?

Supongo que, como ARM9, ARM10, ARM11 tienen las mismas arquitecturas, el código puede ser compatible, pero ARM7 es diferente de otros procesadores. Por lo tanto, uno debe hacer algunos cambios en el código antes de migrar debido a arquitecturas diferentes. Me pregunto si es correcto o no.

    
pregunta Krishna Shweta

4 respuestas

17

Se dice que un procesador es compatible con el código de otro si su conjunto de instrucciones es compatible. Eso es todo lo que hay que hacer.

Ahora, los conjuntos de instrucciones pueden hacerse compatibles independientemente de su arquitectura de canalización. Es correcto que la canalización pueda tener una consecuencia en las instrucciones si solo tiene como objetivo la velocidad de ejecución y el área del núcleo de silicio, pero siempre hay soluciones alternativas si necesita garantizar cierta compatibilidad con algún procesador existente. Puede complejar el núcleo, pero siempre hay un camino. Mira cómo evolucionó la arquitectura desde el 8086 hasta los Pentium más nuevos. Sin embargo, todavía se puede ejecutar el código antiguo.

Con respecto a las diferencias de Von Neumann / Harvard, también se puede hacer que tenga un impacto mínimo si el código y los buses de datos terminan en los mismos bloques de memoria física con las mismas direcciones (que es el caso en todas las implementaciones de ARM que tengo). visto, excepto tal vez para las zonas de memoria periférica). Puede haber un impacto en los casos de esquina, como la necesidad de llamar a instrucciones específicas cuando el código se modifica automáticamente, pero en los casos normales, no lo notará.

Respecto a la gestión de memoria, esa es otra historia. Esto tiene un impacto en el nivel del sistema operativo. La MMU es como un periférico adicional, cuya configuración tiene un impacto en el diseño de la memoria, pero no cambia el conjunto de instrucciones. Un algoritmo se codifica de la misma manera si hay una MMU o no.

    
respondido por el dim
12

La idea de que "el código se puede migrar" significa que las instrucciones producirán el mismo resultado final. La arquitectura o el número de etapas de la tubería no afectan eso. p.ej. el código para la instrucción:

add r0,r1,r2 

Será el mismo en ambas máquinas y producirá el mismo resultado: r0 termina siendo la suma de r1 y r2. La latencia puede ser más larga. p.ej. en un ARM7 toma 3 ciclos y en un ARM 9 toma 5 ciclos. Pero ese será el caso de todas las instrucciones, por lo que el resultado neto será el mismo.

El tiempo real depende de la velocidad del reloj. Por lo tanto, el ARM9 puede ser más rápido a pesar de tomar 5 relojes porque, por ejemplo, El ARM7 puede estar funcionando a 100MHz y el ARM9 a 3 GHz.

La MMU en el ARM9 será "transparente" después de un restablecimiento, por lo que no notará que está presente. Al menos mientras no lo programes, el código ARM7 no funcionará, ya que no debería haber ningún código para tocar la MMU.

Una arquitectura de Harvard no significa que el código se ejecute de manera diferente. De hecho, aún debe decodificar la instrucción antes de saber qué datos buscar / escribir. Solo permite que la siguiente instrucción llegue y se decodifique al mismo tiempo que se leen / escriben los datos.

Habiendo dicho todo eso, recuerdo que hubo un problema que derivaba de la instrucción, pero que puede haber sido cuando transferí el ensamblador a un núcleo A53.

    
respondido por el Oldfart
4
  

ARM9 y otros utiliza la arquitectura de Harvard (bus separado para datos e instrucciones)

Esto es inexacto. Una CPU de arquitectura de Harvard tiene memorias separadas para código y datos; este no es el caso en ninguna implementación de la arquitectura ARM. Hay buses separados para instrucciones y datos en algunas implementaciones, pero siempre están conectados a la misma memoria.

  

¿No habrá ningún efecto de las arquitecturas en los códigos?

La canalización es un detalle de implementación. No afecta el modelo de CPU del programador; en casi todas las circunstancias, el mismo código se ejecutará de la misma manera en ambas implementaciones. (Todas las excepciones son inusuales, como el código de auto-modificación).

    
respondido por el duskwuff
3

Todo lo que se refiere a "arquitectura" aquí es cómo la CPU está conectada a la memoria: la mayoría de las instrucciones y sus codificaciones y los registros son iguales entre los dos chips, la única forma en la que podría encontrar problemas con la diferencia. entre un harvard y otras arquitecturas, o el número de etapas de tubería podría ser si estuviera escribiendo un código en la memoria y luego ejecutándolo ... solo debe tener cuidado al invalidar las cachés

Algunas cosas, como las excepciones y similares, pueden ser diferentes

    
respondido por el Taniwha

Lea otras preguntas en las etiquetas