Тема 11. Архітектура центрального процесора архітектури ARM

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

Для того, щоб зберегти якісний дизайн, простий і швидкий, він позбавлявся апаратного мікрокоду, наприклад, як багато простих 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) можуть мати доступ обома шляхами (через пам'ять і через співпроцесори).

Доступність

Шрифти Шрифти

Розмір шрифта Розмір шрифта

1

Колір тексту Колір тексту

Колір тла Колір тла

Кернінг шрифтів Кернінг шрифтів

Видимість картинок Видимість картинок

Інтервал між літерами Інтервал між літерами

0

Висота рядка Висота рядка

1.2

Виділити посилання Виділити посилання

Вирівнювання тексту Вирівнювання тексту

Ширина абзацу Ширина абзацу

0