Процесори ARM. СПК

Матеріал з Вікі ЦДУ
Перейти до: навігація, пошук
Довідник Список використаних джерел Список учасників НОП

Архітектура ARM (спочатку Advanced RISC Machine — поліпшена RISC машина, попередник Acorn RISC Machine) — 32-бітна RISC архітектура процесорів, яку розробила компанія ARM Limited. Широко застосовується у розробці портативних пристроїв. Головною причиною цього є використання енергозберігаючих технологій. Саме тому ця архітектура домінує у пристроях, головною ідеєю яких є енергозбереження[1].

Сьогодні сімейство ARM займає приблизно 75% всіх портативних 32-бітних RISC процесорів,[2] що робить її найбільш використовуваною серед всіх 32-бітних архітектур. Процесори ARM знайшли своє застосування у багатьох пристроях (КПК, цифрові аудіоплеєри, мобільні телефони, калькулятори, ігрові консолі тощо), комп'ютерній периферії: маршрутизатори, NAS-сервери, апаратні брендмауери[3]. Незважаючи на популярність і широку застосовуваність, ARM досі не змогли стати кращими за продуктивністю, ніж процесори на основі архітектури x86, а тим паче не зможе замінити суперкомп'ютери та кластери. Найпопулярніші пристрої, що працюють на цій архітектурі, — плеєри iPod, смартфони Nokia, iPhone та планшети.

Історія

ARM дизайн був започаткований в 1983 році як проект розвитку в Acorn Computers Ltd для створення компактних процесорів RISC-архітектури. Під керівництвом Софії Уілсон та Стівом Фурбером, ключовим завданням яких була розробка низькорівневої обробки переривань вводу/ виводу (як MOS технології 6502) що використовуються в існуючих комп'ютерах ACORN-івського дизайну. Технологія доступу до пам'яті за допомогою архітектури 6502 дозволила розробникам виробляти швидкі машини без використання дорогого обладнання прямого доступу до пам'яті. Група завершила розробку зразків під назвою ARM1 у квітні 1985 року[4], і першу «реальну» робочу систему ARM2 вже в наступному році.

ARM2 архітектура характеризувалася 32-розрядною шиною даних, 26-розрядна (64 Мбайт) адресного простору і шістнадцять 32-розрядних регістрів. Програмний код був змушений перебувати всередині перших 64 Мбайт пам'яті, так як лічильник команд був обмежений 26-ма бітами, тому що верхні 6 біт 32-розрядних регістрів зарезервовані в якості статус-міток. ARM2, можливо, є найпростішими із використовуваних 32-бітних мікропроцесорів у світі, робота якого забезпечена лише 30000-ми транзисторами (порівняйте із на шість років старішою моделлю Motorola 68000, яка містила близько 70000 транзисторів). Така простота походить від відсутності мікропрограми (що становить приблизно від однієї чверті до однієї третини процесору 68000), і не включав кешу. Ця простота призводила до нижчої швидкості виконання, ніж у процесора Intel 80286[5]. Наступник,ARM3, був випущений із 4KB-им кешом, що ще більше поліпшило показники.

В кінці 1980-х років компанія Apple та VLSI Technology почала працювати з Acorn-ом над новими версіями ядра ARM. Робота була настільки результативною, що в 1990 році Acorn перетворила проектну групу в нову компанію під назвою Advanced RISC Machines. З цієї причини, ARM іноді розшифровують, як Advanced RISC Machines (замість Acorn RISC Machines). Advanced RISC Machines стали ARM Ltd коли їхня материнська компанія, ARM Holdings PLC, вийшла на Лондонську фондову біржу і NASDAQ у 1998 році[6].

В результаті співробітництва Apple-ARM в кінцевому результаті був створений ARM6, вперше випущений в 1991 році. Apple використала процесор ARM 610, заснований на ядрі ARM6, в якості основної бази для їх Apple Newton КПК. У 1994 році Acorn використовує ARM 610 в якості основного процесора в RISC PC комп'ютерах. DEC ліцензували ARM6 архітектуру (що викликало деяку плутанину, оскільки вони також виготовляли DEC Alpha) для виготовлення StrongARM . На 233 МГц цей процесор витрачав лише 1 Вт енергії (новіші версії витрачали значно менше). Ця робота була потім передана Intel для врегулювання частини позовів, і Intel скористалися цією можливістю, щоб поновити їх застарілі процесори i960 та i860, які відповідали StrongARM-архітектурі. Пізніше Intel розробила своє власне високопродуктивне рішення, відоме як XScale яке вони потім продали технологічній компанії Marvell.

Ядро ARM, попри всі зміни, залишалося такого ж розміру. В ARM2 було 30000 транзисторів, в той час як ARM6 зріс лише до 35000. ARM бізнес завжди готовий продати ліцензію топології інтегральних схем, яку використовують для створення мікроконтролерів і процесорів на основі цього ядра. Найуспішнішої реалізації набув процесор ARM7TDMI, який присутній у майже кожному побутовому приладі, так як став основою для сотень мільйонів мікроконтролерів. Ідея полягає в тому, що ODM поєднує ARM ядро і деяку кількість необхідних додаткових частин для виробництва повного процесора, який потім можна виготовляти на старих фабриках з виробництва напівпровідникової продукції, і ще бути достатньо ефективними при низьких витратах виробництва. Станом на січень 2008 року виготовлено понад 10 мільярдів ARM ядер, і iSuppli прогнозує виробництво 5 мільярдів на рік до 2011 року.[7]

Загальна архітектура підтримувана смартфонами, КПК та іншими портативними пристроями побудована на ARMv4. У наш час більша кількість високотехнологічних пристроїв використовують процесори XScale та ARM926 ARMv5TE, ніж StrongARM, ARM925T і ARM7TDMI основаних на ARMv4 процесорах.

Ядра ARM

Серія Версія архітектури Ядро Характеристика Кеш (I/D)/MMU Типова швидкодія @ MHz Використання
ARM1 ARMv1 ARM1 Відсутній другий процесор для BBC Micro
ARM2 ARMv2 ARM2 До архітектури додано MUL (інструкцію множення) Відсутній 4 MIPS @ 8 MHz
0.33 DMIPS/MHz
Acorn Archimedes, Chessmachine
ARMv2a ARM250 Інтегрований MEMC (Блок керування пам'яттю), Графічний процесор та процесор вводу-виводу. Архітектура 2a додала SWP і SWPB (своп) інструкції. Відсутній, MEMC1a 7 MIPS @ 12 MHz Acorn Archimedes
ARM3 ARMv2a ARM2a Вперше використовується в архітектурі ARM процесорний кеш. уніфіковані 4кб 12 MIPS @ 25 MHz
0.50 DMIPS/MHz
Acorn Archimedes
ARM6 ARMv3 ARM60 v3 архітектура вперше підтримувала ширину адресної шини пам'яті 32 біти (на відміну від 26 бітів) відсутній 10 MIPS @ 12 MHz 3DO Interactive Multiplayer, Zarlink GPS приймач
ARM600 Кеш та співпроцесорна шина (для FPA10 розрахунків із плаваючою комою). уніфіковані 4кб 28 MIPS @ 33 MHz
ARM610 Кеш, відсутня співпроцесорна шина. уніфіковані 4кб 17 MIPS @ 20 MHz
0.65 DMIPS/MHz
Acorn Risc PC 600, Apple Newton 100 series
ARM7 ARMv3 ARM700 уніфіковані 8кб 40 MHz Acorn Risc PC прообраз процесорної плати
ARM710 уніфіковані 8кб 40 MHz Acorn Risc PC 700
ARM710a уніфіковані 8кб 40 MHz
0.68 DMIPS/MHz
Acorn Risc PC 700, Apple eMate 300
ARM7100 Інтегрована система на кристалі. уніфіковані 8кб 18 MHz Psion Series 5
ARM7500 Інтегрована система на кристалі. уніфіковані 4кб 40 MHz Acorn A7000
ARM7500FE Інтегрована система на кристалі. Додано FPA (Floating-Point Accelerator — прискорювач обрахунків із плаваючою комою) та EDO (Enhanced Data Out — прискорений ввід/вивід) контролер пам'яті. уніфіковані 4кб 56 MHz
0.73 DMIPS/MHz
Acorn A7000+
ARM7TDMI ARMv4T ARM7TDMI(-S) 3-х етапний конвеєр, Thumb відсутній 15 MIPS @ 16.8 MHz Game Boy Advance, Nintendo DS, iPod, Lego NXT, Atmel, AT91SAM7, Juice Box
ARM710T уніфіковані 8кб, MMU 36 MIPS @ 40 MHz Psion Series 5mx, Psion Revo/Revo Plus/Diamond Mako
ARM720T уніфіковані 8кб, MMU 60 MIPS @ 59.8 MHz Zipit Wireless Messenger
ARM740T MPU
ARMv5TEJ ARM7EJ-S Jazelle DBX, вдосконалені інструкції обробки цифрових сигналів, 5-ти етапний конвеєр відсутній
StrongARM ARMv4 SA-110 16 KB/16 KB, MMU 203 MHz
1.0 DMIPS/MHz
Apple Newton 2x00 серії, Acorn Risc PC, Rebel/Corel Netwinder, Chalice CATS, Psion Netbook
SA-1110 16 KB/16 KB, MMU 233 MHz LART, Intel Assabet, Ipaq H36x0, Balloon2, Zaurus SL-5x00, HP Jornada 7xx, Jornada 560 series
ARM8 ARMv4 ARM810[8] 5-ти етапний конвеєр, статистичне передбачення розгалужень, пам'ять із подвійною пропускною шиною уніфіковані 8кб, MMU 84 MIPS @ 72 MHz
1.16 DMIPS/MHz
Acorn Risc PC прообраз процесорної плати
ARM9TDMI ARMv4T ARM9TDMI 5-ти етапний конвеєр відсутній
ARM920T 16 KB/16 KB, MMU 200 MIPS @ 180 MHz Armadillo, GP32,GP2X (first core), Tapwave Zodiac (Motorola i. MX1), Hewlet Packard HP-49/50 Calculators, Sun SPOT, Cirrus Logic EP9315, Samsung s3c2442 (HTC TyTN, FIC Neo FreeRunner)
ARM922T 8 кб/8 кб, MMU
ARM940T 4 кб/4 кб, MPU (memory protection unit — блок захисту пам'яті) GP2X (друге ядро), Meizu M6 Mini Player[9] [10]
ARM9E ARMv5TE ARM946E-S Вдосконалені інструкції обробки цифрових сигналів змінний, сильно пов'язана пам'ять, MPU Nintendo DS, Nokia N-Gage, Conexant 802.11 chips
ARM966E-S без кешу, TCMs (terminal-to-computer multiplexer — мультиплексор каналу зв'язку)

ST Micro STR91xF, додається Ethernet

ARM968E-S без кешу, TCMs
ARMv5TEJ ARM926EJ-S Jazelle DBX, вдосконалені інструкції обробки цифрових сигналів різноманітний, TCMs, MMU 220 MIPS @ 200 MHz, Мобільні телефони: Sony Ericsson (серії K та W); Siemens та Benq (серії x65 та новіші); Texas Instruments OMAP1710, OMAP1610, OMAP1611, OMAP1612, OMAP-L137; Qualcomm MSM6100, MSM6125, MSM6225, MSM6245, MSM6250, MSM6255A, MSM6260, MSM6275, MSM6280, MSM6300, MSM6500, MSM6800; Freescale i.MX21, i.MX27, Atmel AT91SAM9, GPH Wiz
ARMv5TE ARM996HS Самотактований процесор, вдосконалені інструкції обробки цифрових сигналів без кешу, TCMs, MPU
ARM10E ARMv5TE ARM1020E (VFP), 6-рівневий конвеєр, вдосконалені інструкції обробки цифрових сигналів 32 KB/32 KB, MMU
ARM1022E (VFP) 16 KB/16 KB, MMU
ARMv5TEJ ARM1026EJ-S Jazelle DBX, вдосконалені інструкції обробки цифрових сигналів різний, MMU чи MPU
XScale ARMv5TE 80200/IOP310/IOP315 Процесор вводу/виводу, вдосконалені інструкції обробки цифрових сигналів
80219 400/600 MHz Thecus N2100
IOP321 600 BogoMips @ 600 MHz Iyonix
IOP33x
IOP34x 1-2 ядра, прискорення RAID 32K/32K L1, 512K L2, MMU
PXA210/PXA250 Прикладний процесор, 7-ми рівневий конвеєр Zaurus SL-5600, 0iPAQ H3900
PXA255 32KB/32KB, MMU 400 BogoMips @ 400 MHz Gumstix basix & connex, Palm Tungsten E2,Mentor Ranger & Stryder, iRex ILiad
PXA26x за замовчуванням 400 MHz, максимально 624 MHz Palm Tungsten T3
PXA27x Прикладний процесор 32 кб/32 кб, MMU 800 MIPS @ 624 MHz Gumstix verdex, HTC Universal, HP hx4700, Zaurus SL-C1000, 3000, 3100, 3200, Dell Axim x30, x50, and x51 series, Motorola Q, Balloon3, Trolltech Greenphone, Palm TX, Motorola Ezx Platform A728, A780, A910, A1200, E680, E680i, E680g, E690, E895, Rokr E2, Rokr E6, Fujitsu Siemens LOOX N560, Toshiba Portégé G500, Trēo 650-755p
PXA800(E)F
Monahans 1000 MIPS @ 1.25 GHz
PXA900 Blackberry 8700, Blackberry Pearl (8100)
IXC1100 Процесор панелі управління
IXP2400/IXP2800
IXP2850
IXP2325/IXP2350
IXP42x NSLU2
IXP460/IXP465
ARM11 ARMv6 ARM1136J(F)-S SIMD, Jazelle DBX, (VFP), 8-ми етапний конвеєр різний, MMU 740 @ 532—665 MHz (i.MX31 SoC), 400—528 MHz Texas Instruments OMAP2420 (Nokia E90, Nokia N93, Nokia N95, Nokia N82), Zune, BUGbase, Nokia N800, Nokia N810, Qualcomm MSM7200 (разом із інтегрованим ARM926EJ-S співпроцесором @ 274MHz, використовувався в Eten- Glofish, HTC TyTN II, HTC Nike), Freescale i.MX31 (який використовувався в оригінальному Zune 30gb).
ARMv6T2 ARM1156T2(F)-S SIMD, Thumb-2, (VFP), 9-ти етапний конвеєр різний, MMU різний, MPU
ARMv6KZ ARM1176JZ(F)-S SIMD, Jazelle DBX, (VFP) різний, MMU+TrustZone Apple iPhone, Apple iPod touch, Conexant CX2427X, Motorola RIZR Z8, Motorola Motorizr Z10|Motorola RIZR Z10
ARMv6K ARM11 MPCore 1-4 ядра SMP, SIMD, Jazelle DBX, (VFP) різний, MMU Nvidia APX 2500
Cortex ARMv7-A Cortex-A8 Прикладний процесор, VFP, NEON, Jazelle RCT, Thumb-2, 13-ти етапний суперскалярний конвеєр різний (L1+L2), MMU+TrustZone до 2000 (2.0 DMIPS/MHz на частоті 600 MHz до більш ніж 1 GHz) Texas Instruments OMAP3, Pandora
Cortex-A9 Прикладний процесор, (VFP), (NEON), Jazelle RCT and DBX, Thumb-2, 8-ти етапний, багатократний, спекулятивний суперскалярний конвеєр, виконання поза порядком 2.0 DMIPS/MHz
Cortex-A9 MPCore As Cortex-A9, 1-4 core SMP MMU+TrustZone 2.0 DMIPS/MHz Texas Instruments OMAP4430/4440, ST-Ericsson U8500, Nvidia Tegra2
ARMv7-R Cortex-R4(F) Поглиблено вбудований процесор реального часу[11], (FPU) різний кеш, MPU на замовлення 600 DMIPS TMS570 від Texas Instruments, Broadcom використовує
ARMv7-M Cortex-M3 Профіль мікроконтролеру, тільки Thumb-2. кеш відсутній, (MPU) 125 DMIPS @ 100 MHz Luminary Micro[2] microcontroller family, STMicroelectronics STM32[3], Energy Micro EFM32[4]
ARMv6-M Cortex-M0 Профіль мікроконтролеру, тільки підмножина Thumb-2 (16-bit Thumb команди та BL, MRS, MSR, ISB, DSB, DMB). кеш відсутній. 0.9 DMIPS/MHz NXP Semiconductors NXP LPC1100, Nuvoton
Cortex-M1 Для застосування в FPGA, профіль мікроконтролеру, Thumb-2 (BL, MRS, MSR, ISB, DSB, та DMB). відсутній, на замовлення сильнозв'язана пам'ять. до 136 DMIPS @ 170 MHz[12] (0.8 DMIPS/MHz[13], MHz доступно для FPGA-залежних) «Actel ProASIC3 and Actel Fusion PSC devices will sample in Q3 2007»[14]

Особливості дизайну

Для того, щоб зберегти якісний дизайн, простий і швидкий, він позбавлявся апаратного мікрокоду, наприклад, як багато простих 8-бітних 6502 процесорів, які використовувалися у мікрокомп’ютерах попередника — ACORN-а.

ARM архітектура включає багато наступних властивостей RISC архітектури:

  • Завантажувально/зберігальна архітектура
  • Відсутність підтримки заміщеного доступу до пам'яті (в даний час підтримується в ARMv6 ядрах, за деякими винятками, пов'язаними із завантаженням/зберіганням кількох слів інструкції)
  • Уніфіковані 16 × 32-розрядних файлів регістру
  • Інструкція фіксованої ширини 32 біти для зручності декодування і конвеєрної обробки, ціною зменшення щільності коду. (Пізніше режим перегляду збільшує щільність коду.)
  • Переважаюче виконання в один цикл

Були застосовані деякі унікальні можливості для компенсації простого дизайну, для того щоб зрівнятися з тогочасними процесорами (80286 та 68020):

  • Умовне виконання більшості інструкцій, зменшення розгалужень службових сигналів та компенсція відсутності передбаченого прогнозування розгалужень
  • Арифметичні інструкції замінюються умовними кодами тільки тоді, коли без цього не можна обійтися
  • 32-бітна багаторегістрова схема циклічного зсуву, яка може бути використана без незручного виконання в більшості арифметичних інструкцій та адресованих розрахунків
  • Потужна адресна індексація
  • Регістр зв'язків для швидкого звернення до листа функцій.
  • Проста, але швидка, пріорітерна 2-х рівнева підсистема переривань з перемикачем блоку регістрів.

Цікавим додатком до дизайну ARM ядра є використання 4-бітного коду обставини на початку кожної інструкції, а це означає що виконання кожної інструкції умовно необов'язкове. Інші процесорні архітектури, як правило, мають код обставини як відгалуження інструкції.

Це значно скорочує кодування біту придатного для переміщення інструкції в доступну пам'ять; але з іншого боку, вона дозволяє уникнути розгалуження інструкцій при генерації коду для малих операторів якщо. Стандартним прикладом є Алгоритм Евкліда:

На мові програмування C виглядає так:

    while (i != j)
    { 
       if (i > j) 
           i -= j;
       else 
           j -= i;
    }

Для ARM процесорів асемблерний код виглядає так:

 loop    CMP    Ri, Rj      ; set condition "NE" if (i != j)
                            ;               "GT" if (i > j), 
                            ;            or "LT" if (i < j)           
        SUBGT  Ri, Ri, Rj   ; if "GT", i = i-j;  
        SUBLT  Rj, Rj, Ri   ; if "LT", j = j-i; 
        BNE    loop         ; if "NE", then loop

що дозволяє уникнути розгалуження коду навколо операторів then та else.

Ще однією унікальною особливістю набору є можливість згортання зсувів і обертань при «обробці даних» (арифметичних, логічних, та регіст-регістрових переміщень) інструкції, для прикладу як у C-операторі

a += (j << 2);

окремий цикл інструкції для ARM, може бути оформлено як одне слово.

ADD Ra, Ra, Rj, LSL #2

Це призводить до того, що типові ARM програми щільніші ніж очікувалося і з меншою кількістю звернень до пам'яті, тому конвеєр використовується ефективніше. Навіть попри те, що ARM працює, як багато хто вважає, із нижчою швидкістю, але він в цілому успішно конкурує з набагато складнішими процесорними архітектурами.

ARM процесори також мають деякі особливості, які рідко зустрічаються в інших RISC архітектурах, такі як служби аналогічні до командного лічильника-споріднених рішень (по суті в ARM архітектурі лічильник команд є одним із 16-ти регістрів) та перед-/пост- прирістні режими адресації.

Ще одним пунктом відзначити що архітектура ARM існує не так уже й довго, і з плином часу кількість інструкцій збільшуються. Деякі ранні ARM процесор (наприклад до ARM7TDMI) не мали інструкції для зберігання двох байтів, таким чином, строго кажучи, для них не було можливим генерувати код, який буде введено шляхом очікування для C-об'єктів типу «коротка непостійна».

ARM7 і більш ранні зразки мають три етапи конвеєру: стадії завантаження, декодування, і виконання. Конструкції із кращими робочими характеристиками, таких які можна було очікувати в ARM9, мають п'ять етапів конвеєру. Додаткові зміни для більшої продуктивності включають підсумовувач, та ширші розгалуження передбачувальної логіки.

Архітектура забезпечує нав'язливі шляхи розширення набору інструкцій, використовуючи «співпроцесори», які можуть бути адресовані за допомогою MCR, MRC, MRRC і MCRR команд програмного забезпечення. Простір співпроцесорів логічно поділяється на 16 співпроцесорів з номерами від 0 до 15, співпроцессор 15 (cp15) зарезервований для деяких типових контрольних функцій, таких як управління кеш-ом і MMU операції (на процесорах, які мають один).

На ARM основаних пристроях, периферія підключається до процесору за картою їх фізичних регістрів в просторі ARM пам'яті чи в просторі співпроцесорів або через підключення до іншого пристрою (шину), яку, в свою чергу, надає процесор. Доступ до співпроцесорів має менший час очікування тому деякі периферійні пристрої (наприклад, контролер переривань процесору XScale) можуть мати доступ обома шляхами (через пам'ять і через співпроцесори).

Thumb

Для покращення компіляції щільних кодів, починаючи від процесору ARM7TDMI набувають функціональності Thumb режиму. В цьому режимі процесор виконує 16-розрядні інструкції. Більшість із 16-розрядних Thumb-інструкцій, перетворюються до безпосередньо нормальних ARM-інструкцій. Компактність надходить від виконання деяких із інструкції операнд і непряме обмеження кількості можливостей у порівнянні з повним режимом ARM-інструкцій.

У Thumb-режимі менші операційні коди мають менше функціональних можливостей. Наприклад, тільки розгалуження можуть бути умовними і багато операційних кодів обмежують в доступі лише до половини всіх регістрів процесора. Коротші операційні коди дозволяють поліпшити щільність коду в цілому, хоча деякі операції вимагають додаткових інструкцій. У ситуаціях коли порти пам'яті або ширина шини менші менш ніж 32 біти, коротший Thumb-операційний код дозволяє збільшити показники у порівнянні з 32-х розрядним ARM кодом, менше програмного потрібно завантажувати в процесор із обмеженою пропускною здатністю пам'яті.

Вбудовані пристрої, такі як ігрова консоль Game Boy Advance, як правило мають невеликий обсяг доступної оперативної пам'яті з повною 32-бітної шиною даних; більшість звернень проходять через 16-бітну або вужчу вторинну шину. Зазвичай у цій ситуації є сенс скомпілювати Thumb-код і вручну оптимізувати кілька найінтенсивніше використовуваних розділів процесора застосовуючи повну інструкцію 32-бітних ARM-ядер, розміщуючи ці ширші інструкції в доступній пам'яті із 32-бітною шиною.

Перший процесор з інструкцією Thumb-декодування був ARM7TDMI. Всі ARM9 та новіші серії, в тому числі XScale, включають інструкції Thumb-декодеру.

Розширення інструкцій обробки цифрових сигналів

Для того, щоб поліпшити архітектуру ARM для цифрової обробки сигналів і мультимедійних застосунків, до набору включили деякі нові інструкції[15]. Це виглядало як приставка «Е» в назвах ARMv5TE і ARMv5TEJ архітектур.

У нових інструкціях є подібності до архітектури цифрового сигнального процесору.

Jazelle

Технологія, названа Jazelle DBX (Direct Bytecode eXecution — Безпосереднє виконання байткоду) дозволяє оновленій ARM-архітектурі виконувати деякі коди Java в апаратній частині, в якості третього робочого стану поруч з існуючими ARM- і Thumb— режимах.

Виробники мобільних телефонів найбільше потребують використання Jazelle для збільшення швидкості виконання Java ігор та застосунків.

Jazelle-обізнані Java-машини будуть намагатися запустити код Java в апаратній частині, а для складніших чи менш використовуваних байт-код операцій звертатимуться до програмного забезпечення. ARM вимагає, щоб приблизно 95% байт-коду типового програмного використання закінчувалися безпосередньо обробкою в апаратній частині.

Jazelle-функціональність, була застосована у ARMv5TEJ архітектурі [16] і перший процесор із Jazelle-технологією ARM926EJ-S[17]: Jazelle позначається приставкою «J» до імені процесору.

Опублікувані специфікації є досить неповними, оскільки достатні лише для написання коду операційної системи яка може підтримувати JVM, використовуючи Jazelle. Проголошена мета полягає в тому, що тільки JVM програмне забезпечення повинно (або може) залежать від деталей апаратного інтерфейсу. Це сприяє посиленню зв'язку між апаратною та JVM складовими, які можуть розвиватися разом без шкоди для інших програм. По суті це надає ARM Ltd. значний контроль над такими Java-машинами, які здатні використовувати Jazelle.

Реалізація

Jazelle-розширення працює як додаткова платформа між отримувальним та декодувальним етапами процесорної шини. Визнані байт-коди перетворюються в рядки з одного або більше ARM-споріднених інструкцій.

Jazelle режим направляє найпоширеніші прості інструкції JVM інтерпритує на апаратні засоби. Це зроблено для того, щоб істотно знизити витрати на інтерпритацію. Серед іншого, це зменшує необхідність в поточному компіляторі та інших JVM технологій прискорення[18]. JVM інструкції, які не були реалізовані на апаратному рівні Jazelle запускають відповідних підпрограм в Jazelle-виконуючому JVM інтерпритаторі. Детальна інформація не публікується.

Jazelle режим вводиться шляхом BXJ інструкцій. Апаратноа реалізації Jazelle охоплює тільки підмножину JVM байт-кодів. При непідтримуванні оператора кодів або несприйманні операційною системою апаратних засобів програмне забезпечення буде звертатися до забезпечення JVM. Система сконструйована таким чином, що програмному забезпеченню не потрібно знати, які коди здійснюються в апаратних засобах і нейтралізацій програмних помилок здійснюється на рівні програмне забезпечення JVM для встановлення повного набору кодів.

Архітектура системи команд

Набір команд, який документовано використовується в Jazelle, передбачає виконання Java-коду в кінці. Разом з тим ARM вирішили залишитися конфіденційними про точне виконання подробиць; за документацією, наданою дочірним підприємством корпорації Sun HotSpot, JVM показується на скільки це можливо в заяві: Для того, щоб уникнути непорозумінь, пов'язаних з розподіл продуктів, які містять програмні коди для здійснення BXJ інструкцій і дозволяють використовувати Jazelle-режим архітектури ARM розголошення через [..] угоду з ARM заборонено.[19].

Співробітники ARM в минулому опублікував декілька white paper-ів, що мало на меті вказати на корисні напрямки розширення процесора. Довідкове керівництво з архітектури ARM наявної версії 2008 року включало псевдокод 'BXJ' (Branch and eXchange to Java — розгалуження та обмін з Jav-ою) інструкції, але без вказання тонких подробиць підструктури визначника та документації.

Двійковий інтерфейс застосунків (ABI)

Jazelle-режим спирається на узгодженні викликів між JVM і Jazelle апаратними режимами. Це (ABI) не опубліковане ARM, в результаті чого режим Jazelle є не задокументованою функцією для більшості користувачів і засобів відкритих Java-програм.

Режим цілої віртуальної машини знаходиться в межах нормальних ARM регістрів, що забезпечує сумісність з існуючими операційними системами та переадресації обробника переривань. Перезапуск байт-коду (наприклад, після повернення з переривання) буде повторно виконувати повну послідовність відповідних інструкцій ARM.

Спеціальні регістри розроблені для проведення найважливіших складових JVM режиму, регістри r0-r3 запроваждені як альтернативні точки доступу на вершині Java стека, r4 впроваджена як місцева Java операнда нулю (призначений для *this ) та r6 містить покажчик стека Java.[20]

Jazelle повторно використовує існуючий лічильник команд регістру r15 [21]. Вказівник на наступний байт-код йде в r14 [22], тому його використання на ПК, як правило, не помітне для користувача, за винятком як під час налагодження.

CPSR: режим указування

Java байт-код позначається як теперішній набір команд у поєднання двох бітів в ARM CPSR (Current Program Status Register — журнал поточного статусу програми). «T'-біт має бути очищений і» J'-біт встановлений.[23]

Байт-код декодується апаратно в два етапи (у порівнянні з одного етапом для Thumb та ARM коду) і перемикання між апаратним та програмним декодуванням (Jazelle режимі і в режимі ARM) займає ~ 4 циклів синхронізації. [24].

Для успішного запуску апаратної складової Jazelle, JE (Jazelle Enable — Jazelle-дозволяючий) [16] біт в CP14:c0(c2)[bit 0] регістру повинен бути встановленим; стирання JE біту [привілейованою] операційною системою забезпечує високорівневу перевагу з метою запобігання застосування програми з використанням апаратного Jazelle прискорення [25], крім того конфігурація допустимого розряду [16] знайдена в CP14: c0 (c1) [біт 1] [25] має бути встановлена, щоб показати що існує постійно установлений режим Jazelle для апаратного використання.

BXJ: розгалуження для Java

BXJ інструкція намагається переключити на Jazelle стан, і при дозволеному та успішному перемиканні встановлюється «J» біт в CPSR, в іншому ж випадку, якщо «зазнає невдачі» та діє за стандартною інструкцією BX (Розгалуження). [16] В єдиний момент коли операційна система або відладчик повинні повністю звернутися до Jazelle режиму, тоді декодування вадиться або попадає в пастку інструкції. Java ПК що вказує на наступні інструкції повинен розміщуватись в регістр зв'язку (r14) перед виконанням BXJ розгалужуючого запиту, так як незалежно від обробки апаратних засобів або програмного забезпечення, система повинна знати, де почати декодування.

Так як поточний стан утримується в CPSR, байт-код набору команд автоматично перевибирається після перемикання завдання та обробки поточних Java байт-кодів, і відбувається перезапуск.

Після переходу в режим Jazelle стану, байт-код може опрацьовуватися по одному з трьох шляхів; декодуватися і виконуватися цій же апаратній частині, обробляютися програмно (оптимізовано для ARM/ThumbEE коду JVM), або розглядатися як хибний/некоректний код операції. Третій випадок викликає переведення ARM в нештатний режиму, а також Java байт-код 0xFF, який використовується для встановлення точки зупину JVM[26].

Виконання буде продовжуватися в апаратних засобах до тих пір, поки буде зустрічається непідтримуваний байт-код, або відбуватиметься нештатна ситуація. Між 134 та 149 кодом (з 203 кодів, зазначені в специфікації JVM), компілюються і здійснюється безпосередньо в апаратній складовій.

Низькорівневі регістри

Низькорівнева конфігурація регістрів, для апаратної віртуальної машини знаходяться в ARM співпроцесорі «CP14 регістр c0». Регістри дозволяють виявляти, вмикати або вимикати апаратні прискорювачі, якщо це можливо.[27]

  • Jazelle Ідентифікатор Реєстру в регістрі CP14:c0(c0) доступний тільки для читання у всіх режимах.
  • Jazelle Контроль Регістрів операційної системи в CP14:c0(c1) доступна тільки в режимі ядра і призведе до виключення, якщо звертатися в користувальницькому режимі.
  • Jazelle Головний Регістр Конфігурації в CP14:c0(С2) доступний для запису тільки в режимі користувача та читання-запису в режимі ядра.

Незначна апаратна реалізація Jazelle (знайдено в QEMU емуляторі) потрібна тільки для підтримки BXJ виконуваного коду для себе (трактування BXJ як звичайної BX інструкції [16]) і для операції повернення RAZ (Read-As-Zero) для всіх CP14:c0 Jazelle-пов'язаних регістрів [28].


Thumb-2

Thumb-2 технологія зробила свій дебют у ядрі ARM1156, проголошеному в 2003 році. Thumb-2 розширює обмежений набір 16-бітних команд Thumb набором додаткових 32-бітних команд. Таким чином, Thumb-2 є набором команд змінної ширини. В результаті для Thumb-2 досягнута щільність коду, аналогічна Thumb-у та швидкість виконання, аналогічна 32-бітним командам ARM.

Thumb-2 розширює набори команд як ARM, так і Thumb для більшої функціональності, в тому числі такими командами, як: маніпуляція бітним полем, таблиця розгалужень, та умовне виконання.

Всі ARMv7 чіпи підтримують Thumb-2 набір інструкцій. Деякі чіпи, такі, як Cortex-M3, підтримують тільки Thumb-2. Інші чіпи серій Cortex і ARM11 підтримують як «набір команд ARM режиму» і «набір команд Thumb-2 режиму» [5] [6] [7].

Умови виконання Thumb (ThumbEE)

ThumbEE, також відомий як Thumb-2EE, і реалізуються як [ЦР http://www.arm.com/products/solutions/JazelleRCT.html Jazelle RCT] (Runtime Compilation Target — робочий цикл компіляції), був проголошений в 2005 році, вперше містився в процесорах на ядрі Cortex-A8. ThumbEE передбачає невелике розширення Thumb-2 інструкцій набором команд Thumb, що робить набір особливо підходящим для кодів, згенерованих під час виконання програми (наприклад JIT компіляція) в керованих середовищах виконання. ThumbEE є платформою для таких мов, як Limbo, Java, C #, Perl і Python, а також використовується JIT-компіляторами для виведення дрібних складених кодів, які не позначаються на продуктивності.

Представлені нові функції ThumbEE включають автоматичну перевірку порожнього показника при кожному завантаженні та зберіганні інструкцій, інструкції для виконання перевірки меж масиву. Доступ до регістрів r8-R15 (де утримується Jazelle/DBX стани Java VM) та здатність розгалужувати обробку малих секцій часто повторюваного коду використовується як особливий інструмент високрівневих мов, наприклад для виділення пам'яті новим об'єктам.

Вдосконалений SIMD (NEON)

Вдосконалений SIMD (Single-Instruction Multiple-Data — один потік команд і багато потоків даних) розширення технології, позначене як NEON, є поєднанням наборів з 64- та 128-бітових SIMD інструкцій, що надає стандартизоване прискорення для засобів медіа та сигнальної обробки прикладних програм. NEON може виконати MP3 аудіодекодування на процесорах, що працюють на 10 МГц, а також здатний розгалужувати оператори на малі секції часто вживаного простого коду. Такий інструмент використовується у особливих високорівневих мовах програмування, які можуть запускати GSM AMR (Adaptive Multi-Rate — адаптивну багаторангову) мову кодеків на більш ніж 13 МГц. Він має комплексний набір команд, окремий регістр файлів і незалежне обладнання для виконання. NEON підтримують 8 -, 16 -, 32 — і 64-bit ціле і окрему точності із плаваючою точкою даних і працює в SIMD операції з обробки аудіо/відео, а також графічних та ігрових обробках. У NEON, SIMD підтримує до 16 операцій одночасно.

VFP

VFP технологія це сопроцессорне розширення для архітектури ARM. Він надає недорогі одинарну- та подвійну точності в обрахунках із плаваючою точкою, повністю сумісну з ANSI/IEEE 754 (стандарт для арифметичних дій з бінарною плаваючою точкою). VFP забезпечує обчислення з плаваючою точкою підходящим для широкого спектру застосунків, що використовуються в КПК, смартфонах, при голосовий компресії і декомпресії, тривимірній графіці та цифровому звуку, принтерах, комп'ютерних приставках, а також автомобільних застосунках. VFP Архітектура також підтримує виконання коротких векторних інструкцій забезпечуючи SIMD- паралелізм. Це корисно в графіці і в застосунках обробки сигналів шляхом зменшення розміру коду та збільшення пропускної здатності.

Інші SIMD та/або сопроцесори з плаваючою точкою в ARM-основаних процесорах включають FPA, FPE, iwMMXt. Вони забезпечують приблизно ту ж функціональність, що і VFP, але кодово-несумісні з ним.

Можливості безпеки (TrustZone)

Безпека Розширення, помічені як технологія TrustZone™ (TZ — зона довіри), з'явилися в ARMv6KZ та пізніших архітектурних профілях. Вона забезпечує низькі витрати на альтернативне додавання додаткових спеціалізованих ядер безпеки на основних SoC, шляхом надання двох віртуальних процесорів підтримки апаратних засобів контролю доступу. Це дає можливість застосування основних для перемикання між двома станами, скеровувати в якості об'єктів (по можливості для зменшення плутанини з іншими назвами доменів), таким чином, щоб запобігти витоку інформації із надійніших сфер до менш надійних. Це об'єктне перемикання в цілому ортогональне всім іншим можливостям процесора і так кожен об'єкт може функціонувати незалежно від інших, використовуючир одне й те ж ядро. Пам'ять і периферія потім ставляться до відома про діючі об'єкти ядра і може використовувати це для забезпечення контролю доступу до секретам та коду для пристроїв. Типовим застосуванням TrustZone технології це запуск операційної системи з широкими можливостями у в менш довірливих об'єктах і менше безпечно-спеціалізований код в надійніших об'єктах.

На практиці, з тих пір як особливості деталей виконання TrustZone є власністю і не були публічно розкриті в огляді, не ясно який рівень гарантій передбачається наданою моделлю небезпеки.

Ліцензія ARM

ARM Ltd, не виготовляє і не продає CPU пристроїв на основі їхнього власного дизайну, але набагато охочіше, продає ліцензії процесорної архітектури для зацікавлених сторін. ARM пропонує широкий вибір ліцензійних умов, різної вартості та комплектації. Для всіх ліцензіатів, ARM забезпечує опис апаратної інтеграції основних ARM ядер, а також повний набір інструментів розробки програмного забезпечення (компіляторів, відладчиків, SDK), а також надає право продавати виготовлені кремнієві вироби, що містять ARM CPU. Ліцензовані фабрики напівпровідникової продукції, які хотіли б інтегрувати ядра ARM для виготовлення своїх власні чіпів, як правило, тільки зацікавлені у придбанні готових до виробництва перевірених та готових до вживання схем. Для цих клієнтів, ARM постачає логічну схему опису таблиці з'єднань вибраного ARM ядра, разом із зібраною імітаційною моделлю та тестується програмами для сприяння інтеграції дизайну та контролю. Амбіційніші клієнти, забезпечені фабриками інтегральних пристроїв (IDM — integrated device manufacturers) та операторами кремнієвих майстерень, обирають придбання процесорних топографічних схем у формі RTL (Resistor-Transistor Logic — Резисторно-Транзисторної Логічної Схеми) (Verilog), готової для синтезу. Разом із придбанням готової до виробництва RTL, клієнт має можливість здійснювати оптимізацію та розширення архітектурного рівня. Це дозволяє розробнику досягати нестандартного дизайну, потребуючи інші показники за незмінного списку схем (вища тактова частота, наднизька споживча потужність, інструкції набору розширень і т. д.). Хоча ARM не надає ліцензіатам права перепродати саму архітектуру ARM, отримувачі ліцензії можуть вільно продавати виготовлені вироби (чіпи для пристроїв, обрахункові друковані плати, готові систем і т. д.). Комерційні напівпровідникові майстерні можуть бути особливим випадком, їм дозволено не тільки продавати кінцеві напівпровідникові матеріали, які містять ARM ядра, вони зазвичай ще мають право виготовляти ARM ядра для інших клієнтів.

Як і більшість продавців інтегральних схем, ARM базують ціни їх інтегральних схем в залежності від ринкової цінності. Із архітектурної точки зору, менш функціональні ядра ARM коштують менше, ніж вартість ліцензій для ядер із вищою функціональністю. У перерахунку реалізації в кремній, можливість адаптації в основному дорожче, ніж стандартне макроядро. Складна цінова політика дає переваги покупцям ARM ліцензій, які забезпечені кремнієвими майстернями (такі як Samsung і Fujitsu), а саме можливість скоротити витрати на ліцензування для своїх клієнтів. Отримуючи ядра ARM використовуючи внутрішню службу розробок, клієнт може знизити або компенсувати виплати за попередній ліцензійний збір ARM. У порівнянні з спеціалізованими напівпровідниковими ливарнями (наприклад як TSMC та UMC), без власної служби розробок, Fujitsu/Samsung сплачують у 2-3 рази більше за виготовлену кремнієву пластину. Для низьких і середніх за обсягом заявок, проектні служби кремнієвих майстерень пропонують нижчі загальні розцінки (через субсидування ліцензійного збору). В довгостроковій перспективі, для великого за обсягом масового виробництва продукції відбувається зниження витрат на ліцензії ARM, таким чином виправдовуючи вибір спеціалізованої майстерні.

Багато фірм-розробників інтегральних схем та напівпровідників утримують ARM ліцензії; Analog Devices, Atmel, Broadcom, Cirrus Logic, Faraday technology, Freescale, Fujitsu, Intel (через свою підрядну Digital Equipment Corporation), IBM, Infineon Technologies, LG, Marvell Technology Group, NEC, Nintendo, NVIDIA, NXP Semiconductors, OKI, Qualcomm, Samsung, Sharp, STMicroelectronics, Symbios Logic, Texas Instruments та VLSI, Yamaha та ZiiLABS — ось невелика кількість з багатьох компаній, які мають ліцензію на ARM в тій чи іншій формі. Хоча ARM ліцензії поширюються на умові нерозголошення інформації, але в галузі інтегральних мікросхем ARM широко відома як одна із найдорожчих ядерних процесорів. Один замовник продукту, який хоче використати базове ядро ARM оплачує одноразову ліцензію на сумму понад $ 200000 USD. У випадках, коли передбачаються значні кількісні і архітектурні зміни, плата за ліцензію може перевищувати $ 10 млн USD.

ARM вважає, що його база в більш ніж 200-т напівпровідникових ліцензіатів дає йому шанс досягти успіху в поточних суперечностях щодо використання архітектури ARM чи Intel в мобільних комп'ютерах.

Приблизні ліцензійні витрати

ARM в 2006 році опублікувало річну фінансову звітність, в якій вказано відрахування на загальну суму 88,7 млн фунтів стерлінгів (164,1 млн дол США), що були результатом ліцензування поставок на 2.45 мільярдів схем [29]. Це еквівалентно 0,036 фунтів стерлінгів (0,067 USD) в розрахунку на представлену схему (пристрій). Однак, це середня ціна на всі ядра, в тому числі дорогі, нові та недорогі старі.

Прибуток ARM в тому ж році з ліцензійних надходжень за ядра процесорів сягнув £ 65,2 млн. ($ 119,5 млн). Це в середньому 1 млн фунтів стерлінгів (1,84 млн доларів США) з одного ліцензіата. Знову ж таки, це середня ціна, враховуючи нові та старі ядра.

З огляду на те, що прибуток ARM в 2006 році від процесорних ядер становив приблизно 60% від ліцензійних платежів і 40% від продажу ліцензій, ARM отримує еквівалент 0,06 фунтів стерлінгів (0,11 дол) за одну відвантажену схему, враховуючи як відрахування так і ліцензії. Проте, часто при завершені строку дії однієї ліцензії купується нова для нової технології, тобто питома частка продажу ліцензій (а також відрахування) переважають над створенням продуктів. Отже, представлені вище цифри не відображають реальної вартості будь-якого окремого продукту ARM.

Джерела

  1. http://www.qtronics.net/arm.html
  2. http://web.archive.org/web/20041014143736/http://www.arm.com/miscPDFs/3823.pdf
  3. url=http://www.linuxfordevices.com/c/a/News/ARM-Q4-2009-financial-results-and-forthcoming-processors/ В 4-му кварталі 2009-го року було відвантажено більш ніж 1,3 білліони ARM процесорів
  4. «Some facts about the Acorn RISC Machine» Roger Wilson posting to comp.arch, Nov 2 1988, Accessed 25 May 2007.
  5. Patterson, Jason. The Acorn Archimedes", The History Of Computers During My Lifetime — The 1980's (в доступі з 12 Бер 2008)]
  6. «Прес-конференція корпорації ARM», ARM технології
  7. «ARM досягнуло 10 мільярдів процесорних кристалів», ARM Технології, 22 січня 2008
  8. «ARM810 — Танцюй під ритм різних барабанів» Презентація ARM Limited на виставці Hot Chips 8, 1996
  9. http://www.rockbox.org/twiki/bin/view/Main/SamsungSA58 Rockbox Samsung SA58xxx серії
  10. http://www.rockbox.org/twiki/bin/view/Main/MeizuM6Port Rockbox Meizu M6 Port - Апаратні характеристики
  11. «ARM Cortex-R4», вебсайт ARM
  12. «ARM розширює Cortex лінійку першим процесором пристосованим для FPGA», прес-реліз ARM, 19 Березень 2007. В доступі з 11 Квітня, 2007.
  13. «ARM Cortex-M1», ARM вебсайт продукції. В доступі з 11 Квітня, 2007.
  14. ARM Extends Cortex Family with First Processor Optimized for FPGA
  15. [1]
  16. 16,0 16,1 16,2 16,3 16,4 ARM Довідникове керівництво архітектури
  17. Ліцензія Shanghai Jade Technologies Co. Ltd на ARM Prime Starter Kit (первинний пусковий комплекту ARM) для SoC чіпів із (DCP) процесором передачі даних
  18. CPM Design Online Використання ARM DBX (Прям байт виконання) апаратного розширеннях для прискорення Java в обмеженому просторі вбудованих застосунків
  19. Sun, Hotspot, Заключні Нотатки CLDC HotSpotTM Реалізації V_2.0
  20. ARM White paper, Прискорення перетинання викликів вбудованої Java.
  21. ARM Whitepaper, Jazelle для середовищ виконання
  22. Intel, Введення до архітектури ARM
  23. лист розсилки ядер Linux, надіслано від працівника ARM.
  24. ARM Whitepaper, Висока продуктивність Java на вбудованих пристроях.
  25. 25,0 25,1 ARM довідковий посібник (японською), ARMアーキテクチャリファレンスマニュアル
  26. ARM, ARM1026EJ-S Технічний довідниковий посібник
  27. Довідниковий посібник ARM, Режим збереження енергії процесорів ARM11
  28. ARM Посилання, Технічний довідниковий посібник Cortex-A8.
  29. «Бізнес-огляд/Фінансовий огляд/МСФЗ», стор 10, ARM річний звіт та інша фінансова звітність, 2006. Отримано 7 травня 2007

Посилання