Семейство ARM: история, виды и классификация
В семействе ARM разобраться не совсем просто. Ядра ARM не совпадают с номерами архитектур, буквенные суффиксы не всегда понятны, и, когда я искал информацию о ядре ARM926 в моем PVR, единственное, что я могу сказать с уверенностью, - это процессор ARM9, и, очевидно, никто не знает, что означает суффикс '26'. Хм...
Итак, вот краткая история семейства ARM.
Оно началось с ARM2. Было несколько ARM1, но не так много. Именно Acorn Archimedes появился на свет с ARM2 на борту. Затем появился ARM3. ARM4 и ARM5 так и не появились.
К этому времени на борту появились Apple, DEC и Intel. Так появились процессоры ARM6 и ARM7 в различных вариантах. Они использовались в линейке RiscPC, а также в других устройствах. DEC разработала StrongARM, который в рамках мирового соглашения был передан Intel, которая доработала его и создала свой собственный процессор XScale, который впоследствии был передан кому-то другому. Кстати, ARM8 действительно существовал и должен был стать апгрейдом для RiscPC, но он так и не появился, поскольку StrongARM, так сказать, выбил его из колеи.
Удача ARM (компании) изменилась к лучшему с выпуском ARM7TDMI - что означало Thumb, Debug, Multiplier, ICE - поскольку он предлагал поддержку 16-битных инструкций Thumb, JTAG и встроенный в чип JTAG-отладчик. Он получил широкое распространение во встраиваемых приложениях.
А теперь задержите дыхание.
ARM разрабатывает и лицензирует ядра, а не процессоры. Таким образом, ARM 1 - это архитектура ARMv1, а ARM2 и ARM3 - архитектура ARMv2; даже если разница между ARM2 и ARM3 больше, чем между ARM2 и ARM1.
Не существует ни ARM4, ни ARM5.
ARM6 и ARM7 относятся к ARMv3. ARM7TDMI - ARMv4(T), а ARM7EJ - ARMv5(TEJ). StrongARM и ARM8 также относятся к ARMv4. ARM9 - ARMv5, за исключением ARM9TDMI, который является ARMv4(T). ARM11 - ARMv6.
После этого все называется Cortex. Существует три семейства Cortex. Есть Cortex-A, нацеленный на прикладные задачи (это означает, что у него есть MMU), Cortex-R, нацеленный на приложения реального времени (чрезвычайно низкая задержка), и сильно ограниченный Cortex-M для микроконтроллеров (может быть только Thumb, мало инструкций, крошечный конвейер), где ARM даст вам «32-битную мощность по 8-битной цене», чтобы отучить людей от PIC, AVR и тому подобного. Теперь я должен отметить, что в нумерации суффиксов нет и намека на корреляцию. Cortex-A3 не похож на Cortex-R3 и даже отдаленно не похож на Cortex-M3. Так получилось, что существует только M3 (A3 и R3 нет). В нумерации есть дыры. Все они работают на ARMv7, за исключением M0, который работает на ARMv6.
Обратите внимание, кстати, на суффикс Cortex... A... R... M...
Запутались?
Давайте пойдем дальше. Thumb. Урезанная 16-битная версия набора инструкций ARM, верно? Это был Thumb, Thumb2 (с некоторыми 32-битными инструкциями) или ThumbEE (?)?
Сказать, что все это довольно сложно, было бы преуменьшением.
Древний ARM
Древние ARM, использовавшиеся в настольных компьютерах Acorn, работают в оригинальном режиме, когда счетчик программ имел 24 бита (фактически 26 бит, поскольку инструкции выровнены по словам), старшие шесть бит - статус и флаги процессора, а младшие два бита - режим работы процессора. Все они, за исключением StrongARM, имеют архитектуру фон Неймана, что означает, что кэш-память (если она есть - в ARM1, ARM2 и ARM250 ее нет) представляет собой комбинированный кэш инструкций и данных.
Все версии RISC OS, вплоть до Castle RISC OS 5 для Iyonix, работали в 26-битном режиме. Процессоры ARM6, ARM7 и StrongARM поддерживают 26-битный режим для совместимости.
Ни один из современных процессоров не поддерживает старый 26-битный режим, это устаревшие процессоры, такие же, как 80386...
Современный ARM
Современный ARM - это сложный вопрос. Существуют процессоры, способные работать под управлением настольных ОС, но это не то, в чем ARM преуспел. ARM превосходит две области - тех, кому нужно удобное и функциональное устройство с небольшим расходом батареи, и тех, кому нужен мощный и способный процессор для встраиваемых систем.
Поэтому большинство мобильных телефонов на базе Android работают на ARM, как и линейка Apple iPod/iPhone. Многочисленные маршрутизаторы, принтеры, жесткие диски и т. д. работают на ARM. Однако вы также можете приобрести ARM только для пальцев, с мизерным объемом памяти (что-то вроде 8KiB SRAM и 64KiB Flash) и кучей выводов ввода/вывода, что может показаться немного смешным, но он отлично подойдет для микроволновых печей, стиральных машин, хлебопечек и так далее.
Это, как вы понимаете, создает огромную проблему при разговоре о современном ARM. Мы можем сказать, что более поздние процессоры перешли на гарвардскую архитектуру (раздельные кэши данных и инструкций), мы можем сказать, что некоторые из них имеют целых 13 стадий конвейера (это очень много по меркам ARM). Можно также сказать, что некоторые из них предлагают NEON DSP-подобные инструкции, векторную плавающую точку или... но это будет только одна часть очень разнообразного семейства.
Возможно, лучше всего думать об этом так: до ARM11 микропроцессоры ARM шли в ногу со временем. Затем, после «Великого раскола», когда все превратилось в Cortex того или иного типа, ARM диверсифицировался. Массово.
Семейство ARM по числам и последовательности
Семейство ARM описывается в соответствии с версией базовой архитектуры.
ARM1 (ARMv1)
ARM1 - это довольно малоизвестный процессор, с которого все начиналось. Он устанавливался в модули расширения и сопроцессоры, так как в то время не существовало подходящего компьютера. На самом деле, до создания кремниевого чипа была написана симуляция на BASIC. Вот это был бы код, на который стоило бы взглянуть! ARM1 так и не был выпущен в продажу. В небольшом количестве он использовался в сопроцессоре для семейства BBC Micro, а также (как я полагаю) в прототипе RISC-машины, которая появилась до серии A3xx. Время от времени это оборудование появляется на eBay и продается за умопомрачительные деньги.
ARM2 (ARMv2)
После использования системы ARM1 для разработки микросхем поддержки (IOC, MEMC, VIDC), чипсет ARM был собран для питания оригинального Acorn Archimedes. К сожалению, поставляемая в комплекте ОС (Arthur) была немного дерьмовой (не могла работать в многозадачном режиме; «рабочий стол» представлял собой BASIC-программу!) и была увлечена эстетикой середины 80-х годов, пытаясь использовать все возможные цвета одновременно. Именно когда появилась RISC OS 2, люди начали обращать на нее внимание.
С технической точки зрения, 8-МГц ARM2 улучшил ARM1, реализовав в кремнии целочисленное умножение и предоставив механизм сопроцессорного интерфейса для неуловимого ускорителя с плавающей запятой. Кроме того, R8 и R9 теперь банкуются в режиме FIQ (в ARM1 банковался только R10).
На картинке выше - процессор ARM2 в Acorn A3000. Работающий на частоте 8 МГц и оснащенный более новым контроллером памяти MEMC1a, этот малыш-Archimedes (ограниченное расширение, отсутствие последовательного порта в стандартной комплектации, дизайн «one-box»), выпущенный в 1989 году, развивал скорость около 4,6 MIPS.
ARM3 (ARMv2a)
Следующая итерация процессора ARM появилась в виде ARM3. Предлагая 4KiB объединенного кэша, плюс увеличенную тактовую частоту (обычно 25MHz, хотя есть и 33MHz), он был достаточно совместим, чтобы можно было разработать несущую плату для установки на место ARM2, что позволило мгновенно воскресить старую машину как нечто новое.
В ARM3 добавлена инструкция SWP, которая является атомарной инструкцией для обмена данными между регистрами и памятью и гарантированно не будет прервана (в отличие от соответствующей последовательности LDR/STR), поэтому ее можно использовать для системных семафоров.
Первыми машинами, использующими ARM3 на борту, стали Acorn A5000 (1991) и ноутбук A4 (1992, хотя дизайн A5000 заимствован из A4!). Работающая на тактовой частоте 25 МГц (24 МГц для A4), машина обеспечивает около 13,5 MIPS, что примерно соответствует ожиданиям при разнице в тактовой частоте. Alpha-версии A5000 (работающие на частоте 33 МГц) предлагают почти 18 MIPS. Для сравнения, Intel 80386DX с тактовой частотой 25 МГц обеспечивает 8,5 MIPS, а более мощный (и феноменально дорогой в свое время) 80486 (любая версия) вообще предлагал около 20 MIPS при 25 МГц.
ARM250 (ARMv2a)
В конце 1992 года Acorn выпустила новые бюджетные машины - еще две в линейке A3000 (A3010 и A3020) и A4000, которая представляла собой мини-A5000, ориентированную на бизнес. Принципиальным отличием было снижение сложности платы благодаря первой попытке Acorn/ARM разработать SoC (System-on-Chip), в которой основные компоненты чипсета ARM (ARM, MEMC, VIDC, IOC) были соединены в одном кремнии. Так получилось, что из-за проблем с поставками на первых порах в машинах устанавливался не ARM250, а мезонинная плата, содержащая отдельные чипы.
ARM250 - это более или менее ARM3 без кэша, поэтому его можно определить по отсутствию кэша, но поддержке SWP, хотя мезонинная версия может вести себя как немного более быстрая машина ARM2. При тактовой частоте 12 МГц эта SoC обеспечивает около 7 MIPS.
ARM4 и ARM5
Это был период, когда ARM отделилась от Acorn. Таким образом, по какой-то причине не существовало ни ARM4, ни ARM5.
ARMv3 ARMv3 - это процессоры, использовавшиеся при создании последней серийной машины Acorn, RiscPC. Сказать, что все изменилось, было бы преуменьшением. Общие изменения по сравнению с более ранними процессорами таковы:
- Возможность полной 32-битной адресации, причем PC имеет полную ширину 32 бита, а флаги находятся в отдельном регистре.
- Также поддерживается старый комбинированный режим PC+PSR, так как Acorn не воспользовалась возможностью обновить RISC OS больше, чем это было необходимо для использования нового оборудования, что привело к различным анахронизмам (например, слот задачи не превышал 28 Мбайт на машине с 128 Мбайт из-за того, что 26-битный режим физически мог адресовать только 64 Мбайт - остальное было умным отображением памяти).
- Увеличение количества внутренних регистров (за счет дополнительных режимов, но для программиста все осталось по-прежнему).
- Шесть новых режимов обработки. Оригиналы были переименованы в USR26, SVC26, IRQ26 и FIQ26. Новые - User32, Supervisor32, IRQ32, FIQ32, Abort32, Undefined32.
- CPSR/SPSR - регистры текущего и сохраненного состояния, в дополнение к MRS и MSR для их чтения/записи.
- Endian-agnostic - может обращаться к памяти в режиме big endian или little endian.
- Статический режим работы, поэтому может быть остановлен по часам. Машины Acorn не использовали эту функциональность, ее использовали другие аппаратные средства.
ARM6
ARM6 выпускается в различных вариантах: ARM60 - это процессорное ядро ARM6 в виде чипа, ARM61 - версия с пониженным энергопотреблением, ARM650 - с встроенной памятью и вводом/выводом для встраиваемых устройств, ARM600 - с MMU, кэшем и шиной сопроцессора.
ARM610 (ARMv3)
Хотя были созданы различные версии ядра ARM6, эта хорошо известна благодаря использованию ее в качестве процессора для машин RiscPC. Являясь ядром ARM6 с блоком управления памятью (MMU) и унифицированным кэшем объемом 4 килобайта (аналогично ARM3), но без шины сопроцессора, он работает на частоте 33 МГц (существуют и другие версии) и обеспечивает около 27 MIPS.
ARM710 (ARMv3)
ARM710 внешне ничем не отличается от ARM610. Отличия заключаются не столько в наборе инструкций, сколько в физическом дизайне процессора. Кэш-память теперь составляет 8 КБ, адреса TLB и буфера записи в MMU удвоились, а многочисленные внутренние изменения в отношении таймингов означают, что процессор работает лишь незначительно быстрее на частоте 40 МГц, но обеспечивает впечатляющие 36 MIPS, то есть на треть быстрее.
Примечание. Именно на этом этапе все начинает запутываться, поскольку семейство выпускается с различными «опциями», которые определяются суффиксом.
ARMv4
Семейство ARMv4 предлагает дополнительные модификации (в зависимости от чипа), а также знаковое и беззнаковое умножение и длинное умножение.
ARM8 (ARMv4)
Благодаря кэшу, поддерживающему обратную запись, конвейеру, расширенному до пяти записей, и спекулятивному сборщику инструкций, этот процессор должен был предложить около 50 MIPS на частоте 55 МГц и стать желаемым обновлением RiscPC. Однако StrongARM оставил его без внимания, и теперь он в значительной степени забыт.
StrongARM SA110 (ARMv4)
Разработанный компанией Digital (не ARM), он, как и ARM8, увеличил конвейер. Кроме того, кэш был разбит на отдельные кэши инструкций и данных (Гарвардская архитектура), оба по 16 КБ. Выпускались разные скорости, но люди стремятся к 200 МГц, которые теоретически обеспечивают 230 MIPS и потребляют при этом всего 1 Вт.
Я говорю «теоретически», поскольку RiscPC ужасно ограничен в том, что его шина памяти работает на частоте всего 16 МГц, шина ввода-вывода - на 12 МГц, а синхронная шина капсул работает на частоте 8 МГц. Это означает, что вы сможете перемещать данные в память или из памяти только на скорости 16 МГц, обеспечивая пропускную способность, возможно, 20 Мбайт/сек. Разговор с вводом/выводом (жесткие диски и т.д.) будет составлять около 6 Мбайт/с при попутном ветре.
Это работает на удивление хорошо, учитывая, что это, по сути, сродни прикручиванию реактивного двигателя к Mini.
ARMv4T
Буква «T» означает введение набора инструкций Thumb. Инструкции Thumb призваны не только повысить плотность кода, но и привнести мощь ARM в более дешевые устройства, которые могут иметь на плате только 16-битный тракт данных (ведь 32-битные тракты стоят дороже).
В режиме Thumb процессор выполняет инструкции Thumb. Хотя большинство этих инструкций непосредственно отображаются на обычные инструкции ARM, экономия места происходит за счет уменьшения количества доступных опций и возможностей - например, условное выполнение теряется, условными могут быть только ветвления. Во многих инструкциях можно напрямую обращаться к меньшему числу регистров и т. д. Однако, учитывая все это, хороший Thumb-код может работать очень хорошо в 16-битном мире (поскольку каждая инструкция является 16-битной сущностью и может быть загружена напрямую).
ARM7TDMI
Этот ARM7+Thumb+Debug+Multiplier+ICE - одна из самых успешных разработок компании ARM. Используясь в большом количестве маломощного оборудования, нуждающегося в достойной обработке данных, от MP3-плееров до простых маршрутизаторов и даже микроконтроллеров в µSD-картах, ARM7 нашла широкое применение во встраиваемых устройствах.
С технической точки зрения, он предлагает трехступенчатый конвейер, единый кэш размером 8К (в зависимости от ядра) и декодирование инструкций Thumb. ARM7TDMI также предлагает расширенные возможности умножения, впервые появившиеся в StrongARM, и обеспечивает около 36 MIPS на частоте 40 МГц.
ARMv5[T,E,J]
[ARM926]
ARMv6[etc]
[ARM11]
ARMv7
[ARMv7-A, ARMv7-R, ARMv7-M]
[семейство Cortex]
Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.