2012-01-12 20 views
8

Encontré por primera vez el conjunto de instrucciones ARM en los años 80, y no lo he usado desde entonces. Por curiosidad, estaba mirando las tabletas y otros dispositivos ARM y noté que las CPU son producidas por diferentes fabricantes.¿Los diferentes fabricantes de ARM ofrecen diferentes conjuntos de instrucciones?

Hice una búsqueda rápida pero no pude encontrar una declaración definitiva de si los diferentes chips ARM tienen diferentes conjuntos de instrucciones.

Supongo que, en general, son lo mismo.

+1

Probablemente sea más correcto decir que los proveedores de chips tienen núcleos ARM con licencia. Como la mayoría de las compañías de chips no fabrican chips, contratan a alguien para fabricar chips, y tampoco fabrican el procesador ARM, compran el código de ARM y lo agregan al diseño de sus chips. –

Respuesta

6

goto http://infocenter.arm.com a la izquierda debajo de contenido buscar arquitectura ARM. Y debajo de esos Manuales de Referencia. solía haber un solo ARM ARM (ARM Architecture Reference Manual) pero la familia ha crecido hasta el punto en que tuvieron que dividirlo en familias.

Los ARM ARM le mostrarán los conjuntos de instrucciones. Lo que creo que llaman el manual ARMv5 es el antiguo ARM ARM. Encontrará las instrucciones ARM (32 bits) y las instrucciones del pulgar (16 bits). Para cada instrucción, enumeran qué arquitectura lo admite, por lo que es posible que vea una instrucción ARMv5 que no es compatible con ARMv4 (ARMv4 a.k.a ARM7, como el popular núcleo ARM7TDMI). Las instrucciones para el pulgar son compatibles con ARMv4T y más reciente, etc.

Así está el conjunto de instrucciones básicas del brazo de 32 bits al que puede haber estado acostumbrado con nuevas instrucciones añadidas de vez en cuando y errores/restricciones corregidos (ldr r0, [ r0], etc.

La unidad de coma flotante ha tenido una o dos revisiones, la mayoría de los núcleos no tienen un fpu y los que tienen un fpu no significan que el proveedor del chip lo haya incluido en el chip. el fpa es el más viejo, el vfp es más nuevo y ahora es de neón. Si presta atención, todos estos pertenecen a la categoría de instrucciones genéricas del coprocesador. Pero no tiene que saber/usar la versión del coprocesador, ellos tienen alias para todo.

Hay/era algo de java/jazelle, la misma historia que algunos núcleos pueden tener como opción no significa que el proveedor lo incluyó.

Al menos dos conjuntos de extensiones thumb2 para el conjunto de instrucciones de pulgar. Antes de las extensiones thumb2, las instrucciones thumb eran todas de 16 bits y tenían una correlación de uno a uno con una instrucción ARM, tiene sentido que solo necesites un núcleo ARM, el decodificador traduce de la instrucción más pequeña a la instrucción ARM y la transmite al núcleo. Todas las instrucciones son de 16 bits, excepto la rama, y ​​si observa ese patrón, puede decodificar fácilmente eso como dos instrucciones separadas de 16 bits. Tengo un simulador por cierto si quieres jugar con solo las instrucciones http://github.com/dwelch67/thumbulator. Entonces, deciden hacer que su microcontrolador sea más pequeño, en lugar de que todos usen el ARM7TDMI y consuman el tamaño y potencia del chip, los procesadores con capacidad thumb2 solo son pulgares, no admiten instrucciones ARM de 32 bits, no hay un núcleo ARM que las instrucciones pulgares se traducen a, etc. nuevo núcleo. El ARMv6-M también conocido como Cortex-m0 y Cortex-m1 toma el conjunto de instrucciones de pulgar y agrega algunas instrucciones de 32 bits para cerrar la brecha de rendimiento a ARM (el pulgar era más pequeño, pero un poco más lento que ARM si compiló el mismo código ambos, tomaron como 10-20% más instrucciones de mis experimentos para usar el pulgar). En teoría, thumb-2 (ARMv7-M) supera a ARM cuando y donde puede compararlos. Por alguna razón, el Cortex-m3 salió primero, que es ARMv7-M y tiene un montón de instrucciones thumb2 de 32 bits agregadas al conjunto de instrucciones del pulgar. Recientemente conté y ARMv6-M agregó como 20, ARMv7-M tiene como 140-150 instrucciones agregadas al conjunto de instrucciones base de pulgar. thumb2 es básicamente una longitud de palabra variable. Y nuevamente solo se ejecuta en la serie de cortex-m.Mirándolo, es casi como si hubieran reconstruido la instrucción ARM establecida nuevamente bajo el nombre pulgar. no completamente, pero recuperas muchas instrucciones de brazo, tres registras en lugar de dos, puedes alcanzar registros más altos y usar inmediatos, etc. Lo que esto causa es un deseo de escribir asm compilado para ARM y thumb/thumb2. Entonces se les ocurrió una sintaxis unificada. usted puede escribir una instrucción como

add r0,r1 

Si montaje para el pulgar, que es la instrucción, si el montaje de brazo que lo convertirá a

add r0,r0,r1 

para usted, en lugar de los errores de sintaxis. Debe especificar que está utilizando la sintaxis unificada, al menos con el ensamblador gnu binutils (gas).

Un conjunto igualmente importante de documentos son los manuales de referencia técnica, también en infocenter.arm.com. Cada núcleo tiene un trm, en realidad cada rev de cada núcleo tiene un TRM. Además, los artículos de costo adicional como los cachés L2 tienen su propio TRM, por cada rev. es importante averiguar qué núcleo compró/usó el proveedor del chip y si es posible la revisión (rev 2.0 r2p0, rev 1.0 r1p0, etc.) ya que hay diferencias de programación así como diferencias de errata entre ellos (¡no confíe en Linux como referencia! , es un gran desastre, cada vez que veo que otra compañía ha entendido mal y ha aplicado mal las diferencias núcleo/errata, es un desastre en este momento). A veces, el TRM incluye información de instrucciones, o pinta una imagen más clara de lo que ese núcleo admite y no admite. Los ARM ARM son genéricos y cubren toda la familia o varias familias de núcleos, donde el TRM es muy específico para un núcleo. Un ejemplo de confusión entre ARM ARM y TRM es que al mirar ARM ARM puede tener la impresión de que puede usar los modos BE-32 o BE-8 big endian, la realidad es que tiene uno u otro ARMv6 y más nuevo es BE-8, punto, acostúmbrate a él. ARMv5 y ARMv4 es BE-32 o antes de que ARMv6 acaba de llamar a big endian. Recomiendo NO usar Big Endian en un brazo a pesar de lo que piensas que puedes obtener de él. vaya con el modo nativo y se ahorrará un montón de trabajo y fracaso. Lo menciono por experiencia personal tratando de descubrir por qué los bits descritos en un ARM ARM simplemente no funcionaban en el núcleo que estaba usando.

Un núcleo de 64 bits se encuentra en algún punto de la fase de desarrollo, no me sorprendería si estuviera hecho y simplemente buscara a alguien que aprete el gatillo y lo use. En realidad, el documento ARMv8 está disponible, descargando ahora.

Respuesta corta infocenter.arm.com en ARM Architecture se encuentran todos los documentos que describen los diferentes conjuntos de instrucciones, así como las mejoras/adiciones a lo largo del tiempo a esos conjuntos de instrucciones.

+0

las instrucciones del "variante del pulgar" son las más portátiles, ya que funcionan desde el ARMv4T hasta al menos el ARMv7. Todavía no he examinado el ARMv8 de 64 bits. –

2

Existen algunas variaciones comunes de conjuntos de instrucciones, siendo UAL, Thumb y Thumb2 los más comunes. Algunos núcleos ARM que contienen hardware especializado (como DSP) también extienden el idioma.

2

Nop. no hay diferencia (sobre el conjunto de instrucciones) entre el fabricante. Todos ellos respetan la especificación ARM.

Algunas extensiones son opcionales. Este es el caso de NEON.

Pero, hasta donde yo sé, solo el Tegra 2 no incluye esta extensión. Por eso, el tegra 2 es un procesador muy malo para la decodificación de video (por ejemplo).

Cuestiones relacionadas