Архітектура ARM (первісно Advanced RISC Machine — поліпшена RISC машина, попередник Acorn RISC Machine) — 32-бітна RISC архітектура процесорів, яку розробила компанія ARM Limited. Широко застосовується у розробці портативних пристроїв. Головною причиною цього є використання енергоощадних технологій. Саме тому ця архітектура суттєво переважає у пристроях, головними ідеями яких є енергоощадність та мобільність .
Станом на 2004 рік сімейство ARM займало приблизно 75 % всіх 32-бітних RISC процесорів для мобільних і вбудовуваних застосувань, що робить його найчастіш використовуваним серед усіх 32-бітних архітектур. Процесори ARM знайшли своє застосування у таких пристроях, як мобільні телефони і смартфони, планшети, кишенькові персональні комп'ютери, цифрові аудіоплеєри, калькулятори, ігрові консолі та різній комп'ютерній периферії: маршрутизатори, NAS-сервери, апаратні брендмауери.
Історія
ARM дизайн був започаткований в 1983 році як проект розвитку в для створення компактних процесорів RISC-архітектури. Під керівництвом Софі Вілсон та Стівом Фурбером, ключовим завданням яких була розробка низькорівневої обробки переривань вводу/виводу (як MOS Technology 6502) що використовуються в існуючих комп'ютерах ACORN-івського дизайну. Технологія доступу до пам'яті за допомогою архітектури 6502 дозволила розробникам виробляти швидкі машини без використання дорогого обладнання прямого доступу до пам'яті. Група завершила розробку зразків під назвою ARM1 у квітні 1985 року, і першу «реальну» робочу систему ARM2 вже в наступному році.
ARM2 архітектура характеризувалася 32-розрядною шиною даних, 26-розрядна (64 Мбайт) адресного простору і шістнадцять 32-розрядних регістрів. Програмний код був змушений перебувати всередині перших 64 Мбайт пам'яті, тому що лічильник команд був обмежений 26-ма бітами (верхні 6 біт 32-розрядних регістрів зарезервовані як статус-мітки). ARM2, можливо, є найпростішими із використовуваних 32-бітних мікропроцесорів у світі, робота якого забезпечена лише 30000-ми транзисторами (порівняйте із на шість років старішою моделлю Motorola 68000, яка містила близько 70000 транзисторів). Така простота походить від відсутності мікропрограми (що становить приблизно від однієї чверті до однієї третини процесору 68000), і не містив кешу. Ця простота призводила до нижчої швидкості виконання, ніж у процесора Intel 80286. Наступник,ARM3, був випущений з кешом 4KB, що ще більше поліпшило швидкодію.
Наприкінці 1980-х років компанія Apple та почала працювати з Acorn-ом над новими версіями ядра ARM. Робота була настільки результативною, що в 1990 році Acorn перетворила проектну групу в нову компанію під назвою Advanced RISC Machines. З цієї причини, ARM іноді розшифровують, як Advanced RISC Machines (замість Acorn RISC Machines). Advanced RISC Machines стали ARM Ltd коли їхня материнська компанія, ARM Holdings, вийшла на Лондонську фондову біржу і NASDAQ у 1998 році«Прес-конференція корпорації ARM», ARM технології.
В результаті співробітництва 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 року.«ARM досягнуло 10 мільярдів процесорних кристалів» , ARM Технології, 22 січня 2008
Загальна архітектура підтримувана смартфонами, КПК та іншими портативними пристроями побудована на ARMv4. Наразі більша кількість високотехнологічних пристроїв використовують процесори XScale та ARM926 ARMv5TE, ніж StrongARM, ARM925T і ARM7TDMI основаних на ARMv4 процесорах.
Ядра ARM
Особливості дизайну
Цікавим додатком до дизайну 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-ти регістрів) та перед-/пост- прирістні режими адресації.
Thumb
У Thumb-режимі менші операційні коди мають менше функціональних можливостей. Наприклад, тільки розгалуження можуть бути умовними і багато операційних кодів обмежують в доступі лише до половини всіх регістрів процесора. Коротші операційні коди дозволяють поліпшити щільність коду в цілому, хоча деякі операції вимагають додаткових інструкцій. У ситуаціях коли порти пам'яті або ширина шини менші менш ніж 32 біти, коротший Thumb-операційний код дозволяє збільшити показники у порівнянні з 32-х розрядним ARM кодом, менше програмного потрібно завантажувати в процесор із обмеженою пропускною здатністю пам'яті.
Вбудовані пристрої, такі як ігрова консоль Game Boy Advance, як правило мають невеликий обсяг доступної оперативної пам'яті з повною 32-бітної шиною даних; більшість звернень проходять через 16-бітну або вужчу вторинну шину. Зазвичай у цій ситуації є сенс скомпілювати Thumb-код і вручну оптимізувати кілька найінтенсивніше використовуваних розділів процесора застосовуючи повну інструкцію 32-бітних ARM-ядер, розміщуючи ці ширші інструкції в доступній пам'яті із 32-бітною шиною.
Перший процесор з інструкцією Thumb-декодування був ARM7TDMI. Всі ARM9 та новіші серії, в тому числі XScale, включають інструкції Thumb-декодеру.
Розширення інструкцій обробки цифрових сигналів Для того, щоб поліпшити архітектуру ARM для цифрової обробки сигналів і мультимедійних застосунків, до набору включили деякі нові інструкції. Це виглядало як приставка «Е» в назвах ARMv5TE і ARMv5TEJ архітектур.
У нових інструкціях є подібності до архітектури цифрового сигнального процесору.
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 набір інструкцій. Мікроконтролери архітектур ARMv6-M (Cortex-M0, -M0+, -M1), ARMv7-M (Cortex-M3, -M4, -M7) та ARMv8-M (Cortex-M23, -M33, …) підтримують тільки Thumb-2. Інші чипи архітектур ARMv6, ARMv7, ARMv8 (у 32-бітному режимі), тобто серії ARM11, Cortex-R і Cortex-A, підтримують як «набір команд ARM режиму» і «набір команд Thumb-2 режиму».
Середовище виконання Thumb (ThumbEE)
Вдосконалений 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)