2012-01-12 18 views
8

Ho incontrato per la prima volta il set di istruzioni ARM negli anni '80, e da allora non lo uso. Per curiosità, stavo guardando i tablet e altri dispositivi ARM e ho notato che le CPU sono prodotte da diversi produttori.I diversi produttori di ARM forniscono diversi set di istruzioni?

Ho fatto una ricerca rapida ma non sono riuscito a trovare una dichiarazione definitiva come se i diversi chip ARM avessero insiemi di istruzioni differenti.

Suppongo che nel complesso siano uguali.

+1

Probabilmente è più corretto dire venditori di chip che hanno core ARM con licenza. Dato che la maggior parte delle aziende di chip non producono chip, assumono qualcuno per creare chip, né fanno il processore ARM, acquistano il codice da ARM e lo aggiungono al loro chip design. –

risposta

6

goto http://infocenter.arm.com lungo il lato sinistro sotto contenuti per l'architettura ARM. E sotto i manuali di riferimento. c'era un singolo ARM ARM (ARM Reference Reference Manual), ma la famiglia è cresciuta al punto da doverla suddividere in, beh, famiglie.

I BRACCIO ARM stanno per mostrarvi i set di istruzioni. Quello che penso chiamano il manuale ARMv5 è il vecchio ARM ARM. Troverete le istruzioni ARM (32 bit) e le istruzioni pollice (16 bit). Per ciascuna istruzione viene elencata l'architettura supportata, quindi potresti visualizzare un'istruzione ARMv5 non supportata da ARMv4 (ARMv4 a.k.a ARM7, come il popolare core ARM7TDMI). Le istruzioni per il pollice sono supportate da ARMv4T e versioni successive, ecc.

Quindi c'è il set di istruzioni nucleo a 32 bit che potrebbe essere stato utilizzato con nuove istruzioni aggiunte di volta in volta e bug/restrizioni corrette (ldr r0, [ r0] per esempio), ecc.

L'unità in virgola mobile ha avuto una o due revisioni, la maggior parte dei core non ha una fpu e quelli che hanno una fpu che non significa che il fornitore di chip lo ha incluso nel chip. la fpa è la più vecchia, vfp è più nuova e ora è neon. Se si presta attenzione, tutti rientrano nella categoria di istruzioni generiche del coprocessore. Ma non devi sapere/usare la versione del coprocessore che hanno alias per tutto.

C'è/c'era questa cosa java/jazelle, la stessa storia che alcuni core potrebbero avere come opzione non significa che il venditore lo abbia incluso.

Almeno due serie di estensioni thumb2 al set di istruzioni pollice. Prima delle estensioni thumb2 le istruzioni del pollice erano tutte a 16 bit e avevano una mappatura da 1 a 1 a un'istruzione ARM, ha senso solo un core ARM, il decodificatore traduce dall'istruzione più piccola all'istruzione ARM e lo alimenta al core. Tutte le istruzioni sono 16 bit eccetto il ramo, e se si guarda a quel modello si può facilmente decodificarlo come due istruzioni separate a 16 bit. Ho un simulatore per se vuoi giocare con le istruzioni pollice http://github.com/dwelch67/thumbulator. Quindi, decidono di ridurre l'offerta di microcontrollori, invece di usare semplicemente ARM7TDMI e consumano dimensioni e potenza del chip, i processori thumb2 sono solo thumb, non supportano le istruzioni ARM a 32 bit, non c'è il core ARM che le istruzioni del pollice sono tradotti in, ecc. nuovo core. L'ARMv6-M aka Cortex-m0 e Cortex-m1 prendono il set di istruzioni del pollice e aggiungono alcune istruzioni a 32 bit per chiudere il gap di prestazioni su ARM (il pollice era più piccolo sì, ma un po 'più lento di ARM se si compilava lo stesso codice per entrambi hanno richiesto il 10-20% in più di istruzioni dai miei esperimenti per usare il pollice). In teoria, thumb-2 (ARMv7-M) supera le ARM quando e dove è possibile confrontarle. Per qualche ragione è uscito il primo Cortex-m3 che è ARMv7-M e ha un paio di istruzioni thumb2 a 32 bit aggiunte al set di istruzioni del pollice. Recentemente ho contato e ARMv6-M aggiunto come 20, ARMv7-M ha come 140-150 istruzioni aggiunte al set di istruzioni del pollice di base. thumb2 è fondamentalmente una lunghezza di parole variabile. E di nuovo funziona solo sulla serie cortex-m.Guardandolo è quasi come se avessero ricostruito di nuovo il set di istruzioni ARM sotto il nome thumb. non completamente ma si ottengono un sacco di istruzioni come il braccio, tre registrano invece di due, essendo in grado di raggiungere registri più alti e usare immediatamente, ecc. Ciò che ciò ha causato è il desiderio di scrivere asm compilato sia per ARM che per thumb/thumb2. Quindi hanno trovato una sintassi unificata. è possibile scrivere un'istruzione come

add r0,r1 

Se assemblaggio per pollice, che è l'istruzione, se l'assemblaggio per il braccio che verrà convertito in

add r0,r0,r1 

per voi, invece di eventuali errori di sintassi. Devi specificare che stai usando la sintassi unificata, almeno con l'assemblatore di binutils di gnu (gas).

Un insieme di documenti altrettanto importante sono i manuali tecnici di riferimento, anche su infocenter.arm.com. Ogni core ha un trm, in realtà ogni rev di ogni core ha un TRM. Anche gli oggetti extra come le cache L2 hanno il loro TRM, per ogni giro. è importante scoprire il nucleo del fornitore di chip comprato/usato e, se possibile, la revisione (rev 2.0 r2p0, rev 1.0 r1p0, ecc.) in quanto vi sono differenze di programmazione e differenze di errori tra di loro (non fidatevi di Linux come riferimento! , è un gran casino, ogni volta che guardo un'altra società ha completamente frainteso e applicato erroneamente differenze di base/errata, è un po 'un disastro al momento). A volte il TRM include informazioni di istruzioni o dipinge un'immagine più chiara su ciò che il core supporta e non supporta. Le ARM ARM sono generiche e coprono l'intera famiglia o un numero di famiglie di core, dove il TRM è molto specifico per un core. Un esempio di confusione tra ARM ARM e TRM è che guardando ARM ARM si potrebbe avere l'impressione che si possano usare le modalità big endian BE-32 o BE-8, in realtà si ha o l'uno o l'altro ARMv6 e più recente è BE-8, periodo, abituarsi ad esso. ARMv5 e ARMv4 sono BE-32 o prima che ARMv6 si chiamasse big endian. Consiglio vivamente di NON usare big endian su un braccio nonostante ciò che pensi di poter ottenere da esso. vai con la modalità nativa e ti risparmierai un sacco di lavoro e fallimento. Lo cito dall'esperienza personale cercando di capire perché i bit descritti in un BRACCIO ARM non funzionavano nel nucleo che stavo usando.

Un core a 64 bit è da qualche parte nella fase di sviluppo, non sarei sorpreso se fosse fatto e solo cercando qualcuno per premere il grilletto e usarlo. In realtà il documento ARMv8 è disponibile, scaricalo ora.

Risposta breve infocenter.arm.com in ARM Architecture si trovano tutti i documenti che descrivono i diversi set di istruzioni nonché i miglioramenti/aggiunte nel tempo a tali set di istruzioni.

+0

le istruzioni del pollice "all thumb variant" sono le più portatili poiché funzionano da ARMv4T almeno attraverso ARMv7. Non ho ancora visto il 64 bit ARMv8. –

2

Esistono alcune varianti comuni di set di istruzioni, UAL, Thumb e Thumb2 sono i più comuni. Alcuni core ARM che contengono hardware specializzato (come i DSP) estendono anche la lingua.

2

Nop. non c'è differenza (sul set di istruzioni) tra produttore. Tutti rispettano le specifiche ARM.

Alcune estensioni opzionali. Questo è il caso di NEON.

Ma, per quanto ne so, solo il Tegra 2 non include questa estensione. Ecco perché, il tegra 2 è un pessimo processore per la decodifica video (per esempio).

Problemi correlati