2012-01-12 3 views
8

Je suis tombé sur le jeu d'instructions ARM dans les années 80, et je ne l'ai pas utilisé depuis. Par curiosité, je regardais les tablettes et autres appareils ARM et notez que les processeurs sont produits par différents fabricants. J'ai fait une recherche rapide mais je n'ai pas pu trouver une déclaration définitive comme si les différentes puces ARM ont différents ensembles d'instructions.Est-ce que différents fabricants ARM fournissent différents jeux d'instructions?

Je suppose que dans l'ensemble, ils sont les mêmes.

+1

Il est probablement plus correct de dire les fournisseurs de puces qui ont des cœurs ARM sous licence. Comme la plupart des fabricants de puces ne fabriquent pas de puces, ils embauchent quelqu'un pour fabriquer des puces, ils ne fabriquent pas non plus le processeur ARM, ils achètent le code d'ARM et l'ajoutent à leur conception de puces. –

Répondre

6

Allez à http://infocenter.arm.com à gauche sous le contenu recherchez l'architecture ARM. Et sous ce manuel de référence. Auparavant, il y avait un seul ARM ARM (ARM Architecture Reference Manual), mais la famille a grandi au point de devoir le découper en familles.

Les bras ARM vont vous montrer les jeux d'instructions. Ce que je pense qu'ils appellent le manuel ARMv5 est l'ancien bras ARM. Vous trouverez les instructions ARM (32 bits) et les instructions du pouce (16 bits). Pour chaque instruction, ils listent quelle architecture le supporte, donc vous pourriez voir une instruction ARMv5 qui n'est pas supportée par l'ARMv4 (ARMv4 a.k.a ARM7, comme le noyau populaire ARM7TDMI). Les instructions Thumb sont supportées par ARMv4T et plus récentes, etc.

Il y a donc le jeu d'instructions du noyau de 32 bits auquel vous avez pu être habitué avec de nouvelles instructions ajoutées de temps en temps et des bugs/restrictions corrigés (ldr r0, [ r0] par exemple), etc

L'unité à virgule flottante a fait l'objet d'une ou deux révisions, la plupart des processeurs n'ont pas de CPU et ceux qui ont un FPU ne signifient pas que le fournisseur de puce l'a inclus dans la puce. le fpa étant le plus vieux, le vfp étant plus nouveau et maintenant le néon. Si vous faites attention, tout cela tombe dans la catégorie des instructions de coprocesseur générique. Mais vous ne devez pas savoir/utiliser la version du coprocesseur qu'ils ont des alias pour tout.

Il y avait/était ce java/jazelle chose, la même histoire que certains noyaux pourraient avoir comme option ne signifie pas le fournisseur l'a inclus.

Au moins deux jeux d'extensions pouce2 pour le jeu d'instructions de pouce. Avant thumb2 extensions les instructions de pouce étaient tous 16 bits et avaient un mappage un à un à une instruction ARM, il est logique que vous avez seulement besoin d'un noyau ARM, le décodeur traduit de l'instruction plus petite instruction ARM et nourrit cela au noyau. Toutes les instructions sont en 16 bits sauf la branche, et si vous regardez ce modèle, vous pouvez facilement le décoder comme deux instructions séparées de 16 bits. J'ai un simulateur btw si vous voulez jouer avec juste des instructions de pouce http://github.com/dwelch67/thumbulator. Alors ils décident de rendre leur offre de microcontrôleur plus petite, au lieu de tout le monde utilisant l'ARM7TDMI et consommant la taille et la puissance de la puce, les processeurs compatibles thumb2 ne sont pas compatibles avec le pouce, ils ne supportent pas les instructions ARM. sont traduits en, etc. nouveau noyau. Les ARMv6-M aka Cortex-m0 et Cortex-m1 prennent le jeu d'instructions et ajoutent quelques instructions 32 bits pour fermer l'écart de performance à ARM (le pouce était plus petit oui, mais un peu plus lent que ARM si vous compiliez le même code tous les deux, il a fallu comme 10-20% plus d'instructions de mes expériences pour utiliser le pouce). En théorie, pouce-2 (ARMv7-M) surpasse ARM quand et où vous pouvez les comparer. Pour quelque raison que ce soit, le Cortex-m3 est sorti en premier, qui est ARMv7-M et a un tas d'instructions de pouce 32 bits ajoutées au jeu d'instructions de pouce. J'ai récemment compté et ARMv6-M ajouté comme 20, ARMv7-M a comme 140-150 instructions ajoutées à l'ensemble d'instructions de pouce de base. thumb2 est essentiellement une longueur de mot variable. Et encore ne fonctionne que sur la série cortex-m.En y regardant de plus près, ils ont presque reconstitué le jeu d'instructions ARM sous le nom de pouce. pas complètement mais vous récupérez beaucoup de bras comme des instructions, trois registre au lieu de deux, pouvant atteindre des registres plus élevés et utiliser des immédiates, etc. Cela a provoqué un désir d'écrire asm compilé pour ARM et pouce/pouce2. Ils ont donc trouvé une syntaxe unifiée. vous pouvez écrire une instruction comme

add r0,r1 

Si l'assemblage pour le pouce, c'est l'instruction, si le montage pour le bras ils le convertir en

add r0,r0,r1 

pour vous, au lieu de toutes les erreurs de syntaxe. Vous devez spécifier que vous utilisez la syntaxe unifiée, au moins avec l'assembleur gnu binutils (gaz).

Un ensemble de documents tout aussi important est les manuels de référence technique, également à infocenter.arm.com. Chaque noyau a un trm, en fait chaque tour de chaque noyau a un TRM. De plus, les éléments de coût supplémentaire, tels que les caches L2, ont leur propre TRM, pour chaque rev. Il est important de connaître le noyau acheté/utilisé par le vendeur de puces et si possible la révision (rev 2.0 r2p0, rev 1.0 r1p0, etc.) car il existe des différences de programmation ainsi que des différences d'errata entre eux (ne faites pas confiance à Linux comme référence! , c'est un gros gâchis, chaque fois que je regarde encore une autre société a complètement mal compris et mal appliqué les différences de base/errata, c'est un peu un désastre pour le moment). Parfois, le message TRM contient des informations d'instructions, ou donne une image plus claire de ce que ce noyau supporte et ne supporte pas. Les ARM ARM sont génériques ils couvrent toute la famille ou un certain nombre de familles de noyaux, où le TRM est très spécifique à un noyau. Un exemple de confusion entre l'ARM ARM et le TRM est qu'en regardant l'ARM ARM vous pourriez avoir l'impression que vous pouvez utiliser les modes big endian BE-32 ou BE-8, la réalité est que vous avez l'un ou l'autre ARMv6 et plus récent est BE-8, période, s'habituer. ARMv5 et ARMv4 est BE-32 ou avant ARMv6 juste appelé big endian. Je recommande fortement de ne PAS utiliser le gros boutiste sur un bras malgré ce que vous pensez en tirer. aller avec le mode natif et vous vous économiserez une tonne de travail et d'échec. Je le mentionne d'expérience personnelle en essayant de comprendre pourquoi les bits décrits dans un ARM ARM ne fonctionnent tout simplement pas dans le noyau que j'utilisais.

Un noyau de 64 bits est quelque part dans la phase de développement, je ne serais pas surpris si cela est fait et à la recherche de quelqu'un pour appuyer sur la gâchette et l'utiliser. En fait, le document ARMv8 est disponible, téléchargeable maintenant. Sous la rubrique ARM Architecture, vous trouverez tous les documents décrivant les différents jeux d'instructions ainsi que les améliorations/ajouts dans le temps à ces jeux d'instructions.

+0

les instructions de pouce "toutes les variantes de pouce" sont les plus portables car elles fonctionnent de l'ARMv4T à travers au moins l'ARMv7. Je n'ai pas encore regardé l'ARMv8 64 bit. –

2

Il existe quelques variantes courantes d'ensembles d'instructions, UAL, Thumb et Thumb2 étant les plus courantes. Certains cœurs ARM qui contiennent du matériel spécialisé (comme les DSP) étendent également la langue.

2

Nop. il n'y a pas de différence (à propos du jeu d'instructions) entre le fabricant. Ils respectent tous la spécification ARM.

Une extension en option. C'est le cas de NEON. Mais, autant que je sache, seul le Tegra 2 n'inclut pas cette extension. C'est pourquoi, le tegra 2 est un très mauvais processeur pour le décodage vidéo (par exemple).

Questions connexes